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

ATmega8L: Jak mierzyć szerokość impulsu za pomocą przerwania INT1?

Dżefri 24 Sie 2017 19:22 993 5
  • #1 16661262
    Dżefri
    Poziom 5  
    Czesc

    Program ma za zadanie mierzyc szerokosc impulsu za pomoca przerwania INT1. W skrocie dziala to tak ze podczas zbocza narastajacego wykonuje sie przerwanie ktore wlacza timer. Timer ma swoje wlasne przerwanie od przepelnienia i zlicza pelne cykle przepelnienien. Gdy pojawi sie zbocze opadajace to wylacza timer i zapisuje jego wartosc ktora nastepnie jest uzyta do obliczen w petli glownej.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Na pinie PB1 wstawilem diode ktora ma sie zapalic w przerwaniu INT1. Nie zapala sie wiec przerwanie sie nie wykonuje. Nie wiem dlaczego. Ktos wychwyci gdzie tu blad?
  • #2 16661332
    r3w4rd
    Poziom 15  
    Jak masz podłączoną diodę, do plusa czy do masy?
    Spróbuj w przerwaniu int1 w pętli if skorzystać z flagi, np:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W przerwaniu jest PORTB|=(1<<PB1), a gdzie w kodzie jest zmiana stanu?
  • #3 16661346
    dondu
    Moderator na urlopie...
    Pomyliłeś rejestry bity ISCxx nie są w rejestrze MCUCSR, tylko MCUCR.

    Nie wywołujesz funkcji Init_pomiar() - zamiast tego w main() wstawiłeś prototyp funkcji:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Reszty programu nie sprawdzałem.

    r3w4rd napisał:
    Spróbuj w przerwaniu int1 w pętli if skorzystać z flagi, np:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W jakim celu tworzyć zbędną zmienną, skoro stan zbocza można sprawdzać bitami ISCxx, co właśnie autor czyni (choć w złym rejestrze)?
  • #4 16661413
    Konto nie istnieje
    Konto nie istnieje  
  • #5 16661570
    Jakub17
    Poziom 6  
    dondu napisał:
    Pomyliłeś rejestry bity ISCxx nie są w rejestrze MCUCSR, tylko MCUCR.

    Nie wywołujesz funkcji Init_pomiar() - zamiast tego w main() wstawiłeś prototyp funkcji:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Reszty programu nie sprawdzałem.

    r3w4rd napisał:
    Spróbuj w przerwaniu int1 w pętli if skorzystać z flagi, np:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W jakim celu tworzyć zbędną zmienną, skoro stan zbocza można sprawdzać bitami ISCxx, co właśnie autor czyni (choć w złym rejestrze)?


    Dzieki dondu:) Faktycznie, miales racje, problem byl ze zlym rejestrem. A ten byk z prototypem wewnatrz main powstal probie uporzadkowania kodu by nadawal sie na publikacje na forum, nastepnym razem bede bardziej czujny.
REKLAMA