logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom][atmega] Timer1 - jest przerwanie od pełnego cyklu pomimo jego skrócenia

adam220 18 Kwi 2018 12:07 642 5
REKLAMA
  • #1 17174516
    adam220
    Poziom 14  
    Witam,
    pisze program w którym wykorzystuję 16 bitowy Timer1 z Atmegi 328.
    Najpierw konfiguruję go tak:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    a potem mam procedurę przerwania której zadaniem testowym jest wygenerować przebieg prostokątny:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Problem w tym że wygenerowany przebieg ma poprawne długości stanu niskiego i wysokiego ale co jakiś czas jest zakłócony poprzez nieoczekiwane skrócenie cyklu.

    Dzieje sie to co około 220ms co odpowiada pełnemu przebiegowi licznika (65535x3.34us=227ms).

    Dziwi mnie to bo stan licznika zmieniam w przerwaniu a on zachowuje się jakby przeleciał całe 65535 niezależnie od moich wpisów w rejestr licznika.

    Pomyslałem może jest drugi licznik 16-bitowy który mi coś zakłóca, ale ta atmega ma tylko jeden 16 bitowiec.

    Proszę o podpowiedź gdzie robię błąd.
  • REKLAMA
  • #2 17174563
    excray
    Poziom 41  
    Co to za przerwanie? Od porównania? Przepełnienia? Czy może od przechwycenia - co sugerują komentarze. Nie używasz innych przerwań? Załącz cały program.
  • REKLAMA
  • REKLAMA
  • #4 17174634
    adam220
    Poziom 14  
    @excray
    On timer1 impulsuj
    znaczy: wywołaj przerwanie przy przepełnieniu
    Wpisując do rejestru timera określone wartości SKUTECZNIE steruję przebiegiem wyjściowym. Więc wybór rodzaju przerwania jest OK.
    Recz w tym że OPRÓCZ oczekiwanych przerwań wskakują mi jakieś obce
    @nowyARM
    Czytałem, a po Twojej wskazówce przeczytałem jeszcze raz.
    Pomijając nieużywane konfiguracje: timer1=pwm, i timer1=counter
    o używanej: timer1=timer - jest tam niewiele, a właściwie nic.
    Czy masz coś konkretnego na mysli?
  • REKLAMA
  • #5 17174652
    Konto nie istnieje
    Konto nie istnieje  
  • #6 17174656
    adam220
    Poziom 14  
    Dodam że alias Sprzeglo oznacza port PC5 Atmegi 328 która nie ma tam wyjść OC (ma tylko ADC5/SCL/PCINT13).
    Reszta kodu nie ma nic wspólnego z przerwaniami. Jest wyświetlacz lcd, przyciski i diody. Działające w pętli głównej. Zresztą wszystko pozostałe jest wykomentowane a załączony kod można uważać za kompletny.

    Dodano po 4 [minuty]:

    nowyARM napisał:
    adam220 napisał:
    Czy masz coś konkretnego na mysli?

    Przerwanie od porównania. Tego używa się najczęściej, bo można dość precyzyjnie regulowac czas.


    Tak wiem o porównaniu, ale u mnie błędu nie widzę.
    Pin którego uzywam nie ma możliwości OC niestety.

    Ale gdzie jest błąd?
    Prostszego kodu opartego na przepełniueniu juz sie nie da zrobić...
REKLAMA