体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Japanino ArduinoISPで ATtiny13 の BASCOM-AVRでの software serial - ソフトUARTの実験(2) (29) (11/12)

どうやら改行コード1バイトも受信してデータ1バイト毎の処理時間が長いと受信を失敗するようだ。
次のソースで実験。

ソース
'****************************************
' 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
ASCIIコードで改行CRは0x0d。

tera termの設定が送信改行CRになっているので、上記のファイルは、
41 0D 31 0D 41 0D 32 0D 41 0D 33 0D
と12バイト分送信されるはずだ。
a0034780_21353027.jpg


そして、送信処理はWaitms 500×2=1000ms以上かかる。
なので、1バイト毎に1500msの遅延をするように設定する。
a0034780_21392220.jpg
表示はサクッと表示され、あとから追いかけるようにデータが送信される。
a0034780_214854.jpg

きっとtera termが送信バッファを持っていてそこから遅延時間を考慮して送信しているのだろう。

すると、点滅を12回、1、5、9回目が長い点滅(つまりA)になった。
試しに遅延を1000msにすると、
a0034780_2147244.jpg


点滅が9回になった。受信に失敗したのだ。
おー、tera termの設定で遅延させればいいのか~
でも処理時間がどれくらいかかるのか?複雑になるとそれが簡単に出ないな~こういう時にどこかの回路の一点をオシロスコープで見ればわかるんだろうな~
この回路だとLEDの両足にON/OFF信号を与えている(周波数)と考えて、そこにプローブを当てるのかも。500msの立ち上がり、立ち下がり、100msの立ち上がり、立ち下がりが測定できるのかな。
容量の問題で受信バッファを設けるときつそうだしな~SRAM 64バイトだからな~もうほとんど無さそうだしな。

[PR]
by k1segawa | 2016-11-12 22:04 | arduino, AVR | Comments(0)