Witam
Panowie mam problem mianowicie z komunikacją UART 2 AVR .Jeden z nich to Atmega16(odbiornik) a drugi Atmega328(Nadajnik) i tak:
Nadajnik wysyła 2 zmienne do odbiornika na którym jest wyświetlana wartość na LCD i wszystko działa poprawnie ale zdarza się tak że zmienne lubią zamienić się miejscami tzn, "Znak" dostaje wartość "Znak_1" i odwrotnie. Najczęściej dzieje się to podczas resetu odbiornika lecz zdążyło się tak ze po paru godz. pracy też zamieniły się miejscami. To jeden problem, a drugi to w jaki sposób wykonać transmisje 2kierunkową tzn. jeżeli w odbiorniku zostanie np. wciśnięciu przycisk to w nadajniku zapali się LED.
'Nadajnik
$regfile = "m328def.dat"
$crystal = 16000000
$baud = 9600
Dim Znak As Byte
Dim Znak_1 As Byte
Dim Led_state As Byte
Znak_1 = 193
Config Portb.0 = Output
Led Alias Portb.0
'Config Printbin = Extended
Do
Waitms 100
Incr Znak
If Znak >= 100 Then
Znak = 0
Incr Znak_1
End If
'If Led_state = 0 Then Led = 1
'If Led_state = 1 Then Led = 0
'Inputbin Led_state
Gosub Wysli
Loop
End
Wysli:
Printbin Znak_1 ; Znak
'Inputbin Led_state
Return
'Odbiornik
$regfile = "m16adef.dat"
$crystal = 16000000
$baud = 9600
Config Printbin = Extended
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Cursor Off
Cls
Dim Znak As Byte
Dim Znak_1 As Byte
Dim Led_on As Byte
Do
'Znak = Inkey()
'Znak_1 = Inkey()
Inputbin Znak , Znak_1
'Printbin Led_on
Locate 1 , 2
Lcd " " ; Znak ; " "
Locate 2 , 2
Lcd " " ; Znak_1 ; " "
If Znak = 20 Then
Led_on = 1
End If
If Znak = 70 Then
Led_on = 0
End If
Loop
End
Panowie mam problem mianowicie z komunikacją UART 2 AVR .Jeden z nich to Atmega16(odbiornik) a drugi Atmega328(Nadajnik) i tak:
Nadajnik wysyła 2 zmienne do odbiornika na którym jest wyświetlana wartość na LCD i wszystko działa poprawnie ale zdarza się tak że zmienne lubią zamienić się miejscami tzn, "Znak" dostaje wartość "Znak_1" i odwrotnie. Najczęściej dzieje się to podczas resetu odbiornika lecz zdążyło się tak ze po paru godz. pracy też zamieniły się miejscami. To jeden problem, a drugi to w jaki sposób wykonać transmisje 2kierunkową tzn. jeżeli w odbiorniku zostanie np. wciśnięciu przycisk to w nadajniku zapali się LED.
'Nadajnik
$regfile = "m328def.dat"
$crystal = 16000000
$baud = 9600
Dim Znak As Byte
Dim Znak_1 As Byte
Dim Led_state As Byte
Znak_1 = 193
Config Portb.0 = Output
Led Alias Portb.0
'Config Printbin = Extended
Do
Waitms 100
Incr Znak
If Znak >= 100 Then
Znak = 0
Incr Znak_1
End If
'If Led_state = 0 Then Led = 1
'If Led_state = 1 Then Led = 0
'Inputbin Led_state
Gosub Wysli
Loop
End
Wysli:
Printbin Znak_1 ; Znak
'Inputbin Led_state
Return
'Odbiornik
$regfile = "m16adef.dat"
$crystal = 16000000
$baud = 9600
Config Printbin = Extended
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Cursor Off
Cls
Dim Znak As Byte
Dim Znak_1 As Byte
Dim Led_on As Byte
Do
'Znak = Inkey()
'Znak_1 = Inkey()
Inputbin Znak , Znak_1
'Printbin Led_on
Locate 1 , 2
Lcd " " ; Znak ; " "
Locate 2 , 2
Lcd " " ; Znak_1 ; " "
If Znak = 20 Then
Led_on = 1
End If
If Znak = 70 Then
Led_on = 0
End If
Loop
End