atmega8 / kolejne porady && LEDs

Jan 12, 2006 1 Replies

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³



U¿ytkownik "sikurasaka" snipped-for-privacy@op.pl napisa³ w wiadomoœci news:dq5kqk$bte$ snipped-for-privacy@news.onet.pl...

1ms.......odswierzanie

Porty siê wyrabiaj¹ mog¹ pracowaæ i szybciej. Dy¿y czas wy³aczania te¿ nie ma nic do rzeczy. Powiem szczerze - dziwne dla mnie te¿.

Spróbój znaleŸæ dok³¹dne dane katalogowe. Powinno pisaæ o maksymalnym pr¹dzie impulsowym. Jeœli nie znajdziesz to lepiej nie zwiêkszaj.

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required