Zaraz dokonam kilku kosmetycznych zmian i ponownie dodam enable timer2. Dam znać o efektach
Dodano po 13 [minuty]: Do dyspozycji mamy nastepujący kod, który generalnie już działa (z małymi wadami)
Zaloguj się, aby zobaczyć kod
Program realizuje PWM, wyświetla na wyświetlaczu LED informację, ale ta informacja jest uszkodzona, bo nie jest wyświetlana pierwsza cyfra (setki). Wyeliminowałem błąd w połączeniach. Anody są sterowane z portu C (nogi 7-5, z czego noga 7 odpowiada za setki). Nie widzę błędu...
Aha, cyfra jedności ma spore duchy, to pewnie skutek tego, że setki nie są wyświetlane...
(mod i dzielenie wywalę do pętli głównej w kolejnej wersji kodu)
Dodano po 4 [minuty]: Czy obecnośc obliczeń w obsłudze przerwania może dawac taki efekt?
Dodano po 14 [minuty]: Kolejna wersja kodu z obliczeniami w pętli głównej. Nie zmieniło to działania całego programu. Ponownie sprawdziłem sprzęt, by się upewnić, że cyfra setek jest sprawna i poprawnie sterowana. Prezentuję kod:
Zaloguj się, aby zobaczyć kod
Dodano po 37 [minuty]: Przedstawiam w pełni działający kod. Nie wywaliłem debounce, bo nie przeszkadza mi wielokrotne naciskanie klawiszy plus i minus.
Zaloguj się, aby zobaczyć kod
Wyświetlanie setek nie działało, bo pętla warunkowa if anoda = 3 then anoda = 0 była na końcu obsługi przerwania. Przeniosłem na początek i wszystko ruszyło jak nalezy. W moim przypadku dzielenie implementowane w przerwaniu nie przeszkadzało, ale pewnie byłoby problemem w przypadku rozbudowanych obliczeń. Nauczyłem się również, że zmienne maja zakres globalny w każdej sekundzie jej istnienia. Nie można dokonywać obliczeń na zmiennych, które bezpośrednio sterują segmentami, bo widać zakłócenia. Bardzo dziekuje za wszystkie podpowiedzi. Do teraz nie wiem, dlaczego nie działał timer2
Dodano po 14 [minuty]: Mam jeszcze jedno pytanie dotyczące obsługi klawiszy.
Mozna w prosty sposób zrobic tak, by:
Naciskam klawisz i zmienna się np. zwiększa
Trzymam klawisz naciśnięty
jakiś odstęp czasowy, np. sekunda, a potem np. zwiekszamy wartość zmiennej póki klawisz jest przycisnięty.
puszczamy klawisz i zmienna przestaje być zwiekszana