Arduinoで「ボコスカハンマー」 あれれれれっ?!
「ボコスカハンマー」を作ってと依頼がありました。
・10秒ゲーム
ベースはArduino UNO R3ですが、ブートローダーを
書いたATmega328Pチップ(28pin DIP)をユニバーサル基板
に乗っけて製作します。
配線を終えて、チップにスケッチを書いたら・・・
ありゃま。 テレビに出る画像に異常がぁ!
スタート待機画面が
これに
現在のところ、原因不明。
現用しているビコピコやシャカシャカからチップ抜いて、
今回作った手組み回路に突っ込んだらちゃんと動くので、
配線や使った部品に起因するものではありません。
原因の推定
・Arduinoのコンパイル環境が変わって最適化などの
状態が前と変わってしまったのか。
・今回使ったATmega328P、その内部が前のと
違うのか。(まさか)
※パチモンの可能性
ジャギジャギになっている表示そのものは安定して
いるのです。
チラチラはしてません。
Arduinoの環境を昔のに戻すのはちょっとかなわんし。
sleepさせてH-SYNCサイクルでの割り込みを待って
表示という処理を流しています。
チラチラしないということは、どこかで安定した
時間待ちが出ているもよう。
はてさて・・・困ったぞ。
※わかったぞ!
やっぱりコンパイル環境による最適化の違いでした。
水平走査、1ラインを描画出力しているのはこんな処理です。
void v1line(void)
{
byte i;
uint32_t d; // 32bitデータにコピー
d = sft_bff.sft; // シフトデータ
for(i = 0; i < 32; i++){ // 32bit
if(d & 0x80000000){ // MSB 0/1 ?
VSIG_H; // H出力
nop(); nop(); nop(); // wait
nop(); nop(); nop(); ★1
nop();
}
else{
VSIG_L; // L出力
nop(); nop(); nop(); // wait
nop(); nop(); nop(); ★2
nop();
nop();
}
d <<= 1; // 左シフト ★3
}
nop(); nop(); nop(); nop(); // wait
VSIG_L; // L出力で終わる
}
画面を光らせるのはVSIG_H。
消すのはVSIG_L。
SBI、CBI命令でポートを直接叩いています。
そして、タイミングの調整に「nop」命令を並べています。
H出力の時【★1】はnopを7個実行して、32bit描画データの
左シフト処理【★3】に飛びます。
そしてそして・・・
コンパイラの最適化がすごいのがL出力の時。
VSIG_Lの実行後、その下に記してあるnop命令8個【★2】
は、数を合わせればVSIG_Hのところにあるnopを使ったら
エエやんということで、VSIG_H直後のnopの場所に飛んで
いるのです。
※この飛ぶためのjmp命令の分、L処理時間が
延びてしまった。
【★2】のnop命令は1つだけを残して実行プログラムの中から
抜いてしまっていて、存在していませんでした。
それでもシフト処理に来ますんで、流れは間違っていません。
絵がおかしくなってしまったのは、nopの数合わせはした
けど、描画のタイミングが白黒でズレてしまったというのが
原因でした。
※バックアップがわりにスケッチと回路図
・ダウンロード - piko_boko1c.zip
| 固定リンク
「トラブル遭遇」カテゴリの記事
- 歯医者の残物:ヘッドランプ(2025.12.29)
- 24クリックのロータリーエンコーダ、調子が悪くなり交換(2025.11.20)
- MADE IN USAでも信じるな!(ミノムシクリップの話)(2025.11.11)
- 8文字×2行のI2C液晶表示器に注意(2025.10.21)
- ATtiny1614につないだ32kHz水晶発振子、隣のピンの影響を受けるみたい(2025.10.06)
「Arduino」カテゴリの記事
- ATtiny1614:タイマレジスタの初期設定を見る(2026.01.06)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」#2(2025.09.15)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」(2025.09.11)
- ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと(2025.09.09)
- ATtiny402サンプル:I2Cで液晶表示 SCL周波数を設定できるようにしたら(2025.09.09)
「10秒ゲーム」カテゴリの記事
- Arduinoで「ボコスカハンマー」 あれれれれっ?!(2023.12.07)
- ひさしぶりの地域イベント(2023.05.29)
- 「シャカシャカ・ホイップ」衝撃検出回路(2022.02.18)
- 『炎のターゲット』は2003年夏のイベントで使いました(2022.02.11)
- 「シャカシャカ・ホイップ」回路はこれで決定か。(2022.02.10)




コメント