7 segmenses kijelző

Hogyha sikeresen O/PLED illetve hagyományos alfanumerikus - esetleg tán grafikus kijelzővel gyűlik meg a baja valakinek:)
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

7 segmenses kijelző

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

É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.
-= STK500 =-
Avatar
Little
DrótVégénSzéndarab
Hozzászólások: 15
Csatlakozott: 2006. december 28. csütörtök, 7:00

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

Ha jol ertelmezem a kerdest, akkor inkabb sima led vezerlest kell megvalositani.
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          - 242

En ezt hasznaltam a motorom sebessegfokozat kijelzojeben (1 digit). AD-vel mertem bejovo feszultseget, es intervallumokon beluli osszehasonlitassal a letarolt "szamot" jelenitettem meg.
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

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
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

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
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Re: 7 segmenses kijelző

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

szovhoz í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.
Van :-)
Igaz tiny-re, de ne okozzon gondot ;-)
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

4db szeretnék rátenni mert ugye pl. "23.6C" ezt akarom kiíratni,de csak 3db vezérlek a negyediket fixre kötöm.
-= STK500 =-
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

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?

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 =-
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

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:

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

dim a as single
a=0.3
Print a
A kiírt szám <>0.3!!!!
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

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 =-
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

ASCII kódegyezésre szűrni? :)

számjegy-65 (?) = a számjegy értéke
ascii kódja a számnak - konstans = számérték

illetve val / str függvény is mintha ilyet tudna....
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

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.
-= STK500 =-
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Sorosport/USB nincs?:)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ja és akkor vezérelhetnéd számítógépről, ha már úgy is ottvan benne!
8)
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

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

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.
-= STK500 =-
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Novemberi versenyen az eredmény látható lesz? :)
Válasz küldése