DS 1820 hőmérő élesztés
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).
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).
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!
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
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..
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!
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..
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!
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
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......
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......
7szegmensre találtam én is 1-t.
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.
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
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.
(Az első helyen - vagy semmi 2-3-on egész szám 4.-en meg a tized)