Paweł Paroń
Guest
Thu Nov 04, 2004 12:46 pm
Potrzebuję jakiegoś ogólnego pomysłu jak wyświetlić liczbę z rejestru (czyli
0-255) na 3-cyfrowym wyświetlaczu LED. Chodzi o wyświetlacz tego typu:
http://www.tme.pl/arts2/pl/opto/gfx/opto131s.jpg
i chodzi mi głównie o sposób zamiany liczby binarnej na odpowiednie
kombinacje segmentów, a nie o samo sterowanie wyświetlaczem. Może są jakieś
dobrze znane sposoby albo nawet gotowe procedury w asemblerze i nie trzeba
tego wymyślać od nowa? Byłby użyty taki procesor, który ma odpowiednią
liczbę nóżek do sterowania segmentami, np. tiny26, bez żadnych dodatkowych
układów logicznych.
Paweł
--
Rowerem nie tylko na Północ:
http://acn.waw.pl/pawelp/
Kanada, Góry Skaliste, Alaska, Szkocja, Islandia, Norwegia
Michal Baszynski
Guest
Thu Nov 04, 2004 1:13 pm
On 4 Nov 2004 12:46:43 GMT, Paweł Paroń
<pawelpANTYSPAM@freeland.lublin.pl> wrote:
Quote:
Potrzebuję jakiegoś ogólnego pomysłu jak wyświetlić liczbę z rejestru (czyli
0-255) na 3-cyfrowym wyświetlaczu LED. Chodzi o wyświetlacz tego typu:
http://www.tme.pl/arts2/pl/opto/gfx/opto131s.jpg
i chodzi mi głównie o sposób zamiany liczby binarnej na odpowiednie
kombinacje segmentów, a nie o samo sterowanie wyświetlaczem.
rozbij to na dwa etapy: bin2bcd a potem chocby tablicowo bcd->7seg.
--
Pozdr
Michal
Dariusz Zolna
Guest
Thu Nov 04, 2004 1:15 pm
Użytkownik "Paweł Paroń" <pawelpANTYSPAM@freeland.lublin.pl> napisał:
Quote:
dobrze znane sposoby albo nawet gotowe procedury w asemblerze i nie trzeba
tego wymyślać od nowa?
Po jednym tranzystorze na segment do sterowania anodami plus ULN2803 żeby
prądu nie brakło. Do wyświetlania cyfr robisz sobie lookup-table
zamieniającą cyfrę dziesiętną na odpowiednią kombinację bitów zależną od
tego jak sobie płytkę zaprojektujesz.
Darek Żołna
Krzysztof Rudnik
Guest
Thu Nov 04, 2004 9:05 pm
Piotr Wyderski wrote:
Quote:
albo dwukrotnie dzielac wejsciowa liczbe przez 10. Reszta z dzielenia to
bedzie kolejna cyfra, liczac od najmniej znaczacej. Dzielenie nie musi
zostac wykonane doslownie, np. mozesz odejmowac w petli od danej
liczby najpierw 100, pozniej 10, a na koncu 1 i zliczac ile razy
^^^^^^^^^^
Zapomniales dac tutaj smileya

)))
Krzysiek Rudnik
Tomasz Gumny
Guest
Thu Nov 04, 2004 9:27 pm
Quote:
Przede wszystkim rozważ zmianę wyświetlacza na taki ze wspólną katodą -
odpadną drivery.
Quote:
i chodzi mi głównie o sposób zamiany liczby binarnej na odpowiednie
kombinacje segmentów, a nie o samo sterowanie wyświetlaczem. Może są
jakieś
dobrze znane sposoby albo nawet gotowe procedury w asemblerze i nie trzeba
tego wymyślać od nowa?
Zobacz taki kawałek:
const unsigned int
LEWA[12] = {
0x73fe,0x43f8,0x73dd,0x63fd,0x43fb,0x63f7,0x73f7,0x43fc,0x73ff,0x63ff,0x43c1
,0x73ff },
SROD[12] = {
0x7cee,0x4ce8,0x7ccd,0x6ced,0x4ceb,0x6ce7,0x7ce7,0x4cec,0x7cef,0x6cef,0x4cc1
,0x7cff },
PRAW[12] = {
0x7f2e,0x4f28,0x7f0d,0x6f2d,0x4f2b,0x6f27,0x7f27,0x4f2c,0x7f2f,0x6f2f,0x4f01
,0x7f3f };
void tim_ovf0(void)
{
TCNT0 = TBASE; /* przeladuj timer */
if( cyfra == 0 ) cyfra = 2; else cyfra--;
if( cyfra == 0 )
{
PORTD = HIGH( LEWA[setki] ); /* setki */
PORTB = LOW( LEWA[setki] );
}
if( cyfra == 1 )
{
PORTD = HIGH( SROD[dzies] ); /* dziesiec */
PORTB = LOW( SROD[dzies] );
}
if( cyfra == 2 )
{
PORTD = HIGH( PRAW[jedno] ); /* jednosci */
PORTB = LOW( PRAW[jedno] );
}
if( pauza == 0 )
{
pauza = LPOM;
time = czas / 100;
if( (time < TMIN) || (time > TMAX) )
{
jedno = KRESKA;
dzies = KRESKA;
setki = KRESKA;
}
else
{
jedno = time % 10; time /= 10;
dzies = time % 10; time /= 10;
setki = time % 10;
}
}
else pauza--;
}
Wiem, wiem - zero finezji...
Podłączenie wyświetlaczy jest na stronie:
http://teos.modelarstwo.org.pl/tester/sch.gif
TG
Marek Lewandowski
Guest
Thu Nov 04, 2004 11:14 pm
Krzysztof Rudnik wrote:
Quote:
Piotr Wyderski wrote:
albo dwukrotnie dzielac wejsciowa liczbe przez 10. Reszta z dzielenia to
bedzie kolejna cyfra, liczac od najmniej znaczacej. Dzielenie nie musi
zostac wykonane doslownie, np. mozesz odejmowac w petli od danej
liczby najpierw 100, pozniej 10, a na koncu 1 i zliczac ile razy
^^^^^^^^^^
Zapomniales dac tutaj smileya

)))
a dlaczego?
A dokladnie: dlaczego nie? Kazdy sposob dobry, nie wszystkie procki maja
uklad dzielenia...
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://www.stud.uni-karlsruhe.de/~uyh0
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
Dariusz Zolna
Guest
Thu Nov 04, 2004 11:32 pm
Użytkownik "Marek Lewandowski" <nospamabuse@onet.pl> napisał:
Quote:
a dlaczego?
A dokladnie: dlaczego nie? Kazdy sposob dobry, nie wszystkie procki maja
uklad dzielenia...
Hmm... a po co zliczać jednostki? Żeby w innej zmiennej zapisać? :-)
Darek Żołna
Piotr Wyderski
Guest
Thu Nov 04, 2004 11:41 pm
Marek Lewandowski wrote:
Quote:
liczby najpierw 100, pozniej 10, a na koncu 1 i zliczac ile razy
^^^^^^^^^^
Zapomniales dac tutaj smileya

)))
a dlaczego?
A dokladnie: dlaczego nie?
Tak, brakuje smileya. Przemysl _ostatni_ przypadek.

))
No to trzeba ~25 cykli, czyli konwersje robi sie juz blyskawicznie.
Pozdrawiam
Piotr Wyderski
jfk
Guest
Fri Nov 05, 2004 7:25 am
Użytkownik "Paweł Paroń" <pawelpANTYSPAM@freeland.lublin.pl> napisał w
wiadomości news:slrncok95j.4fd.pawelpANTYSPAM@154-moo-7.acn.waw.pl...
Quote:
Potrzebuję jakiegoś ogólnego pomysłu jak wyświetlić liczbę z rejestru
(czyli
0-255) na 3-cyfrowym wyświetlaczu LED. Chodzi o wyświetlacz tego typu:
http://www.tme.pl/arts2/pl/opto/gfx/opto131s.jpg
i chodzi mi głównie o sposób zamiany liczby binarnej na odpowiednie
kombinacje segmentów, a nie o samo sterowanie wyświetlaczem. Może są
jakieś
dobrze znane sposoby albo nawet gotowe procedury w asemblerze i nie trzeba
tego wymyślać od nowa? Byłby użyty taki procesor, który ma odpowiednią
liczbę nóżek do sterowania segmentami, np. tiny26, bez żadnych dodatkowych
układów logicznych.
A moze prosciej wyswietlac liczbe jako hex ? wystarcza wtedy 2 cyfry i nie
trzeba zadnego dzielenia, bo każda połówka bajta to jedna cyfra hex .
pozdr.
jfk
Marek Lewandowski
Guest
Fri Nov 05, 2004 8:17 am
Piotr Wyderski wrote:
Quote:
Marek Lewandowski wrote:
liczby najpierw 100, pozniej 10, a na koncu 1 i zliczac ile razy
^^^^^^^^^^
Zapomniales dac tutaj smileya

)))
a dlaczego?
A dokladnie: dlaczego nie?
Tak, brakuje smileya. Przemysl _ostatni_ przypadek.

))
Rotfl, ślepy chyba jestem :PPPP
Masz rację i Darek też... Trza mi było spać iść

)))))))))))))
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://www.stud.uni-karlsruhe.de/~uyh0
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
Paweł Paroń
Guest
Sat Nov 06, 2004 1:25 pm
In article <cme6ro$6rk$1@atlantis.news.tpi.pl>, Tomasz Gumny wrote:
Quote:
Potrzebuję jakiegoś ogólnego pomysłu jak wyświetlić liczbę z rejestru
(czyli
0-255) na 3-cyfrowym wyświetlaczu LED. Chodzi o wyświetlacz tego typu:
http://www.tme.pl/arts2/pl/opto/gfx/opto131s.jpg
Przede wszystkim rozważ zmianę wyświetlacza na taki ze wspólną katodą -
odpadną drivery.
Dlaczego? Nie pamiętam jaka jest obciążalność wyjść AVR-a, ale chyba za
mała, żeby pociągnąć wszystkie segmenty, niezależnie czy to będzie katoda
czy anoda?
Dzięki za ten programik.
Paweł
Piotr Wyderski
Guest
Sat Nov 06, 2004 2:59 pm
Paweł Paroń wrote:
Quote:
Nie pamiętam jaka jest obciążalność wyjść AVR-a, ale chyba za
mała, żeby pociągnąć wszystkie segmenty, niezależnie czy to będzie katoda
czy anoda?
Wystarczajaca, o czym mowi:
a) dokumentacja, ktorej widac nie przeczytales;
b) empiryczne potwierdzenie powyzszego zapisu
w kilku moich ukladach z wyswietlaczem LED.
Pozdrawiam
Piotr Wyderski
Tomasz Gumny
Guest
Sat Nov 06, 2004 8:50 pm
Quote:
Przede wszystkim rozważ zmianę wyświetlacza na taki ze wspólną katodą -
odpadną drivery.
Dlaczego? Nie pamiętam jaka jest obciążalność wyjść AVR-a, ale chyba za
mała, żeby pociągnąć wszystkie segmenty, niezależnie czy to będzie katoda
czy anoda?
W stanie wysokim prądu wystarczy spokojnie na segment.
W stanie niskim wyjście przyjmie całkiem spory prąd,
a zawsze można połączyć kilka wyjść równolegle...
TG
Rafal Baranowski
Guest
Sun Nov 07, 2004 10:16 pm
Quote:
W stanie wysokim prądu wystarczy spokojnie na segment.
W stanie niskim wyjście przyjmie całkiem spory prąd,
Nowsze układy AVR mają już wyjścia symetryczne - w obie strony 20mA przy 5V
zasilania powoduje zmianę o maksymalnie 0,7V. Każą nie przekraczać 40 mA /
pin.
Raf.