lcd termometar

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

lcd termometar

Post by niho »

Pozdrav. Potrebna mi je pomoć. Program koji sam radio prije par godinami je radio sasvim uredno no sada isti kod na istom čipu ne šljaka. Radim s djecom jednostavan termometar sa LCD displejem i ds18b20. Senzor je sigurno ispravan jer mi mjeri na drugim projektima dok ovdje kada ga priključim pokazuje 255°C a kada ga izvadim sa ploče pokazuje 0°C.

Code: Select all

$regfile = "attiny2313.dat"
$crystal = 1000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 =_ Portb.3 , E = Portb.5 , Rs = Portb.4

Config 1wire = Portd.1

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim predznak As String * 1
Dim T1 As Byte
Dim T2 As Byte
Dim I As Integer
Dim Sc(9) As Byte
Cls

Do
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Wait 1
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Byte0 = 1wread()
    Byte1 = 1wread()
    1wreset
   If Byte1 >= 248 Then
      Byte0 = &HFF - Byte0
      Byte1 = &HFF - Byte1
      predznak = "-"
   Else
      predznak = "+"
   End If
   T1 = Byte0 / 16
   T2 = Byte1 * 16
   T1 = T1 + T2
   Cls
   Locate 1 , 1
   Lcd "Temperatura je: "
   Locate 2 , 1
   Lcd predznak ; T1 ; " " ; Chr(0) ; "C"
Deflcdchar 0 , 232 , 244 , 232 , 224 , 224 , 224 , 224 , 224       
Wait 2
Loop
End
Hvala unaprijed.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1625
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: lcd rermometar

Post by WhiteHead »

Komšija, znam da je banalno, ali jesil' poll-upovao data pin senzora?.
Što se tiče koda za taj programski jezik sam potpuna neznalica i ne mogu ti pomoći.
Ali ako si to do sada radio logična sumnja ide na hardware.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd rermometar

Post by niho »

Da 4k7 pul-up ima. Isti dio koda koristim za komunikaciju i umjesto lcd koristim LEd 7-segmentne. Radi uredno.
User avatar
Black
Odlično uznapredovao
Odlično uznapredovao
Posts: 981
Joined: 17-12-2008, 15:44

Re: lcd termometar

Post by Black »

Kod iskreno ne razumijem ni za koji je mikrić, ali ono što ne vidim kad pošalješ zahtjev prema DS treba stavit delay (250-500 mS) kada on vraca informaciju. Inace gluposti vraca
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd termometar

Post by niho »

Kontroler je definisan

Code: Select all

$regfile = "attiny2313.dat"
a pauzu sam stavio

Code: Select all

 Wait 1
cijela sekunda.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: lcd termometar

Post by Kukinjos »

Evo sam napravio simulaciju u Protelu i to radi bez problema. FUSE bitovi na default High: 0xDF i Low: 0x64, Extended: 0xFF.
Attachments
DS18B20.rar
(20.02 KiB) Downloaded 382 times
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: lcd termometar

Post by Kukinjos »

Na poslijetku sam primjetio kako program ne pokazuje ispravno negativne temperature, krade jedan stupanj, jer se prilikom konverzije izgubi carry bit, pa treba dodati prije prikaza na LCD-u:

Code: Select all

   If Predznak = "-" Then T1 = T1 + 1
ili cijeli kod:

Code: Select all

$regfile = "attiny2313.dat"
$crystal = 1000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = _ Portb.3 , E = Portb.5 , Rs = Portb.4

Config 1wire = Portd.1

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Predznak As String * 1
Dim T1 As Byte
Dim T2 As Byte
Dim I As Integer
Dim Sc(9) As Byte
Cls

Do
   1wreset
   1wwrite &HCC
   1wwrite &H44
   Wait 1
   1wreset
   1wwrite &HCC
   1wwrite &HBE
   Byte0 = 1wread()
   Byte1 = 1wread()
   1wreset
   If Byte1 >= 248 Then
      Byte0 = &HFF - Byte0
      Byte1 = &HFF - Byte1
      Predznak = "-"
   Else
      Predznak = "+"
   End If
   T1 = Byte0 / 16
   T2 = Byte1 * 16
   T1 = T1 + T2
   If Predznak = "-" Then T1 = T1 + 1
   Cls
   Locate 1 , 1
   Lcd "Temperatura je: "
   Locate 2 , 1
   Lcd Predznak ; T1 ; " " ; Chr(0) ; "C"
   Deflcdchar 0 , 232 , 244 , 232 , 224 , 224 , 224 , 224 , 224
   Wait 2
