Dec 31, 2006

今年も今頃年賀状作成中

今年もこの期に及んで年賀状用お絵かき中。
イノシシがまたネタが無くて非常に悩み、またしても手抜き決定。
いい加減なモデリングをSasquatch様に覆ってもらってごまかし。背景も写真だし。
一応出来たことは出来たので、届いた年賀状を見てから送ることにしよう。
※年賀状は元日に書いて投函するのが正しいのです。
Posted at 20:57 in Visual

一年終わって

今年の目標は半分くらい達成したつもり。
USB関連はJTAGプローブに終始した。それなりの成果があったと思う。
HDL関連は、CPLDで2つばかり機器を製作し、動作させるまで出来た。本当は、CPUの創りかたCPUをCPLD上で動作させたかったのだけれども、VHDLのソースを記述してシミュレーションするところまでしか出来なかった。
LAN関連はAVR+SPIイーサモジュールとH8/3069F+Toppers/JSPで遊んだだけ。実用的なものは作らなかった。
基本的なことは一通りやってみたので、来年はもう少し踏み込んだ領域まで行ってみる予定。
Posted at 20:46 in embedded

AN213xとFX2共用化

ここまでで、AN213xとFX2の両方でJTAGプローブを動かしてみたものの、両方のメンテをするのも面倒なので、EZ-USBアクセス用関数群で吸収するよう修正。
デバイスオープン後にデバイスデスクリプタを取得しデバイスを判別することで対応。
更に、F/Wダウンロード済みの場合は自F/W以外はスキップするようにして、複数のEZ-USBデバイスが接続されていてもそれなりに動作するように修正。
ホストアプリもUSBバージョンによって、バルク転送時のパケットサイズだけ意識してやれば問題なし。
一応、playxsvfとJTAGゴッコツールの両方で動作を確認。
F/Wだけはどうしようも無いので、別々に管理することになるけども。
Posted at 20:39 in embedded

Dec 13, 2006

FX2版JTAGプローブ

5月にEZ-USB(AN213x)で作ったJTAGプローブをFX2版で作り直し。
ファーム自体はそれほど変更無く移植でき、割とあっさり完成。 (今回もFenrirさんのサイトを参考にさせて頂きました)
クロックが倍になったのと、I/Oポートが内部メモリ領域にマップされたため、3倍速の性能が出た。

これだけあってもあんまり使い道が無いので、playxsvfをこのJTAGプローブ用に改修してみることに。
最初はport.cだけ修正し、動作することを確認。タップ操作ごとにバルクライトするので非常に遅い。(XC9572への書き込みに443秒)
チューニングしてなんとか29秒まで短縮できたものの、パラレルポート経由の17秒には及ばず。
まあ、USB経由で書き込みが出来るメリットの方が大きいので、良しとしよう。
Posted at 18:41 in embedded

Dec 10, 2006

1ChipMSX到着

昨年、予定数に達せず企画倒れになった1ChipMSXが、ASCIIではなくD4エンタープライズから発売されることになり、予約していたものがようやく到着。
とりあえず、手元の10インチVGA液晶モニタとHappyHackingキーボード(lite)を接続して起動。

MSX-DOS2を起動して動くことだけ確認。

そのうち、FPGAを書き換えてMSXではない別のものを動かそうという計画なのだけれども、いつになることか。
Posted at 21:30 in computer

Sep 24, 2006

APLINKS on Vista

というわけで、早速VistaでAPLINKS for Win32の動作確認を実施。
動作自体は全く問題無し。
ただし、VistaからWinhlp32.exeが付属しなくなったので、ヘルプが表示できない(正式リリース後はダウンロードできるようになるらしい)。

リンク:Windows ヘルプ プログラム (WinHlp32.exe) が Windows に含まれなくなる


