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

Atmega16, Bascom: Przerwania nie działają, dioda nie gaśnie po naciśnięciu przycisku

finch 22 Maj 2008 22:55 1330 7
REKLAMA
  • #1 5170155
    finch
    Poziom 20  
    Posty: 516
    Pomógł: 2
    Ocena: 11
    Config Pinb.0 = Output                                      'konfiguracja portów
    Config Pinb.1 = Output
    Config Pinb.6 = Input
    Config Pind.3 = Input
    
    Portd.3 = 1                                                 'podciągnięcia wejść
    Portb.6 = 1
    Config Int1 = Low Level                                     'konifguracja przerwania
      Enable Interrupts
      Enable Int1
    
    On Int1 Przerw
    
    
    Do                                                          'petla glowna prgramu
       Portb.1 = 1
    Portb.0 = 1
    Waitms 500
    Portb.0 = 0
    Waitms 10
    Loop
    
    End
    
    Przerw:                                                     'obsługa przerwania
       Disable Interrupts
        Do
    Portb.0 = 1
    Portb.1 = 0
    
          Loop Until Portb.6 = 0
          Enable Interrupts
    Return
    
    
    
    


    Stworzyłem coś takiego zadaniem programu jest miganie diodą podłączoną do linii 0 portb, i to działa świetnie.
    pętla ma biegać sobie w nieskończoność do momentu aż ktoś naciśnie przycisk portd.3 (int1) wtedy dioda ma zgasnąć i na wyjściu portb.1 ma się pojawić stan wysoki który ma trwać tak długo jak długo jest wciśnięty przycisk podłączony do linii portb.6, i właśnie to nie chce działać. Program tak jakby nie reagował na obsługę przerwania, dioda która ma w ogóle nie migać miga z tym ze znacznie rzadziej

    Przyciski są podłączone do GND LED`y do Vcc.

    Proszę o jakieś rady bo moje pomysły się skończyły
  • REKLAMA
  • #2 5171907
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    finch napisał:
    ... i na wyjściu portb.1 ma się pojawić stan wysoki który ma trwać tak długo jak długo jest wciśnięty przycisk podłączony do linii portb.6,...

    A która to część programu sprawdza , czy przycisk jest wciśnięty , czy już nie jest :?: Jeśli myślisz że to ten fragment ...
    
          Loop Until Portb.6 = 0
    
    ... , to zaprawdę powiadam Ci - jesteś w błędzie ;)
    finch napisał:
    Proszę o jakieś rady bo moje pomysły się skończyły

    Odpowiedź jest zawsze ta sama: RTFM.
  • REKLAMA
  • #3 5171929
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2821
    Jeśli już to nie Portb.6 tylko Pinb.6
    Zumek :arrow: wyjaśnij dokładnie koledze finch co to znaczy,
    Odpowiedź jest zawsze ta sama: RTFM. 

    bo może nie wiedzieć :)
  • #4 5171972
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Freddy napisał:
    ...Zumek :arrow: wyjaśnij dokładnie koledze finch co to znaczy,
    Odpowiedź jest zawsze ta sama: RTFM. 

    bo może nie wiedzieć :)

    Nie wiem czy zauważyłeś , ale podałem odnośnik do opisu tego skrótu ;)

    Piotrek
  • REKLAMA
  • #5 5171989
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2821
    Uuuupsss a jak to się stało, że tego nie zauważyłem ?????? Trzeba ubierać okulary. :D
    Ale to i tak delikatne tłumaczenie, ja znam wersję z fu...... zamiast F :)
  • REKLAMA
  • #6 5175632
    finch
    Poziom 20  
    Posty: 516
    Pomógł: 2
    Ocena: 11
    zumek napisał:
    
          Loop Until Portb.6 = 0

    ... , to zaprawdę powiadam Ci - jesteś w błędzie


    to może powiesz mi na czym ten błąd polega

    zumek napisał:
    Odpowiedź jest zawsze ta sama: RTFM.


    a to to naprawdę dużo wniosło do tematu dla Twojej wiadomości czytałem manuala od bascoma ale skoro tu pisze to znaczy że skończyły mi się pomysły i nie mam pojęcia co zrobić.

    Freddy napisał:
    Jeśli już to nie Portb.6 tylko Pinb.6


    Freddy faktycznie masz racje dzięki za podpowiedź
  • #7 5175701
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    finch napisał:
    ...a to to naprawdę dużo wniosło do tematu dla Twojej wiadomości czytałem manuala od bascoma ale skoro tu pisze to znaczy że skończyły mi się pomysły i nie mam pojęcia co zrobić.

    Nie twierdzę , że nie czytałeś manuala od Bascoma , ale twierdzę , że nie czytałeś manuala od ATMega16.Gdybyś go czytał , to nie popełniłbyś błędu , który popełniłeś i nie wyłączał przerwań globalnych w procedurze przerwania , bo to się "samo robi" ;)

    Piotrek
  • #8 5175830
    finch
    Poziom 20  
    Posty: 516
    Pomógł: 2
    Ocena: 11
    a o tym mówisz, to już wywaliłem bo sie doczytałem gdzie indziej na ten temat. Ale i tak działać nie chce

    Dodano po 2 [godziny] 29 [minuty]:

    Problem rozwiązany chciałem podziękować koledze danthe za pomoc, temat zamykam.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemu z obsługą przerwań w mikrokontrolerze Atmega16 programowanym w Bascomie. Autor opisuje program, w którym dioda podłączona do portu B.0 miga w pętli głównej, a po naciśnięciu przycisku podłączonego do portu D.3 (przerwanie INT1) dioda powinna zgasnąć. Problem polega na tym, że przerwania nie działają poprawnie, a dioda nie gaśnie po naciśnięciu przycisku. Wskazano, że w procedurze obsługi przerwania nie należy wyłączać globalnych przerwań, ponieważ mikrokontroler robi to automatycznie. Ponadto zwrócono uwagę na poprawną konfigurację portów i sygnałów wejściowych (np. Pinb.6 zamiast Portb.6). Po usunięciu błędów i zastosowaniu się do zaleceń problem został rozwiązany.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA