SSブログ

4連8x8ドットマトリックスLEDで遊ぶ [Arduino]

quadmatrix-1.jpg

だいぶ前に購入した4連8x8ドットマトリックスLED。
74HC595のようにshiftOutでデータをどんどん送りだすだけだと思っていたらそうではなかった。
MAX7219という7seg(+ドットで計8個の)LEDを8連にしたものを操作するICを8x8ドットマトリックスLEDに応用しているみたい。

Webを調べていると、基本的にはライブラリーを使うらしい。

GitHub - MajicDesigns_MD_MAX72XX LED Matrix Library
https://github.com/MajicDesigns/MD_MAX72XX
GitHub - MajicDesigns_MD_Parola Library for modular scrolling LED matrix text displays
https://github.com/MajicDesigns/MD_Parola

しかし一度立ち止まって考えてみたい。
4連8x8ドットマトリックスLEDでやることって何なのか。
 ・文字の表示(ニュースみたいに文字が流れるもの)
 ・文字の表示(時計とか点滅する文字とか全書き換えするもの)
くらいではないのか?
前者の「文字が流れるもの」ならば1byte=8ドットを1ラインとしてデータを流していく感じ。
後者の「全書き換えするもの」でも高々32byteで大したデータ量でもないため32ライン分一括で流すという感じでなんとかなりそう。
ライブラリのような大げさなものを使わず、簡単なソースで行けるような感じにしたいということで仕上げてみました。

参考:
MAX7219 データシート
和:https://pdfserv.maximintegrated.com/jp/ds/1339J.pdf
英:https://www.analog.com/media/en/technical-documentation/data-sheets/MAX7219-MAX7221.pdf
8x8 LED Matrix - Using Arduino _ LEDs and Multiple
https://forum.arduino.cc/t/8x8-led-matrix/274527/11



拙いソースです。
// Quadruple Matrix LED Driven by MAX7219
uint8_t CLK = 13;       // to MAX7219 CLOCK
uint8_t CS  = 10;       // to MAX7219 LOAD(~CS)
uint8_t DAT = 11;       // to MAX7219 DIN
uint8_t POS =  0;       // display start position of array
uint8_t LINE[32] = {    // line image in scroll
  0b00111100, 0b00000010, 0b00000000, 0b01000000, 0b00111100, 0b00000000, 0b00001000, 0b00010000,
  0b00100001, 0b01010010, 0b10001100, 0b00000000, 0b01000000, 0b10001110, 0b10000000, 0b10000000,
  0b01001110, 0b00000000, 0b00001000, 0b01111110, 0b00010000, 0b00111000, 0b00000100, 0b00011000,
  0b00000000, 0b01000100, 0b10011110, 0b10000100, 0b10011100, 0b10100100, 0b01011010, 0b00000000};

void setup() {
  pinMode( CLK, OUTPUT );
  pinMode( CS , OUTPUT );
  pinMode( DAT, OUTPUT );
  ledOut( 0x0F00, 0x0F00, 0x0F00, 0x0F00 );     // Display Test(0xXF): Normal Operation (0)
  ledOut( 0x0B07, 0x0B07, 0x0B07, 0x0B07 );     // Scan Limit  (0xXB): Display all digits (7)
  ledOut( 0x0A01, 0x0A01, 0x0A01, 0x0A01 );     // Intensity   (0xXA): Luminance (0-F)
  ledOut( 0x0900, 0x0900, 0x0900, 0x0900 );     // Decode Mode (0xX9): No decode (00)
  ledOut( 0x0C01, 0x0C01, 0x0C01, 0x0C01 );     // Shutdown    (0xXC): Normal Operation (0)
}

void loop() {
  refreshLED();
  delay(200);
  ++POS %= 32;
}

void ledOut( uint16_t d0, uint16_t d1, uint16_t d2, uint16_t d3 ) {
  uint16_t d[]={ d0, d1, d2, d3 };
  digitalWrite( CS, LOW );
  for(uint8_t n=0; n<4; n++) {
    shiftOut( DAT, CLK, MSBFIRST, d[n]>>8 );
    shiftOut( DAT, CLK, MSBFIRST, d[n]    );
  }
  digitalWrite( CS, HIGH );
}

void refreshLED() {
  uint8_t d[4];
  for(uint8_t m=0; m<8; m++) {            // matrix LED data line
    for(uint8_t b=0; b<8; b++) {          // bit
      for(uint8_t n=0; n<4; n++) {        // Number of LEDs
        d[n] = d[n]<<1 | LINE[(b+n*8+POS)%32]>>m & 1;
      }
    }
    ledOut( (m+1<<8)+d[0], (m+1<<8)+d[1], (m+1<<8)+d[2], (m+1<<8)+d[3] );
  }
}


