ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

自転車用ウインカーの制作(10)

今日は制御基板の設計。

こいつはスイッチからの信号をもとに表示器への電源供給を入り切りしたり、スイッチの状態に応じて手元LEDを光らせたり、音を鳴らしたりする役割となっている。これを実現するため、以下を実現するように設計した。

  • スイッチは表示器の電源を直接入り切りする。
  • 左右いずれかのスイッチがONになったら、制御基板の電源もONになる。
  • 制御基板はONになるとスイッチ状態に応じて手元LED左や右を点滅させる。
  • 制御基板はONになるとスピーカーよりリレー音っぽいのを鳴らす。
  • 制御基板は電池に接続され、スイッチに電力を供給する。

制御基板回路図

いずれかのスイッチがONになったらMCUがONになるよう、ワイヤードORとした。このMCUは1.8Vまで動作するので、ダイオードによる電圧ドロップ(1.1V)があっても問題ないはず。

スピーカーにはスピーカー仕様書に従い保護抵抗を直列に接続。

LEDは電圧確保のため、ダイオードを通さずに直接スイッチから(電流制限抵抗を介して)電源供給とした。

今日はここまで。

自転車用ウインカーの制作(9)

表示基板の量産も終えたので、それぞれケースに組み込む。

表示基板とLED基板の間には、念のためプラ板を挟んで絶縁した。また、中に入れるコネクタはリプロ用のもののみとし、電源は外に直接線出しした。

表示器として組み上げた

前2個、後ろ2個を組み上げたところで時間切れ。今日はここまで。

表示器(透明なのが前、赤が後ろ)

 

自転車用ウインカーの制作(8)

AVRマイコン ATtiny202を使って自転車用ウインカーを作るメモも、早くも8回目。ここに来て、わかりにくいトラブルが発生した。プログラミング直後はちゃんと動作するのに、安定化電源の出力を入り切りして電源を投入すると起動しない。調べても同様の症状の人は見つからず。そこで、プログラミング直後のリセットと電源ON時のリセットでなにが違うか考えてみた。

・・・もしかして、安定化電源の出力立ち上がりが遅くて、クロックが安定していない?

試しに、電源ONからコード実行までの時間をデフォルトの8msから64msにしてみた。

ビンゴ。無事動作。こんな問題に2時間もかけてしまった。悲しい。

自転車用ウインカーの制作(7)

今日はLED基板を3枚作ったところで力尽きた。真ん中にあるICを覆ってる樹脂がとても硬くて、パターンカットが大変なのよね。

この基板の動作確認もできたので、今日はここまで。

自転車用ウインカーの制作(6)

さて、プログラミング環境も整ったのでまずはLチカから。Arduino IDEにて下記コードを作成してビルド、書き込み。

 

void setup() {
  pinMode(PIN_PA6, OUTPUT);
}

void loop() {
  digitalWrite(PIN_PA6, LOW);
  delay(1000);
  digitalWrite(PIN_PA6, HIGH);
  delay(1000);
}
 

結果。Lチカ成功。

プログラムを正しく組めることがわかったので、次はいよいよ本番。

まずは本番回路を作成。SOP-DIP変換基板を使ってATtiny202を組み込む。普通はSIPピンヘッダを使って組み付けるけど、今回は高さを抑えるため使わなかった。できれば直接ユニバーサル基板に変換基板を取り付けたかったけど、ユニバーサル基板が両面基板のため断念し、変換基板をひっくり返して取り付けることにした。これならICが邪魔してショートしない。

LEDは以前書いた通りダイソーの自転車尾灯用LED基板を流用。ただしLEDは橙色LED OSY5RU5A31E-NOに換装。また、LEDを個別に点灯できるようにパターンをカットした。

本番基板(表示器回路)

そして、これに下記コードを書き込んでみた。

 

void setup() {
  // put your setup code here, to run once:
  pinMode(PIN_PA1, OUTPUT);
  pinMode(PIN_PA2, OUTPUT);
  pinMode(PIN_PA3, OUTPUT);
  pinMode(PIN_PA6, OUTPUT);
  pinMode(PIN_PA7, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  uint8_t port = digitalPinToPort(PIN_PA0);
  volatile uint8_t* out = portOutputRegister(port);
  const unsigned long del = 100;
  *out = 0b11111110;
  delay(del);
  *out = 0b11111100;
  delay(del);
  *out = 0b11111000;
  delay(del);
  *out = 0b11000000;
  delay(del);
  *out = 0b10000000;
  delay(del);
  *out = 0b00000000;
  delay(del);
  *out = 0b11111111;
  delay(del);
  delay(del);
  delay(del);
 }
 

本番回路を光らせてみた

よし、一発成功。

今日はここまで。

自転車用ウインカーの制作(5)

なんということでしょう。使用したATtiny202ライブラリのピン配置が、ドキュメントと違うじゃないですか。

使用したATtiny202ライブラリのピン配置

マニュアル記載のピン配置

マニュアル通りのピン配置に変更。

ピン配置を修正

回路図も合わせて更新。

表示器回路図

今日はここまで。

自転車用ウインカーの制作(4)

今日はソフトの開発環境を作る。

まずはプログラマの作成。下記のUPDI_Writer_Cir.pdf右下にある回路を実装した。

www.ne.jp

すなわち、秋月のFT234xモジュールに抵抗を1個つけて配線出ししただけ。

akizukidenshi.com

実装した回路

UPDIプログラマ外観

次にIDEの準備。今回使うのはArduino IDE 2.1.1。

www.arduino.cc

そして、以下を参考にしながらmegaTinyCoreを追加。

burariweb.info

上記ではJTAGを使っているけど、今回はUSB-Serialを使うのでportにはCOMを(うちの環境ではCOM3)、書き込み装置にはSerialUPDI-230300 baudを選択。

書き込み装置にSerialUPDI-230300 baudを選択

で、試しにBurn Bootloaderをしてみる。無事pingも返ってきて書き込み成功。よし。

Burn bootloader時の応答

今日はここまで。