Witam
Szykuje do swojego projektu transmisję po RS między dwoma mikrokontrolerami
Udało mi się już coś uruchomić ale chciałbym się upewnić czy wszystko robię ok
Nadawanie zrobiłem tak:
Następnie mam dwie wersję odbioru i nie wiem która będzie lepsza
PIERWSZA
DRUGA
Która jest poprawniejsza politycznie
?
Szykuje do swojego projektu transmisję po RS między dwoma mikrokontrolerami
Udało mi się już coś uruchomić ale chciałbym się upewnić czy wszystko robię ok
Nadawanie zrobiłem tak:
'projekt regulatora temperatury
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 2400
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
'Nie korzystam z ADC więc Db7 = portc.0
Config 1wire = Portb.0
Dim Odczyt(2) As Byte , T As Integer , Temperatura As Single , Temperatura2 As Single
Deflcdchar 1 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
Deflcdchar 2 , 12 , 4 , 6 , 4 , 12 , 4 , 14 , 32 ' replace ? with number (0-7)
Config Serialin = Buffered , Size = 20
Config Serialout = Buffered , Size = 20
Enable Interrupts
Do
Gosub Pomiar
Gosub Wyswietlanie
Loop
End
Pomiar:
1wreset 'reset
1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
1wwrite &H44 'dokonaj
Waitms 750 'przeczekaj czas konwersji
1wreset 'reset
1wwrite &HCC 'rozkaz adresowy SKIP ROM
1wwrite &HBE 'rozkaz funkcyjny - polecenie odczytu DS18x20
Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
T = Odczyt(2) 'przepisz starszy bajt do zmiennej typu Integer
Shift T , Left , 8 'przesuń ten bajt w lewo na wyższe pozycje
T = T + Odczyt(1) 'przepisz - dodaj młodszy bajt
Temperatura = T / 2 'wyraź w stopniach Celsjusza, wynik wpisz do zmiennej Single
Return
Wyswietlanie:
If Temperatura <> Temperatura2 Then
Temperatura2 = Temperatura
Print Temperatura ; Chr(13) ; 'TUTAJ WYSYŁAM ZMIENNĄ PO RS232
Cls
Locate 1 , 1 : Lcd "Temp="
Locate 1 , 6 : Lcd Temperatura ; Chr(1) ; "C" 'wyświetl wynik ze zmiennej Single
Cursor Off
End If
Return
Następnie mam dwie wersję odbioru i nie wiem która będzie lepsza
PIERWSZA
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 2400
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Enable Interrupts
Enable Urxc
On Urxc Odczyt_rs232
Dim A As Byte
Dim Temperatura As Single
Do
Cls
Lcd "pusta pentla"
Wait 1
Loop
End
Odczyt_rs232:
Input Temperatura
Cls
Lcd "temp=" ; Temperatura
Wait 1
Return
DRUGA
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 2400
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
'Nie korzystam z ADC więc Db7 = portc.0
Config Serialout = Buffered , Size = 20
Config Serialin = Buffered , Size = 20
Enable Interrupts
Dim A As Byte
Dim Temperatura As Single
Do
A = Ischarwaiting()
If A = 1 Then
Gosub Odczyt_rs232
Else
Cls
Lcd "Pusta pentla"
Wait 1
End If
Loop
End
Odczyt_rs232:
Input Temperatura
Cls
Lcd "temp=" ; Temperatura
Wait 1
Return
Która jest poprawniejsza politycznie