quadmatrix-2.jpg

表示データをパソコン側で用意できると便利になりそう。

タグ:Matrix LED
nice!(0)  コメント(0) 

8ピンATtiny(13/25/45/85)で遊ぶ基板をつくってみた。 [Arduino]

8ピンのATtinyで遊ぶ。
(従来の13/25/45/85を対象でATtiny202/402とかは除きます。)

これまでdigisparkを通じてATtiny85とはお世話になってきましたが、digisparkであるが故の問題点というか、便利さの裏返しがあります。

・ブレッドボードで使いづらいので1ラインにピンがすべてならんでほしい
・USBはいまどきのType-Cがいい
・全ピンふつうに使いたい

最後の「全ピンふつうに使いたい」については、「USB機能を捨てる(電源だけUSB)」ことになりますが、USB機能を維持したものを自作するのはちょっと大変そうだったので、「USB機能を捨てる(電源だけUSB)」、「書き込みはISP」とすることで設計していきました。

ユニバーサル基板ではUSB Type-Cのレセプタクルはまず扱えないし、CADでの基板自作もしてみたかったのでチャレンジ。
pcb8tiny.png
・KiCadで設計した。
・Type-CはConfiguration Channel(CC)に5.1kΩの抵抗をつけ正式な対応。(たぶん)
・せっかくなのでチップ部品を使用。
・エッチングは手間と機材がいるのでやらないで、外部発注。

●Cadソフト
いろいろあったけど、KiCadというのがよさそう。
EAGLEというのもあったけど、ユーザー登録したくなかったのでやめた。
最初はとっつきにくかったけど、1週間もしないうちに基板作成や、フットプリントの作成までできるようになっちゃった。
以下のサイトが非常にためになった。

KiCadで雑に基板を作るチュートリアル Ver6.x 予習版
https://speakerdeck.com/tokitahiroshi/kicaddeza-niji-ban-wozuo-rutiyutoriaru-ver6-dot-x-yu-xi-ban

KiCAD6.0入門 回路図・プリント基板を作成し、JLCPCBに発注する(KiCAD操作概要編) - YouTube
https://www.youtube.com/watch?v=6mEAS3d31Ns

他にも説明サイトはあるのだけど、バージョンが違うと見た目も違うので、現在のバージョン6.0ということでありがたい。さらに分かりやすかった。
行き詰ったら再度確認すると、ちゃんと自分がちゃんと読んでいなかっただけというくらい。
慣れは必要だけど、なんとなく設計できた。

●Type-Cレセプタクル
Type-A/Type-Cのケーブルからの電源供給だと問題なくても、電源供給側がType-Cの場合、Configuration Channel(CC)に5.1kΩの抵抗がないと、電源を供給してくれません。
賢いタイプの電源を使用する際はこの抵抗が必要です。

●発注
どこに頼んでいいのかよくわからなかったけど、安くて速そうなところでJLCPCBというところに注文した。

PCB Prototype & PCB Fabrication Manufacturer - JLCPCB
https://jlcpcb.com/

Kicad JLCPCB で検索して、JLCPCBに適した設定で書き出し、 ユーザー登録して、いろいろ入力して、データ転送して、お金を払って、届くのを待つ。
問題なく届き、問題なくできていた。

●はんだ付け
ヘッダピンの他に、USB Type-Cのレセプタクル、ノイズ除去のキャパシタ、Configuration Channel(CC)の抵抗。
USB Type-Cのレセプタクルは大変かと思ったけどなんとか。フラックスをいっぱい塗って、ブリッジしたら吸い取り線でとったりして、最後に切断したType-Cケーブルをさしてショートやはんだ不良がないか確認。
チップ部品も1608サイズの5.1kΩの取り付けが意外と大変だったけど、なんとかなりました。
pcb8tiny-1.jpg
●メインの8ピンATtiny
SOIC(1.27mmピッチ)のATtiny85が売ってない、あるいは売っていても非常に高価。
半導体不足のせいなのか、新シリーズ(202/402)への移行のせいなのか。
とりあえず、余っていたSOIC版ATtiny13Aを載せた。

反省点
・やっぱり、1ラインだけなのでグラグラする。
pcb8tiny-2.jpg
nice!(0)  コメント(0) 

