「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



例のMEGA48とAD595登載のボードについて
さらに確認をしてみる…。

MEGA48とAD3202を使ってPCとの通信は
問題なく出来ることが判ったので、あとはADCの
プログラムも付け足して、実際にAD595とK型
熱電対を接続してみようという作戦に。

接続する前に、まずはADC周りのプログラムを
付け足して抵抗の分圧値を取り込んだ値と、テスター
で計った電圧と比較することで、プログラムや回路
自体の動作内容について確認してみる。

おりゃー。

OK。
基準電圧はLM4040A(0.1%誤差)から
取っているので、かなり信頼性は高いはず。入力した
データ(10ビットデータ)から電圧を逆算してみると、
テスターで計った値とほぼ一致。どっちかって言うと
安物テスターの方が信頼性低そうだからな。
このテスター、なんだかいつも微妙にちょっとだけ高い
電圧出すんだよな…


そういう意味では誤差を作り出している可能性が
高いのは、このテスターと、MEGA48の内蔵ADC。

内蔵ADCはデータシート上4.5LSB程度の誤差
を生じる可能性があるらしいから、
   4.096V÷1024×4.5 = 18mV
程度の測定誤差が生じる訳だな…
LM4040Aは0.1%だから
   4.096V×0.1% = 4mV
程度。

あわせて最大22mV程度の誤差ってことかな?


で、ようやくAD595とK型熱電対を装着。

うーん、マトモに動かん…
0がずーーーとならんだと思ったら数十程度の数値
が現れる…しかもマチマチな数値でいかんともし難い。

データシートをもう一度見直してみる…。うーん、
別になんてことは無い気がするな。ん?
データシートの回路図を良く見ると、クロメル側が
点線でGNDに落としてあるなぁ。何だ?この点線…?

もしや、銅線をコマギリにして並べておくとか?

という冗談はおいておいて、AD595の入力は差動入力
だから、別に片方をGNDとかに落としておく必要とか
無く無くない?無く無く無く無くない?

この間拾っておいたアプリケーションノートの方も
見直してみる↓。
http://www.analog.com/static/imported-files/application_notes/34661261AN369.pdf

やっぱり、アルメル側かクロメル側のどっちかが
GNDに落としてあるみたいだなぁ。

試してみるか…


うぉ。一気にADCが安定した数値を吐き出すように!

うーん、差動入力って、電圧差を拾うもんじゃないの???
変だなぁ… オイラの知識が未熟なのか???

まぁ、とりあえず一生懸命PCBEで書いた回路は
1箇所NGってことだね。まぁ今回は実験用基板だから
後で適当にジャンパーで繋いでしまおう。


で、出てきた数値を温度に換算してみると…
約24.0度?うーん、微妙。目覚し時計の温度計では
22.4度を示してる…
目覚ましの温度計を信じるべきか、MEGA48君を
信じてあげるべきなのか…?

ちなみに、湯沸しポット(以前ニトリで買ったやつ)で
お湯を沸かし、ほぼ沸騰したところで熱電対を放り込む。
(注:ステンレスで覆ってある熱電対です)

…96~7℃。そうね。沸騰が治まった状態だから、こっちは
ほぼ合っているみたい。

室温付近でアレなのは、もしかしたらAD595の電源
が5Vの片電源だからなのかな?

AD595の内部って、要は一種のアンプ回路(+補正回路)
だから、片電源で使っちゃうと入力・出力ともrail-to-rail
にならないっていうことか?それでGND付近の出力電圧
は微妙に浮いてしまう…と。
やっぱ、両電源にしておいたほうが安心なのかな?
AD595のGNDはそれなりに安定する様な回路
にしてあるはずなんだけどなぁ。なんだろうな?

ちなみにADCの誤差が最大22mVだとすると、
AD595は1℃あたりおよそ10mVなわけだから、
最大で2℃少々の誤差が出るわけだな…。
(本当はさらにAD595の誤差も考えないとイカン
 のですが、ひとまず室温付近でしか使ってないので無視)

