確認用の回路

モニターの回路はできましたが、ソフトの変更の度に車に乗り、PCと書き込み機を車内で動かしてというのも面倒だったので、一定のアンサーバックしかしない回路も作りました。

 

回路は先日アップした回路図から液晶を外しただけのものですが、Port B5にLEDをつなぎ、この回路からのデータ送信中に点灯するようにしています。

BASCOM-AVRの試用版でコンパイルできます。

----------------------------------
' $sim

Rem Chip config

$regfile = "m328def.dat"
$prog &HFF , &HFF , &HD6 , &HFD ' generated. Take care that the chip supports all fuse bytes.
$crystal = 16000000 '16Mhz


$hwstack = 64 'ハードウェア・スタックの容量を設定。
$swstack = 64 'ソフトウェア・スタックの容量を設定
$framesize = 32 'フレーム領域の容量を設定。

Config Com1 = 9600 , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 7 , Clockpol = 0

Echo Off 'Input echo off

' Echo On 'for simuration


Config Portb.5 = Output
Config Aci = Off

Dim Recive As String * 5
Dim Dat(14) As String * 56
Dim Hos(14) As String * 56
Dim Count As Byte

Raw_dat:

rem 0000000001111111111222222222223333333334444444444555555
rem 1234567890123456789012345678901234567890123456789012345
Dat(1) = "0141304680019700208078000021440301006816010240000035220"
Dat(2) = "0138804730020100208078000011450310007116010240000034196"
Dat(3) = "0142704700020200208078000021440303006916010240000033428"
Dat(4) = "0140104730020500205078000011440311006916010240000032660"
Dat(5) = "0129104760027500198078000021420305006916010240000030868"
Dat(6) = "0126504770028200195078100021440304007216010240000031124"
Dat(7) = "0130604730028700197078000021450299007016010240000030868"
Dat(8) = "0120804550037100194078000021440268007016010240000032660"
Dat(9) = "0124504490038400194078000011450264007016010240000032916"
Dat(10) = "0121204490039700194078000011430261007216010240000032916"
Dat(11) = "0104404440083065535076600101400221007620010240025632896"
Dat(12) = "0104404440100001000076600101400221007620010240025632896"
Dat(13) = "0000000006553565535000000000000000000000000000000000000"
Dat(14) = "0000000000000000000000000000000000000000000000000000000"

Raw_hos:

rem 0000000001111111111222222222223333333334444444444555555
rem 1234567890123456789012345678901234567890123456789012345
Hos(1) = "0099901227010920100001000010000100101000010000000000000"
Hos(2) = "0100101154010690100001000010000099901000010000000000000"
Hos(3) = "0100001212010880100001000010000100001000010000000000000"
Hos(4) = "0100001204010860100001000010000100001000010000000000000"
Hos(5) = "0100001195010850100001000010000100001000010000000000000"
Hos(6) = "0100101185010810100001000010000099601000010000000000000"
Hos(7) = "0100101149010660100001000010000099801000010000000000000"
Hos(8) = "0100101146010640100001000010000099901000010000000000000"
Hos(9) = "0100101141010620100001000010000099601000010000000000000"
rem 1234512345123451234512345123451234512345123451234512345
Hos(10)= "1000001100012000130001400015000160001700018000190002000"
hos(11) = "0000000000000000000000000000000000000000000000000000000"
hos(12) = "0000000000000000000000000000000000000000000000000000000"
hos(13) = "0000000000000000000000000000000000000000000000000000000"
hos(14) = "0000000000000000000000000000000000000000000000000000000"


Count = 1

Jusin1:

Reset Portb.5

Input Recive

If Count = 15 Then Count = 1

If Recive = "?DAT" Then Goto Send_dat
If Recive = "?HOS" Then Goto Send_hos Else Goto Jusin1


Send_dat:
Set Portb.5

Print Dat(count);

Goto Cc

Send_hos:

Set Portb.5

Print Hos(count) ;

Goto Cc

Cc:
Count = Count + 1

Goto Jusin1

 

-------------------------------------------------

モニターの回路図

Arduinoを使って試作したの回路図を紛失してたようで、ATMega328を使って試作した物の回路図を代わりに置いておきます。

Ki-CADで作図しPDF化したものをJPGへ変換しています。