Arduinoで「りんごをさっちゃん」スケッチ編 [Arduino]

「IchigoJam」は「こどもパソコン」ということで、サンプルプログラムの「りんごをさっちゃん」をArduino用に書き直すのは容易なことだと考えていました。
しかしサンプルプログラムにはコメントが1行目の「LINGO WO SACCHAN」しかなく、変数もBASIC版だと1文字しかなく、小学生がこのプログラムをみて勉強するのは厳しくないか?と思いました。
ということで、プログラムを読み解きながら、コメントをふんだんに付けてみました。
そのまえに、PanCakeを使うにあたってのとりあえず思いついた注意点をまとめてみます。

・PanCakeが起動するまで少し待つ
  起動前にシリアルデータを送っても処理してもらえない
  とりあえず1000ミリ秒待てば間違いなさそう(たぶん、もう少し短くてもいい)

・Arduinoのほうが高速
  IchigoJamはBASICでインタープリター
  Arduinoはコンパイルしたスケッチ
  サンプルプログラムの移植そのままだと速すぎる

・PanCakeに送る数値は2桁の16進数で
  数値データを2桁の16進数(2文字)にして送る
  sprintfで書式を作り数値を代入した文字列をつくり、それを送信するとか
char buf[96];
sprintf(buf, "PANCAKE SPRITE MOVE 00 %02X %02X", bx, 35);
Serial.println(buf);

  かなり適当なマクロを作るとか
// Convert to 2-digit hexadecimal number
#define F02X(d)  ((String)"0123456789ABCDEF"[(d)>>4 & 0x0f] \
                 +(String)"0123456789ABCDEF"[(d)    & 0x0f] ) 
    あるいは、
#define F02X(d)  (String((d)/16,HEX)+String((d)%16,HEX))

・数値は整数
  javascriptでは割り算の答えは(割り切れなければ)小数で出てくるけど、IchigoLatteではC言語の整数型と同様に小数点以下切り捨ての整数で返ってくる

こんな感じ。
lws.jpg

// LINGO WO SACCHAN for Arduino + PanCake
#define F02X(d)  ((String)"0123456789ABCDEF"[(d)>>4 & 0x0f] \
                 +(String)"0123456789ABCDEF"[(d)    & 0x0f] )   // 2-digit hexadecimal number form
uint8_t sx, f;                      // SACCHAN position, direciton (flip)
uint8_t bx;                         // bascket position
uint8_t rx, ry, rr;                 // apple position(x, y), rotation
uint8_t score, speed;

void setup() {
  pinMode(11, INPUT_PULLUP);        // SW [Left]
  pinMode(12, INPUT_PULLUP);        // SW [Right]
  sx = 36;  f = 0;  bx = sx + 7;    // initialize SACCHAN and bascket position, direciton (flip)
  rx = random(72); ry = 0; rr = 0;  // initialize apple position(x, y), rotation
  score = 0;  speed = 1;            // initialize score and speed
  delay(3000);                      // Wait for Pancake to stabilize
  Serial.begin(115200);             // initialize serial communications at 115200 bps
  Serial.println(F("PANCAKE RESET"));
  Serial.println(F("PANCAKE MUSIC SCORE 00 00 81 $C>C<EG"));
  Serial.println(F("PANCAKE MUSIC SCORE 01 00 80 RRRRR$RRRRRRRRCCDE~~~~EFED~~~~DEDC~~~~"));
  Serial.println(F("PANCAKE MUSIC PLAY 01"));
  Serial.println(F("PANCAKE SPRITE START 01"));
  Serial.println(F("PANCAKE SPRITE CREATE 00 5D"));   // 00:bascket (5D)
  Serial.println(F("PANCAKE SPRITE CREATE 01 1F"));   // 01:apple   (1F)
  Serial.println(F("PANCAKE SPRITE CREATE 02 0B"));   // 02:SACCHAN (0B)
  Serial.println(F("PANCAKE SPRITE CREATE 03 A6"));   // 03:number 0(A6)
  Serial.println(F("PANCAKE SPRITE MOVE 03 00 00"));  //    (tens place)
  Serial.println(F("PANCAKE SPRITE CREATE 04 A6"));   // 04:number 0
  Serial.println(F("PANCAKE SPRITE MOVE 04 08 00"));  //    (ones place)
}