Loop
End
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd termometar

Post by niho »

Hvala Kuki. Ma problem je što je sve u redu a ne radi. Sada umjesto -0, pokazuje -1. Ovaj dio koda za čitanje i konverziju mi rade u drugim projektima (LED displej, termometar sa dvije LED i termostati...) A ovdje ni naopako. Znam da je nekada radio, sa istim projektom smo išli na takmičenje. Fuse bitovi su standardni kako si i napisao ali neće pa neće. https://drive.google.com/open?id=0B3Lok ... GFaMm5WSnM
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: lcd termometar

Post by pedja089 »

Meni jos jedino pada na pamet da nije neki drugi DS u pitanju?
Da ne mislis da koristis DS18B20, a da je mozda DS1820 ili DS18S20?
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: lcd termometar

Post by bob4 »

Ovo kod mene funkcionira dobro; i manje je od 2k

Code: Select all

   Dim Temperatura As String * 6

   Dim Bd(9) As Byte
    Dim K As Integer , K1 As Integer , K2 As Integer ,Tmp as byte
   Cursor Off
   Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32

'--------------------------------------------------
Do
         1wwrite &HCC
         1wwrite &H44
            Waitms 250
               1wreset
         1wwrite &HCC
         1wwrite &HBE
   Bd(1) = 1wread(9)
         1wreset
         Tmp = Bd(1) And 1
         If Tmp = 1 Then
         Decr Bd(1)
         End If

   K = Makeint(bd(1) , Bd(2))
   K = K * 50
   K = K - 25
   K1 = Bd(8) - Bd(7)
   K1 = K1 * 100
   K1 = K1 / Bd(8)
   K = K + K1
   K = K / 10
   K1 = K
   K = K / 10
   K2 = K * 10
   K1 = K1 - K2
   K1 = Abs(k1)

    Cls
      Locate 1 , 1
        Lcd "Temperatura= " ; K ; "." ; K1 ; Chr(0) ; "C"

 Loop
Možeš izbaciti decimalu;

Code: Select all

   Dim Temperatura As String * 6

   Dim Bd(9) As Byte
    Dim K As Integer , K1 As Integer  ,Tmp as byte
   Cursor Off
   Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32

'--------------------------------------------------
Do
         1wwrite &HCC
         1wwrite &H44
            Waitms 250
               1wreset
         1wwrite &HCC
         1wwrite &HBE
   Bd(1) = 1wread(9)
         1wreset
         Tmp = Bd(1) And 1
         If Tmp = 1 Then
         Decr Bd(1)
         End If

   K = Makeint(bd(1) , Bd(2))
   K = K * 50
   K = K - 25
   K1 = Bd(8) - Bd(7)
   K1 = K1 * 100
   K1 = K1 / Bd(8)
   K = K + K1
   K = K / 10
   K1 = K
   K = K / 10


    Cls
      Locate 1 , 1
        Lcd "Temperatura= " ; K  ;  Chr(0) ; "C"

 Loop
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd termometar

Post by niho »

Hvala Bob4.
Ovaj kod mi daje izlaz 24,6°C bez obzira na temperaturu ili -1,2°C kada odspojim senzor.
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: lcd termometar

Post by bob4 »

Kod mene temperatura funkcionira, a kad izvadim DS pokazuje -1,3°C. Ja to probavam sa "m32a"
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd termometar

Post by niho »

Našao sam par originalnih Dalasovih senzora koji su sa parazitnim napajanjem i oni rade na kodu koji sam naveo. Našao sam i jedan standardni ds18b20 (nije P) i on radi. Zašto ovi kinezi (a imam ih 10-ak) neće iako uredno rade na ostalim projektima u kojima je dio koda za čitanje temperature potpuno isti, sam Bog za.
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: lcd termometar

Post by bob4 »

:?
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd termometar

Post by niho »

Danas stiglo još 5 termosenzora i ista stvar. Ne čitaju temperaturu. :? :(
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: lcd termometar

Post by bob4 »

sad ni meni nije više jasno više :azdaja:
tvoj soft je za DS18B20 ili DS18S20 ???? ili koje si senzore naručio :oops:
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: lcd termometar

Post by niho »

ds18b20
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: lcd termometar

Post by bob4 »

User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: lcd termometar

Post by bob4 »

ima još....

z.B. 85°C
B-Typ 0101 0101 0000
S-Typ 0000 1010 1010

oder 0,5°
B-Typ 0000 0000 1000
S-Typ 0000 0000 0001

na ovom forumu : https://www.mikrocontroller.net/topic/119146
Post Reply