Japanino ArduinoISPで ATtiny13 の BASCOM-AVRでの software serial - ソフトUARTの実験 (28) (11/12)
まずシリアル入出力だが、RS-232CなどのPCとのやり取りはシリアルポートがあるなら、RS-232C(信号レベル12V)-マイコン(TTL/CMOSレベル5V)の変換が必要だが、USBしかない方が多いはずで、USB 5VとTTL/CMOS 5Vなので電圧レベルは同じだが、USBシリアル変換が必要になる(負論理―正論理変換もあるかも)。
しかし、Japanino(arduino)がもうすでにUSBシリアル変換してくれてる。
それがD0,1(=RX,TX)だ。ここにATtiny13を繋ぐとPCのTera TermやArduinoIDEのシリアルモニタでデータをやり取りできる。
ATtiny13はまたハードUARTがないのでソフトUARTを行う。UARTというのはシリアル信号でやり取りする方式で、電圧レベルが違うRS-232Cも方式はシリアル方式で同じ。I2CやSPIもシリアルという意味ではまあまあ同じかな。
準備:
PC側:Tera Term で通信速度300bps,ローカルエコー有りの受信改行CRLF送信改行CR、COM3(各自の環境) ー USBケーブルでJapaninoと繋ぐ。
Japanino側:ArduinoIDE 0018で、スケッチArudino ISPをJapaninoに書込んで、ライタにする。- Japanio RX(=D0)とATtiny13のPB4を繋ぐ。これは8x8LEDマトリクスのプログラムで残ったピンがPB4でシリアル「入力」が必要だからだ。
ATtiny13側:PB4を入力ピンに設定し、プルアップ設定にし、JapanioとVCC,GND,RXをもらって繋ぐ。いつもの書込みピン(PB0:MOSI,PB1:MISO,PB2:SCK,PB5:RESET)も繋ぐ。
確認のため、PB0にLEDを付けてシリアル入力した値によってON/OFFするタイミングを変えるプログラムを作ってテスト。もちろん8x8LEDマトリクスで実際はやるのだが、メモリがギリギリなのでテストプログラムをのせる余裕がない。
BASCOM-AVRではソフトウェアUART(ソフトウェアシリアルとも言う)は、Open-Input/Print#n-CloseとOpenが不要なSerin/Seroutがある。INKEYとかIscharwaitはハードUART用のようだ。またソフトUARTは割込みを使っているので他の割込みプログラムは作れないし、ハードUARTと違い容量を食う。まあ出来るだけ遅い通信速度で、自分でポーリングしてやればいいのだが。
まだポーリングはやってないが、とにかく何か受信できるようにしたソースはこれ。
ソース:
'****************************************
' Copyright (c) 2016 k1segawa
' License : free
' Program : Serial LED Control
'****************************************
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 24
$swstack = 8
$framesize = 8
Config Portb.4 = Input 'Serial Input
Set Portb.4 'pullup (= PORTB.4=1)
Config Portb.0 = Output 'LED
Const Open_input = 1 '#if 1:Open"COMxx" - Input #1
'#else:Serin
Dim A As Byte
Portb.0 = 0 'LED OFF
' Brink LED : A/2
For A = 0 To 19
Waitms 300
Toggle Portb.0
Next I
#if Open_input = 1
Open "COMB.4:300,8,N,1" For Input As #1 'PORTB.4,300bps,channel #1
#endif
Do
#if Open_input = 1
Input #1 , A
#else
Serin A , 1 , B , 4 , 300 , 0 , 8 , 1
#endif
If A < &H38 Then '&H38=ASC("8")
Portb.0 = 1
Waitms 300
Portb.0 = 0
Waitms 300
Else
Portb.0 = 1
Wait 1
Portb.0 = 0
Wait 1
End If
Loop
End
' History
' [2016/11/12]
' Japanino connect "RX"!! --- ATtiny13 PB4(INPUT)
sampi.hex:
42 4D 76 02 00 00 00 00 00 00 76 00 00 00 28 00
00 00 20 00 00 00 20 00 00 00 01 00 04 00 00 00
00 00 00 02 00 00 CE 0E 00 00 D8 0E 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80
00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80
00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF
00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF
00 00 FF FF FF 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 CC CC CC CC CC CC CC CC 00 00
00 00 00 00 00 00 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA 99 99 99 99 99 99 99 99 AA AA
AA AA AA AA AA AA
まあ文字列でも冗長になるだけで受信側でASC変換すればいいだけ。でもBASCOM-AVRのコマンドがどう変換するか変換しないのかはこれから調べる。とりあえず、再開する時に環境を整えるのにひどく苦労したのでとりあえずこの手順は残す。