DS 1820 hőmérő élesztés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Guapo
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2007. december 6. csütörtök, 7:00

Hozzászólás Szerző: Guapo »

Az lehet, hogy hülye ötlet, de elég sok mindent megpróbáltam, raktam ide, raktam oda a buszon, a kondi sem segített.

Ha majd lesz egy másik sorozat akkor folytatom. Az már látszik, hogy a kód nem fér be a tiny2313-ba, tehát feljebb kell lépnem.
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Hozzászólás Szerző: Bence »

Sziasztok!

Egy hőmérőt szeretnék csinálni, ami a hőmérsékletet 4 db 7 szegmenses kijelzőn jelezné ki! (pl.: -5.5 vagy 21.0 a "C" betű nem kell mögé) Holnap vennék alkatrészeket (ATTINY2313, DS 1820, kijelzők stb...), az áramkör holnaputánra kéne. Lécci segítsetek a programban!!!

Bence
Bence
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Hol akadtál el?

A Tiny2313 lehet hogy kevés lesz hozzá.... A 2k hamar megtelik. Én inkább Mega8-as chipre szavaznék. A Demo 4k korlátjába sztem a program még belefér....


Prg főbb részei, ezek működjenek külön:
- 7szegmenses kijelző multiplex meghajtása (kell valami ami multiplexként kapcsolja, pl. tranzisztor (én tuti ULN2803 vagy ULN2003 tranzisztormezőt raknék be.). Fontos, h közös anód vagy közös katódos lenne... Rajzold le és megérted miért.
- DS1820 kiolvasása (vigyázz, más a DS18B20 és a DS1820!)
- a kijelzőn hogyan váltod hogy melyiket mutassa?

A részfeladatokkal kezdj, mert különben fejreállsz.
Én beterveznék egy sorosportot is, debugra tuti jó. Látod, hogy mire mit reagálnak az eszközök.... (Max232 + 4x100 nF(vagy 4x1uF) kondi+csatlakozó a PC fele - DSUB9 kábel))
És van a PC fele egy kommunikációs eszközöd (pl. mért/vett adat visszaírása, helyi kis menüből is változtatgathatsz, h mit akarsz látni).
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

7szegmens kezelés alapjai:


1 szegmens esetén:
http://www.zaki66.blogfa.com/post-24.aspx

Multiplex alapok, 2 szegmens 8051+bascom
http://www.mcselec.com/index.php?option ... &Itemid=57

4 szegmensre bascom:
http://electronic-projects.blogfa.com/post-15.aspx


Az olvasási sorrend fontos, így érthető meg a működés!


DS1820:
2 db DS1820 kiolvasása (8051, bascom):
http://www.mcselec.com/index.php?option ... &Itemid=57

2 db DS1820 bascom AVR (8535)
http://www.mcselec.com/index.php?option ... &Itemid=57


Illetve a DS1820 és a DS18B20 adatlap legyen kéznél!
Hooligan01

Hozzászólás Szerző: Hooligan01 »

Bence!

Itt egy működö példa, int alapokon. Valószinüleg itt-ott kicsit át kell szabni, de kiindulásnak megteszi.

Ha nem túl nagy áramfelvételű/nyitófeszültségű kijelzőket használsz, nyugodtan rakhatod a kontrollerre egyből, nem kell semmi bűvésztrükk....
Az AVR-ek mindkét irányban tudnak áramot hajtani, és ~15mA ált. simán elég egy átlag kijelző digitáramának. (tapasztalat)

4 digt kicsit kevéske az előjeles kijelzéshez, főleg ha -9.x° alatt is szeretnél kijelezni.. :D Majd megoldod.

A kód 27%-ra fordul le, simán marad hely a hőmérő kezelésére.
A többi rád van bizva! :D

Kód: Egész kijelölése

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

'=================================================================
'========================== Timer0 Konfig ==========================
'=================================================================
Config Timer0 = Timer , Prescale = 8
On Timer0 Intsrv

Enable Interrupts
Enable Timer0

