7 segmenses kijelző
7 segmenses kijelző
Érdeklődnék hogy lehet e használni atmega procival 7segmsenses kijelzőt én hőmérsékletet szeretnék vele kijeleztetni?
És hogy bonyolultab e mint egy grafikus kijelző?
Esetleg rajzotok progitok van e hozzá?
Köszönöm.
És hogy bonyolultab e mint egy grafikus kijelző?
Esetleg rajzotok progitok van e hozzá?
Köszönöm.
-= STK500 =-
Ha jol ertelmezem a kerdest, akkor inkabb sima led vezerlest kell megvalositani.
Kerdes, hany digites kijelzest szeretnel (esetleges multiplexalas miatt).
En ezt hasznaltam a motorom sebessegfokozat kijelzojeben (1 digit). AD-vel mertem bejovo feszultseget, es intervallumokon beluli osszehasonlitassal a letarolt "szamot" jelenitettem meg.
Kerdes, hany digites kijelzest szeretnel (esetleges multiplexalas miatt).
Kód: Egész kijelölése
' 76543210
'-------------------------------------------------------------
'szegmens &B00000000 ertek - hasznalt szegmensek
'-------------------------------------------------------------
Const G0 = &B10000000 '0 - f,e,d,c,b,a,T - 128
Const G1 = &B00000100 '1 - g,f,e,d,c,a,T - 4
Const G2 = &B00100100 '2 - g,f,d,c,a,T - 36
Const G3 = &B00110010 '3 - g,f,c,b,T - 50
Const G4 = &B01100000 '4 - g,d,c,b,a,T - 96
Const G5 = &B01001000 '5 - g,e,d,b,a,T - 72
Const G6 = &B11110010 '6 - c,b,T - 242En ezt hasznaltam a motorom sebessegfokozat kijelzojeben (1 digit). AD-vel mertem bejovo feszultseget, es intervallumokon beluli osszehasonlitassal a letarolt "szamot" jelenitettem meg.
Szia!
Most hirtelen a 2-digites nálam így néz ki:
( csak a lényeg, 8MHz-es 2313)
----------
Digit1 Alias Portd.6
Digit2 Alias Portd.5
Disp Alias Portb 'Displayport
Dim Digitvalto As Bit
Dim Szegmenskep As Byte 'Kijelzokep
Dim Disp_bal As Byte 'Bal oldali kijelzo erteke
Dim Disp_jobb As Byte 'jobb oldali kijelzo erteke
Dim Tp_bal As Bit 'Bal tizedespont
Dim Tp_jobb As Bit 'Jobb tizedespont
Config Timer0 = Timer , Prescale = 256
.....
blablabla...
Timer0INT:
Reset Digit1
Reset Digit2 'Mindket digit kikapcs
Toggle Digitvalto
If Digitvalto = 1 Then Goto Jdigi 'Bal digit kivitele
Szegmenskep = Lookup(disp_bal , Segmens) 'Szam/szegmenskep konv.
If Tp_bal = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit1
Goto Retek
Jdigi: 'Jobb digit kivitele
Szegmenskep = Lookup(disp_jobb , Segmens) 'Szam/szegmenskep konv.
If Tp_jobb = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit2
Retek:
Return
.......
Segmens:
Data &B00010001 '0
Data &B01111101 '1
Data &B00100011 '2
Data &B00101001 '3
Data &B01001101 '4
Data &B10001001 '5
Data &B10000001 '6
Data &B00011101 '7
Data &B00000001 '8
Data &B00001001 '9
Data &B00000101 'A
'Ha kell, majd kiszamoljuk
'Data &B10011011 'b
'Data &B01010011 'C
'Data &B10101011 'd
'Data &B11010011 'E
'Data &B11010010 'F
'Data &B10111010 'H
'Data &B00101011 'J
'Data &B00010011 'L
'Data &B10001010 'n
'Data &B10001011 'o
'Data &B11110010 'P
'Data &B10000010 'r
'Data &B10001001 's
'Data &B10010011 't
'Data &B00111011 'U
Data &B11101111 '-
'Data &B11100010 '?
--------------------------------------------------------------
A két tizedespontot külön kezeli, mert...mert nem tudom, a kiírás formátumától függ. Ja, és arra figyelj, hogy közös Anód vagy Katódos a kijelző! A rutin elején minden digitkijelölő előbb kikapcs, mert átlátszhat halványan a szomszédosra. Remélem, kibogarászható...
JAni
Most hirtelen a 2-digites nálam így néz ki:
( csak a lényeg, 8MHz-es 2313)
----------
Digit1 Alias Portd.6
Digit2 Alias Portd.5
Disp Alias Portb 'Displayport
Dim Digitvalto As Bit
Dim Szegmenskep As Byte 'Kijelzokep
Dim Disp_bal As Byte 'Bal oldali kijelzo erteke
Dim Disp_jobb As Byte 'jobb oldali kijelzo erteke
Dim Tp_bal As Bit 'Bal tizedespont
Dim Tp_jobb As Bit 'Jobb tizedespont
Config Timer0 = Timer , Prescale = 256
.....
blablabla...
Timer0INT:
Reset Digit1
Reset Digit2 'Mindket digit kikapcs
Toggle Digitvalto
If Digitvalto = 1 Then Goto Jdigi 'Bal digit kivitele
Szegmenskep = Lookup(disp_bal , Segmens) 'Szam/szegmenskep konv.
If Tp_bal = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit1
Goto Retek
Jdigi: 'Jobb digit kivitele
Szegmenskep = Lookup(disp_jobb , Segmens) 'Szam/szegmenskep konv.
If Tp_jobb = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit2
Retek:
Return
.......
Segmens:
Data &B00010001 '0
Data &B01111101 '1
Data &B00100011 '2
Data &B00101001 '3
Data &B01001101 '4
Data &B10001001 '5
Data &B10000001 '6
Data &B00011101 '7
Data &B00000001 '8
Data &B00001001 '9
Data &B00000101 'A
'Ha kell, majd kiszamoljuk
'Data &B10011011 'b
'Data &B01010011 'C
'Data &B10101011 'd
'Data &B11010011 'E
'Data &B11010010 'F
'Data &B10111010 'H
'Data &B00101011 'J
'Data &B00010011 'L
'Data &B10001010 'n
'Data &B10001011 'o
'Data &B11110010 'P
'Data &B10000010 'r
'Data &B10001001 's
'Data &B10010011 't
'Data &B00111011 'U
Data &B11101111 '-
'Data &B11100010 '?
--------------------------------------------------------------
A két tizedespontot külön kezeli, mert...mert nem tudom, a kiírás formátumától függ. Ja, és arra figyelj, hogy közös Anód vagy Katódos a kijelző! A rutin elején minden digitkijelölő előbb kikapcs, mert átlátszhat halványan a szomszédosra. Remélem, kibogarászható...
JAni
Szia!
Most hirtelen a 2-digites nálam így néz ki:
( csak a lényeg, 8MHz-es 2313)
----------
Digit1 Alias Portd.6
Digit2 Alias Portd.5
Disp Alias Portb 'Displayport
Dim Digitvalto As Bit
Dim Szegmenskep As Byte 'Kijelzokep
Dim Disp_bal As Byte 'Bal oldali kijelzo erteke
Dim Disp_jobb As Byte 'jobb oldali kijelzo erteke
Dim Tp_bal As Bit 'Bal tizedespont
Dim Tp_jobb As Bit 'Jobb tizedespont
Config Timer0 = Timer , Prescale = 256
.....
blablabla...
Timer0INT:
Reset Digit1
Reset Digit2 'Mindket digit kikapcs
Toggle Digitvalto
If Digitvalto = 1 Then Goto Jdigi 'Bal digit kivitele
Szegmenskep = Lookup(disp_bal , Segmens) 'Szam/szegmenskep konv.
If Tp_bal = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit1
Goto Retek
Jdigi: 'Jobb digit kivitele
Szegmenskep = Lookup(disp_jobb , Segmens) 'Szam/szegmenskep konv.
If Tp_jobb = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit2
Retek:
Return
.......
Segmens:
Data &B00010001 '0
Data &B01111101 '1
Data &B00100011 '2
Data &B00101001 '3
Data &B01001101 '4
Data &B10001001 '5
Data &B10000001 '6
Data &B00011101 '7
Data &B00000001 '8
Data &B00001001 '9
Data &B00000101 'A
'Ha kell, majd kiszamoljuk
'Data &B10011011 'b
'Data &B01010011 'C
'Data &B10101011 'd
'Data &B11010011 'E
'Data &B11010010 'F
'Data &B10111010 'H
'Data &B00101011 'J
'Data &B00010011 'L
'Data &B10001010 'n
'Data &B10001011 'o
'Data &B11110010 'P
'Data &B10000010 'r
'Data &B10001001 's
'Data &B10010011 't
'Data &B00111011 'U
Data &B11101111 '-
'Data &B11100010 '?
--------------------------------------------------------------
A két tizedespontot külön kezeli, mert...mert nem tudom, a kiírás formátumától függ. Ja, és arra figyelj, hogy közös Anód vagy Katódos a kijelző! A rutin elején minden digitkijelölő előbb kikapcs, mert átlátszhat halványan a szomszédosra. Remélem, kibogarászható...
JAni
Most hirtelen a 2-digites nálam így néz ki:
( csak a lényeg, 8MHz-es 2313)
----------
Digit1 Alias Portd.6
Digit2 Alias Portd.5
Disp Alias Portb 'Displayport
Dim Digitvalto As Bit
Dim Szegmenskep As Byte 'Kijelzokep
Dim Disp_bal As Byte 'Bal oldali kijelzo erteke
Dim Disp_jobb As Byte 'jobb oldali kijelzo erteke
Dim Tp_bal As Bit 'Bal tizedespont
Dim Tp_jobb As Bit 'Jobb tizedespont
Config Timer0 = Timer , Prescale = 256
.....
blablabla...
Timer0INT:
Reset Digit1
Reset Digit2 'Mindket digit kikapcs
Toggle Digitvalto
If Digitvalto = 1 Then Goto Jdigi 'Bal digit kivitele
Szegmenskep = Lookup(disp_bal , Segmens) 'Szam/szegmenskep konv.
If Tp_bal = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit1
Goto Retek
Jdigi: 'Jobb digit kivitele
Szegmenskep = Lookup(disp_jobb , Segmens) 'Szam/szegmenskep konv.
If Tp_jobb = 1 Then 'Tizedespont belokese
Reset Szegmenskep.0
End If
Disp = Szegmenskep
Set Digit2
Retek:
Return
.......
Segmens:
Data &B00010001 '0
Data &B01111101 '1
Data &B00100011 '2
Data &B00101001 '3
Data &B01001101 '4
Data &B10001001 '5
Data &B10000001 '6
Data &B00011101 '7
Data &B00000001 '8
Data &B00001001 '9
Data &B00000101 'A
'Ha kell, majd kiszamoljuk
'Data &B10011011 'b
'Data &B01010011 'C
'Data &B10101011 'd
'Data &B11010011 'E
'Data &B11010010 'F
'Data &B10111010 'H
'Data &B00101011 'J
'Data &B00010011 'L
'Data &B10001010 'n
'Data &B10001011 'o
'Data &B11110010 'P
'Data &B10000010 'r
'Data &B10001001 's
'Data &B10010011 't
'Data &B00111011 'U
Data &B11101111 '-
'Data &B11100010 '?
--------------------------------------------------------------
A két tizedespontot külön kezeli, mert...mert nem tudom, a kiírás formátumától függ. Ja, és arra figyelj, hogy közös Anód vagy Katódos a kijelző! A rutin elején minden digitkijelölő előbb kikapcs, mert átlátszhat halványan a szomszédosra. Remélem, kibogarászható...
JAni
Re: 7 segmenses kijelző
Vanszovhoz írta:Érdeklődnék hogy lehet e használni atmega procival 7segmsenses kijelzőt én hőmérsékletet szeretnék vele kijeleztetni?
És hogy bonyolultab e mint egy grafikus kijelző?
Esetleg rajzotok progitok van e hozzá?
Köszönöm.
Igaz tiny-re, de ne okozzon gondot
nah alakulok!
már alap számok mennek a kijelző vezérlésénél.
csak azt nem tudom hogyan kovertálom át az adcből kijövő számot a kijelzőre!
Az adc értékét vissza kalkuláltam már hőmérsékletté de mondjuk ha kijön 12.3 azt hogyan írom ki?
már alap számok mennek a kijelző vezérlésénél.
csak azt nem tudom hogyan kovertálom át az adcből kijövő számot a kijelzőre!
Az adc értékét vissza kalkuláltam már hőmérsékletté de mondjuk ha kijön 12.3 azt hogyan írom ki?
Kód: Egész kijelölése
$regfile = "m8def.dat"
$crystal = 4000000
Config Timer0 = Timer , Prescale = 8
Dim Timecount As Word : Timecount = 0
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Interrupts
Enable Ovf0
On Ovf0 Overflow_isr
Tcnt0 = &H19
Dim I As Byte
Config Pinc.5 = Input
Config Portd = Output
Portd = 0
Config Pinb.0 = Output
Portb.0 = 0
Config Pinb.1 = Output
Portb.1 = 0
Config Pinb.2 = Output
Portb.2 = 0
Config Pinb.3 = Output
Portb.3 = 0
Dim L(10) As Byte
L(1) = &B11111100
L(2) = &B10001001
L(3) = &B10011000
L(4) = &B10110100
L(5) = &B10010010
L(6) = &B10000010
L(7) = &B11111000
L(8) = &B10000000
L(9) = &B10010000
L(10) = &B11000000
Dim Le(10) As Byte
Le(1) = &B01111100
Le(2) = &B00001001
Le(3) = &B00011000
Le(4) = &B00110100
Le(5) = &B00010010
Le(6) = &B00000010
Le(7) = &B01111000
Le(8) = &B00000000
Le(9) = &B00010000
Le(10) = &B01000000
Dim Channel As Byte
Dim W As Long
Dim Ss As Byte
Dim Ad As Long
Dim S(4) As String * 1
Dim Sa As String * 5
Dim Sl(4) As Byte 'Show variables
I = 10
Sl(1) = L(1)
Sl(2) = L(3)
Sl(3) = L(6)
Sl(4) = L(i)
' Ki írja hogy 1360
Waitms 1500
Sl(1) = Le(7)
Sl(2) = Le(8)
Sl(3) = Le(9)
Sl(4) = Le(10)
' Ki írja hogy 7.8.9.0.
Waitms 2500
Do
'------------------------------------ Battery voltage detection
W = 0
Ss = 1
Ad = 0
For Ss = 1 To 20
Start Adc
Channel = 5
W = Getadc(channel)
Stop Adc
Ad = Ad + W
Next Ss
Ad = Ad / 20
Ad = Ad * 2560
Ad = Ad / 1023
Ad = Ad * 10
???????????????
Loop
End
Overflow_isr:
Tcnt0 = &H19
Incr Timecount
If Timecount = 15 Then '1 m 502 = 1s 4m 2008 = 1s
Timecount = 0
Portb.0 = 1
Portd = Sl(1)
Waitms 5
Portb.0 = 0
Portb.1 = 1
Portd = Sl(2)
Waitms 5
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portd = Sl(3)
Waitms 5
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Portd = Sl(4)
Waitms 5
Portb.3 = 0
End If
Return-= STK500 =-
Szám->Szöveg konverzió?
És utána a string egyes részeit nézed.
A Format ill Fusing parancsoknál less körbe.
(~2k Flash-t foglalnak!)
Vagy elkezded lebontani:
1, < vagy > mint 0? -> Előjel
1a, vedd az abszolútértékét
2, Hány darab tízes helyiérték van? (INT(szám/10))-> megvan a 10-es számjegy
2a: szám= szám - INT((szám/10))*10 'marad az egyes és a tizedes
3, Hány darab egyes helyiérték van? (INT(szám))-> megvan a 10-es számjegy
3a, szám= szám - INT(szám)
4, megkapod hány darab tizedesed van.
Fontos: a tizedes számmal való művelet időigényes.
Dolgozz a szám 100x-osával. És az eredményt WORD-be kapod.
kb 10-15x kevesebb matematikai művelet!
Plusz:próbáld ki:
A kiírt szám <>0.3!!!!
És utána a string egyes részeit nézed.
A Format ill Fusing parancsoknál less körbe.
(~2k Flash-t foglalnak!)
Vagy elkezded lebontani:
1, < vagy > mint 0? -> Előjel
1a, vedd az abszolútértékét
2, Hány darab tízes helyiérték van? (INT(szám/10))-> megvan a 10-es számjegy
2a: szám= szám - INT((szám/10))*10 'marad az egyes és a tizedes
3, Hány darab egyes helyiérték van? (INT(szám))-> megvan a 10-es számjegy
3a, szám= szám - INT(szám)
4, megkapod hány darab tizedesed van.
Fontos: a tizedes számmal való művelet időigényes.
Dolgozz a szám 100x-osával. És az eredményt WORD-be kapod.
kb 10-15x kevesebb matematikai művelet!
Plusz:próbáld ki:
Kód: Egész kijelölése
dim a as single
a=0.3
Print a
ki egészítettem ezzel a résszel most tudom mennyi jönne ki szépen. de így sem jó. Mert nem írja ki csak csupa hatost. Gondolom nem szereti stringet vissza fele hogy tudnám mondjuk wordbe alakítani őket egyenként? Sa1, Sa2, Sa3 -t ?
Kód: Egész kijelölése
Do
'------------------------------------ Battery voltage detection
W = 0
Ss = 1
Ad = 0
For Ss = 1 To 20
Start Adc
Channel = 5
W = Getadc(channel)
Stop Adc
Ad = Ad + W
Next Ss
Ad = Ad / 20
Ad = Ad * 2560
Ad = Ad / 1023
Ad = Ad * 10
Print "ad: " ; Ad
Sa = Str(ad)
Print "sa: " ; Sa
Sa1 = Left(sa , 1) '1 szám
Sa2 = Mid(sa , 2 , 1) '2 szám + tizedes ha kell
Sa3 = Mid(sa , 3 , 1) '3 szám
Print "sa1 " ; Sa1
Print "sa2 " ; Sa2
Print "sa3 " ; Sa3
Sl(1) = L(sa1)
Sl(2) = Le(sa2)
Sl(3) = L(sa3)
Sl(4) = &B10001111
Loop
End-= STK500 =-
Tényleg tud ilyet kipróbáltam és facán megy a dolog.
Most jön a neheze meg kell még egy ilyen kijelzőt hajtsak. Mert ha vezérelni akarok hőfok függvényében akkor kéne tegyek 2 nyomógombot és kéne állítsam a hőmérsékletet hogy mennyit akarok a számítógép házamba. Szóval most légy okos Domokos.
Most jön a neheze meg kell még egy ilyen kijelzőt hajtsak. Mert ha vezérelni akarok hőfok függvényében akkor kéne tegyek 2 nyomógombot és kéne állítsam a hőmérsékletet hogy mennyit akarok a számítógép házamba. Szóval most légy okos Domokos.
-= STK500 =-
nincs a pc-ről nem akarom vezérelni.
Az a lényeg hogy legyen egy kis saját munkám benne, ne csak mindíg a pc dolgozzon.
ha sikerül akkor a ventiket fogom vele hajtani szépen.
És mivel több venti van a gépembe ezért mind a 4db-nak külön fogom állítani a vezérlését.
Adott hőmérsékletre +ba fognak a ventik indulni hogy hűtsenek.
ha értitek mire gondolok.
És azt ne mondja senki hogy hülyeség mert hűtés őrült vagyok a gépem terén. Tudom mi hogy a legjobb hűtés.
Az a lényeg hogy legyen egy kis saját munkám benne, ne csak mindíg a pc dolgozzon.
ha sikerül akkor a ventiket fogom vele hajtani szépen.
És mivel több venti van a gépembe ezért mind a 4db-nak külön fogom állítani a vezérlését.
Adott hőmérsékletre +ba fognak a ventik indulni hogy hűtsenek.
ha értitek mire gondolok.
És azt ne mondja senki hogy hülyeség mert hűtés őrült vagyok a gépem terén. Tudom mi hogy a legjobb hűtés.
-= STK500 =-