Sobni termostat sa AT89C2051

Projekti naših članova foruma koji su još uvijek u fazi izrade.

Moderators: pedja089, stojke369, [eDo], trax

mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Sobni termostat sa AT89C2051

Post by mojalovaa »

Pozdrav svima
Evo nakon nekog vremena se pocelo nesto malo i raditi , zelim da napravim sobni termostat sa 2 sonde DS1820 i prikazom temperature na 3x7 segmentnom digitu.
Shemu sam prilozio dolje.
Zahvaljujem se BOB4 na ponudjenoj pomoci.
Ja sam napisao sto sam znao na pocetku , a to je skoro nista , po mom misljenju ja bi sada trebao da postavim varijable , ali ne znam sada kako i sta ide , pa evo molim za savjet i za pomoc , i volio bi kada bi ste odmah napisali kako sta radite i zasto to ide te cemu sluzi kako bi mi koji ne znamo gotovo nista mogli da shvatimo kako to funkcionise.
Nisam bio zelio da ovaj projekat bude javni ali evo BOB4 me motivisao da to podjelim i sa drugima , svima ostalima unapred hvala.


'***********************
'Postavke konfiguracije
'***********************
'
$crystal = 12000000 '12MHz
$regfile = "89C2051.DAT"
Config 1wire = P3.7 ' Odabir porta za 1 wire komunikaciju sa DS1820
'
'***********************
Attachments
sobni termostat.rar
(24.51 KiB) Downloaded 386 times
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Evo nasao sam jedan program koji bi se veoma brzo mogao prilagoditi ovoj mojoj shemi , medjutim volio bi da mi netko objasni sta koja funkcija radi i cemu sluzi , ako nije problem , hvala svima unapred.

Evo kod programa , program je iz poljske pa tako da mi je jeos teze shvatiti sta koja funkcija radi.

'****************************
'Konfiguracija
'****************************
$crystal = 12000000 '12MHz
$regfile = "89C2051.DAT"

Config 1wire = P3.7

Config Timer0 = Timer , Gate = Internal , Mode = 2
On Timer0 Przerwanie0
Load Timer0 , 250
Enable Timer0
Start Timer0

Enable Interrupts
'****************************
'Varijable
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Tempa As Word
Dim Mux As Byte

Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
'****************************
'Pocetne vrednosti
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
'****************************
'Glavna petlja
'****************************
Do

If Zezw_wysw = 1 Then
Reset Zezw_wysw 'co 4ms
Wysw = Tempa

If Ur = 1 Then Gosub Przelicz
Gosub Wyswietl
End If

Loop
End
'****************************
'Ako ste zaustavili timer
'****************************
Przerwanie0:
Incr Co4ms
If Co4ms = 16 Then
Co4ms = 0
'*************************************** co 4ms
Set Zezw_wysw
Incr Co100ms
If Co100ms = 25 Then
Co100ms = 0
'*************************************** co 100 ms
'Usluga gumba zastava
Incr Co1s
If Co1s = 7 Then
Co1s = 0
'*************************************** co 1s
Pomiar_odczyt = Not Pomiar_odczyt

Disable Interrupts
1wreset

If Pomiar_odczyt = 1 Then
1wwrite &HCC
1wwrite &H44
Else
If Err = 0 Then

1wwrite &HCC
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():

Minus = Msb.7

Tempa = Msb * 256
Tempa = Tempa + Lsb


If Minus = 1 Then
Tempa = Not Tempa
Tempa = Tempa + 1
End If

Tempa = Tempa * 10 'temperatura *10
Tempa = Tempa / 16

If Ur = 0 Then Ur = 1

Else
Tempa = 10000 'Er wyswietli wyswietlacz potem
End If
End If

Enable Interrupts
'***************************************
End If
'***************************************
End If
'***************************************
End If

Return
'****************************
'Ostale naljepnice
'****************************
Przelicz:
If Wysw < 1000 Then
Wysw1 = Wysw Mod 10
Wysw = Wysw / 10
Wysw10 = Wysw Mod 10
Wysw = Wysw / 10
Wysw100 = Wysw Mod 10

If Wysw100 = 0 Then Wysw100 = 10 'wygaszenie zera wiodcego

Wysw1 = Lookup(wysw1 , Tabela)
Wysw10 = Lookup(wysw10 , Tabela2)
Wysw100 = Lookup(wysw100 , Tabela)

Else
Wysw1 = 175 'r
Wysw10 = 175 'r
Wysw100 = 134 'E
End If

Return