'=================================================================
'========================== Portbeállitás ========================
'=================================================================

Port Alias Portb                                             ' Egy portra vannak a szegmensek rendezve, 0-7 , A-DP
' A = pinb.0, B = pinb.1, stb...
Config Portb = Output
Dp Alias Portb.7                                            ' DP - tizedespont

Dig3 Alias Portd.5                                          ' Digitmeghajtás - MSB
Dig2 Alias Portd.4
Dig1 Alias Portd.3
Dig0 Alias Portd.2                                          ' Digitmeghajtás - LSB


Config Pind.5 = Output                                      ' Portkonfig - kimenet
Config Pind.4 = Output
Config Pind.3 = Output
Config Pind.2 = Output

'=================================================================
'============================ Változók ===========================
'=================================================================
Dim Sz As Byte                                              ' Megszakitás számlálója
Sz = 1
Dim Int_cnt As Byte                                         ' Szintén....

Dim Temp_hi As Byte                                         ' Felső két digit értéke
Dim Temp_lo As Byte                                         ' Alsó két digit értéke

Dim D0 As Byte                                              ' LSB
Dim D1 As Byte
Dim D2 As Byte
Dim D3 As Byte                                              ' MSB
'=================================================================
'============================ Főprogram ==========================
'=================================================================

Do
' ide kerül a saját programod....
Loop

'=================================================================
'======================== Timer0 Megszakitás =======================
'=================================================================
Intsrv:
Incr Int_cnt

If Int_cnt = 5 Then                                         ' int időzités finombeállitása....
   Int_cnt = 0
   Goto Int_kilep
End If

Incr Sz
If Sz = 5 Then Sz = 1



Select Case Sz

   Case 1 :
            D3 = Temp_hi \ 10
            If D3 = 0 Then D3 = 10                          ' nullakioltás
            Port = Lookup(d3 , 7seg)
            Reset Dig3
            Set Dig0
            Set Dig1
            Set Dig2
            Set Dp

'---------------------------------------
   Case 2 :
            D2 = Temp_hi Mod 10                             ' osztás maradékkal
            Port = Lookup(d2 , 7seg)
            Reset Dig2
            Set Dig0
            Set Dig1
            Set Dig3
            Reset Dp                                        ' ide kerül a tizedespont. vagy ahova jólesik
'---------------------------------------
   Case 3 :
            D1 = Temp_lo \ 10
            Port = Lookup(d1 , 7seg)
            Reset Dig1
            Set Dig0
            Set Dig2
            Set Dig3
            Set Dp
'---------------------------------------
   Case 4 :
            D0 = Temp_lo Mod 10                             ' osztás maradékkal
            Port = Lookup(d0 , 7seg)
            Reset Dig0
            Set Dig1
            Set Dig2
            Set Dig3
            Set Dp

End Select

Int_kilep:

Return
'=================================================================
'=============== Közös katódos kijelző táblája ===================
'=================================================================

7seg:
Data &B00111111                                             ' 0
Data &B00000110                                             ' 1
Data &B01011011                                             ' 2
Data &B01001111                                             ' 3
Data &B01100110                                             ' 4
Data &B01101101                                             ' 5
Data &B01111101                                             ' 6
Data &B00000111                                             ' 7
Data &B01111111                                             ' 8
Data &B01101111                                             ' 9
Data &B00000000                                             ' üres

Hooligan01

Hozzászólás Szerző: Hooligan01 »

bocs benéztem, már nem akartam szerkeszteni: ha közös katódos, akkor az interruptban a megfelelő helyen a DP set, és nem reset.
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Hozzászólás Szerző: Bence »

Hello!

Én a kijelzőt így gondoltam:
Kép (Az első helyen - vagy semmi 2-3-on egész szám 4.-en meg a tized)
Autóba kéne a hőmérő, és még hőmérővel nem foglalkoztam soha. Ja és nem kaptam DS 1820-at mit lehetn helyette???

Bence
Bence
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