でもこの誤差はADCのゼロクロス歪みなんかも含めた
最大見積もりだから、その数値がモロに出ているとも
思い難いんだけどなぁ…

オフセット誤差か?それとも増幅率のエラーか?

データシート読んでも良く判らなかったキャリブレーション
については、アプリケーションノートの方を読むともう少し
わかり安そうに書いてあるから、あとでキャリブレーション
も検討してみるかな。15MΩ、8MΩとかいう微妙に
大きい抵抗は持ってないなぁ。464Ωや182Ωなどと
いう中途半端な抵抗も持ってないし。うーん。

そもそもホントはICそのまま無調整で使いたいんだ
けどなぁ…

とにかく、一旦ブレッドボード上で±の両電源にした
時にどんな反応になるのかは確認しておきたいな。
久々に両電源対応のスイッチング電源登場か?



コメント ( 0 )




久々にPICネタ。

PICでビデオ表示するというボード発見。
http://www.urbancorp.co.jp/kit.htm

16F88で、シリアル入力したasciiコード
をテキストVRAM展開して、20×10文字で
表示しちゃうというもの。

しかも、シリアル経由で外字登録したり、スクロール
したり、カナも使えたり、表示位置の微妙な補正が
できたり…

よくできてるねぇ…。ソフトもハードも。実用的だ…


おいらがTINY2313で作ったテキスト表示器
http://picavr.uunyan.com/avr_m_text.html
よりもずっと高機能だもんな。
(だって、TINY2313ってSRAMが全然
 無いんだもん…)

1200bpsをチョイスしているのは、
やはりおいらと同じ理由なのかな?垂直同期1回に
つき2バイト分処理ってことで…
(それ以上やろうとしても、USARTのダブル
 バッファが溢れちゃう)


そういえばテキスト表示器を作った後に色々
考えたんだけど、SRAMさえ一杯登載して
いるなら、各水平同期期間中にUARTからの
入力を10バイトとか20バイトとかバッファリング
させるようにして、垂直同期期間に一気にテキスト
VRAMに反映させるってことを考えたら、もう少し
ボーレート上げてもいいよなぁ、って思った。
思っただけ。いや、手は動かしてないんだけどね…

でもそうすれば9600bpsとか19200bps
とかには届きそうなんだけどな。

いずれにしてもTINY2313じゃぁメモリが
足らなさ過ぎ。うーん。

MEGA版でも考えるか?秋月でMEGA88が
250円で手に入るご時世だし。



コメント ( 39 )




以前、Chanさんの汎用ディスプレーコントローラ
http://elm-chan.org/works/crtc/report_j.html
を見て以来、ずーーーーーとアタマから離れなかった
のが、カラーで1ドット単位で自由自在にビデオ表示
をしたいって言う野望。しかも汎用部品で。

Chanさんのこれは16色表示。例のAVGA
(mega168ワンチップでマリオとかやっちゃう
あれね)も16色表示。

オイラとしては以前から1ドット3ビット(8色)や
4ビット(16色)を超える発色を実現したい、
しかもカラーNTSC表示で、と思っているんですが、
色々考えてみるとすぐに一つの壁にぶち当たってしまう…

単に表示するだけならともかく、マイコンからの
描画信号を受け取りながらVRAMとして使用する
外部SRAM(FPGAと違ってブロックRAMが
無い)への読み書きタイミングを取りつつ、
かつ14.3Mhzの4クロック単位(V、U、-V、-U)
で1ドット確実に表示するということを同時処理して
いかないといけないわけですが、SRAMへの書き込みは
最低でも3クロック(アドレスとデータをセット、
WE立ち下げ、WE立ち上げ)は必要だし、SRAMの
アクセス速度によってはあと1~2クロックは必要かも。

とすると、書き込みだけ、もしくは読み出すだけで
約4クロック、しかも書き込みだけで読む暇が無い…
(ん?読み出しはもう少し少ないクロックでも
 いけるか?)

