コメを噛め

コメを噛め

rerofumi の電子工作メモ

Archive for the ‘fuwafuwaBlog’ Category


hatena bookmark

テレビ出力の方が一息ついたので今度は音声の出力。
V850ES/JG2 には DAコンバータが 2ch ついていて、こいつらのセトリングタイムが 100kHz くらいは余裕であるので音声の出力に使える。
でも、電圧的には Vdd 範囲でも電流がほとんど得られないのでスピーカーを駆動させるためにはどうしてもオペアンプを通す必要があるわけだ。


コードの茂みの奥で見えにくいけれども DIP8ピンのICが刺さっている。これはオペアンプではなくて PSoC(CY8C27134)。
PSoC のアナログ部分を使ってゲイン値のプログラム可能な簡易アンプとして使おうという作戦。ついでにローパスフィルタも付けちゃえ。
他に部品が要らないのでラクチンラクチン。実験には最適。
流石にパスコンぐらいは付けないと、スピーカーから盛大なノイズが聞こえるけれどもね。


基板にまとめた。
ついでにタクトスイッチを二つつけて、ソフトウェアでゲイン値を変更できるようにする。簡易ボリュームやね。
PSoCのプロジェクトファイル
psoc_amp_070714.zip
V850側の音声ドライバは、DMA を使って DAC にデータを流し込む方式。
カウンタ TP2 を使って 8kHz のトリガを使い、DMA はそのトリガが来たら 1byte を DAC のレジスタへ転送をする。
一般的な音声ドライバの構成。

わかりにくいので図にするとこんな感じ。複数CH の重ね合わせができるように作ったのだけれども、どうしても 1声しかでなくてしばらく悩んでいた次第。どうやら、音声を合成してバッファに用意する部分の処理が重くて、メインに戻って来れていないのが原因だったらしい。コンパイラの最適化をかけることでなんとか回避。
そのうち高速化を考えるにしても、今のところは気をつけて使う様にすれば良いか。
サンプルソースコード
audio_drv_070714.zip
サンプルでは P4.0〜P4.2 に繋いだスイッチを押すと、エアキャップ(プチプチ)をつぶす音が出る様に作ってある。でも、タクトスイッチのクリック音の方が大きくて全然楽しく無い罠。
音声データは 8kHz MONO の wav ファイルの内、波形データ部分を取り出したものを ROM に焼き込んで、それをならしている。


だんだんゴテゴテとしていくけれども、これで必要な要素は揃った。

hatena bookmark

今日は電子工作関係でいくつか買い物をした。


アルインコの安定化電源。
これまでは秋月の 5V スイッチングアダプタで工作を行ってきたけれども、なんとなくまともな電源が欲しくなったので無線機器用の安いところを購入。DM-310MV を選んだのは出力電圧の変動域が 1〜15V と 5V 以下も OK だったので。そんなに電流は要らないのでシリーズ型(トランス)で十分。


スペックではわかりにくい奥行きを CDケースとの比較で確認しよう。


ちなみにこれまで使っていた 5V スイッチングアダプタ。これでも十分といえば十分ではある。


はんだコテ台のクリーナースポンジ。消耗品。
そろっとぼろぼろになってきたので交換しようかと。


鈴商で売っている 384x192pixel の液晶パネル。VRAMが載っていないのでマイコンからは扱いにくく、PLD とかで CRTC を作らないとならないのだけれども、今ならそのへんもできなくはない事なので。
simさんの周辺で盛り上がっているのがうらやましくなって買ってきた次第。
今のところ、何を作ろうといった案は無いですが。


秋葉原の鈴商というとアナログパーツのお店といった印象があり、マイコン工作からは縁遠いところがあるのであまり寄らなかった次第。でも、それはそれなりに面白いデバイスもあるもんだなあと今回思った。
上はビデオメモリ用のデュアルポートSRAM。小さい方が 256KB(64kx4bit)、大きい方が 1MB(256kx4bit)。これがあると今作っているCRTCでRAMのバス調停を行わなくて済むからフルアクセスできるVRAMが作れる。
後はデータシート次第だな、とか思ったけれども案の定入手困難でとほほ。
90年代前半のデバイスだからデータシートも紙の時代だしなあ。

