atmega8 / kolejne porady && LEDs
Masz problem? Zapytaj na forum elektroda.pl
From: "sikurasaka" <sikurasaka_at_nospam_op.pl>
Subject: atmega8 / kolejne porady && LEDs
Date: Thu, 12 Jan 2006 14:17:46 +0100
Witam raz jeszcze...dzieki za poprzednie wyjasnienia...;)
Mam jeszcze 3 problemy....;)
1)
Mam do megi podlaczone 8 wyswietlaczy led "typu 8." Do sterowania uzywam
6ciu portów do przelaczania zasilania miedzy wyswietlaczami i 8miu innych
portów do odpalania odpowiednich segmentów (pojedynczych diodek). Zrobilem
sobie taki algorytm:
a) ustawiam wszystkie 8 portow odpowiedzialnych za diody na 0
b) przelaczam zasilanie na nastepny wyswietlacz - zmiana konfiguracji 6ciu
portów
c) ustawiam odpowiednio 8siem portow odpowiedzialnych za diody
i tak w kolko......po przejsciu punktow abc odczekuje 1ms.......odswierzanie
calego wyswietlacza wychodzi cos okolo 1000/8=125Hz
[Punkt a wprowadzilem, gdyz bez niego pojawiaja sie w tle sasiednie cyfry
(bo przelacza sie zasilanie a swieca sie stare diody - to jest jasne)]
Dla 1Mhz wyzej zastosowany algorytm sprawdza sie dobrze. Jesli jednak
ustawie zegar na 8Mhz to znowu pojawiają sie przeblyski w tle. Dlaczego?
Algorytm ten sam....czestotliwosc odswierzania ta sama - tez czekam 1ms....
Przy wysokich czestotliwosciach zegara porty nie wyrabiają???
2)
Sposob w jaki zasilam diody (wyswietlacze) powoduje iz swiecą one tylko 1/8
czasu - co powoduje iz swiecą ciemniej niz przy ciaglym zasilaniu (na
szczescie nie tak duzo ciemniej....). Zasilam je napieciem maxymalnym jakie
wytrzymuja przy zasilaniu ciaglym....
Czy jak zwieksze napiecie tak aby w trybie 1/8 uzyskac jasnosc taką jak przy
zasilaniu ciaglym to diodom (wyswietlaczom) to zaszkodzi??? Będą wtedy
dostawaly przez 1ms co 8ms impuls wyzszy niz dopuszczalne napiecie ciagle
(pewnie ze 2x albo wiecej)....
3)
Programuje w WinAvr (w C) i ostatnio zauwazylem, ze gdy wrzuce wszystkie
operacje sterowania portami do obslugi przerwania od timera, a w petli w
main-ie zostaną mi tylko obliczenia (brak instrukcji sterowania portami) to
przy kompilacji wszystkie instrukcje z petli w main-ie zostaja wyrzucone -
widac to po rozmiarze hexa i po dzialaniu programu....
I przyczyną nie jest na 100% to, iz na wykonywanie petli w main-ie nie
zostaje juz czasu - zostaje i ona sie wykonuje - tylko tam juz nie ma
zadnych instrukcji (w przerwaniu kozystam ze zmiennych ktore sa liczone w
petli i one sie nie zmieniaja). Dziwne....
Przedstawilem tu kilka dziwów
Mam nadzieje ze pomozecie....;)
Paweł
From: "Bogdan Gutknecht" <b_gutknecht_at_nospam_interia.pl>
Subject: Re: atmega8 / kolejne porady && LEDs
Date: Fri, 13 Jan 2006 07:34:03 +0100
Użytkownik "sikurasaka" <sikurasaka_at_nospam_op.pl> napisał w wiadomości
news:dq5kqk$bte$1_at_nospam_news.onet.pl...
Witam raz jeszcze...dzieki za poprzednie wyjasnienia...;)
Mam jeszcze 3 problemy....;)
1)
Mam do megi podlaczone 8 wyswietlaczy led "typu 8." Do sterowania uzywam
6ciu portów do przelaczania zasilania miedzy wyswietlaczami i 8miu innych
portów do odpalania odpowiednich segmentów (pojedynczych diodek). Zrobilem
sobie taki algorytm:
a) ustawiam wszystkie 8 portow odpowiedzialnych za diody na 0
b) przelaczam zasilanie na nastepny wyswietlacz - zmiana konfiguracji 6ciu
portów
c) ustawiam odpowiednio 8siem portow odpowiedzialnych za diody
i tak w kolko......po przejsciu punktow abc odczekuje
1ms.......odswierzanie
calego wyswietlacza wychodzi cos okolo 1000/8=125Hz
[Punkt a wprowadzilem, gdyz bez niego pojawiaja sie w tle sasiednie cyfry
(bo przelacza sie zasilanie a swieca sie stare diody - to jest jasne)]
Dla 1Mhz wyzej zastosowany algorytm sprawdza sie dobrze. Jesli jednak
ustawie zegar na 8Mhz to znowu pojawiają sie przeblyski w tle. Dlaczego?
Algorytm ten sam....czestotliwosc odswierzania ta sama - tez czekam
1ms....
Przy wysokich czestotliwosciach zegara porty nie wyrabiają???
Porty się wyrabiajš mogš pracować i szybciej. Dyży czas wyłaczania też nie
ma nic do rzeczy. Powiem szczerze - dziwne dla mnie też.
2)
Sposob w jaki zasilam diody (wyswietlacze) powoduje iz swiecą one tylko
1/8
czasu - co powoduje iz swiecą ciemniej niz przy ciaglym zasilaniu (na
szczescie nie tak duzo ciemniej....). Zasilam je napieciem maxymalnym
jakie
wytrzymuja przy zasilaniu ciaglym....
Czy jak zwieksze napiecie tak aby w trybie 1/8 uzyskac jasnosc taką jak
przy
zasilaniu ciaglym to diodom (wyswietlaczom) to zaszkodzi??? Będą wtedy
dostawaly przez 1ms co 8ms impuls wyzszy niz dopuszczalne napiecie ciagle
(pewnie ze 2x albo wiecej)....
Spróbój znaleć dokłšdne dane katalogowe. Powinno pisać o maksymalnym
pršdzie impulsowym. Jeśli nie znajdziesz to lepiej nie zwiększaj.
3)
Programuje w WinAvr (w C) i ostatnio zauwazylem, ze gdy wrzuce wszystkie
operacje sterowania portami do obslugi przerwania od timera, a w petli w
main-ie zostaną mi tylko obliczenia (brak instrukcji sterowania portami)
to
przy kompilacji wszystkie instrukcje z petli w main-ie zostaja wyrzucone -
widac to po rozmiarze hexa i po dzialaniu programu....
I przyczyną nie jest na 100% to, iz na wykonywanie petli w main-ie nie
zostaje juz czasu - zostaje i ona sie wykonuje - tylko tam juz nie ma
zadnych instrukcji (w przerwaniu kozystam ze zmiennych ktore sa liczone w
petli i one sie nie zmieniaja). Dziwne....
Kompilator optymalizuje kod. Jeśli widzi, że zmienna nie jest wykorzystywana
to jej nie liczy. Nie wie, że wykorzystana będzie w przerwaniu. Ja w takich
sytuacjach robię pozorne wykorzystanie tej zmiennej, ale nie może być to
trywialne. Pewnie jest również możliwość ustawienia opcji kompilatora, ale
nie doszedłem do tego.
W drugš stronę, aby zmiany zmiennej dokonane w przerwaniu były widoczne w
programie głównym trzeba zastosować deklarację volatile (np. volatile int
costam).