- 5月29日
mega2560のライブラリーを作った。
20mmx20mmのドットマトリックスLEDは、販売している所が少ない。
秋月では青色の物だけが有る。aitedoでは緑、赤、オレンジが有るが、コラム:アノードのタイプは在庫が少ない。
アノードの緑は品切れ。赤はアノードが70個ぐらいでカソードが350個ぐらい。
コラム:アノードで設計をしたいので、必要数確保しておかないと、作る時に品切れの可能性が有る。
- 5月30日
mega2560が秋月で2800円もしている。
以前買った時も1600円で、安いとは思わなかったが、28000円は手を出しにくい値段だ。
コラムのドライバーは「74LVC541」(秋月 10個250円)辺りでどうだろうか?
取りあえず、mega2560で、コラム:アノードで6個LEDで
回路図(旧1)を書いた。
- 5月31日
基板図を描き始めたが、45度傾ければ、基板内に8x8ドットLEDも収める事が出来た。
そうなると、8x8ドットLEDが上側になるので、基板の大きさとしては大体半分の三角形となる。
部品は収まるが、問題は、配線と、はがきサイズの写真を収める枠をどの様に取り付けるか、になる。
配線に問題が有る。
100ピンのパッケージが、elecrowのクリアランスエラーになる
自動配線だと接続できない線が22本出る。手動で修正しても今の所9本残っている。
どうなるか?
大きな問題は100ピンパッケージの方になる。
これがダメだと、mega64+ドライバーの回路を考えて、それで行くしか無くなる
未配線は大変だけど時間を掛ければ何とかなるだろう。
- 6月1日
CR1220を無くせないか調べてみた。(回路の消費電流は100mA~200mA)
コンデンサで1分間以上持てば使えるかなと思う。写真を入れ替えるのは、電源を切らなくても良いはずなので、
停電、ブレーカーが飛んだ、等なので、1分以上の時は諦めて、時刻設定をすれば良い。
電源線をひっかけて抜いてしまったなどは、すぐに復帰できるので1分あれば十分だと思う。
電池の代わりに470uFを入れ、ショットキーを止めた回路にした。
これだと、1分間停電しても時計が狂わない時が有るが、ダメな時も有る。
電源が落ちるタイミングと、内部で切り替えるタイミングによっては、
回路側にコンデンサから流れ出す時間が最大1秒有るみたいで、これで放電してしまうのだろう。
なので、もっと大きなコンデンサ(電気2重層など)にしないとダメみたい。CR1220より大きくなりそうなので
今の所、CR1220を使うのが良さそう。
電源が4.5V以下になったら、CPU回りの動作を止めてしまえば良いかもしれない。
ブラウンアウト検出を使えば出来るかもしれないが、実験の回路がOLEDを使っているので、
それは動くので、CPUだけ止めても検証が出来ない。LEDのダイナミック点灯などならば効果は有ると思う。
TQFP100がクリアランスエラーになる件は、フットプリントを少し修正する事にした。
1.5mmx0.35mm(イーグルの物)だったが1.5mmx0.345mmにした。
これでクリアランスエラーにならない。
2パターンだけ変更してそこがエラーにならない事を確認した。
アトメルにはフットプリントの指定は無かったが、アナログデバイセズのフットプリントの例では
1.5mmx0.28mmで、マイクロチップでは1.45mmx0.3mmなので、この位は十分許容できるだろう。
修正した物の名称は「ATMEGA2560-1.5x0.345」で登録した。
手動で修正して、何とか未配線は無くなった。
結構GNDもVCCも細い所が有るので、動くとは思うが、ノイズには弱そう。
- 6月2日
少し修正した回路図と
基板図(旧1)を描いた。
ガーバーファイル(旧1)も出来た。
今気が付いたのだが、8x8ドットLEDには足が無かった。38mmx38mmには有ったので、
そのつもりで基板図を描いていたが、このままでは抵抗とぶつかってしまう。ソケットを使えば逃げられるが、
高くなってしまう。
なので、抵抗を裏側に移動して、基板図を書き直さなければならない。
今日はここまで
- 6月4日
8x8ドットLEDの下の抵抗を裏側に変更した
基板図を描いた。
ガーバーファイルも出来た。
秋月に8x8ドットLEDを注文した。青色なのでどんな具合になるかを見てみたい。
ダメならば、aitendoの物を注文する事になる。
mega256の物はここで中断して、mega64を使った物を考えてみたい。
なお、秋月にはLVC541を8x8LEDと一緒に注文しておいた。
「74LVC541」のSSOP20のライブラリーを作った。
256の回路図と基板図をコピーして、回路図をmega64用に書き直したが、
基板図に反映されない。ERCをやると「Consistency errors」が出てしまう。
- 6月5日
「Consistency errors」は基板図を開かないで、回路図を修正した為に起こったみたい。
何とかエラーを無くすように、削除とかやってみたが、うまく行かないので、
諦めて、256の回路図と基板図をコピーからやり直す事にした。
昨日の回路図を検討した所、書き込み信号「PDO」、「PDI」は切り替えスイッチを使って、8x8ドットLEDのROWと
切り替えた方がプログラムが楽になるので、その方向で考え、秋月の「1S-2235-G」のライブラリーを作った。
- 6月6日
秋月に頼んだ青色の8x8ドットLEDが来た。
テスターで光らせた所思った様に光った。
青色にちょっとひっかりを感じるが、視覚的な明るさ的にはaitendoの赤色よりはちょっと暗い感じ。
テスター1kΩレンジで70kΩに見えるので、その時は約40uA流れている事になり、普通の室内ならばその明るさで使えそう。
なので、これを使う方向で進める。
実際に出来上がってみて、青色が問題だったらaitendoの赤色(オレンジ色)に替える事にする。
その為にはソケットにしたいが普通のソケットでは高さが高いので、
秋月の1ピンづつバラバラで足の無い物「RI-01S-SG/4.2SMT」(10円)を使いたい。
6個分で8ピンx2列x6コx10円=960円余分になるがメンテナンスは楽になる。
基板設計はピン間が狭くなるので きつくなりそう。
基板の引き回しがきつくなった時は、CR1220をコンデンサ(100uFを幾つかパラ)に変更する案を
先日よりも真剣に考える必要が有るかもしれない。
実際の使用条件では1分間持てばまず問題ない筈。
すこし実験を行った。
CR1220の替りに220uFにして、ダイオードは止める。
RTCの電源ピンには5Vからショットキーバリアダイオードを通して接続し、GND間に0.1uFを追加する。
これで、1分から4分ぐらい電源OFFし、再度電源ONして、時計が元に戻っていないかを確認した。
これを5~6回行ったが、時計は正常に動いていた。
これは使えそうだ。後は何分ぐらいコンデンサで持つか?
10分はダメみたい。5分は大丈夫みたい。この位持てば十分に使える。
- 6月7日
書き込み信号「PDO」、「PDI」を切り替える予定だったが、ポートに振り分けを変更して、
「SLCK」の一本の切り替えに変更した。
その為、切り替えスイッチはSPDT(秋月 SS12D01G4)の物にした。
8x8ドットLED用のソケットに 1ピンづつバラバラで足の無い物「RI-01S-SG/4.2SMT」使おうと思ったが、
穴径が大きいので、パッドの大きさも大きくなり、クリアランスが取れない。
現在は諦めて、代わりに丸ピンソケットに使っている物と同じ大きさの「RI-1S/O-SG/7.43」を使う事にする。
5mmほど高くなるが、直接半田付けと同じパターンになる
回路図と基板図は描いたが、まだ細かい所に修正が必要。今日はここまで
- 6月9日
mega64の回路図と、
基板図を描いた。
ガーバーファイルも出来た。
mega64の部品表と、
mega256の部品表を、作った。
デバッグ用にI2C(TWI)の信号をコネクタを追加して、出しておきたい。
基板図を見る限り、プルアップの抵抗をすこし移動させれば、2.54ピッチのピンソケットを追加できると思う。
- 6月10日
mega64のデバッグ用にI2C(TWI)の信号をコネクタを追加した修正をした。
回路図
基板図
ガーバーファイル
部品表
mega256は、今は保留にする。
基板は一旦できたものとして、BOXの方の設計に検討をしたい。
- 2023年8月2日
Elecrowに mega64とmega256の2つを注文した。
- 2023年8月8日
Elecrowから発送したとのメールが来た。
OCSの配送状況を見たら昨日集荷されて、
今日の夕方には飛行機に乗せられて深セン宝安国際空港を出発した。
- 2023年8月10日
Elecrowから荷物が佐川急便の配送で届いた。
基板(mega256用)も
基板(mega64用)も見た所は良いみたい。
- 2023年11月29日
最初に、mega64の基板を組み立てる事にした。
RTC(RX8900CE)の半田付けについては、mega1608_oled_iicで苦労したので
mega64_photo_boxの基板は、
その時に、考えた方法で取り付けてみた。
やり方としては、予め、ICの端子とパターンにハンダを付けてから、4角のどこか一つの端子だけに半田ごてを当て、
半田を溶かしながら、位置を決める。その後に、フラックスを塗ってから、他の端子の半田付けをする。
半田付けと言うよりも、ハンダを流す感じで付けた。
何とかついたと思うが、動作を確認するまでは心配。
mega1608_oled_iicの時も思ったが、パターンがもう少し外側に長ければ、
もっと楽に手半田で、半田付けが出来そう。
- 2023年11月30日
mega64Aを取り付けたが、90度位置を間違ってしまった。
予備を持っていないので、至急注文する必要が有る。
どうもこう言うケアレスミスが多いような気がする。(年のせいか)
取りあえず、mega128を3個、秋月に注文した。mega64Aにしようかと思ったが、
同じ価格なのでこちらにした。(他の所では軒並み1500円以上しているので)
低温ハンダを使った取り外しキットで、CPUは外した。
予め、網線で出来るだけ今のハンダを吸い取ったので、低温ハンダですぐ外れた。
外したCPUをもう一度使いたいが、動いてくれるだろうか?
足が曲がっていなければ、温度的には高温にした訳では無いので、動くような気がする。
CPUを取り付けなおした。半田付けの感じがちょっと違った。
低温ハンダが完全に取りきれていない影響なのか、隣のピンとくっつきやすい。
何とか、取り付けは出来たと思う。(動作するかはわからない)
回路図を見て気が付いたが、PEN(1ピン)の処理が間違っている。
LEDを点灯させる出力ピンみたいに抵抗(R31)とLED(DS3)でGNDに落としている。
このピンをGNDにするとプログラムの書き込みが出来ないので、
抵抗(R31)は実装しない事にする。後々では、PG3につなげたい。
8x8ドットマトリックスの表示方法を考えてみた。
2つを1つの組として3つの組が有ると考えるが、
2つのマトリックスのカソードは共通になって抵抗が8本になっているので
同時に点灯できるのは片側の8x8の1列だけになる。
片側(左側)、片側(左側)のコラムの8個を順番にONして、
1組の左側、2組の左側、3組の左側データをそれに同期して出力する事になる。
次にもう片側(右側)のコラムを8個を順番にONして、
1組の右側、2組の右側、3組の右側データをそれに同期して出力する事になる。
周期は8x2の16回で1周となる。1周の時間を10mS位と考えると1列が600uSになる。
100uSのタイマー割込みで6回のカウンターを使って600uSを作れば、
6回の内の何回を表示にするかで、輝度調整も出来るだろ。
100uSのわりこみになるが、16MHzのクロックなら何とかなるだろうか?(ダメなら150uSでも良い)
150uSもダメなら、輝度調整を諦めれば良い。600uSの割込みは十分出来るはず
- 2023年12月1日
CPUの付け直しを含め、表面実装のICは取り付けた。
- 2023年12月2日
LED以外の部品を取り付けた。
既存のLED点滅のプログラムを書き込む事は出来て、ベリファイもOKになる。
しかし、LEDが点滅しない。
ATmega103互換モードになっていた。
ヒューズボックスの設定で、変更したら、LEDが点滅した。基本的には動いているみたい。
ヒューズ設定で外部クリスタルにしたら動作が速くなった(2倍?)ので、発振回路、発振子も大丈夫みたい。
RTCのFOUTはICの端子では30uS程度の矩形波が出ているが、抵抗の所では出ていないので半田付けが悪いみたい。
半田ごてで修正したら抵抗の所で信号が出たが、LED(DS4、黄色)の向きが逆になっている。
シルク印刷が逆になっているので間違って取り付けてしまった。
LEDを修正したら、LEDが光るようになった。
RTCは動いていると思う。iicが動いているかは不明。
新たにプロジェクトを作って、ソースをコピーしたが、エラー、ワーニングが出て、ビルド出来ない。
なぜ?
-->プロジェクトのターゲットをmega64Aにしていたが、それをmega64に変更した。
なぜだかわからないが、この様な対処でビルドが正常に終わる。
書き込みも正常に出来てLED点滅動作もする
秋月からmega128が届いた。今の所CPUは壊れていないみたいだが、
壊れていても交換できるので気が楽になった。
Type-cからの電源供給も出来た。
リセットスイッチも動作している
- 2023年12月3日
青色LED(DS3)の点灯信号をPG3にした。
その為に、DS3(青色)用22kΩ(スルーホール)を追加した。
DS2(SET、PG2、43ピン)とDS3(SELECT、PG1、34ピン)の入力チェックがうまく行かない。
内部プルアップ設定かと思ったが、そうでは無いみたい。
CPUのピンの所で信号を見ると、うまく動いている(スイッチONでLOW、スイッチOFFでHIGH)と思う。
DS3を操作すると、CPU的にはPG1だけでなく、PG2も操作したみたいに見える?
DS2を操作しても、CPU的にはPG2が動いていないみたい。
まだ、ハッキリとスイッチのON/OFFとCPU的な動きとかが、わからない。
内部プルアップをやめて、外部プルアップ(47kΩ)にしても、上記の状況は変化なし。
- 2023年12月4日
CPUを一度外しているので、その影響が有るのかもしれないので、
mag64のテストボード(LED点滅)で同じ動作をさせて、確認をしてみる事にする。
ユニバーサル部にLEDとスイッチを追加すれば出来るだろう。
と思ったら、ユニバーサル部分が無かったので、ブレッドボードで組んで接続する事にする。
テスト基板でも同じ様に動作する。動作を解釈できない。
S2(PG2、43ピン)だけを見てLEDを点灯/消灯する様にして、
S2(PG2、43ピン)をON/OFF(LOW/HIGH)をしても、CPUは反応しない。
代わりにS3(PG1、34ピン)をON/OFF(LOW/HIGH)すると、
LEDが点灯/消灯する。CPUはPG2が動いている様な動作をする。
その時、S2(PG2、43ピン)はHIGHのまま動いていない。
S3(PG1、34ピン)だけを見てLEDを点灯/消灯するプログラムにすると、
LEDは点灯しっぱなしで、S3(PG1、34ピン)にも、S2(PG2、43ピン)にも
反応しないで点灯し続ける。
これだけ見ると、ピン番号が逆で、PG1とPG2の信号が入れ替わっていて、
PG1は信号が入っていない(LOWのまま)みたいに、見える。
- 2023年12月6日
PORTGの動作がどうもはっきりしないので、本当に入出力が出来るのか試す事にする。
テスト基板でPG0~PG4の5本の入力が正常に出来るのか見る為に、
PCPORTにLEDを8個、PORTGにスイッチ5個を付ける。
最初のプログラムは、単純にPORTGを入力して、PORTCに出すループを作る。
これで入力チェックになる。
-->スイッチを押すとLEDが消える。
5個のスイッチが正しく動作している事を確認した。
出力のチェックの為にPG0からPG4までLEDを追加する。
2番目は、PG0からPG4まで、1ビットづつHIGHの出力をPG0~PG7までを繰り返す。
それを動かせば、出力のチェックになる
-->一つづつ正常に点灯する。
この出力のチェックでは悪くない。
- 2023年12月7日
基本的な入力と出力が良いと言う事は、PG0~PG4の中で入力と出力が混在した時の動作がおかしいのか?
或いは、私のプログラムの書き方が良くないのか、と言う事になる。(ビット指定の書き方がちょっと気になる)
書き方の問題を調べる為、ビット指定の値を LEDに出力してみて確認をしたい。
-->PING0:0x00、PING1:0x01、PING2:0x02 だった。
私の書き方が良くて、PG1とかと同じ様にシフト(<<)を入れる必要が有った。
基板上のスイッチの動作も正常である事が確認できた。
「mega328_iic_oled_rtc」プロジェクトのプログラムを追加して、
LEDとスイッチとTimer2の部分を修正して、ビルドは出来た。
今までのmain()関数の中から、「mega328_iic_oled_rtc」のn_main関数(元のmain)を
呼ぶようにした。動くかはわからない。
- 2023年12月8日
取りあえず、ヒューズデータを8MHzの内部オシレータにしてから 書き込んで、動かしてみた。
OLEDのタイトルは表示した。その後は表示が消えて、赤LEDが点滅をする。
と言う事はTWI(IIC)は動いていて、OLED表示ルーチンはOKだろう。
赤LED点滅は何かのエラーだろう(RTC?)
OLED表示が出来た事はすごく気が楽になった。表示が出来るのでデバッグがやりやすくなる。
rtc_init() の中の rtc_flag_read() の中の twi_start() でエラーが戻っている。
デバイスアドレスを送っても開始できなかったことになる
RTCの半田付けを確認するのが、次にやる事だろう。
-->各端子の危なそうな所に半田ごてを当てたら、OLEDに時刻表示が出来た。
これで良しとする。
mega328の動作と表示は同じレベルまでは来た。
スイッチ入力が上手くない。
ハード的には入力出来るので、タイマー割込みのスイッチ入力が怪しい。
タイマーその物は動いていそう。ちょっと遅いが、青LEDが点滅しているので割込みも入っている。
タイマーが遅いので、スイッチを押してもチャタリング防止ではじかれていた。すごく長く押せば入力出来た。
1秒割込みが、入っていないみたい。
ハード的には信号がPOTD3(28ピン)まで来ている。
テスターでLow-Highを1秒ぐらいで繰り返している
-->外部割込みの設定が違っていた。修正してOK
- 2023年12月9日
「Timer2」の設定をmega64用にして、16MHz動作の合う様に値を変更したので、
スイッチ入力が普通に行えるようになった。(200uS割込みにした)
ソフトウエアタイマーも16MHzに合う様に修正した。(10%誤差位)
RTCもコンデンサのバックアップで数分間電源OFFでも時計は狂わない。(3分は実験してOK)
後は、赤外線シリアル、CdsのA/D値、8x8ドットLED表示 がまだ出来ていない。
- 2023年12月10日
CdsのA/D値は、OLEDの空きの所に表示させて、明るさにより値が変化している事を確認した。
正式な表示では、値でなく閾値の上下を判別した結果を記号などで表示する。
- 2023年12月11日
赤外線シリアルのプログラムを追加して、ビルドは出来た。
動作も基本的な所は確認してOK。
- 2023年12月12日
8x8ドットLED6桁表示の割込み処理の所は作った。
ビルドは出来て、書き込んでも悪さはしていないみたいだげが、
8x8ドットLEDを取り付けていないので、動作が良いかはわからない。
- 2023年12月13日
8x8ドットLEDを取り付けて、表示を見た。
フォンとの変換はしていないので、初期値の値が出てるはずだが、なんだかおかしい。
ブロックの左側はそれっぽいが、右側は、余分なデータが出ているみたい。
結構、暗い感じと言うか、明るくない。
周囲の明るさ(A/D値)で暗くする必要は無い感じ。(今は暗くしている)
- E3のcol-7が切れてるみたい。又は0のまま
- E4のcol-7が切れてるみたい。又は0のまま
- rowはLowアクティブなので、フォントセットの時に01を逆にする必要が有る。
- フォントが時計方向に90度回転している。フォントセットする時に90度反時計方向に回転させる必要が有る。
- 2023年12月14日
チェックの為、8x8ドットLEDをスタティック表示で1ドットずつ表示する関数を作り、
OLEDのタイトル表示時にSET、SELECTが2つ共ONしている時にその関数に飛ぶようにした。
「E3、E4のcol-7が切れてるみたい」は、スライドスイッチ(ジャンパー)が、
プログラム書き込み位置なっていた。動作位置にしたら、表示OK
ドット表示が点灯消灯が逆(黒文字になる)と、
フォント方向が90度違っている件は、
フォントから修正するか、フォントを読む時にプログラムで修正するか、迷っている。
基板設計をもう少し頑張って、LEDを90度回転させていれば、楽だったのにと、今されながら思う。
反転表示はソフト的には楽だが、90度回転は面倒になる。
90度回転と反転表示の関数は出来た。
しかし、横方向の番号(0~47)の値が8で割れる数で無いとうまく出来ない。
例えば、16番目から’F’を表示するのはうまく行くが、14番目からはダメ。
今日はここまで
- 2023年12月15日
90度回転と反転表示の関数を修正して、8で割り切れない番号からの表示も出来た。
それにしてもcolをコモンにした事でずいぶん苦労した。
8x8ドットLEDの実装を90度回転させるか、ROWをコモンにしておけば、これ程苦労しなかったはず。
ソフトで何とかなるだろうと言う事で、この様な回路で、基板になったが、次回はもう少しよく考える必要が有る。
- 2023年12月17日
ソフトはまだ出来上がっていないが、ハード的には出来上がった事が確認できた。
青色LEDも見た目はそれほどおかしくない。(明るさの関係も有るかもしれないが....。)
なので、ブルー透明アクリル板をヨドバシに注文した。
取り寄せ品なのでいつ入るかわからないが今年中には入るだろう。
- 2023年12月19日
mega64ボードの方はハード的には出来上がったので、mega256ボードの方の組立を始めた。
mega64ボードの時と同じ様にRTCの取り付けにてこずった(1時間半位)が、
FOEに抵抗(R35、1MΩ)を付け、FOT信号に抵抗(R36、22kΩ)とLED(DS4、黄)を付けて、
VCC、GND間に約3V(テスターのx1のΩレンジ)を接続したら、LEDが暗く点灯したので多分約32kHzが
出力されているのだろう。と言う事で基本的な端子の半田付けは出来た事にした。
今日はこれで終わり。疲れる
- 2023年12月21日
mega256ボードにCPU(mega2569)をハンダ付けした。
0.5mmピッチの100ピンなので結構大変だが、RTCに比べればずいぶん楽に出来る。
- 2023年12月22日
mega64ボードで気になっていた200uS割込み処理時間を調べてみた。
短い時と長い時が有るが、6uS~12uS位で収まっている。
周期の5%位なので十分短いと判断した。私の感覚としては10%位までは問題がない。20%でもほとんど問題無いと思っている。
mega256ボードのIC、セラロック、ダイオード類(8x8ドットLEDは除く)は半田付けした。
- 2023年12月23日
mega256ボードの部品は、8x8ドットLEDを除いて、すべて半田付けした。
(表、裏)
type-cのコネクタからの電源も入っている事を確認した。(緑LEDが点灯)
ISPを6Pコネクタに接続して、type-cから電源を入れれば、mega2560のシグネチャーが読めた。
ヒューズビットも読めたので、基本的にはCPUの動作確認できた、ことにする。
(周辺回路の動作はまだ不明)
今日はここまで
- 2023年12月24日
8x8ドットLEDを取り付けた。
(表、裏)
mega64基板の時に感じたのだが、8x8ドットLEDの間隔がきつきつで、取り付けにくかった。
なので、今度は予め、LEDの側面をやすりで削ってみたら、すんなり取り付ける事が出来た。
今後は8x8ドットLEDの外形寸法を0.1~0.2mm位広げる必要が有るだろう。
mega256用のプロジェクトをmega64のソースをコピーして作った。
アクセスするレジスタのちょっとした違いを直すだけでビルドは出来た。
ビルドが出来ただけで、入出力のポートやビットは合わせていない(単体LEDとスイッチは合わせた)のでこのままでは動かない。
今日はここまで
- 2023年12月25日
ヨドバシに注文したアクリル板(青色透明)が来た。
8x8ドットLEDにかぶせるとコントラストが付いて見やすくなった。(やはりちょっと暗い感じだが)
8x8ドットLEDのポート、ビットを合わせた。A/D、シリアル通信はそのままで良い。
ビルドは出来たので、mega64と同じ動作はできるはず。
RTC(IIC?)の所でエラーになるみたいなので、強制的に8x8ドットLEDのチェックをする様にして動作させた。
ちょっとおかしい所が有る。
ブロック2のE3でROW-4,5が光らない。
-->CPUの該当するピンを改めてハンドごてを当てて、
ハンダ付けをやり直したら、点灯した。
ブロック2のE4でROW-1が 光らない。
-->CPUの35ピンから8x8ドットLEDの13ピンの間のパターンに
何か付いている。何かが盛り上がっていて、パターンが見えない。
この下でパターンが切れているかも....?まだ、わからない
ブロック3のE6のROW-5、6、7、8が一緒に光ってしまう。
-->ヒューズの「JTAGEN」にチェックが入っていた。(外し忘れ)
この為、上記ROWのCPUのピン(90、91、92、93)が
JTAGの動作をしていたようだ。
チェックを外したら表示は良くなった。
- 2023年12月26日
昨日見つけた所の見えなくなっているパターンの導通をチェックしてみた。
ビア部分のレジストを削って、テスターで調べた。
結果は1本は導通無し、もう1本は導通有り、で 互いのショートは無かった。
導通無しの所にジャンパー線を追加した。
これで E4のROW-1が点灯する様になった。
結局 基板のパターン不良だったが、今まで何10枚も基板を作ってきたが、
Elecrowでは初めてだと思う。
以前、Olimexで作った時にパターン不良が1件出たと記憶している。
こういう事も、有る確率で起きるのだろうが、基板価格を考えたら、
この程度で済んでいるのは 良しとするべきだろう。
しかし、手間がかかる。
RTC(IIC?)のエラーをチェックする為に、
OLEDを接続できるように4Pコネクタを取りあえず付けた。
この状態で動かしたら、OLEDの表示は出来たので、TWI(IIC)の線は良いみたい。
肝心のエラーは、RTCの初期化は通っているが、年月日時分秒の読み出しでエラーになっている。
RTCに関してはここまでで、8x8ドットLEDの表示確認をする
8x8ドットLED表示の文字が裏返しの文字になっている。
フォントを90度回転させるソフトでD0...7をD7...0に変える必要が有る。
mega64と接続を変えてしまったみたいで、ビット7(6....0)をROW1(2....8)に繋いて有る。
と言うか、mega64を描く時に変えてしまったのだろう。
- 2023年12月27日
8x8ドットLED表示の8ドット刻みの表示は正常に出来た。
8で割り切れない所から始まる表示はまだ出来ていない。
mega64の時とはビット並びが逆になるのだが、頭がこんがらかって、まだ整理が付かない。
- 2023年12月28日
OLEDの表示で、スイッチの入力(タイマー割込みを使った物)と、
赤外線リモコンの動作と、A/D値(明度切替も)は 確認が出来た。
RTCはRX8900の端子に半田ごてを当て、再度半田をとかしたら、動くようになった。
ちょっと不安は有るが良しとする。バッテリーのバックアップも良いみたい。
良いと思ったが、2時間ほど電源を切って、再度入れた時に、動かなくなった。
OLEDのタイトル表示はするので、多分、RTCの初期化か、読み出し辺りで、止まった感じ。
また、RTCは振出しに戻ったか....?
どうも半田付けが怪しいとは思う。自信が無い。
本来の足に着くパターンの手前のレジストのかかった所をナイフで削って、
強引にそこを含めて半田付けをしてみたら、RTCに正常にアクセスでき始めた。
半田付けをしたので、暖まって接触しているだけかもしれないので、
2時間ぐらいおいて、冷めても大丈夫なら良しとしよう。
ついでに2時間位の停電補償も確認する事にする。
-->7時間半だが、再度電源ONで、RTCの時刻を読めて、遅れ進みも無しで表示出来た。
これでRTCは良しとする。
後は 8x8ドットLED表示の動作が残った。
- 2023年12月29日
8x8ドットLED表示の動作が出来た。8で割り切れない所の表示も出来る様になった。
- 2023年12月30日
曜日を8x8ドットLEDに表示する様にした。8で割り切れない所の表示も出来る。
mega64用もmega256用と同じレベルで曜日を8x8ドットLEDに表示する様にした。
- 2024年1月1日
mega256用は 年月日と時分秒の8x8ドットLEDに表示は出来た。
その他はまだ完全には出来ていない
- 2024年1月2日
mega256用は 動作が出来上がった。
曜日時分表示と時分秒表示の様に、曜日を表示するモードとの切り替えは
SELECTスイッチの長押しで行う事にした。
電源ON時の両スイッチの同時押しは、LEDのスタティック表示チェックになるようにした。
OLEDを外しても表面上の動作に問題は無い。
これでmega256用は良しとする。
- 2024年1月5日
mega64用もmega256用と同じ動きになった。(多分)
細かい所に動作のチェックはまだだが、
取りあえず、mega64用は良しとする。
- 2024年1月6日
mega64用で、曜日表示の時分に ドット表示の秒表示が出来る様にした。
曜時分の時、SETスイッチを短く押して離すとドットの秒表示をする様にした。もう一度押せば秒表示なしに戻る
mega256用はまだ変更していない。
mega64とmega256を並べて動かした時、mega256の方が動作が速い感じがする。
LEDの一秒ごとの点灯時間など。Timer2の設定は大丈夫か?
-->Timer2の設定が間違っていた。修正したら、mega64と同じ感じになった。
- 2024年1月7日
mega256用も、曜日表示の時分に ドット表示の秒表示が出来る様にした。(mega64と同じ)
mega256用プログラム(旧1)
mega64用プログラム(旧1)
これで基板は完成したとする。
2種類を作った感想としては、
mega256用の方がスッキリしているが、OLEDが無いのが残念。
それとmega256の価格が高いのも残念。
mega64は電池が無いのが残念。チェックなどをする時に電池が有れば、2~3日経過しても時計合わせの必要が無い。
数分の電源OFFは問題無いので、動かし始めたらこれでも良いかもしれないが、電池の方が気分的に楽。
プログラム書き込み時にスイッチを動かすのはやはり面倒。
mega64回路図の赤訂正(旧1)と、
mega256回路図の赤訂正(旧1)をした。
次に同じ様な物を作るとしたら、
mega2560で8x8ドットLEDはROWコモンにして、OLEDを付けたい。
RTCのパターンは修正して外側に少し長くしたい。
この後は 箱の設計をする事になる。
- 2024年1月8日
プログラムは取りあえずは出来たが、64用と256用の2系列有るのは、
今後のメンテナンスを考えると良くない。
1本にしたい。せめて、#ifdef切換でも良いから何とかできないだろうか。
PG4が両方とも空いているので、それを判別信号として使うか、
それとも、PG5はmega2560にしか無いので、その信号を使うか、で、
プログラムが動いてから、判別してハードに合わせる事は出来そう。
違う所はハードが違うので有って、論理的な物は同じになる。
ハードにしても、IIC関係、シリアル関係、A/D関係は同じで、
タイマーも初期設定がちょっと違うだけで、
違う所は、スイッチ、単体LED、8x8ドットLEDになる。
- 2024年1月9日
共通化の試しで、mega64のソースをコピーして、mega2560として
ビルドしてみたら、Timer2の設定でレジスタ名の違いでエラーが出てしまった。
データシートをよく見たら、I/Oレジスタのアドレスが違っている。
これでは、動作中に64と2560を切り替える事は出来ない。
ソースは共通にして、プロジェクト名(ターゲットCPU)を違えて2つ作って、
#ifdefで切り分けるのがやっとだろう。
CPUがmega64用のプロジェクトでは、
#ifdefで切り替える物のdefineとして、コンパイルのオプションで"-Dcpu64"を追加する。
HEXファイルは"pr_mega64_photo_box.hex"をdefault64のフォルダに作るように指定する
CPUがmega2560用のプロジェクトでは、
#ifdefで切り替える物のdefineとして、コンパイルのオプションで"-Dcpu2560"を追加する。
HEXファイルは"pr_mega2560_photo_box.hex"をdefault2560のフォルダに作るように指定する
ソース上では、#ifdef cpu64 と #ifdef cpu2560 で 動作を切り分ける事にする
1つのフォルダにプロジェクトを64用と2560用を作って、hexファイルを作るフォルダも二つ作った。
2つのプロジェクトでビルドは出来たが、実際には書き込んでいないので、動作が正常化はまだわからない。
今日はここまで
- 2024年1月11日
それぞれの基板に書き込んで、動作を確認した。今の所問題は無く、表面上は同じ動作をしている。
mega64、2560共用プログラム(旧2)
このソースファイルは、2つのプロジェクトで共用し、
夫々のプロジェクトのコンパイルオプションで64用は"-Dcpu64"を、2560用は"-Dcpu2560"を指定する。
そして、実行ファイル(HEXファイル等)も、別の名前になるように、夫々のプロジェクト内で指定する。
mega64用で書き込み時と動作時の切り替えスイッチが有るが、これが結構面倒。
ケースの設計でもそれ用の穴を空けなければならないので、無くしたい。
PG4が空いているので、今出力しているPB1の信号をPG4に出力する。
PB1は入力のままにして、
プログラム書き込みのSCLに常に接続する。
この様にすれば、切り替えの面倒な手間が省ける。
但し、緑色LEDとしての処理が残っているので、それは削除する必要が有る。
追加したい動作が出て来た。
- 曜日表示時を電源オンで何も操作をしないで行いたい。
- 曜日表示時の秒表示をを電源オンで何も操作をしないで行いたい。
- 上記の2つの機能(曜日表示有モードと無モード、曜日表示モードの秒表示の有無)を、
それぞれ選択して記憶したい。
電源ON時のタイミング(OLEDにタイトル表示をした時点、3つLEDが点灯して、消えた時点)で、
2つのスイッチを見て、SELECTが押されていたら、曜日表示の有無の選択になり、
SETが押されていたが、曜日表示モード時の秒表示の有無の選択とする。
なお、両方のスイッチが押されていたら、スタティック動作の8x8ドットLEDの1ドットずつの表示を行う。
- 2024年1月13日
アクリルケースの設計は、EagleのBRDファイルとしては出来た。
これをEleckrowに注文する時はDXFファイルに変換した物と、
外形寸法を書き入れたPDFファイルを、圧縮する必要が有る。
- 2024年1月14日
mega64用で書き込み時と動作時の切り替えをやめる為に、プログラムとジャンパーを追加した。
ちょっと見はうまく動いている様だが、よく見るとブロック2のROW2ドットがチラついている。
まだ、原因がわからない。
今日はここまで
- 2024年1月15日
考えた結果、チラつく原因はPORTGが 赤LED、青LEDの出力も行っているので
そのLEDを操作するタイミングと8x8ドットLEDの表示タイミングが合致すると、
ブロック2のROW2の信号が正常に出力されない事が有る。
試しにメインループ内の赤LEDと青LEDの操作をやめたらば、ちらつきは無くなった。
なので、原因が分かったので、対策としてどうするかだが、
- ビジーフラグを作って、赤LED、青LEDの操作の前後でフラグの操作を行い、
割込み内ではそのフラグを見て、8x8ドットLEDの表示をパスする
- 赤LED、青LEDの操作の前後で割込み禁止、割込み可を行う
- メインループ内では、直接の赤LED、青LEDの操作を行わず、リクエストを立てて、実際の操作は割込み内で行う
それぞれを検討すると
- 表示のパスは、1列の表示時間が一回の割込み分伸びる事になり、表示輝度の変化が起きてしまう。
ちらつきまで行かなくても、何となくおかしさがわかるのではないか。
- 割込み禁止は、動作上も問題は無いように思うが、
いろんな所に割込み禁止の操作をするのは、今後の変更などを考えるとやりたくない。
煩雑になる。
- LED操作を割込み処理内のみに限定するのは、ちょっと面倒くさいが、
処理としては統一されるので、今後の変更などを考えると良いと思う。
しかし、割込みが入る前のLED処理と変える必要が有るのが、分かりにくいし、面倒になる。
LED操作を基本的に割込み処理中に限定する。
割込みが無い時のLED操作は、電源ON時の点滅だけなので、そこだけを除外すれば、処理は簡単になるので
-->プログラムは修正した。mega64用と2560用の2つの基本的な動作は確認した。
アクリルケースの加工で、OLEDの角穴と、プログラムインストール用のコネクタの角穴を追加したい。
何か有った時に、ケースから外さないと何も出来ないのは大変なので。
注文用のzipファイルを4つ作った。
DXFファイルと寸法を書いたPDFファイルを合わせた物
- 2024年1月16日
Elecrowに4種類のアクリル注文した。来週には来て欲しいと思っているが、どうなるか?
1月11日の追加したい動作に修正した。
電源ON時のタイミング(OLEDにタイトル表示をした時点、3つLEDが点灯して、消えた時点)で、
2つのスイッチを見て、SELECTが押されていたら、曜日表示の有無の選択になり、
SETが押されていたが、曜日表示モード時の秒表示の有無の選択とする。
なお、両方のスイッチが押されていたら、スタティック動作の8x8ドットLEDの1ドットずつの表示を行う。
追加で、RTCのデータが壊れていたら(RTCの電源が完全に切れた)、時計の設定から始める様にした。
プログラムは変更したが、まだ動作の確認はしていない。
- 2024年1月17日
RTCのデータが壊れていた時に、強制的に時計設定に入る件は、
設定の関数の所で、以前にキー入力が無いので、キー入力なしのタイムアウトですぐ抜けてしまっていた。
これを修正して、mega64用で動作を確認した。
mega2560用でも動作確認できた。
昨日注文したアクリルの状態が「in production」になったので、図面に問題は無かったのだろう。
後は 待つだけ
- 2024年1月18日
1月16日と18日に修正した箇所で、
電源ONからの曜日表示と、曜日表示時の秒表示を 選択している時のOLEDの表示を追加した。
それに、ドット表示のチェックを行っている時のOLED表示も追加した。
mega64、2560共用プログラム(旧3)
- 2024年1月22日
Elecrowから発送したとのメールが来た。
実際は、20日の午後に発送しているみたい。まだ、日本に着いていない。
今週到着は確実。
- 2024年1月23日
日本に到着したが、関空だった。そこから佐川で来るようだ。
明日かな? 明後日かな?
- 2024年1月24日
アクリルが届いた。袋の伝票が今までと違ってさっぱりしている。
袋の中の箱もElecrowの正式な物みたい。
中の保護材などは今まで通りで、
図面ごとに分かれて固められている。
出来上がりも見た目は良い感じ、以前のみたいに穴を空けた所が曲がっている様な事も見た目では無い。
一番上と一番下のアクリル
中間のアクリル
側面のアクリル
LEDのフィルターのアクリル
8x8ドットLED用の青色透明フィルターの見え方も良い感じ。
後はタップなどの追加工をしなければならない。その時に穴径など大丈夫か?
青色透明のM1.4用の穴を空けてタップは立てた。後はM2のタップ立が有る。
今日はここまで
- 2024年1月25日
側面1のM2のタップと
側面2のM2のタップを立てた。
青色透明を止める為のM1.4の頭を逃げる為、側面アクリルの該当する所にザグリを入れる。
最初から、この位置には1.0Φの穴があいているので、
そこの所に3.0Φのドリルでザグリを入れた。
基板は入れずに、組み立てた。
思ったより大きいと感じたが、はがきサイズを入れるので必然的にこの大きさになるのだから、
上手く出来た事になる。
- 2024年1月26日
5mm高のスペーサーを中段アクリルに取り付けて、
そのスペーサーにmega256用の基板を取り付ける事にする。
Cdsが当たって、上手く止まらないので、Cdsの高さを下げて、無事基板は付けられた。
下面のアクリルを取り付けて、USBType-Cを挿し、動作を確認する。
早速、はがきサイズの写真を入れて、壁にぶら下げてみる。下面に穴にぶら下げる感じになる。
中段の穴は無くても良かったかもしれないが、今の所邪魔ではない。
64用基板をもう一つのアクリルに取り付けた。取付は問題なく出来たが、
下面のアクリルがType-Cコネクタに当たる。ジャックには0.1~0.2mmだと思うが、
プラグの方が完全に当たってしまうので、下面のアクリルは逃げのカットが必要になった。
カットを追加工して、無事64用基板の物も組み上がった。
直接関係は無いが、Elecrowの青色透明アクリルと、
ヨドバシで購入した青色透明アクリルは、見え方がほとんど同じだと思う。
- 2024年1月27日
使ってみて感じた事だが、昼間の明るい所での青色は、ちょっとしゃれた感じで悪くないのだが、
夜の真っ暗な部屋で、青色が光っていると、不気味とまで言わないが、良くない感じかする。
真っ暗になったら、消灯しても良いのかもしれない。
これを使う所は、机の横を考えていて、遠くからこの時計を見て、時刻を知ろうとは思わない、
それには、別の時計が有るので、この時計が光っている必要は無いと思う。
- 2024年1月28日
青色がちょっと問題なので、今まで普通に使っていた赤色(オレンジ色)を探してみたが、
同じ大きさでCOL-アノードの物があまり無い。特にこの大きさ(20x20mm)
秋月に有るが明るさが格段に暗い。mcdで1/6位、なので多分これを設計する時に止めた物だと思う。
aitendoに有ったが、明るさ(mcd)がわからない。
以前aitendoで買ったと思う型番の違う物(メーカが違って、COL-カソード)をテスターで光らせると、そんなに暗くない。
なので、買うとしたらaitendoの7088ASになるだろう。
赤色を使うとなったら、青色透明のアクリルを赤色に作り直す必要がある
今更ながら8x8ドットLEDは、流行らないのだと感じた。ニキシー管よりはましだが。
LEDを交換するより、周りが完全に暗い時は消してしまうか、
うっすら点灯するぐらいにしたい。
処理方法としては、200uS割込みの中で始めに8x8ドットLEDの処理をしているが、
真っ暗になったら、割込みの終わりで8x8ドットLEDの消灯処理を行う事にする。
つまり、200uS毎に割込み処理時間(10uS位?)だけ8x8ドットLEDを点灯する事になる。
結果的に、暗い時なので元々1/4した点灯していないので、12.8mSに一回しか点灯していない。
なのでduty約10/12800と言う事になる。
見た目は良いと思う。mega64、2560共用プログラム(旧4)
- 2024年1月29日
上位桁ゼロサプレスを行う事にする。
時分秒、曜時分、曜時分秒の時表示と、曜月日の月表示をゼロサプレスした。
時分秒の時表示を見た時、ちょっと違和感を覚えたが、ずっと見ているとそれ程でもないので取りあえずサプレスする事にした。
時刻設定の時はゼロサプレスをしない。mega64、2560共用プログラム
- 2024年1月31日
取扱説明書(旧1)を作った。
これで完成とする。
- 2024年2月1日
最終的なmega64回路図の赤訂正と、
最終的なmega256回路図の赤訂正をした。
- 2024年2月5日
取扱説明書に書き間違いが有ったので修正した。