もっとも、256kbit 程度だったら Spaltan-3E のブロックRAMでヂュアルポートにできるから、FPGA を同等のデバイスとしていくらでも使えるわけですが。
—–


hatena bookmark


ちょいと弄る暇が無かったので遅くなったけれども、MINICUBE2 向けのチップ評価基板が届いた。
NECエレでキャンペーンしていた「MINICUBE2アンケート」のお礼として貰えたもの。アンケートはそれなりに誠意を込めて答えたつもり。


V850 をプログラムするために MINICUBE2 を入手した私だけれども、今回 78k0 を選んだのは多足高機能な 78k0 を試す良いチャンスだと思ったので。

早速開発環境をインストールして Hello, world! として基板上の LED を点滅させてみようとする。
通常は Applilet を使って最低限のスケルトンを生成して貰うのだけれども、空のプロジェクトからスクラッチで作成しようとしてちょいと悩む。
V850 の Cコンパイラで #pragma ioreg するとポート名が使える様になるのだけれども、それに相当するのが #pragma sfr というあたりに気がつかなかった。CC78 のヘルプを眺めてもなぜかそれだと気がつかなくてスルーしてしまった様で。
それとワッチドッグが標準で enable なので disable にしたいんだけれども、そのために 0x0080 にオプションパラメータを置いておかないとならないとか、0x0084 のオプションパラメータを設定しないとオンチップデバッグが使えないとかいった辺りもわかりにくかった。このへんは Applilet の出力を参考に、必要なコードを持ってきた方が早い。


そんなこんなでなんとかチカチカできて良かった良かった。
何が必要かはわかったので、以降は普通に使える事でしょ。ソースコード
78k0_led_070711.zipこれまでは PIC や PSoC をそれなりに使ってきたのであまり考えたことなかったけれども、日本語のドキュメントが揃っているというのは実はかなり大きなアドバンテージなんじゃなかろうか>NECのマイコン
(PICでも一部超メジャーなチップは日本語データシートがあったりするけど)
それ故に個人の電子工作向けに入手できる品が少ないというのは残念な感じ。

hatena bookmark

コンフィギュレーションROMを入手するのがめんどくさいので弄ることはないでしょ、とか思っていたDWMのSpartan3E基板。なんとなく Digikey を覗いてみたら、対象のコンフィギュレーションROM(XCF02S)が 550円程度だったので買ってみる事に。
最も、日本からの Digikey 利用は手数料 2〜3000円がかかるので割安感のためには 4個以上買わないとならないのですが。


てなわけで到着。


梱包はこんな感じ。


ブツ。


ハンダ付けの際はルーペが活躍。


まあ、これくらいなら手はんだでもなんとか。
面倒な場合はブリッジ上等な感じのはんだ多めで取り敢えず盛っておいて、はんだ吸い取り線でブリッジを除去しつつ整えていく感じで作業するのがよろしいかと。


無事バウンダリチェーンに現れた。
最初 J1 をカットするのを忘れていて悩んだのは秘密。試しにLEDピカピカテストをコンフィギュレーションROMに書き込んでみた。
これでダウンロード無しに、電源投入そくピカピカなのです。将来的にはこれでなんか作ってみるかねえ。

hatena bookmark

細かい調整も終わり、ひとまず CPLD CRTC も予定通りに仕上がった感じ。
高機能じゃないけれどもね。
cpld_ctrc_070706.zip


表示しながらの画面描画実験。
フラッシュビデオ その1

するするとシャッターの様に描かれていくのは、CRTCとCPUのSRAMバスアービトレーションを行っていないから。
CRTCが画面を描いている時というのは一生懸命SRAMからデータを読んでいる時である。そんなときにCPUから読み書きしようとするとバスが衝突してとんでもないアドレスを表示してしまうことになるし、CPUも思ったところに思ったデータが書けないことになる。
そこで、CRTCがSRAMからデータを読み出している期間はCPUからのアクセスを遮断している。この時、CPUがSRAMにアクセスできるのはCRTCが画面を描いていない時、つまりVBLANK期間だけとなる。
その隙を狙って描画するのだが、このテストコードではその VBLANK期間にだいたい5〜6ラインくらい描いているようだ。
CRTCのENABLEを下げて無効にすると画面は真っ暗になるが、フルタイムでSRAMにアクセスできるので 1枚画をその隙に転送するとか、画面をクリアするとかに使う。