今時WinHelpを使ったアプリなんて無いだろうから、ヘルプだけ作り直してもいいかな。ヘルプで使用している画像がWindowsNT3.51の時のものなので、違和感あり過ぎだし。
しかし、10年前に作ったプログラムが修正無し/リコンパイル無しで、そのまま動くというのは脅威的。Windowsの互換性はかなりのものかも(行儀の良いプログラムを作ればだけど)。
開発環境は、WindowsNT3.51。

 WindowsNT3.51
   ↓
 WindowsNT4.0
   ↓
 Windows2000(NT5.0)
   ↓
 WindowsXP(NT5.1)
   ↓
 WindowsVista(NT6.0)
Posted at 22:28 in computer

Windows Vista RC1

誰でもダウンロードできるようになったので、Windows Vista RC1を使ってみることに。
いつもの実験マシンにインストールしようとしたところ、ファイルの展開が始まったところで、「ファイルが見つからない」エラーで終了。
仕方が無いので、VMware上にてインストール試行するも、これも画面が真っ暗なままでインストールできず。
ググってみると、.vmxファイルを修正すればインストールが出来るとのことだったので、やってみるとこちらは成功。あちこちで動作報告があった。

手順としては、
1) vmx ファイルに下記2行を追加し、インストールを開始(640x480 16色モードで起動する)
 svga.maxHeight = 480
 svga.maxWidth = 640
2) インストール完了後、VMware Toolsをインストールし、上記の2行を削除。
にて完了。

ただし、シャットダウンすると、ブルースクリーンでダウン後、再起動してしまう。(VMの設定でUSB無しにすれば解消する)
 BUGCODE_USB_DRIVER
 *** STOP: 0x000000FE  (0x000000008,0x00000006,0x00000009,0x84A295CC)


リンク:
Topic: Vista RC-1 on Workstation 5.5.2
Posted at 21:56 in computer

Sep 07, 2006

FX-890P修理

数年振りにFX-890Pを引っ張り出してみると、電源が入らない。
電池が入れっぱなしになっていたため、液漏れしていた。電池室をクリーニングし、再度トライするも変化なし。
仕方ないので、本格的にバラしてみたものの、電源はちゃんと来てるし、断線も無い。更に分解を進めると、電解コンデンサから電解液が漏れている形跡を発見。電源は入るが、表示がされない状況の模様。
早速、手持ちのコンデンサと交換してみると見事復活。
ポケコンはPowerLEDが無いので、生きているのか死んでいるのかを見極めるのが難しい。
なにはともあれ、直って良かった。
Posted at 23:57 in computer

Jul 19, 2006

AVR uIP on ATmega128

Optimize氏のSPIイーサネットモジュールを入手したので、遊んでみた。
まずはお手本どおりmega168でやってみたものの、メモリが少なすぎて面白くないので、買ったまま放置してあったmega128にメモリ増設をして再挑戦。
ベースをuIP0.6からuIP0.9に変更し、Webサーバのサンプルを動作させることが目標。
uIPの使い方自体が非常に簡単なのと、すでにENC28J60のドライバがあるので、ビルドはすんなりと出来た。
しかし、ブラウザからアクセスしてみると応答なし。pingの応答はあるので、動作しているはず。
仕方がないので、Wireshark(旧ethereal)にてパケットキャプチャとデバッグコードを埋め込んでシリアルポートからモニタリングを実施。
perlスクリプトからリクエストを投げて実験してみると、パケットサイズが240バイト位までであれば応答を返すことが判明。それ以上だと、ACKすら返さないので、送信側が再送を繰り返していた。
結局はenc28j60.hに定義してあったMAX_FRAMELEN(イーサネットフレーム長)が300に設定されていることが原因。これを1518に設定することで解決。
さて、これで何を作るかな。
Posted at 23:38 in embedded

ATmega128と増設メモリ

