Skocz do zawartości

[C] Jak pisać przerwania?


Rutr

Pomocna odpowiedź

Zrobiłem wyświetlacz 4-cyfrowy 7-segmentowy, sterowany multiplexowo. Szukałem na internecie i nigdzie nie znalazłem opisu przerwań. Proszę o pomoc jak ustawić tak żeby co kilka ms wykonywał się kod przerwania. Wiem że trzeba ustawić jakieś rejestry, tylko nie wiem które, i co określają. Z góry dzięki za pomoc.

Link do komentarza
Share on other sites

Wszystko ładnie pięknie jest opisane w powyższym linku poza jedną rzeczą. Niestety jest tam błąd rozumowania przez co później komuś wyjdą głupoty. Chodzi o informację jak uzyskać np. częstotliwość migania diody równą 1Hz a wynikiem jest w rzeczywistości miganie z częstotliwością 0,5Hz (1 sekunda świecenia i 1 sekunda dioda zgaszona), cały ten artykuł opiera się na błędnym założeniu, autor chyba zapomniał że okres to nie czas tylko włączenia diody a i włączenia i wyłączenia.

Link do komentarza
Share on other sites

Dzięki Wielkie! O to mi chodziło.

Chyba znalazłem więcej błędów. Preskaler dzieli impulsy zegara czy je zlicza?

Preskaler jest częścią obwodu timera, który pozwala dzielić impuls zegarowy liczbą o podstawie dwa (2^n), redukując rozdzielczość ale rozszerzając zakres.
Ostatnia część zdania jest błędna (odwrotna) do tego co ją poprzedza.
Odmierzony odstęp czasu = (1 / częstotliwość zegara)/Preskaler = (Preskaler / częstotliwość zegara)

Tu tak samo, ostanie wyrażenie nie jest równe przedostatniemu. Z reszty artykułu mogę wnioskować, że preskaler liczy wiele impulsów i przekazuje je do timera jako jeden, a prawidłowy wzór to

Odmierzony odstęp czasu = (1 / częstotliwość zegara)*Preskaler = (Preskaler / częstotliwość zegara)
Mam rację?
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Zdanie o preskalerze, które cytujesz jest błędne ale twoja interpretacja również. Preskaler nie dzieli impulsu tylko dzieli częstotliwość. Jeżeli nominalna częstotliwość to 1MHz to przy preskalerze 1 częstotliwość inkrementowania timera będzie wynosić również 1MHz, przy preskalerze 2 - 500kHz, przy 8 125kHz itd.

Link do komentarza
Share on other sites

W orginale pisze że dzieli, ja napisałem ze zlicza wiele i podaje jako jeden impuls.

Jeżeli ustawie TCCR0 (atmega8) na preskaler 8, to timer wystartuje, tak? jak dojedzie do 0xFF to automatycznie zacznie od nowa czy się wyzeruje i wyłączy?

Link do komentarza
Share on other sites

Mają racje z dzieleniem ale to częstotliwość jest dzielona a nie impuls. Z resztą wyrażenie dzielenie impulsu jest nieprecyzyjne bo co w nim dokładnie jest dzielone? Okres? Nie jesteśmy w stanie tego jednoznacznie stwierdzić.

Jeżeli ustawisz preskaler na wartość różną od 0 to timer zacznie zliczać i po przepełnieniu będzie pracował od początku. W międzyczasie może wywoływać przerwanie, generować na odpowiednim pinie sygnał PWM itp w zależności od konfiguracji.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.