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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.