正月休みの工作

正月休みの工作でライントレーサを作ってみました。

ラインを外さないようにするため速度を落とす必要があり、また、センサーが2個でON/OFFな制御のためカクカクしているため、センサーの増設、比例制御の導入などで改善を行いたい。

材料

  • Arduino UNO R4
  • サンハヤト Arduino用ユニバーサルキバン(UB-ARD03-P)
  • 5V昇圧DCDCコンバーター(秋月 K-13065)
  • デュアルHブリッジモータードライブ(MX1508使用)
  • 赤外線反射センサーモジュール
  • タミヤ ダブルギヤボックス
  • タミヤ ナロータイヤセット 58mm径
  • タミヤ ボールキャスター
  • 電池ボックス 単3×2本 リード線(秋月 P-17271)
  • 電池ボックス 単4×3本 リード線(秋月 P-03195)
  • トグルスイッチ(DPST or DPDT)
  • 絶縁キャップ(ニチフ LP TIC-22-黒)
  • 木の板(3.5mm厚)
  • ボルト&ナット

ポイント

  • Arduino UNO R4はPWM周波数を自由に設定したいこと、e2studioの使い方の勉強、将来的にはFreeRTOS化したいなどで、Arduinoとしては使用せず、ベアメタルプログラミングを行った(E2-Liteを使用して書き込み)

Arduino UNO R4およびE2-Lite
  • 単4×3本を5V昇圧コンバータを使用してArduinoの5Vピンに供給
  • 単3×2本を昇圧せずにモータードライバに供給
  • ギアボックスのギア比は114.7:1(タイプC)
  • 外乱光の影響を減らすため、センサーに絶縁キャップを流用したカバーを装着

センサーにつけたカバー
  • 重心をキャスター側に寄せる

電池ボックス

裏面

電池ボックスの上にマイコンを配置

ソースコード(抜粋)

※エラー処理は全く行っていない

while (1)

{

R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc0);

R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_1, &adc1);

if (adc1 > L_THRESHOLD && adc0 > R_THRESHOLD) {

state=3;

} else if (adc1 > L_THRESHOLD) {

state=2;

} else if (adc0 > R_THRESHOLD) {

state=1;

}

} else {

state=3;

count++;

}

switch(state) {

case 0:

R_GPT_DutyCycleSet(&g_timer0_ctrl, 0, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer0_ctrl, gpt0_pwm_counts, GPT_IO_PIN_GTIOCB);

R_GPT_DutyCycleSet(&g_timer1_ctrl, gpt1_pwm_counts, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer1_ctrl, 0, GPT_IO_PIN_GTIOCB);

break;

case 1:

R_GPT_DutyCycleSet(&g_timer0_ctrl, 0, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer0_ctrl, gpt0_pwm_counts, GPT_IO_PIN_GTIOCB);

R_GPT_DutyCycleSet(&g_timer1_ctrl, 0, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer1_ctrl, gpt1_pwm_counts, GPT_IO_PIN_GTIOCB);

break;

case 2:

R_GPT_DutyCycleSet(&g_timer0_ctrl, gpt0_pwm_counts, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer0_ctrl, 0, GPT_IO_PIN_GTIOCB);

R_GPT_DutyCycleSet(&g_timer1_ctrl, gpt1_pwm_counts, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer1_ctrl, 0, GPT_IO_PIN_GTIOCB);

break;

case 3:

R_GPT_DutyCycleSet(&g_timer0_ctrl, 0, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer0_ctrl, 0, GPT_IO_PIN_GTIOCB);

R_GPT_DutyCycleSet(&g_timer1_ctrl, 0, GPT_IO_PIN_GTIOCA);

R_GPT_DutyCycleSet(&g_timer1_ctrl, 0, GPT_IO_PIN_GTIOCB);

break;

default:

break;

}

/* Delay */

R_BSP_SoftwareDelay(delay, BSP_DELAY_UNITS_MILLISECONDS);

}

FM77AV40EX/SX用の512KRAMカード

ハードウェア解説書をもとに512K-RAMカード(S-RAMカード)を作成してみました。

