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
| 固定リンク
「トラブル遭遇」カテゴリの記事
- Arduino UNO R4、GPTのレジスタ定義にミス発見(2025.05.06)
- 失敗は成功の母<第3回>: 同じ型名なのに内部回路が違う!?(2025.04.16)
- 中華製ボール盤 2018年に交換したベルトが再びアウトに(2025.02.19)
- イヤホンのケーブルが・・・(2025.01.24)
- ピンセット、危うし!(2025.01.09)
「Arduino」カテゴリの記事
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- DDS IC「AD9833」の出力にバッファアンプを(2025.05.27)
- DDS IC「AD9833」をArduino UNO R3で制御(2025.05.25)
- DDS IC「AD9833」の周波数レジスタ書き込みで(2025.05.23)
- Arduino UNO R3で周波数を計る(2025.05.16)
「10秒ゲーム」カテゴリの記事
- Arduinoで「ボコスカハンマー」 あれれれれっ?!(2023.12.07)
- ひさしぶりの地域イベント(2023.05.29)
- 「シャカシャカ・ホイップ」衝撃検出回路(2022.02.18)
- 『炎のターゲット』は2003年夏のイベントで使いました(2022.02.11)
- 「シャカシャカ・ホイップ」回路はこれで決定か。(2022.02.10)
コメント