Witam!
Próbuje od tygodnia skomunikować dwa attiny2313 aby jeden przesyłał pomiar temperatury do drugiego. Proszę o sprawdzenie mojego kodu bo już nie mam pomysłów. Na odbiorniku nie mam żadnego odczytu. Połączenie elektryczne od txd do rxd OK.
Nadajnik:
$regfile = "attiny2313.dat"
$crystal = 8000000
$baud = 2400
Config Serialout = Buffered , Size = 20
Enable Interrupts
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portb.0 , E = Portd.5 , Rs = Portd.6
Config 1wire = Portb.7
'Zmienne
Dim Temperatura As Byte
Dim I2 As Byte
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32
Cursor Off
Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Do
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
Temperatura = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
Temperatura = Temperatura / 2
Print temperatura ; Chr(13) ;
Locate 1 , 1
Lcd "Temp1: " ; Temperatura ; Chr(0) ;
I2 = I2 / 2
Locate 2 , 1
Lcd "Temp2: " ; I2 ; Chr(0) ;
Loop
End
Odbiornik:
$regfile = "attiny2313.dat"
$crystal = 8000000
$baud = 2400
$hwstack = 32
$swstack = 8
$framesize = 24
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portb.0 , E = Portd.5 , Rs = Portd.6
Config Serialin = Buffered , Size = 20 , Bytematch = 13
Enable Interrupts
Dim Flaga As Byte
Dim Temperatura As Byte
Dim Temperatura2 As Byte
'Przyciski
Config Pinb.1 = Input
Config Pinb.2 = Input
Set Pinb.1
Set Pinb.2
Reset Pinb.3
Up_sw Alias Pinb.1
Down_sw Alias Pinb.2
Dim T_alarm As Byte
Dim T_alarm_e As Byte
'PROGRAM GŁÓWNY
Readeeprom T_alarm_e , 3
T_alarm = T_alarm_e
Cursor Off
Do
If Up_sw = 0 And Down_sw = 0 Then Gosub Ustawienia
If Flaga = 1 Then 'jeżeli flaga ustawiona na 1 to odbieramy dane z bufora
Input Temperatura
Reset Flaga 'ustawiamy flagę na 0
Gosub Wyswietlanie
End If
Loop
End
Wyswietlanie:
If Temperatura <> Temperatura2 Then 'jeżeli temperatura się zmieni to odświerzamy wyświetlacz , zapobiega to mruganiu
Temperatura2 = Temperatura
Cls
Lcd "Temp: " ; Temperatura ; "C" 'wyświetl wynik
If Temperatura < T_alarm Then Gosub Alarm
End If
Return
Serial0charmatch:
Set Flaga 'Jeżeli coś nam wpadnie do bufora to ustawia flagę na 1
Return
Ustawienia:
Cls
Lcd "Konfiguracja"
Do
Locate 1 , 1
Lcd "Temp. alarmu"
Locate 2 , 1
Lcd "Temp=" ; T_alarm ; Chr(0) ; "C"
If Up_sw = 0 Then Incr T_alarm
Waitms 50
If T_alarm > 50 Then T_alarm = 50
If Down_sw = 0 Then Decr T_alarm
Waitms 50
If T_alarm < 1 Then T_alarm = 1
Loop Until Up_sw = 0 And Down_sw = 0
T_alarm_e = T_alarm
Writeeeprom T_alarm_e , 3
Cls
Locate 1 , 1
Lcd "Zapisano"
Wait 1
Cls
Return
Alarm:
Do
Cls
Lcd "Alarm temp."
Set Pinb.3
Wait 1
Reset Pinb.3
Wait 1
Loop Until Up_sw = 0
Cls
Return
Z góry dzięki za pomoc!!!
Próbuje od tygodnia skomunikować dwa attiny2313 aby jeden przesyłał pomiar temperatury do drugiego. Proszę o sprawdzenie mojego kodu bo już nie mam pomysłów. Na odbiorniku nie mam żadnego odczytu. Połączenie elektryczne od txd do rxd OK.
Nadajnik:
$regfile = "attiny2313.dat"
$crystal = 8000000
$baud = 2400
Config Serialout = Buffered , Size = 20
Enable Interrupts
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portb.0 , E = Portd.5 , Rs = Portd.6
Config 1wire = Portb.7
'Zmienne
Dim Temperatura As Byte
Dim I2 As Byte
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32
Cursor Off
Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Do
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
Temperatura = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
Temperatura = Temperatura / 2
Print temperatura ; Chr(13) ;
Locate 1 , 1
Lcd "Temp1: " ; Temperatura ; Chr(0) ;
I2 = I2 / 2
Locate 2 , 1
Lcd "Temp2: " ; I2 ; Chr(0) ;
Loop
End
Odbiornik:
$regfile = "attiny2313.dat"
$crystal = 8000000
$baud = 2400
$hwstack = 32
$swstack = 8
$framesize = 24
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portb.0 , E = Portd.5 , Rs = Portd.6
Config Serialin = Buffered , Size = 20 , Bytematch = 13
Enable Interrupts
Dim Flaga As Byte
Dim Temperatura As Byte
Dim Temperatura2 As Byte
'Przyciski
Config Pinb.1 = Input
Config Pinb.2 = Input
Set Pinb.1
Set Pinb.2
Reset Pinb.3
Up_sw Alias Pinb.1
Down_sw Alias Pinb.2
Dim T_alarm As Byte
Dim T_alarm_e As Byte
'PROGRAM GŁÓWNY
Readeeprom T_alarm_e , 3
T_alarm = T_alarm_e
Cursor Off
Do
If Up_sw = 0 And Down_sw = 0 Then Gosub Ustawienia
If Flaga = 1 Then 'jeżeli flaga ustawiona na 1 to odbieramy dane z bufora
Input Temperatura
Reset Flaga 'ustawiamy flagę na 0
Gosub Wyswietlanie
End If
Loop
End
Wyswietlanie:
If Temperatura <> Temperatura2 Then 'jeżeli temperatura się zmieni to odświerzamy wyświetlacz , zapobiega to mruganiu
Temperatura2 = Temperatura
Cls
Lcd "Temp: " ; Temperatura ; "C" 'wyświetl wynik
If Temperatura < T_alarm Then Gosub Alarm
End If
Return
Serial0charmatch:
Set Flaga 'Jeżeli coś nam wpadnie do bufora to ustawia flagę na 1
Return
Ustawienia:
Cls
Lcd "Konfiguracja"
Do
Locate 1 , 1
Lcd "Temp. alarmu"
Locate 2 , 1
Lcd "Temp=" ; T_alarm ; Chr(0) ; "C"
If Up_sw = 0 Then Incr T_alarm
Waitms 50
If T_alarm > 50 Then T_alarm = 50
If Down_sw = 0 Then Decr T_alarm
Waitms 50
If T_alarm < 1 Then T_alarm = 1
Loop Until Up_sw = 0 And Down_sw = 0
T_alarm_e = T_alarm
Writeeeprom T_alarm_e , 3
Cls
Locate 1 , 1
Lcd "Zapisano"
Wait 1
Cls
Return
Alarm:
Do
Cls
Lcd "Alarm temp."
Set Pinb.3
Wait 1
Reset Pinb.3
Wait 1
Loop Until Up_sw = 0
Cls
Return
Z góry dzięki za pomoc!!!