SPIイーサネットモジュールで遊ぶために、ATmega128にメモリ増設をしてみる。
データシートによれば、データバスとアドレスバスの下位8bitは共通で、ラッチを使って実装せよとのこと。AVRは高速に動作するため、74HCシリーズでは遅くて使えないよという注記あり。
そもそも、手元にあるメモリで16MHz(62.5ns)でアクセスできるものもほとんど無いなあと思ってパーツボックスを物色していると、486マザーに搭載されていた2次キャッシュ用SRAM(15ns)を発見。容量も丁度512kbit(64KB)。とっておいて良かった。
で、ラッチは74VHC573を購入。これならば5nsで動作可能なので問題なし。
回路が決まれば、あとは淡々と半田付け。せっかく多ピンのAVRなのにメモリ接続に食われる(19pin!!)とほとんど使えないのね。

さて動作確認という段階でライタで認識されないという問題に直面。配線間違いなのかとためしにJTAG接続でIDCODEやらシグネチャバイトやらを取得すると正常に動作している模様。
データシートをもう一度見直していると、なんとmega128はISP用のピンがSPIではなく、PD0/PD1を使うとの記述が。今まで使っていたAVRは皆SPIと共用だったので、なんの疑いも持たずに配線していたが、ちゃんと確認しないとイカンですね(フューズビットの出荷時の状態ではmega103互換モードというところは気付いて注意していたんだけどね)。
配線を直して、メモリチェック用プログラムを稼動。問題無いことを確認。
ハードが完成したので、次はソフト。uIPで遊ぶことにしたが、ここでまたしても問題発生。アセンブラで書いていたときには問題なかったXMEMのハンドリングがCでは困難に。
具体的には、
  • dataセクションの開始アドレスの設定方法がわからない。
  • スタートアップルーチン内で、プログラムメモリからデータメモリへの転送がされるため、それより前にXMEMを有効化しなければならない。
の2点。
1点目は、gccの引数でldのオプションが指定出来るので、これを利用し、"-Wl,-Tdata,0x801100"としてみるが、gccが先に標準値を指定してしまうため、効かない。(ldは同じオプションを複数指定した場合、最後に指定したオプションを生かすのではなく、無視してしまう)
仕方が無いので、gccに頼らず、ldを直接起動して必要な引数を指定することで回避した。
2点目は、スタートアップルーチンのソースを修正し、データコピーをする前にXMEMを有効化するようにした。
(ちなみに、スタートアップルーチンのソースはavr-libcに含まれるので、これを展開すれば入手可能)
小規模組み込み環境でもCでプログラムを書けるようになったのは良いことなんだけれども、小回り効かすのは大変ですな。

Posted at 22:09 in embedded

Jun 29, 2006

TD4モニタ

TD4実行中のアドレス等の値を表示するモニタを作成。
H8/3694 + LCDとCPLD + 7セグLEDの2パターンを検討したが、 I/O数も多いのでとりあえずCPLDで実装することに。
初VHDLコーディングだったものの、トラ技2006/5の電卓を参考に なんとか完成にこぎつけた。
XC9572は内蔵クロックが無いので、外部クロックが必要なのだけれども、 手元にあるクロックオシレータで最低のものでも14.318MHz。 面白半分でそのままつなげてみたらまともに点灯しなかった(当然)。
見よう見まねで、分周ロジックを記述し、ひとまずは動作を確認。 こんなに簡単に書けてしまうものかと関心。

Posted at 23:34 in embedded

May 31, 2006

TD4用ROMエミュレータ

「CPUの創りかた」CPUのTD4用に作成したROMエミュレータもようやく完成。
本体部分は非常にシンプルな作りで、
  • 起動時にEEPROMからRAMにROMデータを読み込み
  • TD4からのCLOCK信号を割り込みトリガとし、指定されたアドレスに対するデータ(RAM)を出力
だけ。

おまけ機能のUARTからROMデータをを操作する部分に非常に多くのコードが費やされる状態。
ここの機能は、
  • ROMバンク(16バイト単位,バンク)
  • ROMバンク切り替え
  • EEPROM書き換え
  • RAM内のROMデータダンプ
