ちょっとは人のためになる事をしないとインターネットコミュニティーの皆様に申し訳がないかと思いながら、自分の備忘録ていどでしかなく、実際の所たいした情報も提供できないでいるブログ
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
(以下大間違い)
開発中の安全のため、各LEDに流れる電流を最大6.25mAに制限するか思案中。ソフト的に間違えなければ破壊しないはずなんだが・・・ (5V-1.7V-0.1)/0.00625=512Ω (-0.1されてるのは2SA1015の電圧降下) 抵抗E12系列680Ωで4.7mA、E24系列560Ωで5.7mAそれをダイナミックスキャンは暗いか? ブレッドボードで実験してみるか。 ブレッドボードで実験というか回路図をちゃんと書いてみて解った。カソード側は結線されて一つの制限抵抗を介してPICにはいる。プログラムミスで複数点灯させてしまったとしても、PICに流れ込む電流は変わらない。上で書いたことは全くの間違い。よって制限抵抗は予定通り330ΩでOK。
PICライターとPIC12F629(練習用)、PIC16F818を購入。まずは簡単なところでデジタル時計作成を視野にPICプログラミング研究中。いままでわかったこと。
7セグ表示: 8080時代のマイコンよろしくダイナミック表示にせざるをえまい。この方式、中学生の頃見たときはなんて面倒なことするのだと驚いていたのだが(キーボードマトリクスもね)、長生きしていろいろな物を見てきたおかげで、まあ普通じゃんって感じです(笑) LEDに10mAを流した場合、コモン側は最大70mAになる。PIC16F818のPORTA, PORTBのソース・シンク最大電流(Maximum current sunk/sourced by PORTA/B) 100mA 7セグLEDはGL9A040Gを購入。 VF=1.7(TYP) IF=10mA 電源電圧5Vより、制限抵抗=(5.0V-1.7V)*0.010A=330Ω 計時: 当初はAKI-H8 3048Fでコントロールした実績があるRTCモジュールを使う予定だったが、200円のPICに500円のRTC?と疑問になり、RTCは使わない方向に。 PICのデータシートにかかれているように、32.768KHzのクリスタルを使えば簡単だが(タイマー割り込みの整数倍が1秒になる)、なかなか安く手に入らない。 そこで60KHzのクリスタルを購入(100円@秋月)。これを非同期カウンタで入力し、割り込み毎にタイマーレジスタを調整する方式とする。 PIC自体は内蔵オシレーターで4MHz動作させる。 クリスタル発振60KHzをプリスケーラで1/8分周して7500Hzで使う。 4MHz動作のコアからみた7500Hzは非常に遅い。 CPUの533クロック(4000000÷7500=533.333…)で非同期カウンタが1進む。 タイマーレジスタオーバーフローの割り込みから非同期カウンタが1進む前にタイマーレジスタを再設定すればレジスタ書き換えの遅延の影響をうけずに計時できる。 533クロックあれば大余裕。 割り込み毎のタイマーレジスタの初期値は 65536-7500=58036=0xE2b4 クリスタルに付けるコンデンサの容量: Capacitive Loading Specs on Output Pins: OSC2 15pF 60KHzクリスタルの負荷容量 12.5pF (秋月のホームページ) 外付けコンデンサなしでいけるってことかな。むしろ容量減らしたいくらい。直列に75pFでもつないだほうがいいのかな。 実際、コンデンサ付けずにOSC1/OSC2にクリスタルをつないだだけで発振してる。 コンデンサなしでよさげ。
PICも面白そう
AKI-4038Fのマザーボードから12V、5Vを供給、適当なデータ線2本をブレッドボードに接続すればPICライターになるかな
h8300-hws-ldの-mrelaxの件があったので開発環境を更新してみた。
binutils, newlibは現時点の最新版。gccは3.xの最終版を採用。cygwin上でコンパイル&インストール。あたらしめのbinutilsはh8300-hwsに対応していないがターゲットを h8300-elf にすれば問題なし。 binutils-2.18.tar.gz configure --prefix=/usr/local/h8300-elf --target=h8300-elf gcc-3.4.6.tar.gz configure --prefix=/usr/local/h8300-elf --target=h8300-elf --with-newlib --enable-languages=c newlib-1.16.0.tar.gz configure --target=h8300-elf --prefix=/usr/local/h8300-elf Makefileの h8300-hws-* のコマンドを h8300-elf-* に置換 リンカスクリプトのOUTPUT_FORMATを変更する OUTPUT_FORMAT("elf32-h8300") モニター+htermを使う場合S Record形式にする必要がなくなった ldの出力を .abs のファイル名にしてそのまま hterm で転送可 HPWでビルドしたときと同様、ソースを表示するかと言われるものの、CPUタイプが違うといわれてソースレベルのデバッグはできていない。
RTC8564が応答するようになった。ところがこれ、秒までしか返さない(そういう仕様)。タイマーカウンタを使えばもっと精度が出せそうだからそのうち工夫してみよう。
i2cを使う ダウンロード(gz) RTCがうごいたのでEEPROMもボードに搭載。ところがスレーブアドレスが見事にバッティング。RTC8564は B'1010001*、AT24C1024は B'10100AP*。AはA1ラインH/Lに一致、Pはアドレス指定の最上位ビットで使う。AT24C1024のA1ラインの説明では、If the A1 pin is left floating, the A1 pin will be internally pulled down to GND. とあるので未接続で浮かせていたのだった。このままではA=0なのでP=0のときRTC8564と同じスレーブアドレスになってしまう。I2Cデバイスのスレーブアドレス空間って、128弱なので「こんなので足りるのかな~」と漠然と考えていたけど、自分で買ってきたたった二つのデバイスが見事にバッティングするとは思わなかった。まあ、ATC24C1024のA1をHにすればB'101001P*になるので回避できますがね。半田ごて取り出して追加配線。 一応、ジャンパピンつけてA1を浮かせることができるようにもしておいた。以下回路図。
暴走する~とおもったらリンク時 -mrelax を付けると相対ジャンプ(BNE等)のオフセットがずれることがあるようだ。原因不明だが-mrelaxを外して対処。
こういことがあるとソースから開発環境を作りたくなる。そういえばldで未解決の参照があってもエラーを出さないことがある。@付きでオペランドに指定した場合かな(条件未精査)。これは仕様かもしれないがこのへんも気に入らない。シンボル名のtypoがトレースかけるまで発見できないのはつらいわ。 オフセット異常の例 ソース
-mrelax なしでリンク。 最後のBNEの飛び先はFF28EのSHAL命令のアドレスになる=>OK
-mrelax を付けたときの逆アセンブル。 最後のBNEの飛び先はFF286。MOV命令のオペランド内 => NG
メモリーチェックは無事通過
BUSYハンドシェイク版LCDライブラリを書いてみた。はるかに速い。主観でいうとブロードバンドとパソコン通信ほどの差がある。
SRAM増設にチャレンジ:SOP 28pinをDIP28に変換するサブボードを作るってSRAMを乗せ、それをH8 I/O基板に配置する計画。ハーフピッチのユニバーサル基板にSOP 28pinのSRAMを半田付け。スズメッキ線ピン間をつなごうとして、SRAM全PINからスズメッキ線を立ち上げるところまではいけた。でも、それをDIPピッチのピンに持っていくところで配線が接触の恐れ有り。熱収縮チューブもないし被覆付きで配線し直す気力もない。一時中断。これ無理。被覆はがすのがめんどくさくて裸線なんかにしたのが敗因。熱収縮チューブの調達 OR サンハヤトのシール基板調達待ちとなった。 I2Cの動作確認:秋月のRTC-8564NBをつないでみた。コネクタ増設するのが面倒なのでLCDのポートに繋がるようにLCDみたいな形状のボードを製作。 これは1PIN-のLCDコネクタ配置です アドレス書き込みに対してACKが帰ってくるところまでコーディングしてみた。見知らぬデバイスが応答してくれるとうれしいね。 1MのEEPROM AT24C1024 も用意してあるので、RTCを把握したらAT24C1024をいじる予定。 そうこうしているところに交換品の3069F NET到着。RAMチェックせねば。
3069返送中。オモチャがなくなってしまった。しょうがないから開発環境の整備&基礎的なライブラリでも作っておくかと3048Fを引っ張り出してきた。
まずはLCD周りのチューニングを始めたのだが、タイミングチャート通りにやっても正常に動作しない。おもいっきりウェイトかければ動くのだが遅い。 BUSYフラグを見ていないのがいけないようだ。サンプルプログラムでは、BUSYフラグを見ていない分、追加のウェイトをかけている。 データシートのタイミングチャートは、BUSYフラグをみて、BUSYじゃないことを確認した上での流れだった。AKI-H8 3048FのI/Oボードのデフォルトでは、RW端子がプルダウンされていて制御できないからLCDモジュールからの読み出しが出来ない仕組み。暇だし、LCDの5PINをCN3の13番につないだ。これでP36がR/W信号になって制御できるぞ。 開発環境的には定番のgcc+cygwinをダウンロードしてインストール。crt0と隣家スクリプトを作って、当面使うポートだけ(手抜き)定義しといた。 CRT0はこれだけ(笑)
リンカスクリプト(aki-h8-3048f.x)
リンカスクリプト(3048f.x)
自作メモリーチェックルーチンでDRAMのチェックしたらエラー検出;;
H8/OSを焼いて memcheck コマンドを走らせても同様 秋月さんに問い合わせをして交換となった
割り込みベクタはROM上だ。割り込みプログラミングをRAM上でやる方法。
RAMCRにROM上のブロックを指定するとFFE000にそのブロックがあらわれ読み書き出来るようになる。アドレス 000000 はブロック 0、RAMCRにF8を書き込めばFFE000にベクトルエリアのコピーが現れ書き込みできるようになるはずだが、普通にやっただけではうまくいかない。他のブロックはマップできるがブロック0をマップするとハングする。どうもベクタエリアなんで特別な措置が必要なのかも。割り込み禁止にして操作&終了後にウェイトいれても解決しない。で、切り換えタイミングで何か起きてるんじゃないかと思い、先にメモリーの内容をコピーしてから切り換えたらOKでした。
LCDのバックライトの件は解決 裏の型番を確認 SC1602BS*B とある。データシートによるとSC1602BS*Bにはバックライトがない。それだけのことでしたw 秋月の製品情報からたぐっていくと付属のLCDは通販コード P-40 でバックライトなしで無紋題。でもまあ、だったら保護抵抗つけるなよ・・・とはいいたい。
イーサーネット接続。青色LEDがまぶしいね。ちょっと明るすぎ。
H8/OSを焼いて、etherbase, ifconfig でネットワーク設定は難なく完了でした。pingも通る。
すんなり組み立て&火入れ完了
3069では3048Fボードで不満に思っていたところがほぼ解決されていた。 LED/LCD/SW類がジャンパで切り離せるようになっているのがいい。3048FにSRAM増設を検討したいたとき、こいつらが邪魔でしょうがなかった。 CPUボードからのコネクタが平行に40ピンX2が出ているのもいいね。ドウターボード型の増設がやりやすそう。拡張ポートCN1A/CN2Aが立ち上がってるからそこから信号を出すのも簡単。 ゴム足がついてるのもいい。 と・・・LCDのバックライトがついてないようなきがする。極性もちゃんと合わせたがどうしただろ。3048Fで使ってた極性逆のやつがあるから最悪そっちでいいか。そうそう。LCDの極性がジャンパで返られるのもいいね(笑)
ここのところAKI-H8/3048Fで遊んでたら昔のアセンブラをゴリゴリ書いていた頃の情熱がよみがえってきた。ごりごり書いては走らせ暴走~リセット、デバッグの世界。とはいえROMは書き換え回数が限られてる。まだトライ&エラーでH8学習中なわけで、公称100回の書き換え回数など一瞬で消費してしまうだろう。なので、モニターを焼いてRAM上でプログラムを走らせていたが、これではメモリー容量が小さい。まあ、まだ使い切ったわけではないが、LCDの初期化程度ができるサブルーチンを書いていたら256バイトを超えてしまった。やはりこのメモリーサイズはきつい。
というわけで、次世代H8遊びのためメモリーを増設しようと思い、色々調べていた。H8/3048FにはDRAMが直接付く、SRAMも簡単に増設できるなどなど。 しかし、LCDキャラクタディスプレイ、LEDとスイッチのみのAKI-H8/3048F+マザーボード、このままでは何か組もうにも実用にはならないだろう。実用にするには何かのデバイスをマザーボードにのせねばなるまい。通信インターフェイスもシリアルだけでは面白くない。悩みに悩んだ上3069 LAN付きキットを買ってくるのが一番幸せじゃないかと言う結論に到した。3048FにRAMを増設するという「お遊び」にも非常に惹かれていたんだけどね(笑) 今回購入したのは AKI-H8/3069LAN のI/Oボード付き。 何かデバイスにはRTC-8564NBを選択。I2Cで制御するものだ。I2Cの仕様はなんとなくわかった。ごりごり書きたくてウズウズしているが、まずはキットを組み立てないと・・・
CentOS 4.3 + vmware 5.5 で時刻をあわせる
/etc/grub.conf の kernel の行に clock=pit を追加 vmware toolsをインストール、vmware-gurestdを実行させておく VMをシャットダウン *.vmx で tools.syncTime = "TRUE" ntpをインストール&設定 |
カレンダー
カテゴリー
フリーエリア
最新CM
[02/07 @naoshi65536]
[02/07 忍]
[09/18 とおりすがり]
[06/26 ilmare]
[03/16 とおりすがり]
最新記事
(01/30)
(01/30)
(08/13)
(05/26)
(04/08)
最新TB
ブログ内検索
カウンター
アクセス解析
|