そんな様子を眺めていてもつまんないだろうから、もちょっと見れるように即興でライフゲームを作ってみた。
フラッシュビデオ その2

まあ、ライフゲームを見て楽しいかどうかは人によるとは思うけれども。

一応ソースコード。やっつけ風味。
crtc_life_demo.zip


hatena bookmark

テストコードをいじりながらチェックしていたら CPLD の VHDL にケアレスミスを発見。その一点を直したらすんなりと動作を始めた。おおっ。
早速適当な絵をテスト表示。

XC95108 用の VHDL ソースコード
cpld_crtc_070627.zip

V850側の表示チェックコード(上記スクリーンショットのデータ込み)
v850_crtc_check.zip

表示しているときのアクセス許可信号となる VBlank 信号が拾えていない風味なのでまだ不具合は残っている状態。
もうちょっと調査。


hatena bookmark

さぼり気味で遅々として進まない、V850+CPLDなプロジェクト。
目的であるところの NTSC モノクロ CRTC を CPLD で書き始めた。
方式は毎度の抵抗二本方式だけれども、SRAM と CPLD CRTC で CPU 側に負荷をかけずにテレビ出力するのが狙い。
しかし、CRTC ってホントカウンターのかたまりでしか無いから、VHDL で書くと案外あっさりとしたものになるのね。

SRAM 内のノイズパターンが表示されるところまでは来た。
ジッタは無いわけじゃないけど、そこそこ小さいのでロジック様々な感じ。
一応画が出たけれども、RAMのアドレスと表示結果がなんかおかしいので、これから苦労しながら修正というパターンかと。

NTSC 信号は厳密なことをいうと chanさんところの RS-170A に沿ったものを生成しないとならないのだけれども、実際はテレビが結構補正して読み込んでくれるのでかなり適当でもなんとかなる。
私の場合は水平走査線 262.5本ではなく 262本でごまかしている。0.5の補正がないので奇数フィールドと偶数フィールドは同じ信号。
さらに言うと垂直同期信号は 3ラスタ分下げっぱなしで切り込みパルスも等価パルスも付与していない。(PSoCのときは切り込みパルスを作っていたけれども)
でもまあ、それでも画になってくれるものなのですよ。取り敢えずでも画面に何か映ると楽しいしね。


hatena bookmark

ちょいと間が空いてしまったので、リハビリ代わりにDWM7月号付録の Spartan3E 基板をいじってみようかと。

基板をぼんやりと眺めてみたが、電源ICがついていることはありがたいけど他は何もついてないのねえ。まあ、そんなもんか。
実際使おうとした場合、
・JTAG接続用のピンヘッダ
・電源周り(3.3Vか、3.3Vレギュレータ)
・3.3V のクロック発信器
を用意する必要がある。
他、コンフィギュレーションROMがあるとなおよし。
んが、コンフィギュレーションROMの値段と入手性を考えると、ちと面倒というか気合い入れて使うのは難しいかも。
ちと高くてもヒューマンデータのブレッドボードを買った方が安心な気もする。

3.3Vの発信器はマルツにも売っているので問題はないけれども、手元には 5V のしかないなあ。手元に余っているのを使いたいので、トラ技06年4月付録のCPLD基板みたく74THC244をレベル変換バッファに使って5Vの信号を3.3Vにして与えようか。


ついでに3.3Vのレギュレータも外に付けて FPGA基板には 3.3Vを与える事で色々とシンプルにしてみた。


手元にある 244 は DIPパッケージだと HC しかなくて速度的にあれだったので、フラットパッケージの 74VHC244 を無理矢理使用。

適当に LEDピカピカなロジックを作ってダウンロードしようと思ったところで問題発生。
上手く通信ができていないのだ。
ひたすらうんうんと悩みまくったけれども、結局なひたふさんとこの過去記事にあった現象がそのままずばりだったもより。
手元に 74AC125 が無いのでしぶしぶ発注。