物理アドレスの&H40000-&HBFFFFに割当てされます。

f:id:ono416:20210709192045j:plain

メモリカード表面

f:id:ono416:20210709192116j:plain

メモリカード裏面

LEDはCE、READ、WRITEのインジケータになっています。

READ、WRITEはアドレスに関係なく点灯するので、ほぼ常時点灯しています。

 

プログラムで簡単な動作確認をしてみました。

f:id:ono416:20210709192350j:plain

テストプログラム

拡張MMRMMR高速モードを有効にしたのちに、&H40000-&hBFFFFを&H6000に割付しつつ4Kブロックの先頭のバイトに物理アドレスの上位8bitの値を書き込みし、すべて書き込み終わったら、読み込みを行って表示します。

表示結果が物理アドレスの上位8bitと一致していれば一応はOKとなります。

f:id:ono416:20210709192756j:plain

テスト実行結果

物理アドレスの上位8bitと表示結果が一致しているのでちゃんと動作しているようです。

 回路図、チェック用のプログラムをgithubで公開しました。

yoichiro-ono/FM77AV40EX-RAM (github.com)

 

FM-7 64180カード用CP/M BIOS

ある程度動く状態になりましたので、githubで公開しました。

 

https://github.com/yoichiro-ono/FM7-64180-CPM

 

エスケープシーケンスが不足しているのか、サポートデバイスに問題があるのかWordmasterは動いていませんが、MBASICは動作しました。

 

 

FM-77用PS/2キーボードインターフェース

キーボード無しのFM-77を入手しましたので、PS/2キーボードI/Fを作成しました。

 

f:id:ono416:20200726112452j:plain

FM-77用PS/2キーボードI/F

CPUに手持ちのMega168Pを使用し、内臓の8MHzで間に合うと思うのですが20MHzの外部クロックを付けました。

PS/2コネクタ(MiniDIN)はaitendoで安売りしていたものを使用しています。

 

以前に作成した64180ボードを10cm×10cmから12.7cm×8cmにパターン変更し本体に収めて蓋ができるようにしました。

パターン変更の際にシリアルポートを引き出したのですがZ80180を8MHzで動作させた場合はまともに通信できるボーレートにならないので、6.144MHzに変更するか、外部から通信用のクロックを入れないとダメなようです。

f:id:ono416:20200726113841j:plain

64180(Z180)ボード

 

2020/8/14追加

回路図、ソースプログラムをgithubで公開しました。

https://github.com/yoichiro-ono/FM77-KBIF

 

FM-7用64180カード作成

久しぶりの更新ですが、FM-7を入手し、プロセッサ誌の64180カードを作成しました。

10MHzへの切り替えを無くし、メモリを4MBitのSRAMに変更(物理アドレスも80000-FFFFFに変更)、74LS⇒74HCT、74ALS・74F⇒74ACに変更した程度で、記事の回路ほぼそのままです。

Oh!FM誌の63K CP/Mの製作記事をもとに、CP/Mを動かしてみました。

CP/Mのフロッピー等は持っていないので、The Unofficial CP/M Web siteCP/M 2.2 ASM SOURCEなどからFDイメージを作成し起動しました。

f:id:ono416:20200604232142j:plain

64180ボード(下手なパターンのため裏側は内緒です)

f:id:ono416:20200604232521j:plain

64180ボード動作中(LED点灯)

f:id:ono416:20200604232559j:plain

CP/M起動後DIR(フラッシュの映り込みはご容赦を)

f:id:ono416:20200604232625j:plain

WordStarで編集

f:id:ono416:20200604232810j:plain

MBASIC起動



フロッピーエミュレータを使用していますが、ディスクアクセスが遅いので、512KバイトのRAMにキャッシュするように、表示も1文字毎にサブシステムに送っていて遅いので、EXM80のように、ある程度まとめて送り込むように、改造を考えています。

出来上がるのはいつになるやらですが。

 

CP/Mの作成には以下のサイトをはじめ数多くのサイトを参考にさせていただきました。

はせりんさんのサイト

中日電工さんのサイト

Yamamoto's Laboratoryの8ビット CPU Z80