AVR - =?iso-8859-2?Q?wy=B6wietlanie?= liczby na 3-cyfrowym LED



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: =?iso-8859-2?Q?Pawe=B3_Paro=F1?= <pawelpANTYSPAM_at_nospam_freeland.lublin.pl>
Subject: AVR - =?iso-8859-2?Q?wy=B6wietlanie?= liczby na 3-cyfrowym LED
Date: 4 Nov 2004 12:46:43 GMT



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

Poprzedni Następny
Wiadomość
Spis treści
From: "Dariusz Zolna" <abc_at_nospam_abc.com>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Thu, 4 Nov 2004 14:15:41 +0100


Użytkownik "Paweł Paroń" <pawelpANTYSPAM_at_nospam_freeland.lublin.pl> napisał:
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



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: =?iso-8859-2?Q?Re:_AVR_-_wy=B6wietlanie_liczby_na_3-cyfrowym_LED?=
Date: Thu, 4 Nov 2004 14:47:46 +0100



Paweł Paroń wrote:

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.

Nie da sie tego zrobic w prosty sposob (np. jakas sprytna grupa pieciu
instrukcji). Musisz przeksztalcic liczbe na grupe trzech liczb ze zbioru
{0,..,9},
a nastepnie uzyc uzyskanych wartosci do indeksowania tablicy 10 komorek,
z ktorych kazda zawiera uklad bitow odpowiadajacych wyswietlanej cyfrze.
Konwersji mozna dokonac albo za pomoca korekcji binarnej (BIN->BCD),
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 odejmowana
liczba miesci sie w danej -- to jest sposob ogolny (dziala dla dowolnych
liczb),
w najgorszym przypadku wymaga ~20 cykli na cyfre. Jesli masz jakies
"wolne" 50 cykli, to bedzie to najprostszy sposob. W asemblerze napisz
to sobie sam, w koncu beda to tylko 2 petle (100 moze sie miescic w bajcie
co najwyzej 2 razy, wiec ten przypadek nalezy zalatwic osobnym testem).

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.

Wlasnie tak to nalezy zrobic.

Pozdrawiam
Piotr Wyderski



Poprzedni Następny
Wiadomość
Spis treści
From: Krzysztof Rudnik <rudnik_at_nospam_kki.net.pl>
Subject: Re: AVR - =?ISO-8859-2?Q?wy=B6wietlanie?= liczby na 3-cyfrowym LED
Date: Thu, 04 Nov 2004 22:05:05 +0100


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 ;))))

Krzysiek Rudnik


Poprzedni Następny
Wiadomość
Spis treści
From: Marek Lewandowski <nospamabuse_at_nospam_onet.pl>
Subject: =?iso-8859-2?Q?Re:_AVR_-_wy=B6wietlanie_liczby_na_3-cyfrowym_LED?=
Date: Fri, 05 Nov 2004 00:14:07 +0100


Krzysztof Rudnik wrote:

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? :P
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. !]

Poprzedni Następny
Wiadomość
Spis treści
From: "Dariusz Zolna" <abc_at_nospam_abc.com>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Fri, 5 Nov 2004 00:32:58 +0100


Użytkownik "Marek Lewandowski" <nospamabuse_at_nospam_onet.pl> napisał:
a dlaczego? :P
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



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Fri, 5 Nov 2004 00:41:38 +0100


Marek Lewandowski wrote:

liczby najpierw 100, pozniej 10, a na koncu 1 i zliczac ile razy

^^^^^^^^^^
Zapomniales dac tutaj smileya ;))))

a dlaczego? :P
A dokladnie: dlaczego nie?

Tak, brakuje smileya. Przemysl ostatni przypadek. :-)))
No to trzeba ~25 cykli, czyli konwersje robi sie juz blyskawicznie.

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: Marek Lewandowski <nospamabuse_at_nospam_onet.pl>
Subject: =?iso-8859-2?Q?Re:_AVR_-_wy=B6wietlanie_liczby_na_3-cyfrowym_LED?=
Date: Fri, 05 Nov 2004 09:17:34 +0100


Piotr Wyderski wrote:

Marek Lewandowski wrote:

liczby najpierw 100, pozniej 10, a na koncu 1 i zliczac ile razy

^^^^^^^^^^
Zapomniales dac tutaj smileya ;))))

a dlaczego? :P
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. !]

Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Gumny" <tgumny_at_nospam__at_nospam_idn.org.pl>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Thu, 4 Nov 2004 22:27:41 +0100


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.

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



Poprzedni Następny
Wiadomość
Spis treści
From: =?iso-8859-2?Q?Pawe=B3_Paro=F1?= <pawelpANTYSPAM_at_nospam_freeland.lublin.pl>
Subject: Re: AVR - =?iso-8859-2?Q?wy=B6wietlanie?= liczby na 3-cyfrowym LED
Date: 6 Nov 2004 13:25:26 GMT


In article <cme6ro$6rk$1_at_nospam_atlantis.news.tpi.pl>, Tomasz Gumny wrote:
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ł

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Sat, 6 Nov 2004 15:59:20 +0100


Paweł Paroń wrote:

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


Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Gumny" <tgumny_at_nospam__at_nospam_idn.org.pl>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Sat, 6 Nov 2004 21:50:06 +0100


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



Poprzedni Następny
Wiadomość
Spis treści
From: "Rafal Baranowski" <rufus_at_nospam_zeus.polsl.gliwice.pl.usun.to>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Sun, 7 Nov 2004 23:16:11 +0100


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.


Poprzedni Następny
Wiadomość
Spis treści
From: "jfk" <jaromir_fk_at_nospam_gazeta.pl>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Fri, 5 Nov 2004 08:25:36 +0100



Użytkownik "Paweł Paroń" <pawelpANTYSPAM_at_nospam_freeland.lublin.pl> napisał w
wiadomości news:slrncok95j.4fd.pawelpANTYSPAM_at_nospam_154-moo-7.acn.waw.pl...

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



Poprzedni Następny
Wiadomość
Spis treści
From: Michal Baszynski <mbaszyns_at_nospam_ga.ze.ta.pl.>
Subject: Re: AVR - wyświetlanie liczby na 3-cyfrowym LED
Date: Thu, 04 Nov 2004 14:13:51 +0100


On 4 Nov 2004 12:46:43 GMT, Paweł Paroń
<pawelpANTYSPAM_at_nospam_freeland.lublin.pl> wrote:


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