2017年 03月 17日 ( 2 )

Japanino ArduinoISPで ATtiny13 で BASCOM-AVR (39) (3/17)

またシリアル通信は確かにアセンブラで制御すれば収まるかもしれないが、ワンチップマイコンの使い方でも、本当に中のハードの仕組みまで抑えないと出来ない。

シリアル通信自体、規格に沿って使うだけだったので、細かい通信のインプリメントをハードレベルで実現したいとは考えていない。ハードの汎用ロジックICのデジタル電子回路の習得までと決めてあったのに、小さいもの好きが高じて8Pin1KBのATtiny13にこだわり過ぎた。
同じことをするなら、ATtiny85でシリアル通信をソフトシリアルで受信バッファを持たせた物に置換する。そしてATtiny13には簡単な制御だけにし、PCへの1個のセンサーデータ取り込みをシリアルで行うためにはATtiny85とする。
そしてMatrix 8x8 LEDで無理に汎用ロジックICを使うのではなくどうしても使いたい場合に使う。
だから8Pinは実験のためであり、安く単純に使うためBASCOM-AVRやArduinoを使う。
複数センサー入力するなら8Pinにこだわらないし、容量も1KBにこだわらない。
そしてそれは実験ではなく実用にしたいのだから、少し高くてもきちんとしたものにして、流用を考えない。だからブレッドボードではなく基板で、50円マイコンじゃなくてもいい。それが8KB越えするならArduinoでもよい。

アセンブラもそうなると全体を作成するのではなくサイズ縮小ではなく、高速化のためとなる。
ならばAVRではなくARMにすればいい。がワンチップマイコンでARMが使えるのかわからない。
AVRならば大容量多ピン種でも8ビット/32ビットともにArduinoのブートローダを書き込めばソフトはまあまあ一律で同じのが使えるが、高速化も極めるとつらいのでARMとなる。

個人レベルで高速化が必要なものって高速な通信プロトコルのためか、液晶コントロールぐらいか。でもそれってグラフィック転送レベルだよな。なら液晶モジュール(キット)でいいんじゃない?

やはり個人ならARMの力は不要で、ソフト一律のArduinoが使えるAVRで十分だ。まあロボットを作りたいなら反応速度を上げるのにセンサーデータを解析するホストマイコンかRaspiへ通信速度が高速な必要もあるかも。ただローカルで脊髄反射のようにするならホストはいらず、AVRローカルで制御できるかな?

あと流行りの画像・音声認識や人工知能・自動運転の末端センサーなら、大容量高速通信が必要かな。ここにはARMの独壇場となりそう。

あくまでも「個人の趣味レベルの場合」で書いたが、PICはハード屋さんなら究極にコストパフォーマンス高くできるので、そういう人はPICでがりがり書けばいい。それを目指してもいいが、ハードは奥が深すぎてちゃんと勉強して専門の電気の知識を頭に入れないと難しい。

せいぜいワンチップマイコンの制御レベルでも本当に極めれば難しいので、そこはArduinoのライブラリにおんぶにだっことする。

通信とかね。

はー、回り道した。ここでいったん仕切り直しとする。これもポケコンでやった事を振り返って初心に戻ったから、ハマっていた事に気が付いた。周りを見直すのは大切だ~
[PR]
by k1segawa | 2017-03-17 14:07 | arduino, AVR | Comments(0)

Japanino ArduinoISPで ATtiny13 で BASCOM-AVRでシリアル通信 (38) (3/17)

上記の件、区切りがつかないのでソフトも公開。
LED Matrix 8x8 の制御ソフトのシリアル部分は除く。
だが、新しい配線で3ピンしか使わない(残り2ピン - Tx/Rx用)回路用。

'****************************************
' Copyright (c) 2016 k1segawa
' License : free
' Program : 8x8 LED Control
' (by 74HC164)
'****************************************
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 18
$swstack = 8
$framesize = 4

' 74HC164x2 : 1,2
' A= 1 14=VCC
' B= 2 13=QH
' QA= 3 12=QG
' QB= 4 11=QF
' QC= 5 10=QE
' QD= 6 9=XCLR
'GND= 7 8=CLK

' B,XCLR=VCC

' ATtiny13
' PB0=A :1
' PB1=A :2
' PB2=CLK :1
' PB3=CLK :2

Config Portb.0 = Output 'A1(Data 1)
Config Portb.1 = Output 'A2(Data 2)
Config Portb.2 = Output 'CLK(Clock 1)
Config Portb.3 = Output 'SoftSerial TX
Config Portb.4 = Input 'SoftSerial RX
Set Portb.4 'Pullup
Config Base = 0 'DIM(0-7)
Const Human = 1 'Human Data=LCD designer