Wyswietl:
Incr Mux
If Mux = 3 Then Mux = 0
P3.7 = Not Minus

Select Case Mux
Case 0:
Set P3.0
P1 = Wysw100
Reset P3.2

Case 1:
Set P3.2
P1 = Wysw10
Reset P3.1

Case 2:
Set P3.1
P1 = Wysw1
Reset P3.0
End Select
Return

'Tabela za prikaz brojeva
Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak: 0 1 2 3 4 5 6 7 8 9 pusty

Tabela2:
Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak: 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. pusty
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

Na brzinu sam varijable preveo na hrvatski, nadam se da će ti sad program bit razumljiviji. Promijenio sam i portove kako bi odgovarali tvojoj shemi. Ima tu još par problema, ovo je samo pokazivanje temperature, ali nema termostatskog dijela, dalje na tvojoj shemi koristiš LED display-e s zajedničkom katodom, a PORT1.1 i PORT1.2 ne mogu davat struju već samo spajat prema masi, pa bi trebao ta dva porta spojit direktno na display, a prema Vcc spojit pullup otpore (ne u seriju). Treće nemaš prikaz negativne temperature, za to je poljak koristio PORT3.7 i valjda jednu LED, pa sam taj dio zakomentirao. Ima tu još nekih stvari koje bi se mogle elegantnije riješit, ali o tom po tom.
Evo kod, pretpostavljam da imaš hardware, pa provjeri imaš li pokazivanje.

Code: Select all

'****************************
'Konfiguracija
'****************************
$crystal = 12000000                                           ' 12MHz
$regfile = "89C2051.DAT"                                      ' Kontroler

Config 1wire = P3.7                                           ' 1Wire port
'-------------------------------------------------------------------------------
'****************************
'Postavljanje interrupta
'****************************
Config Timer0 = Timer , Gate = Internal , Mode = 2            ' Konfiguracija timera
Load Timer0 , 250                                             ' Početna vrijednost timera
On Timer0 T0int                                               ' Skok na interrupt podprogram
Enable Timer0                                                 ' Dopusti interrupt timera
Start Timer0                                                  ' Pokreni timer
Enable Interrupts                                             ' Globalno dopusti interrupte
'-------------------------------------------------------------------------------
'****************************
'Varijable
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Vrijednost As Word , Jedinice As Byte , Desetice As Byte , Stotice As Byte
Dim Temp As Word
Dim Mux As Byte

Dim Nova_temperatura As Bit
Dim Procitaj_senzor As Bit
Dim Minus As Bit
Dim Senzor_procitan As Bit
'-------------------------------------------------------------------------------
'****************************
'Pocetne vrednosti
'****************************
Reset Procitaj_senzor
Reset Senzor_procitan
Jedinice = 191
Desetice = 191
Stotice = 191
'-------------------------------------------------------------------------------
'****************************
'Glavna petlja
'****************************
Do

If Nova_temperatura = 1 Then
 Reset Nova_temperatura                                       'co 4ms
 Vrijednost = Temp

 If Senzor_procitan = 1 Then Gosub Pretvorba

 Gosub Prikaz
End If

Loop
End
'-------------------------------------------------------------------------------
'****************************
'TIMER0 INTERRUPT
'****************************
T0int:

 Incr Co4ms                                                   '*************************************** co 4ms
 If Co4ms = 16 Then
    Co4ms = 0
    Set Nova_temperatura
    Incr Co100ms                                              '*************************************** co 100 ms
    If Co100ms = 25 Then
       Co100ms = 0
              'Usluga gumba zastava
       Incr Co1s
       If Co1s = 7 Then
          Co1s = 0
          '*************************************** co 1s
          Procitaj_senzor = Not Procitaj_senzor

          Disable Interrupts
          1wreset

          If Procitaj_senzor = 1 Then
             1wwrite &HCC
             1wwrite &H44
          Else
             If Err = 0 Then

                1wwrite &HCC
                1wwrite &HBE
                Lsb = 1wread()
                Msb = 1wread()

                Minus = Msb.7

                Temp = Msb * 256
                Temp = Temp + Lsb


                If Minus = 1 Then
                   Temp = Not Temp
                   Temp = Temp + 1
                End If

                Temp = Temp * 10                              'temperatura *10
                Temp = Temp / 16

                If Senzor_procitan = 0 Then Senzor_procitan = 1

             Else
                Temp = 10000                                  'Prikazuje se greška - Err
             End If
          End If

          Enable Interrupts
          '***************************************
       End If
       '***************************************
    End If
    '***************************************
 End If