ヒューマンデータのブレッドボードだと問題なかったよなあ、と思って回路図を見てみたら JTAG信号安定のためにシュミットトリガバッファが挟んであった。なるほど。
試しに、もう1個 244 を使って JTAG のバッファにしてみるのです。

そしたら今度は上手くいって、無事ピカピカできたのでした。

この基板でちと気に入らないのが M0,M1,M2 が引き出されておらずにチップ下部で問答無用にGNDに落とされているあたり。
ここがいじれればマイコンからコンフィギュレーションできたり色々用途が広がるのにな。


hatena bookmark

CPLD 内部をほとんどスルーで構成して、V850 から SRAM が読み書きできるかどうかをテストする。
まあ、いくつか不具合があって修正しながらなんとか動作確認ができたのでめでたしめでたし。
不具合の内訳は、配線ミス 2箇所、CPLD の inout(データバス)部分で in の時はハイインピーダンスに設定するあたりが良くわかっていなかったというのが一つ。

ひとまず動作している様に見える CPLD の VHDL ソースとピン設定。
sram_test_cpld.zip

V850側のSRAMチェックソースコード。
v850_sram_check.zip
レジスタ設定しか参考にならないと思うけれども。いちお、メモ代わりに。

実際に外部バスへメモリを接続すると、V850側からは 0x100000 以降が外部RAM領域になる。それ未満のアドレスでは、読み出し時は ROM から、書き込み時は外部RAMへと変則的なアクセスとなる。
PM+ で新しいプロジェクト作成時「外部RAMを使うか」という項目があるけれども、ここで「はい」を選ぶとディレクティブの .data 領域(変数や可変データが置かれる領域)が 0x100000 に設定されてしまう。ああ、そういう意味だったのかと思った次第。
今回 SRAM 領域をコンパイラに使われると不具合があるので、内蔵 RAM を使うような設定となることを確認しておく。

配線のリストをちょっと更新。
必要かどうか悩んだV850のクロックを一応CPLDに与える事にした。そのために一部配線を入れ替え。

記事としては面白みが無いところだけれども、私としては動いて一安心という一区切りなのでした。


hatena bookmark

Synchronous SRAM を V850 付録基板のバスに繋いで、外部メモリとしてみるの巻。
SRAM は秋月で買うくらいしか、容易な入手手段が無いのがちと困りものではある。今回は 1Mbit(128KByte)の奴を使ったけれども、目的としては 256Kbit(32KByte)の奴でも事足りるし、256の方が通常在庫品なので安心して買えるというのはあるけれども。


SRAM をテストボードの裏側に貼り付け、CPLD 用の PLCC84 ソケットを挟む。
V850 と SRAM の間は全線 CPLD を挟んでいる。これは配線が間違っても、CPLD の書き換えでなんとかなるや……ではなく、当初からこういうのを作る目的で V850 をいじっていたので。
写真は、電源ラインとJTAGを結線したところ。ここまでは慎重に行う。
左側のレギュレータは 3.3V。SRAM と CPLD の電源は 5V だけれども、I/O 電圧を 3.3V にするために。
JTAG で CPLD に書き込みができることを確認して次へ。


SRAM はピン幅 1.27mm なので、上図の様にして 2.54mm ピッチのユニバーサル基板にハンダ付けする。
常套手段だけれども、自分でやるのは初めて。


そこにポリウレタン線を繋いでいく。
配線のリストを作成、一本線を引く毎に印を付けていって間違いや忘れが無いようにする。


一通り配線が終わった後のもっちゃりとした状態。
面倒くさがらずにちゃんと長さを合わせながら作るべき、と反省。


CPLD の中身を V850 と SRAM ほぼ直結となる様に作成。
V850 側で RAM 読み書きテストをするプログラムを動作させてチェックしていくのだけれども、今日は配線で疲れたのでここまで。

CPLD の脇にある 8ピンのパッケージは 14.318MHz のオシレータ。
この時点で何をやろうとしているのかモロバレではありますが。

・・・SRAM 動かなかったらどうしよう