PDFへ変換時に文字が潰れてしまっていますが、部品のピン番号は分かると思います。

f:id:ma2electron:20190427080655j:plain

回路図

回路の大まかな解説は、ATMega328のUART端子で9600bps 7Bit  Stop bit1 Evenパリティーで通信、その信号をRS-232CレベルへAMD3202で変換してフリーダムと通信させます。

レベル変換ICは各社似たものがありますので、価格や周りに使う部品を考慮して選べば何でもいいです。

ケチってダイオードと抵抗で直接RS-232C端子へ繋ぐ方法もあります。

 

表示はキャラクター表示のLCDを使用し、4Bitのデータを2回送って表示する方法を使っています。

LCDはマルツで販売されているこれが安くて便利です。

www.marutsu.co.jp

秋月電子のこれでもOKです。

LCDキャラクタディスプレイモジュール(16×2行バックライト付): ディスプレイ・表示器 秋月電子通商-電子部品・ネット通販

 

LCDへの表示データの配線は、BASCOM-AVRではATMega328の使用するピンを選べますので、分かりやすい配線になるようにするとよいと思います。

 

回路構成の検討

ATMega328を使うことを決め、どういう回路構成にするか検討します。

 

ATmega328の通信端子は、RS232C用として使う事ととします。

グラフィック液晶を使わずにキャラクター液晶を使う事で、フォントの組み込みや

文字ズレ、ライセンスの呪縛から解かれました(笑)。

通信ICはRS232Cマイコンへ変換し、外付けコンデンサ電解コンデンサ

極力使わない構成になるように考慮。

MAXIMのICやAnalogdeviceのICが出てきますが。今回はAnalogdeviceを選びました。

 

実際の試作機の組み立ては、Arduino UNO R3を使い、搭載されていた

ATMega328の中身をクリアして使い、上記の232C変換もキットを買って蛇の目基板へArduinoを接続して使い、大まかな動作チェック用として組み立て。

 

 

マイコンの選定 ATMega328

おおよそのマイコンの選定は決まりましたが、では、どれを実際に使うかが決まっていません。

AVR系が良さそうで、その中から選ぶと、フリーダムとの通信に使うRS-232C用に端子があるのか、液晶表示用のデータ配線の確保、その他いろいろ考えるときりが無いので、Arduino UNO R3を試作用のマイコンボードとして使い、子基板を作りArduinoで言うところのシールド基板風に積み上げていくこととしました。

Arduino IDEを使わないのでプログラム本体をAruduino UNO R3へ書き込めません。

Arduinoをもう一個買ってきて書き込む方法や、ライターを自作する方法もありますが、安全策を取ってAVRISPmk2を購入しました。

 

この試作的なものの回路図やプログラムはHDDクラッシュの時に壊れてしまったのか、

PCの中には残っていませんでいた。

 

マイコンの選定

モニター兼ロガーを作ったのは4年ほど前ですが、その前に、モニターを作っています。

その際、マイコンの選定で色々と悩みました。

マイコンを使うのが初めてで、大昔に仕事で78K2をちょっと触ったくらい。

 

色々検索するとPICマイコン、H8、AVRが入手しやすい事が分かりましたが、C言語ができない私は、何となくできていたBASICでやれそうな物を探しました。

 

PICは当時、PIC16F88とかがメジャーで解説や資料も豊富でしたが、フリーダムの通信フォーマットの7Bitに対応しておらず断念。

AVRはそうやっていいのか分からず、Arduinoを使えば・・・と思ったら、これも通常は7Bitは使わないようです。(後で分かりましたが、レジスターの設定で対応できるそうでした)

 

あれこれ調べていくと、BASCO-AVRという丁度良い物がありました。

フリーでも容量制限を越えなければフルに使えて、BASICですしAVRは7Bitに対応しているマイコンで、秋月電子や近所のマルツパーツでも販売していましたので、これを使う事に決定です。

 

 

E&E社 フリーダムモニターの解説

某オークションで月イチ程度で出品している、フリーダムモニターができるまでの経緯とデータ処理などについて、不定期に書いていきます。

ソースコードについては開示しませんが、部分的に、ヒントとなりそうな部分を書き出したいと思います。

途中で、放置になるかもしれませんが・・・。