Return
'-------------------------------------------------------------------------------
'****************************
'PODPROGRAMI
'****************************

Pretvorba:
 If Vrijednost < 1000 Then
    Jedinice = Vrijednost Mod 10
    Vrijednost = Vrijednost / 10
    Desetice = Vrijednost Mod 10
    Vrijednost = Vrijednost / 10
    Stotice = Vrijednost Mod 10

    If Stotice = 0 Then Stotice = 10                          'gašenje nule na stoticama

    Jedinice = Lookup(jedinice , Tabela)
    Desetice = Lookup(desetice , Tabela2)
    Stotice = Lookup(stotice , Tabela)

 Else
    Stotice = 134                                             'E
    Desetice = 175                                            'r
    Jedinice = 175                                            'r
 End If

Return
'-------------------------------------------------------------------------------
Prikaz:
 Incr Mux
 If Mux = 3 Then Mux = 0
'P3.7 = Not Minus

 Select Case Mux
 Case 0:
 Reset P3.4
 P1 = Stotice
 Set P3.5

 Case 1:
 Reset P3.3
 P1 = Desetice
 Set P3.4

 Case 2:
 Reset P3.5
 P1 = Jedinice
 Set P3.3
 End Select
Return
'-------------------------------------------------------------------------------
'****************************
'Tabela za prikaz brojeva
'****************************

Tabela:
 Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'BROJ: 0     1     2     3     4     5     6     7     8     9   PRAZNO

Tabela2:
 Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'BROJ: 0.   1.   2.   3.   4.   5.   6.   7.   8.  9.  PRAZNO
EDIT:

Preporuka, pređi na AVR, ovo je ipak stari kontroler 8) .
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Hvala Kuki , vec mi je BOB4 rekao da ces mi to presloziti , znam da je samo prikaz temperature , ali sam trebao neku osnovu od koje bi krenuo da shvatim kako se to radi.
Sto se tice porta , BOB4 mi je ukazao na tu pogresku , to je kada covjek na brzinu ide nesto da sklepa pa ne razmislja , sada je to promjenjeno tako da su zamjenjeni portovi tipki i displeja .
Za negativni prikaz temperature sam planirao da mi prvo treptajucim sistemom pokaze minus pa onda temperaturu.
Hardver danas krece lagano na izradu jer sam morao da promjenim neke vodove na PCB pa cu odraditi probno jednu plocicu.

Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'BROJ: 0 1 2 3 4 5 6 7 8 9 PRAZNO

Tabela2:
Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'BROJ: 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. PRAZNO

Mozeli objasnjenje za ovaj dio , pretpostavljam da je jedna tabela za 1 a druga za drugi broj ili sta vec?

Kuki , hvala jos jednom.
Attachments
AT89C2051 termostat v2.rar
(43.47 KiB) Downloaded 368 times
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

Na portu 3 ti nedostaje jedan izlaz, PORT3.6, znači nećeš moći prikazat jedan od segmenata, recimo decimalnu točku, koju bi onda trebao fiksno uključit. Baš za nju je vezano i ono s tabelama, desetice se čitaju iz tabele 2, a stotice i jedinice iz tabele 1. Tabela 2 je identična prvoj, s tim da je kod nje uključena decimalna točka u prikaz.

Code: Select all

....
Jedinice = Lookup(jedinice , Tabela)
    Desetice = Lookup(desetice , Tabela2)
    Stotice = Lookup(stotice , Tabela)
....
code]
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Kod mene na shemi ako si gledao ni ne koristi se 3.6 port , ja za point ili tocku koristim port1.7
Tako da se kod mene tocka moze koristiti na bilo kojem digitu ili da uopste ne koristis ako je preciznost 1 stepen.
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Sobni termostat sa AT89C2051

Post by bob4 »

Točku staviš da stalno svijetli i riješen problem. I onda možeš koristiti cijeli port 3 (ostaje ti 7 pinova)
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

ostavit cu ovako da se moze koristiti i za druge projekte.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

Dobro, onda možeš točku koristit kao fiksnu, neka uvijek gori. Shemu ne trebaš mijenjat, samo umjesto otpora R6 i R7 stavi most (briku), a te otpore prebaci na +5V kao pull up za ova dva pina, nadam se da razumiješ. Napravio sam previd, poljak je radio s LED displayima sa zajedničkom anodom, pa bi tabela trebale izgledat invertirane:

Code: Select all

Tabela:
 Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111 , 0