を実装。全部で500バイト弱。意外と大きい。

10数年振りにフルアセンブラで書いた割りには上出来か。初アーキテクチャ(AVR)でもあるし。
当初はPICで作るつもりだったけど、AVRの方が適しているという結論となった。
どちらも使ったことがないので、慣れの問題は無いがAVRの方が使いやすかった。
条件としては、
  • 入力5bit+出力8bit+UART
  • 外部割り込みあり
  • データ用EEPROMを内蔵
  • 必要最小限のピン数
の4点。
最初に試したPIC16F648(18ピン)では、汎用I/Oポートと特殊機能ポートの重複度合いが良くない。
PORTAはリセット端子が入力専用、PORTBにはUARTと外部割り込みといった具合で、ひとつのポートを出力用専用とすることができない。
TD4ではROMに対してストローブ信号を持たないため、PORTA/Bに分けて出力すると誤動作する可能性がある。
次のクラスだと、28ピンか40ピンになってしまうため、大きすぎ。
AVR90S2313(20ピン)は外付けクロックが必要ではあるが、PORTDにUART,外部割り込みがあり、PORTBは全部出力用に使えるため問題なし。
Posted at 00:10 in embedded

May 24, 2006

CPUの創りかた(その3)

遂に完成。ROMエミュレータはUARTからの変更機能は未実装なものの、とりあえず動く状態のプログラムにてテスト。
サンプルプログラム1(LEDちかちか)にて動作確認し問題なく動作することを確認。
念のため、ロジアナを接続してみたけどこちらも問題なし。
10Hz動作とはいえ、きちんと1命令/クロックで実行されてますな。

完成写真


右上のピンヘッダがROM接続用端子。アドレス&データバスとクロック,電源を引き出し。

サンプルプログラム実行時のロジアナ波形


10KHzでサンプリングし、クロックエッジのサンプルだけを抜き出し可視化
Posted at 20:58 in embedded

CPUの創りかた(その2)

CPU部分完成。逆接・ショートが無いことまでは確認完了。
ROM部分は作って無いんで動作確認がまだできない。

ROMエミュレータはPICで作ろうかと思っていたけど、いざやって見るとイマイチしっくりこない。(PICは使ったこと無い。そのうち使うかなと思っていたけど買っておいた16F648Aがあるだけ)
命令体系はそんなに違和感無いんだけれども、各I/Oピンの取り扱いとかSFRへのアクセスとか、そういう部分が使いにくい。
で、秋月行ったついでにAVR(AT90S2313)を入手。廃品種だけど安いし、UARTもあるので。 早速使って見ると、一部命令に違和感があるものの、PICのような使いにくさを感じなかったので、AVRで行く事に決定。
Posted at 18:26 in embedded

CPUの創りかた

今更ながら、CPUの創りかた(毎日コミュニケーションズ)を読破(読んだのは3月末だけど)。
非常に平易に書かれているので、通勤電車の中だけで、1週間で読めた。
実に考えられた設計で、デコーダが単純になるようになっているため、回路が非常に簡単。でも、IC10個で作れるってことになっているんだけど、もっとプリミティブなロジックICだけ(7400だけとか)で作るのかと思ったらALUは4bit加算器だったりするのでちょっとがっかり。
ROMをDIPスイッチで実現するところなんかは力技ながら、納得。

デコーダの設計のところで、説明の書き方がロジカルでなく、釈然としなかったので別途「VHDLで学ぶディジタル回路設計@CQ出版」を買ってお勉強。論理圧縮の方法がちゃんと理解できたので、良しとしよう。
(こっちの本は仕事が忙しくなってまだ頭の方しか読んでない。)

