AVR Bus-System
Ein Beispiel für ein kleines Bus-System, bei dem ein AVR der Sender (Master) und die anderen AVR die Empfänger (Slave) sind. Das Ganze erfolgt über den Befehl "printbin" und "inputbin". D.h. es werden nur 3 Leitungen zum verbinden der AVR benötigt. Masse, Plus 5V und eine Signalleitung. Mein Beispiel ist mit 3 ATtiny2313 aufgebaut.
Hier ein einfacher Bascom-Code für das Sendemodul:
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 9600
Config Portd.1 = Output
Dim A As Byte
Dim B As Byte
'Sendeport = PortD.1
Open "COMD.1:19200,8,n,1" For Output As Byte
Blinki:
A = A + 2
B = B + 1
Select Case A
Case Is < 120
Printbin 11
Case Is > 121
Printbin 12
End Select
Select Case B
Case Is < 50
Printbin 21
End Select
Printbin 0
'Dauerein
Printbin 22
Goto Blinki
'Printbin ?? spricht in den Empfänger-Tinys der Adresse und den Ausgangsport.
'z.B. Printbin 11 = Tiny 1 und Port1 (welcher im Empfänger festgelegt ist).
'Logik: 11 = Empfänger 1 und Port?.1
' 12 = Empfänger 1 und Port?.2
' 13 = Empfänger 1 und Port?.3
' 21 = Empfänger 2 und Port?.1
' 22 = Empfänger 2 und Port?.2
' usw.
Hier der Bascom-Code für den 1. Empfänger:
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 9600
Config Portb = Output
Config Portd = Input
Portd.0 = 1
'Achtung! A xin
Dim Axin As Byte
'Empfangsport =PortD.0
Open "COMD.0:19200,8,n,1" For Input As Byte
Portb = 0
Blinki:
Inputbin Axin
'Empfänger 1
If Axin = 11 Then
Portb.0 = 1
End If
If Axin = 12 Then
Portb.2 = 1
End If
'Ports auf 0 setzen
If Axin = 0 Then
Portb.0 = 0
Portb.2 = 0
End If
Goto Blinki
Hier der Bascom-Code für den 2. Empfänger:
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 9600
Config Portb = Output
Config Portd = Input
Portd.0 = 1
'Achtung! B xin
Dim Bxin As Byte
'Empfangsport =PortD.0
Open "COMD.0:19200,8,n,1" For Input As Byte
Portb = 0
Blinki:
Inputbin Bxin
'Empfänger 2
If Bxin = 21 Then
Portb.0 = 1
End If
If Bxin = 22 Then
Portb.2 = 1
End If
'Ports auf 0 setzen
If Bxin = 0 Then
Portb.0 = 0
Portb.2 = 0
End If
Goto Blinki