'BROJ: 0   1    2    3     4    5     6    7    8     9    PRAZNO
Tabelu 2 možeš obrisat i promijenit desetice da ih čita iz iste tabele. U nastavku su promjenjena slova za Err

Code: Select all

....
    Jedinice = Lookup(jedinice , Tabela)
    Desetice = Lookup(desetice , Tabela)
    Stotice = Lookup(stotice , Tabela)

 Else
    Stotice = 121                                            'E
    Desetice = 16                                            'r
    Jedinice = 16                                            'r
....
EDIT:
sad tek vidim da ste se vas dvojica raspisala :lol:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Kuki , ocito nisi pogledao novu shemu V2
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

Sa shemom V2 ćeš zakomplicirat software, jer podatak iz tabele sad moraš podijelit na dva porta, što je potpuno nepraktično. Najprije će ti zbog ove komplikacije narast kod u memoriji, a ovaj kontroler baš ne obiluje s njome, dalje ostaje problem u hardware-u sa H signalom, koji je kod ovog kontrolera jako slab, tj. jedino ovisi o internim pullup otporima, zato ti predlažem promijeniti shemu na nešto ovako:
AT89C2051 termostat v3.rar
(50.83 KiB) Downloaded 339 times
Oprostit ćeš mi, ali sam morao malo uredit izgled :roll: . Ovdje sam stavio sve otpore kao pullup i to bi trebalo radit. Shema se nije puno izmijenila u odnosu na V.1.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Dali netko ima iskustva sa izradom plocica foto postupkom , desava mi se da mi razvijac nece da razvije ili veoma sporo razvija foto lak ,do sada sam imao 7 grama na litru vode , sada je 14 i opet isto.
Razvijac je u granulama kao umjetno gnojivo , star je oko 9 mjeseci , svaki projekat razvijam novi razvijac.
Foto lak je isto star 9 mjeseci i do prije 1 mjesec sam sasvim normalno razvijao a sada me vec to zeza nekoliko dana i ne mogu da skontam sta je problem.

Kuki ne mogu da otvorim ovu shemu
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

Eagle 6.5.0.
AT89C2051 termostat v3.pdf.rar
(20.76 KiB) Downloaded 337 times
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Mogao sam i tako da odradim
Sve u svemu ovo mi je i tako da se ucim pa mi nije toliko bitno ali evo , posto sada vec imam gotovu plocicu ajde da pokusam ovako kao verzija 2 , i tako mi je cilj da se naucim , mislim da to tebi nece predstavljati neki veci problem jer vidim da znas .
El znas kako kazu , he..s posao ako ga ne radis bar 2 puta. :lol: :oops:

evo to sam sada potvrdio , sjebo sam i plocicu sada , malo prejak hidrogen
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

E sada ce definitivno ove dve verzije da otpisem i 3 da napravim sve po PS.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

Ne radi ništa ako misliš uzimat 7-segmentne displeje od Boba, njegovi su sa zajedničkom anodom, tako da ti ovo ne igra, trebaš opet promijenit shemu, a onda mogu svi segmenti ići na PORT1, ali tranzistore trebaš stavit PNP i gurat napon na anode. :ohno: :ohno:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Sobni termostat sa AT89C2051

Post by bob4 »

Ne buni čovjeka :azdaja: ako hoće katodu :lol: (možda ima neke skrivene misli) spremio sam ja za njega nekoliko komada. :wink:
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Sobni termostat sa AT89C2051

Post by Kukinjos »

:lol: nemaš ti toga dovoljno, kad padne proizvodnja, a za ove, s zajedničkom anodom, znam da su nepresušni :)

U prilogu shema:
AT89C2051 termostat v4.rar
(70.77 KiB) Downloaded 340 times
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

:ohno: :azdaja: :azdaja: : :azdaja: :azdaja: :azdaja: :azdaja: :azdaja: :azdaja:
4 verzije u jednom danu , puffffffffffff :?:
mojalovaa
Napredujem
Napredujem
Posts: 135
Joined: 29-03-2013, 19:28

Re: Sobni termostat sa AT89C2051

Post by mojalovaa »

Evo napokon smo se ja , bob 4 i kukinjos dogovorili o verziji ovog termostata , bit ce opet revizija verzije V3 , tako da sada ide definitivno ova shema koju sada postavim.
Sada je na redu izrada protoipa i izrada programa , bod 4 i kukinjos pripremite se jer cu vas dosadjivati dok ovo ne proradi , ujedno vam se i zahvaljujem na pomoci.
Attachments
AT89C2051 termostatV3.rar
(43.52 KiB) Downloaded 349 times
Post Reply