プログラム書き込み時にSG12864の影響を受けエラーになる不具合が頻繁に出るので
回路を変更した。
GLCDのEnable(6PIN)を書き込み時はLowにプルダウンしてGLCDのDB3(10PIN)が
mega328PのPB3(MOSI)に74HC08を使い影響しないようにした。
簡単には10KオームでEnableをプルダウンしても効果がある。
回路変更で安定な書き込みが出来る事を確認した。
今後は回路を作るとき注意しよう。
コメント利用規約に同意する
フォロー中フォローするフォローする
ANDゲートでISP書き込み時のGLCDのEnableを無効化は、ISPエラー
対策になります。
しかし、ターゲットAVRマイコンが動作する時はANDゲートは何の
働きもしません。一方、Enable端子のプルダウンは、書き込みや
初期化時も適切に、GLCDの無効化を制御します。
「Enable端子をプルダウンする」方法は簡易ですが、コストが安
く、効果的な対策と考えています。
あまり書き込みを行なっていないので頻度の問題かな。
GLCD Enable端子のオープン時の振る舞いは未定ですから、
モノによっては悪影響も出ない場合もあると思います。
しかし、常に適切な対処を行っておくことでトラブルを
未然に防ぐことができます。
ISP端子のPB3, PB4は、割り当てていません。
一方、ラジオ少年さんの結線では、Arduino用の例に
従って、これらを利用しています。この違いが大きい
と思います。
Arduinoでは、BootLoaderを利用し、ISPに依らない
方法で書き込みを行っているます。そのため、ISP端
子に信号線を割り当てても不具合は生じないのですね。
確かにAVR動作時はANDゲートとしては働いていません。
10Kのプルダウンの方がコスト的にはメリットがあり効果もあります。
これは私のこだわりののですが、デジタル回路の信号ラインのプルダウンは抵抗値が適切でないと問題が出ることがあるのではないかと。
ISP書き込み時、AVR側はフローティングですが、LCDのE端子からの漏れ電流が10Kに流れる結果、Eの電位が上がり、High レベルとして認識されてしまう可能性がないとは言えないなーと思うのです。
私の場合は完全に趣味ですから、あまりコストを意識してません。
ですから、余分にICを使った回路にしたのです。
そらさんの回路はISP関連のPORT-Bを使われてないのでISPに問題がでないのでは内でしょうか。
私もそらさんのLCDプログラムを実験したときはエラーは出なかったと思います。
現在は、LCDのDB0~LB3をPORTBの0~3に移してあります。
PB3がMOSIですので、ここがLCDのPB10で
PB10から何かの信号が出て、MOSIに影響するようです。
書き込み時にLCDからのこのラインを切り離すとエラーは出なくなります。
LCDのE端子をLowにすることでPB10からの信号は出なくなり、ISPに影響が出なくなるようです。
ISP関連のピンを他の目的に利用する場合の注意点ですので
敢えて書いてみます。
>ISP書き込み時、AVR側はフローティングですが、
>LCDのE端子からの漏れ電流が10Kに流れる結果、
>Eの電位が上がり、High レベルとして認識されてしまう
>可能性がないとは言えないなーと思うのです。
LCDのEnable端子は入力ピンです。ここから漏れ電流が流れだして
くるほどインピーダンスが低ければ、レベルは確定しています。
その場合にはオープンでも問題は起きません。
今回の件は、インピーダンスが高く、レベルが確定していない
ために起きているのです。
通常のデジタル回路ではプルダウンは少数派ですが、マイコンも
LCDもC-MOSなので、プルアップやプルダウンに電気的な違いは
少ないと思います。AVRマイコンのプルアップを利用する場合には
問題があるかもしれませんが、今回はその限りではありません。
確かに趣味の場合には、コストを考慮せずに贅沢ができるのですが、
今回の場合には、私はANDゲートよりも抵抗による方法が適切と考え
ています。
失礼しました。