void loop() {
  Serial.println("PANCAKE SPRITE MOVE 00 " + F02X(bx) + " 23" );    // 0x23=35(horizon)
  Serial.println("PANCAKE SPRITE FLIP 00 " + F02X(f)          );
  Serial.println("PANCAKE SPRITE MOVE 02 " + F02X(sx) + " 23" );
  Serial.println("PANCAKE SPRITE FLIP 02 " + F02X(f)          );
  Serial.println("PANCAKE SPRITE MOVE 01 " + F02X(rx) + " " + F02X(ry) );
  Serial.println("PANCAKE SPRITE ROTATE 01 " + F02X(rr)       );
  Serial.println("PANCAKE SPRITE CREATE 03 " + F02X(0xa6 + score / 10) );
  Serial.println("PANCAKE SPRITE CREATE 04 " + F02X(0xa6 + score % 10) );
  rr = (rr + 1) % 4;                // rotate apple
  ry = ry + random(speed + 1);      // falling apple
  if(35 < ry) {                     // When the apple reaches the horizon
    if((bx-4<rx)*(rx<bx+4)) {       // If the apple is in the basket ..
      score++;
      Serial.println(F("PANCAKE MUSIC SCORE 03 01 22 >>CE>C"));
    }
    if((sx-4<rx)*(rx<sx+4)) {       // If the apple hits SACCHAN ..
      Serial.println(F("PANCAKE SPRITE CREATE 02 08"));
      Serial.println(F("PANCAKE MUSIC PLAY 00"));
      Serial.println(F("PANCAKE MUSIC SCORE 03 01 40 <F~ED~<B>C~~~"));
      setup();                      // game over and restart
      return;
    }
    rx = random(72);  ry = 0;       // next apple
    speed = (score + 10) / 10;      // Speed up
  }
  delay(100);
  if( digitalRead(11) == LOW ) {  sx--; f=1;  bx=sx-7;  }   // move left
  if( digitalRead(12) == LOW ) {  sx++; f=0;  bx=sx+7;  }   // move right
}




PanCake
http://pancake.shizentai.jp/

IchigoCake
http://ichigocake.shizentai.jp/
タグ:pancake
nice!(0)  コメント(0) 

Arduinoで「りんごをさっちゃん」ハードウェア編 [Arduino]

PanCake Shieldをつかって、IchigoJam+Pancake (または IchigoCake)のサンプルプログラムである「りんごをさっちゃん」をArduinoに移植してみようと思います。
PanCake Shieldへのデータ入力選択ジャンパーピンをUno上のUSB-serial変換器からの入力ではなく、ATmega328からの入力に切り替えます。
pancake_s_jumper2.jpg
これで、スケッチからPanCakeを操作できます。

ゲームの操作については、IchigoJamはもともとPS/2キーボードをつなぐ前提で作られているのでキーボードでの操作ができますが、Arduinoにはそれがないのでコントローラーが必要です。
中古のゲーム機用コントローラーを使うかとも思ったのですが、ジャンク箱を探すと子供が学校で使った理科実験のおもちゃのコントローラーがありました。左右の操作に加えてもう1つボダンがついているというもの。分解すると意外と複雑だったのですが、必要なのはスイッチ3つ分だけなので、内部の配線をしなおして単純なスイッチにしてしまいました。
d11-13sw.jpg

電流と電磁石 フットサル・ロボ II
https://www.daiwa-e.com/contents/seihin/seihin_r5-01_main.php

Arduino Unoの11番,12番,13番,GNDのならびでスイッチにしてみたのですが、これが大失敗!
11番を右ボタン、12番を左ボダン、13番をやり直しボタンに割り当てましたが、13番はLEDにつながっていることをすっかり忘れていました。
pinMode(13, INPUT_PULLUP) にしても、LEDがつながっているためスイッチの状態に関わらず常にLOWになってしまいスイッチとしては使えませんでした。
ただ「りんごをさっちゃん」には必要ないのでとりあえずこのままで。
タグ:pancake
nice!(0)  コメント(0) 

PanCakeのフォークとナイフ [Arduino]

パンケーキの両脇のフォークとナイフがうまく表示されていなかったけど、キャプチャデバイスがしょぼいからかなと思ってました。
しかし画面が全然でないときもあったりしたので、もしかしたらはんだづけ不良かも、、。
基板の裏面を見てもよくわからなかったのですが、とりあえずはんだを盛ってみました。
すると、フォークとナイフがちゃんと出るようになりました。
しょぼかったのはキャプチャデバイスではなく、自分のはんだづけ技術でした。

pancake_s_i00.png
 ↓ ↓ ↓
pancake_s_i00_2.png
タグ:ビデオ pancake
nice!(0)  コメント(0) 

