Witam,
na początku zaznaczam, że przed zamieszczeniem tego tematu, zapoznałem się z treściami z forum dotyczącymi tego zagadnienia i po ich przetestowaniu problem nie został rozwiązany.
Na główny problem składają się 2 zagadnienia.
1. na wyświetlaczu generowane są litery "p" choć ich tam nie powinno być.
2. temperatura sczytana z czujnika DS1820 wynosi 0*C choć w pokoju temperatura wynosi 23*C.
Zamieszam kod programu w BASCOMIE:
Uprzedzając pytania, które często się pojawiają:
-Program został poprawnie wgrany i zweryfikowany.
-LCD nie ma zimnych lutów i działa z innymi programami.
-Na zasilaniu Atmegi8 znajduje się kondensator 4,7uF i 100nF.
-Do pinu resetu przyłożone jest napięcie poprzez rezystor 10kΩ.
-Rezystor podciągający do magistrali 1wire ma wartość 4,7kΩ.
-Wszystkie kable użyte przy konstrukcji układu stykają.
-Kwarc przy procesorze ma wartość 8MHz i akompaniują mu 2 kondensatory 22pF.
-Atmega8 użyta przy tym projekcie działa z innym softem w innych układach.
-Parametry zasilacza: 5V 0,5A.
Proszę o pomoc w rozwiązaniu problemu i wskazaniu błędów w kodzie.
Pozdrawiam Dbraven
na początku zaznaczam, że przed zamieszczeniem tego tematu, zapoznałem się z treściami z forum dotyczącymi tego zagadnienia i po ich przetestowaniu problem nie został rozwiązany.
Na główny problem składają się 2 zagadnienia.
1. na wyświetlaczu generowane są litery "p" choć ich tam nie powinno być.
2. temperatura sczytana z czujnika DS1820 wynosi 0*C choć w pokoju temperatura wynosi 23*C.
Zamieszam kod programu w BASCOMIE:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
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
Config 1wire = Portb.0
Dim Temp(2) As Byte
Declare Sub Od
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Do
Cursor Off
Locate 1 , 1
Lcd "TERMOMETR"
Call Od
If Temp(2) > 0 Then
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd "TEMP: -" ; Temp(1) ; Chr(0) ; "C"
Else
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd "TEMP: " ; Temp(1) ; Chr(0) ; "C"
End If
Wait 1
Loop
End
Sub Od
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
Temp(1) = 1wread(2)
1wreset
If Temp(2) > 0 Then
Temp(1) = 256 - Temp(1)
End If
Temp(1) = Temp(1) / 2
End Sub
Uprzedzając pytania, które często się pojawiają:
-Program został poprawnie wgrany i zweryfikowany.
-LCD nie ma zimnych lutów i działa z innymi programami.
-Na zasilaniu Atmegi8 znajduje się kondensator 4,7uF i 100nF.
-Do pinu resetu przyłożone jest napięcie poprzez rezystor 10kΩ.
-Rezystor podciągający do magistrali 1wire ma wartość 4,7kΩ.
-Wszystkie kable użyte przy konstrukcji układu stykają.
-Kwarc przy procesorze ma wartość 8MHz i akompaniują mu 2 kondensatory 22pF.
-Atmega8 użyta przy tym projekcie działa z innym softem w innych układach.
-Parametry zasilacza: 5V 0,5A.
![[ATMEGA8][BASCOM]Problem z termometrem ATmega8 + LCD 16x2 [ATMEGA8][BASCOM]Problem z termometrem ATmega8 + LCD 16x2](https://obrazki.elektroda.pl/18_1260893918_thumb.jpg)
![[ATMEGA8][BASCOM]Problem z termometrem ATmega8 + LCD 16x2 [ATMEGA8][BASCOM]Problem z termometrem ATmega8 + LCD 16x2](https://obrazki.elektroda.pl/70_1260893918_thumb.jpg)
Proszę o pomoc w rozwiązaniu problemu i wskazaniu błędów w kodzie.
Pozdrawiam Dbraven