うーん、そうか。Chanさんの回路で16色(4ビット)
しか使っていないのは、1バイト分の読み書きで2ドット
扱える(つまり8クロックに1回書き込めばいい)という
ことも一つの目的になっているわけだな…といまさら
になって気付く。

なるほどね。これならば8-4=4クロック分はマイコン
から受け取ったデータの書き込み用に充てられるわけだ。
頭いいなぁ。


うーん、じゃぁ14.3MhzのCPLDでは
やはり4ビット以上の表示は不可能なのか?
これより速いクロック源を探さないといけないのか?

というのが、ここ数ヶ月ずーーーーとアタマから
離れなかったことでした。大きな壁。


ところが、今日電車乗ってボーーーーーとしてたら、ふと
思いついた。(といっても、解法ではなくてまだ糸口程度)

1+1は2だな。考えてみれば当たり前のことだけど…
いままで気付かなかったおいらはやっぱ毛が3本足りない
んだな。

問題は、これをVHDLに上手い具合に押し込むことが
出来るのか?

かなり面倒なステートマシンを書かないといけないかも
知れない…(規模ではなく処理内容が)

でもこれが出来れば16色どころではなくなるもんな…
面白いかも!


まぁこの件に限らず、以前作ったスプライト表示器
http://picavr.uunyan.com/avr_m_sprite.html
とかも、頭の中で「おっ?なんかできちゃいそうだな…」
って思いついちゃったら、あとは力技でむりやり
ねじ伏せるまで突っ走ったから、こんかいも馬鹿丸出し
で突っ走ってみるか???

そう。馬車は嘶きゃ治らない((c)ログイン/アスキー)
なのだ。

あ、馬車丸出しか。


とりあえず、目指すは320×200の8ビット表示だ!
(注:8色表示ではない)

でもその前に、ようやく完成したCPUボードを弄り
倒す方が先だな。



コメント ( 0 )




出来上がったCPUボード。とりあえずマイコン類を
ソケットに差し込んで、AVR-ISPmkⅡから
ちゃんとアクセス出来るのか、接続確認をしてみました。

TINY2313のボード、TINY861のボード、
MEGA88のボードについては、書き込むべきプログラム
を用意するのは面倒なので、とりあえずコンフィグビット
を読み出してみるだけやってみたところ、とりあえず
エラーらしいメッセージは出ず。
ok、ok。

AD595+MEGA48のボードは、とりあえず
高価なAD595を壊すとイタいので、MEGA48と
ADM3202だけ挿して、簡単なプログラムを書いて
PC(tera term)とシリアル通信をやってみる
だけやってみました。

AVRstudioでgccのプログラムをでっち上げて、
9600bpsのシリアル経由でMEGA48とコンニチハ。
 →無事送受信ともokなことを確認完了。

それにしても、またハマりましたよ。…シミュレータ。

AVRstudioの最適化のデフォルト設定値ですよ。

コンパイラの最適化設定って、デフォルトで-Os
になってるんですが、そのままだと最適化が効き過ぎて、
シミュレーションの時に不自由が。
最適化時に省略されたロジックがシミュレーション時
にも当然すっ飛ばされるので、ステップバイステップで
シミュレーションしようとすると上手く行かない…

というわけで、最適化オプションを-O0に変更して
再度シミュレーション。とりあえず想定どおりに。
最近アセンブラばかりだったので、すっかり忘れてた。


そうは言っても、やっぱりgccとアセンブリ言語
ではシミュレーションのきめ細かさっていうのがやっぱり
ちがうんだなぁ…

アセンブリ言語では細かいところまで手が届く…
1クロックまで、1ビットまで…細かいところまで
あれこれ見たりモディファイしたり出来るんだけど、
gccの場合はシリアル通信用のレジスタファイル
(UDR0)のモディファイが上手く取り込まれない…
シリアル出力の結果はそれなりにURD0に反映される
んだけどなぁ…