で、部品も買ってきたので実際にこのCPUを作ってみることに。
ICが11個もあると配線は拷問ですな。
やったことある人はわかると思うけど、回路図から作ろうとすると、配線図ではないので、各パーツの配置とかは自分で考えないといけないし、一本一本配線するのも大変。
ROM回路は最初から作る気がしないので、PICで置き換える予定(4bitCPU作るのに8bitのマイコンを載せるのもどうかと思うが)。
作例では、サンハヤトのICB-98GUに全部実装しているが、ROM回路は外出し出来るようにするので、もう少し小さいICB-96PUを使用。CPU部だけならなんとか収まる。
およそ半分できたので、日曜日には動かせるかな。
Posted at 18:25 in embedded

May 05, 2006

EZ-USBその2

まとまった時間が取れず、機器製作ができないため、方向転換して、JTAGゴッコでUSBの練習。
ターゲットはトラ技2006/4付録のCPLD基板(ALTERA MAXII)。
ホスト側から、コマンドとシフトインするデータをEZ-USBに送ると、TAP操作をEZ-USB側で実施し、結果を返すという仕様。(TAPのそれぞれのポートを単独でOn/Offするプリミティブなコマンドもあり)
IDCODEの取得と、EXTESTでLEDの点滅が出来ることまでは確認できた。
ただし、手抜きな作りなので、一回のコマンド送信に対して一回分のデータ受信しか行えない(分割するのが面倒だった)ので、データ長に制限あり(64バイト)。
→ bit単位で扱えるので、最大448bitまで。
当面はこれで使えるけど、足りなくなったらUSB2.0化(FX)しないと。
あとは、jtagtoolに組み込めば遊べるのかな。
Posted at 10:31 in embedded

Mar 09, 2006

EZ-USBその1

MINI EZ-USBにてUSBを習得中。
単体では動作確認のしようが無いので、参考書(オリジナルUSB機器の設計と製作)を参考に簡単な評価ボードを作成。8連ディップスイッチとLED2個、LCDを接続。
手始めに、Optimize氏のサンプルを実行。LEDがチカチカと点灯。
ホスト側プログラムとターゲット側ファームウェアソースをしげしげと眺め、内容が理解出来たところで、LCDへの出力をチャレンジ。
今日のところは、汎用ファームウェアをそのまま使い、ホスト側プログラムでEZ-USBのレジスタを制御する形で実装。
無事LCDに文字が出力され、一安心。
これも、Optimize氏のカメレオンUSBライブラリのおかげ。
バルク転送は理解できた。
次はLCDそのもののコントロールをファームウェア側で実装の予定。
Posted at 00:27 in embedded

Mar 08, 2006

今年は組み込み

久しぶり(約10年振り)電子工作をやってみたくなり、いろいろと物色。
とりあえず手元にこれだけ集まったので、空いた時間でいじり中。
  • MINI EZ-USB by Optimize
  • EZ-ARM7 by Optimize
  • ChameleonUSB + ロジアナキット by Optimize
  • H8/3052ボード by 秋月
  • H8/3069LANボード by 秋月
昔はMS-DOSだったのでシリアルとかプリンタポート経由で遊んでたけれども、「今時はUSBかLANでしょう」ということで。
PICも買ってみたけど、これは後回し。(AVRの方が良かったかも)

今年の目標は、
 1.何かしら意味のあるものを動作させること。
 2.USB機器はWindowsとLinuxで使えること。
 3.スタンドアロン機はLAN経由で使えること。
 4.余力があればCPLDとかFPGAが使えるようになること
の予定。(そんなに時間がないか)
ARMなのかH8なのかは両方使いながら考えるということで。
しかし、Z80でやってた頃と比べると物凄い進歩してますな。ワンチップでここまで入っているのかと。
当時は、まずはSRAM,そして8255やら8253やら繋げて、プログラムはROMライタで焼いてはテストって感じだったけど、今時は内蔵フラッシュメモリにセルフで書き込み~実行。入力ポートのプルアップまでもソフトウェアで制御できてしまうのね。
Posted at 22:55 in embedded

開発環境整備

