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

[Atmega8][Bascom] Wywolanie przerwania stanem komparatora

morswin89 30 Kwi 2009 15:43 2806 9
REKLAMA
  • #1 6474932
    morswin89
    Poziom 23  
    regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Config Pinb.2 = Input
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    Config Pinb.5 = Output
    Config Aci = On , Compare = Off , Trigger = Rising
    
    On Aci Przeciazenie
    Enable Interrupts
    
    Gora Alias Pinb.1
    Dol Alias Pinb.0
    Zatrz Alias Pinb.2
    Wlacz Alias Portb.3
    Wej1 Alias Portb.4
    Wej2 Alias Portb.5
    
    Set Portb.0
    Set Portb.1
    Set Portb.2
    
    Do
    
       Debounce Gora , 0 , Pr1 , Sub
       Debounce Zatrz , 0 , Pr2 , Sub
       Debounce Dol , 0 , Pr3 , Sub
    
    Loop
    
    End
    
    Pr1:
       Set Wlacz
       Set Wej1
       Reset Wej2
    Return
    
    Pr2:
       Reset Wlacz
       Reset Wej1
       Reset Wej2
    Return
    
    Pr3:
       Set Wlacz
       Reset Wej1
       Set Wej2
    Return
    
    Przeciazenie:
       Reset Wlacz
    Return
    


    Mam taki kod i chcę gdy na wejściu AINO0 będzie wyższe napięcie niż napięcie odniesienia na wejściu AINO1, sygnał z komparatora wywoła przerwanie i przeniesie do podprogramu który ustawi stan niski na wyjściu Portb.3 i tym samym silnik zostanie zatrzymany.
  • REKLAMA
  • #2 6475127
    dawid512
    Poziom 32  
    A w czym problem?
  • REKLAMA
  • REKLAMA
  • #4 6475247
    mirekk36
    Poziom 42  
    Witam,

    no proszę, a teraz kolega na odwrót:

    Zatrz Alias Pinb.2 


    przecież Pinb.2 to wejście a nie wyjście, więc jak polecenie



    może wpłynąć na zmianę stanu wyjścia Portb.2 ? ;)

    chyba trzeba by było dać:

    Zatrz Alias Portb.2 


    w tym przypadku - prawda?

    pozdr
  • #5 6475342
    morswin89
    Poziom 23  
    Fakt mój błąd ale to jest akurat dobrze :)
    Natomiast tu powinno być tak:
    Przeciazenie: 
       Reset Wlacz 
    Return 
    


    Po ponownym skompilowaniu tego po tej zmianie i tak efekt jest bez zmian.
  • REKLAMA
  • #6 6475382
    dawid512
    Poziom 32  
    Proponuję dodać: start AC.
  • #8 6475525
    janbernat
    Poziom 38  
    dawid512:
    Config Aci=on oznacza włączenie zasilania komparatora.
    morswin89- sprawdź czy komparator działa.
    Odczytaj bit ACO.

    Dodano po 1 [minuty]:

    Może zamieniłeś wejścia komparatora-ja kiedyś coś takiego zrobiłem.

    Dodano po 5 [minuty]:
    Sprawdź działanie komparatora:
    temp=Acsr.aco
    if temp=0 itd.
  • #9 6476745
    mirekk36
    Poziom 42  
    morswin89 -> naucz się sprawdzać po kolei co może nie działać. Bo teraz piszesz, że już nawet ci pętla główna nie działa - więc co? wszystko padło?

    najpierw sprawdź sobie czy działa ci przede wszystkim przerwanie komparatora (podłącz sobie diodę LED na wyjście, które przełączasz w przerwaniu i symulując ręcznie napięcie na wejściu - patrz co się z nią dzieje, jaki i kiedy wywoływane jest przerwanie i czy w ogóle jest wywoływane. W trakcie tego sprawdzania zaremuj sobie wręcz środek pętli głównej żeby nie mieszać sobie w głowie. Jeśli przerwanie nie będzie uruchamiane - to szukaj najpierw błędu w połączeniach lub tej części programu, która tego dotyczy.

    gdy już dojdziesz do ładu z tym przerwaniem, to weź się po kolei za analizę swojej pętelki głównej.

    Na prawdę mając zwykłe diody LED można obejść się w takim przypadku bez debugera i szybko wyłapać błędy - tylko trza działać po kolei i sukcesywnie.
  • #10 6477946
    zumek
    Poziom 39  
    morswin89 napisał:
    Dalej nic...

    Włącz przerwania od ACI.
REKLAMA