1-wire: DS1820 vagy DS18B20.
I2C (max. 5 méter táv): LM75, TCN75, LM78
AD konverterrel: LM33/39, NTK/PTK ellenállás, Pt100 hőmérő, K-tip hőelem.

A programban - ha eljutsz valameddig - copy-zd be, és meglessük hol a hiba....
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Hozzászólás Szerző: Bence »

Köszi!

Az a baj, hogy a programban nem fogok eljutni semeddig :( , mert se hőmérővel se ilyen kijelzővel nem foglalkoztam még. Holnapig már biztos nem készülök el, de azért jó lenne ha hamar kész lennék.
Bence
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

I2C hőmérőre mintát a Bascom könyvben találsz (LM92 vagy LM75 néven), az I2C fejezetben. Ott numerikusan megkapod a számot.
Illetve a WEBfejlesztés fejezetben (azt hiszem a 3.-ban) is illesztésre kerül. Szóval a programnak ez a része kész.

A 7szegmensesre meg szintén az előbb Hooligan adott mintát. Szóval összegyúrni nem olyan nehéz:))), az az egyszerűbb.

Azaz a részprogramok már megvannak......
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

7szegmensre találtam én is 1-t.

Kód: Egész kijelölése

'********************************************************************
'* Program nev: 7segm-1.bas                                         *
'* Fordito    : BASCOM AVR, (V.1.11.8.1)                            *
'* Datum      : 2006-05-15                                          *
'* Honlap     : http://avr.tavir.hu                                 *
'* Irta       : Cseh Róbert                                         *
'* E-mail     : csehrobert@tavir.hu                                 *
'********************************************************************
'ATMEGA16 kiegeszito program
'7segment display
'Fuse: External Xtal: 1111:1111
'      JTAG         : Disable
'

$regfile = "m16def.dat"                                     ' specify the used micro
$crystal = 14745600                                         ' used crystal frequency
$baud = 9600                                                ' use baud rate



Config Porta = Output
Config Portb = Output
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim L As Byte

Dim Szamjegy(6) As Byte

Szamjegy(1) = &B01011111                                    '6. karakter
Szamjegy(2) = &B01011011                                    '5. karakter
Szamjegy(3) = &B00110011                                    '4. karakter
Szamjegy(4) = &B01111001                                    '3. szamjegy
Szamjegy(5) = &B01101101                                    '2. karakter
Szamjegy(6) = &B00110000                                    '1. karakter

'Bitek:
'&B12345678
'8 - középső vizszintes
'7 - bal felső függőleges
'6 - bal alsó függőleges
'5 - also vizszintes
'4 - jobb alsó függőleges
'3 - jobb felső függőleges
'2 - felső vízszintes
'1 - pont

Do
For K = 0 To 255 Step 3
For I = 1 To 6
    J = I - 1
    Porta = 0
    Porta.j = 1
    Portb = Szamjegy(i)
    For L = 0 To K
      Waitus 10
    Next L
    Porta = 0
    Portb = 0
    For L = K To 255
      Waitus 10
    Next L
Next I
Next K
Loop
portB-n a számjegy
portA-n a szegmensek.

Fontos!
Amikor a program kiír, akkor mást nem tud csinálni!
Ezért jobb a Hooligan megoldása, mert a szegmensekkel való törődés gyorsan végigmegy, és nem foglal sok prociidőt.
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Hozzászólás Szerző: Bence »

Hello!

Változott a terv! LCD (2*16) lesz és LM75 vagy LM92.
Bence
Hooligan01

Hozzászólás Szerző: Hooligan01 »

remek
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Persze, így sokkal könnyebb és ez a prg kész is van :P.


Hol van itt a kihívás????? :)
Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00

Hozzászólás Szerző: Atesz »

Jelentem alássan DS18S20 (9bit) es hőmérőt tucatjával használok.
A DS18B20 (12 bit) es hőmérővel most barátkozok az új projektem kapcsán. Ha minden működik (pár napon belül) megosztom a nagyérdeművel, ha van rá igény.

Üdv Atesz
Válasz küldése