Japanino ArduinoISPで ATtiny13 の BASCOM-AVRでの software serial - ソフトUARTの実験(2) (29) (11/12)
次のソースで実験。
ソース
'****************************************
' 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
Dim A As Byte
Portb.0 = 0 'LED OFF
' Brink LED : A/2
For A = 0 To 39
Waitms 300
Toggle Portb.0
Next I
Do
Serin A , 1 , B , 4 , 300 , 0 , 8 , 1
If A = &H41 Then '&H41=ASC("A")
Portb.0 = 1
Waitms 500
Portb.0 = 0
Waitms 500
Else
Portb.0 = 1
Waitms 100
Portb.0 = 0
Waitms 100
End If
Loop
End
' History
' [2016/11/12]
' Japanino connect "RX"!! --- ATtiny13 PB4(INPUT)
test8.txt
A
A
1
A
2
A
3
tera termの設定が送信改行CRになっているので、上記のファイルは、
41 0D 31 0D 41 0D 32 0D 41 0D 33 0D
と12バイト分送信されるはずだ。
そして、送信処理はWaitms 500×2=1000ms以上かかる。
なので、1バイト毎に1500msの遅延をするように設定する。
きっとtera termが送信バッファを持っていてそこから遅延時間を考慮して送信しているのだろう。
すると、点滅を12回、1、5、9回目が長い点滅(つまりA)になった。
試しに遅延を1000msにすると、
点滅が9回になった。受信に失敗したのだ。
おー、tera termの設定で遅延させればいいのか~
でも処理時間がどれくらいかかるのか?複雑になるとそれが簡単に出ないな~こういう時にどこかの回路の一点をオシロスコープで見ればわかるんだろうな~
この回路だとLEDの両足にON/OFF信号を与えている(周波数)と考えて、そこにプローブを当てるのかも。500msの立ち上がり、立ち下がり、100msの立ち上がり、立ち下がりが測定できるのかな。
容量の問題で受信バッファを設けるときつそうだしな~SRAM 64バイトだからな~もうほとんど無さそうだしな。