PanCake Shield にデータを送る [Arduino]

Arduino Uno のUSB-シリアル変換から、直接 PanCake を操作してみます。
pancake_s_jumper.jpg
こんなふうにジャンパーピンをつなぐと、シリアルモニターからの文字列を直接送ることができます。
pancake_s_serial.png
改行コードは「LF」で、通信速度は「115200 bps」。
例えば「PANCAKE IMAGE 01」と送ると、、
pancake_s_i00.png
 ↓
pancake_s_i01.png
となります。
タグ:pancake ビデオ
nice!(0)  コメント(0) 

PanCake Shield を作ってみた。 [Arduino]

Arduinoをつかってビデオ信号を作るのは、

TVout Library
https://playground.arduino.cc/Main/TVout/

というものを使うのがいいようだけど、古いもののよう。
そこで、こどもパソコン「IchigoJam」のアドオンボードというか、マルチメディアボードの「PanCake」というものがありまして、

PanCake
http://pancake.shizentai.jp/

これが、シリアル通信により制御できるとのこと。
じゃあ、Arduinoでも制御できそうということでやってみた。

とりあえず、「PanCake」を購入。
 ・プリント基板キット
 ・組み立て済 完成品
 ・ブレッドボードキット
とあるのですが、完成品だとArduinoとPanCakeとをつなぐ簡単なシールドが必要。ブレッドボード版だと完全にシールドを自作しないといけない。迷っていたので、どちらにもいくことができるプリント基板キットを購入。

PanCakeプリント基板キット(サウンドグラフィックボード) 組立キット(モジュール) 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/gK-09686/

ディスコンマークが付いていて、在庫限りで取扱い終了、、。
でも、頑張ると決めたので、シールドつくることにした。

pancakeshield_1a.png
PasSのパーツもいくつか作ってみた。
信号レベルが3.3Vなので、2.2KΩと3.3kΩで分圧しています。

pancakeshield_2.jpg
スペースが少ないのでICソケットの下にも抵抗を配置。

pancakeshield_4.jpg
USB type-Bのコネクタとぎりぎり接しない感じ。(ねんのため絶縁テープで保護を。)
RCAコネクタの固定が難儀でした。

pancakeshield_3.jpg
完成!

いきなりテレビにつないでテレビが壊れたらいやなので、USBビデオキャプチャユニットを使用。
pancakeshield_5.png
バージョン1.0だと思っていたけど、バージョン1.2だった。

nice!(0)  コメント(0) 

久しぶりにATtiny13Aを使う。 [Arduino]

ちょっとATtiny13Aを使ってみようとしたが一筋縄ではいかなかったので、メモ。
attiny13asu.jpg
以下のページのお世話になりました。

Arduino IDEでATtiny13Aに書き込む
https://www.jh4vaj.com/archives/27291


・ボードの追加
 追加のボードマネージャのURL
  https://kimio-kosaka.github.io/bitDuino13/package_bitDuino13_index.json
 ボードマネージャ
  bitduino13 をインストール

ここまでは、問題ない。

・書き込み装置が指定できない問題
 programmers.txt がない
  コピー元フォルダ:
   %PROGRAMFILES(X86)%\Arduino\hardware\arduino\avr
  コピー先フォルダ:
   %LOCALAPPDATA%\Arduino15\packages\bitDuino13\hardware\avr\1.0.1

これでOK。
avrdude.conf もコピーとありましたが、うちはコピーしなくてもいけた。

・USBaspでは書き込めない問題
 ATtiny13Aは書き込みエラーを起こしやすく、何回かやると書き込めるとあったが、何回やっても書き込めず。
 Arduino as ISP (スケッチ例にあるArduinoISPを Duemilanove/Unoなどに書きこんだもの)なら書き込めた。
 AVRASP mkII (セットアップが面倒。WinAVRインストールする羽目に。)でも書き込めた。


★ほかにもAtTiny13Aを使うボードマネージャがあった。
 MicroCore
 https://github.com/MCUdude/MicroCore

・ボードの追加
 追加のボードマネージャのURL
  https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json
 ボードマネージャ
  MicroCore をインストール

programmers.txtのコピーは不要でした。
タグ:ISP ATtiny13A
nice!(0)  コメント(0) 

久しぶりにISPで書き込みしてみると [Arduino]

ATTinyCoreのATtiny85にUSBaspを使って、書き込みしてみるとエラーが出る。