Dim A As Byte , I As Byte , J As Byte , W As Byte
Dim D(8) As Byte , K As Byte
Dim Rxstr As String * 17
Open "COMB.3:9600,8,N,1" For Output As #1
Open "COMB.4:9600,8,N,1" For Input As #2
Print #1 , "OK "
Input #2 , Rxstr

'--- Data Init (Start) ---
Restore Chr_data

Do
#if Human = 0

'--- 8 Bytes = 8 Lines , Data Store ---
For J = 0 To 7
Read A
'--- End Data = Return Start Data ---
If A = 99 Then
Restore Chr_data
Read A
End If
'--- Data Store ---
D(j) = A
Next J

#else

'--- [ Convert Read ] : 8 Bytes = 8 Lines , Data Store ---
For I = 0 To 7
D(i) = 0
Next I

For J = 0 To 7
Read A
'--- End Data = Return Start Data ---
If A = 99 Then
Restore Chr_data
Read A
End If

For I = 0 To 7
'--- Data Store ---
W = &H80
Shift W , Right , I
W = A And W
If W <> 0 Then
W = &H80
Shift W , Right , J
D(i) = D(i) Or W
End If
Next I
Next J

#endif

'=== Repear Same Data * 10 Loop (=200ms Display) ===
For K = 0 To 9

'--- Matrix LED A1=Char Data Pin 8 bit Shift ---
For J = 0 To 7 'A2 Shift Count (0=QA:b0, 7=QH:b7)

'--- Get 1 Byte Data ---
A = D(j)

'--- A1 74HC164 Shift ---
For I = 0 To 7
W = &H80
Shift W , Right , I 'I=0-7:bit 7-0(&H80,&H40,&H20, ...)
W = A And W 'Char Data bit mask
If W = 0 Then
Portb.0 = 1 'Data 1(A1): OFF=1(reverse)
Else
Portb.0 = 0 'ON=0(reverse)
End If

'--- Clock(CLK 1) ---
' Portb.2 = 1 'Low->Hi(Rising Edge)
' Portb.2 = 0 'Hi->Low(Falling Edge)
' Next I

'--- A2 74HC164 Shift ---
' For I = 0 To 7
If I = J Then '1 Line : ON
Portb.1 = 1 'Data 2(A2) : ON=1
Else
Portb.1 = 0 'another 7 Lines : OFF=0
End If

'--- Clock(CLK 2) ---
' Portb.3 = 1 'Low->Hi(Rising Edge)
' Portb.3 = 0 'Hi->Low(Falling Edge)
Portb.2 = 1 'Low->Hi(Rising Edge)
Portb.2 = 0 'Hi->Low(Falling Edge)
Next I

Waitms 2 ' (MAX Wait) Not hi-speed Brinking

Next J

' Not Wait (For V-Sync)

Next K
'=== Repeat End ===

Loop

End

Chr_data:
#if Human = 0
'Byte Data=bit7-0:Left-Right
'7->
'6
'5
'4
'3
'2
'1
'0
Data &H55 , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &H55 , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &H55 , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &HAA , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &HAA , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
Data &HAA , &HFE , &HFC , &HF8 , &HF0 , &HE0 , &HC0 , &H80
#else
'Byte Data=bit7-0:Up-Down
'7 6 5 4 3 2 1 0
'|
'V
' human
Data 8 , 6 , 29 , 4 , 4 , 11 , 9 , 25
Data 8 , 6 , 29 , 4 , 4 , 11 , 9 , 25
Data 8 , 8 , 4 , 12 , 14 , 4 , 10 , 11
Data 8 , 8 , 4 , 12 , 14 , 4 , 10 , 11
#endif
Data 99

' History
' [2016/12/31]
' PB3->PB2;Human=1;(Loop I)*2->*1
' [2016/10/09]
' 74HC164AP-1 reverse
' [2016/10/08]
' Read Convert Human Data (tools>LCD designer)
' [2016/10/07]
' $framesize = 16 -> 8
' Const Human #if Human define
' Data A1,A2 ON/OFF =1/0 (reverse) comment debug
' [2016/10/07]
' Pattern Data: lam mch led matrix 8*8
' URL:https://www.youtube.com/watch?v=U8zDmvD_pmY

[PR]
by k1segawa | 2017-03-17 00:25 | arduino, AVR | Comments(0)