アセンブラのときでも確かUDR0の読み出しは微妙な
ものがあったなぁ。それというのも、UDR0レジスタ
が読み書き共用って言うのが問題なんだよな。
でも、アセンブラならクセが判ればなんとかなる
んだけど、gccはアセンブラソースレベルで
シミュレーションするわけじゃないから、あまり
こまかいところまで弄れないんだよな…


細かい事いうと、UDR0は物理的には読み込み元と
書き込み先が内部構造としては別物だから
レジスタ番号が一緒でも困ることは無いんだけど、
シミュレータの場合はレジスタ番号毎にしか読み書き
できないってから、それが原因で不便が起きるん
だろうな…

シミュレータだけはUDR0の読み出し用/書き込み用
のエリアを分けて表示してくれればいいんだけどなぁ…

まぁ、いずれにしてもAVRのgccについては
最適化レベルは0にしておく(最適化を全く
行わない)のが吉なのかも知れません。

じゃないと、シミュレータでは動作確認なんて
やれたものじゃないっす…

そういえばICE環境を手に入れればもうすこし
まともになるのかなぁ…?


あ、ICEといえば、やねうらおさんやtokoyaさん
のブログで以前取り上げられていたKEE Electronics製の
AVR JTAGICE mkII互換機の話。
http://www.keeelectronics.com/catalog/product_info.php?products_id=50&osCsid=47906acecd407ed4b0e1f988d70e728f

最近やっぱり気になっていて、買おうかどうしようか
迷ってます。円高の今のうちに…

この話はまた今度。

そうそう。
KEE ElectronicsのICD2.5 Debugger互換機は$49.94で
お買い得って感じなんだけど、なぜAVR用の
JTAGICE mkII互換機は$99.95もするのかな?AVR
フリークの足元をみてるのか?

うーん。



コメント ( 0 )




エッチングの終ったボード類。ようやくハンダ付け
を完了。ふぅ。



ICを挿す前に、テスター当てて一通り確認完了。
ICには思ったとおりの電圧来てるし、電流制限
抵抗なども想定どおり機能しているようです。
一安心。

12ボタンのキーボードは、逆流防止ダイオードも
登載しているので、複数キーの同時押しも正確に
検知可能です。これだけはブレッドボードの面と並行
に挿さないといけないので、ピンコネクタは
アクロバティックなハンダ付け。片面なのに下から
ピンが生えてます。

CPUボード類はどうしようか迷った挙句、
L型のピンを使うことに。ブレッドボードには
垂直に立った状態で使います。しかも足が太い
からすんごい力を入れないと挿さらない…
まぁ仕方ない。

MEGA48シリーズ用のCPUボードには
MEGA88を、TINY26シリーズ用
にはTINY861を、TINY2313用
には2313を挿しておくことにしよう。

これでようやくTINY861も使えるように
なるなぁ。

これら3つのCPUボードはクロックを適宜
変更できるように、3ピンのソケットだけ接続
してあります。
リセットはジャンパーと抵抗を経由してVcc
に繋ぐようにしてあって、ジャンパーを外すと
外からリセットを操作することも可能って具合。

それ以外はパスコンとDCコネクタが載っている
という程度のシンプルボード。そう。あまり色んな
機能が載ってない方が使いやすいかな、と。

これらを使えばようやくISP書き込みが
ラクチンになるなぁ。色々試してみるときの
障壁が少し低くなるな。

残り1個のボードはAD595のテスト用。4.096V
のLM4040基準電圧を登載してますが、これも
色々載せ変え出来るように3ピンソケットで挿してます。

12キーボードは一通り動作確認を完了。
一気にハンダ付けしたので、さすがにお疲れ。
CPUボード類を試すのはまた今度にしよう。

あ、角が尖ってて痛いので、あとでニッパーで丸めて
おこうかな。



コメント ( 0 )



« 前ページ 次ページ »