isp_error_1.png
Arduino:1.8.19 (Windows 10), ボード:"ATtiny25/45/85 (No bootloader), Enabled, CPU (CPU frequency), ATtiny85, 16.5 MHz (PLL, tweaked), EEPROM retained, B.O.D. Disabled (saves power), Enabled"

最大8192バイトのフラッシュメモリのうち、スケッチが1008バイト(12%)を使っています。
最大512バイトのRAMのうち、グローバル変数が37バイト(7%)を使っていて、ローカル変数で475バイト使うことができます。
スケッチの書き込み中にエラーが発生しました
avrdude: set SCK frequency to 187500 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: program enable: target doesn't answer. 0 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

・Arduino as ISP なら問題なくスケッチを書き込める。
・AVRDUDESS - A GUI for AVRDUDE ではATtiny85をちゃんと認識できる。
・USBaspのファームウェアを書き換えたりしてみたけどダメ。

ということで、Arduino の AVRDUDE が怪しい。

%USERPROFILE%\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18\bin

(別の書き方だと、 %APPDATA%\..\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18\bin )

ここにある avrdude.exe を「AVRDUDESS-2.14-portable.zip (844 KB)」 の中に入っていた avrdude.exe に置き換えてみたらエラーが消えた。

(参照)
AVRDUDESS – A GUI for AVRDUDE - Zak’s Electronics Blog --
https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/

isp_error_2.png

問題解決、けっこう疲れた。
タグ:ISP AVRDUDE USBasp
nice!(0)  コメント(0) 

DigisparkでCharlieplexingするために、、 [Arduino]

DigisparkでCharlieplexingするために、、

Digisparkのいいところは、USB機能で、
 ・電源として
 ・書き込み手段として
 ・通信として(HIDデバイスなど)
使えるところですが、
 ・容量が減る
 ・3, 4番ピンが使いにくい
というデメリットがあります。
3, 4番ピンが使いにくいので、うまいことUSBとして使わないときだけ切ることができればいいと思ったのですが、どうもそれだけではなさそうで、USBの D- の1.5kΩの抵抗を挟んでのpull-upがされているとUSB接続されていることになり、PC側でエラーが出てしまいます。
pull-up、D-、D+の3回路をスイッチ操作で切り替えられるといいのですが、そもそもコンパクトな3回路2接点(3PDT?)のスイッチってなかなかない。

ということで、USB部分とマイコン部分をやむなく分離することにしました。
分離するにあたって、通販でよく見かけるマイコンなしのソケットタイプのdigispark互換機をUSB部分として使うことにしました。
ちなみにこれ、2x4=8ピンのスルーホールがありますが、6ピンISPコネクタの隣にUSBに使っている3,4番ピンがついており、全8ピンがマイコンの8ピンに対応しています。
ds-socket.png
マイコン部分には電源機能が欲しいので、USBコネクタを取り付けました。今つけるなら Type-Cということで、

USB Type-Cコネクタ 電源供給用 パーツ一般 秋月電子通商-電子部品・ネット通販
https://akizukidenshi.com/catalog/g/gC-16895/
C-16895-3.jpg
を使いました。
あとあとのことですが、type-Aからtype-Cへの変換ケーブルなら普通に給電できますが、CC1, CC2ピンがないので、Nintendo SwitchのACアダプタなどの賢いtype-C電源には使えませんでした。

以下、作成の経過です。
ds-half-1.jpg
エナメル線がはんだ付けされているように見えますが、繋がっていない部分がありました。
はんだが溶けてもさらに熱を加え続け、なんとなくプチっと音がしたくらいで(天ぷら?)やっと導通を確認できました。
ds-half-2.jpg
マイコンソケットは丸穴。丸穴のソケットだと隙間が多く、ソケットの下あたりにUSBコネクタ(レセプタクル)の足を通せるので。
ds-half-3.jpg
マイコン部分はこれで完成。
ATtiny85は、fuse設定やDigisparkのブートローダは書き込み済。
ds-half-4.jpg
裏もこんな感じ、一応チップタイプのパスコンも付けてみた。
ds-half-5.jpg
書き込み器。
上は6ピンISPとしても使えるようにした。
P0をpull-downできるスイッチもとりつけた。
ds-half-6.jpg
重ねたところ。
ds-half-7.jpg
0, 1, 2, 3番を使ったCharlieplexingでLEDはきちんと光っています。

作ってみて思ったのは、USBを書き込みでしか使わないのであれば、ISPプログラマでいいのでは、、Digisparkのメリット全部否定してるし。



nice!(0)  コメント(0)