マイコンごっこをやるために、まずは開発環境を整備。
ハードウェアが絡むので、普段使いのメインPCでは壊れちゃうと困るので、専用にノートPCを調達(ThinkPad X32)。
ARMとかH8はgccで開発できるので、Windows上ではMinGWを使用。
Cygwinはインストーラが重い&使いづらいので嫌いなのですよ。
Linuxは実機ではなくてVMware上のSuSE10にて。

各種ターゲット用にbinutils/gcc/insight(gdb)/newlibをビルドしてみると、Linuxでは何の問題もなくビルド完了するもMinGWではgccがビルド失敗。
libgccがダメの用で、手動にてMakefileのincludeパスを追加することで何とか回避。
insightはオリジナルのソースからはビルドできなかったので、MinGWの本家からソースを持ってきてビルド。
最終的には、
  • binutils-2.16.1
  • gcc-4.0.2
  • newlib-1.14.0
  • insight6.4(linux)/insight6.3.50(MinGW)
をそれぞれ
  • arm-elf
  • h8300-hms
  • h8300-elf
  • avr
のターゲット用にビルド。
EZ-USBのCPUコアが8051なので、これ用にsdcc-2.6.0もビルド済み。
おまけでpicasmもビルド。クロスコンパイラ/アセンブラだらけ。
オープンソースじゃ無いのは
  • Visual Studio 2005 Standard Edition
  • DDK
位。ExpressEdition+PlatformSDKでもいいかなと思ったけど、MFCが使えないとお気軽にプログラム作れないのでやむなく購入。
(さすがに手元のVC++5.0では厳しいのでバージョンアップ)
Posted at 22:54 in embedded

Feb 24, 2006

H8その1

ようやく、H8/3052のマザーボードの組み立て完了。
まとまった時間が無いと半田付けはできませんな。
しかし、こいつはH8/3048と共通の部材で、組み立て方がちょっと違うという曲者。
パーツが違うだけならまだしも、パターンカット&ジャンパーで対応するというもの。
シリアルポートが25pinなのは使いづらいので、これは9pinに、CPUボード/マザーボードともにレギュレータも殺して5Vのスイッチング電源を使用するように変更。 H8/3052は5V単一で動作&プログラミング可能なので、いいかなと思ったけど、マザーは最低ですな。最初から自分で作れば良かった。

で、動作確認。
まずはCD-Rに入っていたサンプルを書き込んで実行。問題なし。
何度か書き込みテストをしていて、H8は書き換え回数が意外と少ないことに気付く。
スペック上はmin:1回,typ:10,000回なので、普通は10,000回位は書き換えられるよって事なんだけど、書き換え後の全ての特性を保証するのはminの100回までということになっている。
それでも10年しか保持できないらしい。
ということで、ルネサス謹製モニタ+htermを導入。こんなの無料で配るとは素晴らしいですね。

で、今度は自分でプログラムを作って実行。秋月Cコンパイラはイヤなので、gccにて頑張る。
ディップスイッチの読み出しとLCDへの出力までは出来たので、ひとまずは満足。
一部アセンブラで記述してみたけど、これまではIntel形式の記述しかしていなかったので、AT&T形式は辛い。また、定数/即値の表記方法とアドレス指定の表記がイマイチ馴染めない。
フラッシュROMは512KBと大きいので、基本的にCで書けるからそんなにアセンブラは気にしなくても良いのかも。
Posted at 00:00 in embedded

Jan 03, 2006

QuadroFX1100

メインマシンのビデオカードをQuadroFX1100に変更
GloriaIIIを丸5年使用し、フォーカスがやや甘い以外はこれと言って不具合もなかったけれど、激安で売られていた(FX700より安い)ので、購入。
今更AGPって感じだけど、当面メインマシンはこのままなので、買えるうちに買っておこうかなと。
OpenGLのベンチマークを取ると結構早くなったけど、体感スピードは良くわからん。
フォーカスの甘さは改善されたからこれはこれで良しとしよう。(さすがにMatrox系には及ばない)
Posted at 20:26 in computer