Problem rozwiązałem w 50%. To znaczy dzięki podpowiedzią kolegów co mi brakowało żeby działał termometr, który pracuje bardzo dobrze ,dopisałem do programu woltomierz , który pracuje dobrze.
Do zamknięcia tematu pozostał jeszcze amperomierz , który mierzy spadek napięcia na boczniku sygnał wzmocniłem wzmacniaczem LM358.Nie wiem jak przeliczyć spadek napięcia na kod zrozumiały dla procesora I=U/R,gdzie R=0,10 Ohma oraz w dalszej kolejności policzyć moc.O ile to możliwe proszę o jakoś pomoc.
Kod:
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portb.1 , E = Portd.1 , Rs = Portd.0 'Komunikaqcja z LCD
Config Lcd = 16 * 2
Cls
Cursor Off
Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32 ' definicja znaki stopnia stopnia celcjusza
'****CONFIG****
Config Adc = Free , Prescaler = Auto , Reference = Avcc
'****KONIEC CONFIG****
'****CONFIG ZMIENNYCH****
Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5,
Dim Temp1 As Byte
Dim Wynik As Single
Dim Rezu As Integer
Dim Wolty As String * 4
'Deklaracja wszystkich zmiennych potrzebnych do pracy programu
'****PROGRAM GLOWNY****
Start Adc 'odpalamy ADC
Config 1wire = Portd.5 '0,1,2 NOP 3,4,5,6,7 works good ON MY Equipment
Do
1wreset 'reset
1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
1wwrite &H44 'dokonaj konwersji
Waitms 750 'przeczekaj czas konwersji
Set Portb.2 'gasimy diodę
Reset Portb.2 'teraz zapalamy diodę
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
T1 = T * 0.0625 'dokładność dla pomiaru 12 bit, wynik wpisz do zmiennej Temp1
Napis = Fusing(t1 , "#.#") 'format wyświetlania x.x
Rezu = Getadc(4)
Rezu = Getadc(4)
Wynik = Rezu / 40
Wolty = Fusing(wynik , "#.##")
Cls : Cursor Off : Lcd "Nap" ; Spc(3) ; Wolty ; "V"
Lowerline
Lcd "Temp: " ; Napis ; " " ; Chr(1) ; "C" 'wy?wietl wynik ze zmiennej Single
Waitms 300
Loop : End
Witam Andrzej 1947
Napisałem program "Termostat" Bascom Atmega 8
Korzystając z książki Mikrokontrolery dla początkujących Piotr Górecki i oczywiście korzystając podpowiedzi kolegów.
Program działa poprawnie, ale tylko z ustawioną temperaturą w programie.
Nie potrafię rozwiązać problemu z ustawianiem temperatury za pomocą przycisków .O ile to możliwe proszę o jakoś pomoc.
w załączeniu kod programu.Temperatury ustawione niskie w celu kontroli działania układu.
$regfile = "m8adef.dat"
$crystal = 8000000
Config Pinb.0 = Input 'linia PB0 jako wejście
Config Pinb.1 = Input 'linia PB1 jako wejście
Config Portd.7 = Output
Config Portc.3 = Output
Config Portc.5 = Output
Config 1wire = Portd.5
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.6 , E = Portd.1 , Rs = Portd.0
Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32 ' definicja znaki stopnia stopnia celcjusza
Config Lcd = 16 * 2
Cls
'--------------------DEKLARACJA ZMIENNYCH--------------------------------------'
Dim Odczyt(2) As Byte , T1 As Single , T As Integer , Napis As String * 5
S1 Alias Pinb.0 'przypisanie nazwie Pinb.0 nazwy S1
S2 Alias Pinb.1 'przypisanie nazwie Pinb.1 nazwy S2
Set Portb.0 'dołączenie do linii PB0 rezystora podciągającego
Set Portb.1 'dołączenie do linii PB1 rezystora podciągającego
'------------------------KONFIGURACJA LCD--------------------------------------'
Cls
Cursor Off
Lcd ; Spc(3) ; "TERMOSTAT" 'wyświetlanie ekranu początkowego
Lowerline
Lcd ; "Atmega 8 LCD2x16" 'wyświetlanie ekranu początkowego
Wait 3
Cls
'------------------------POCZĄTEK PĘTLI GŁÓWNEJ--------------------------------'
Do
1wreset 'reset
1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
1wwrite &H44 'dokonaj konwersji
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
T1 = T * 0.0625 'dokładność dla pomiaru 12 bit, wynik wpisz do zmiennej Temp1
Napis = Fusing(t1 , "#.#") 'format wyświetlania x.x
Waitms 750
If T1 >= 26 And T1 <= 28 Then 'sygnalizacja zał: wentylatora dioda D1
Portc.3 = 1
Else
Reset Portc.3
End If
If T1 >= 26 And T1 <= 28 Then 'Załącz wentylator
Portd.7 = 1
Else
Reset Portd.7
End If
Home Upper
Lcd "odczyt z DS18B20 "
Lowerline
Lcd "Odcz" ; Spc(1) ; "Temp:" ; Napis ; Chr(1) ; "C" ; 'wyświetlanie pomierzonych wartości
Waitms 100
Loop
End
'----------------------------KONIEC PĘTLI GŁÓWNEJ-----