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

Atmega32[C] - Przerwanie od timera1 nie działa, miganie diody co 1s

Block4r 31 Mar 2014 21:36 1302 12
  • #1 13463120
    Block4r
    Poziom 10  
    Witam wszystkich, mam problem z przerwaniem od przepelnienia, timer1. Siedze nad ta prosta rzecza któryś dzień z kolei i nie moge sobię poradzić. Prosiłbym o sprawdzenie kodu.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    W moim programie chciałbym żeby, dioda migała co 1s.
  • #3 13463153
    skalsky5000
    Poziom 21  
    PORTA|=0x00 tak nie zerujesz portu,skoro zerujesz cały port to niepotrzebnie stosujesz operacje bitowe.Spróbuj tak: PORTA =0;
  • #4 13463165
    Block4r
    Poziom 10  
    To moze ja to źle rozumiem: program sobie leci leci, a gdy licznik timera się przepełni następuje przerwanie, program wyskakuje do " ISR (TIMER1_OVF_vect){} " robi tam co ma robić i wraca z powrotem do w tym przypadku pętli.
  • #6 13463202
    Tomq
    Poziom 38  
    Samo zapalanie i gaszenie diody można zrobić w przerwaniu, pętla główna może być pusta, np. (tu akurat przerwanie overflow):

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



    W ten sposób widać czy działa przerwanie:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Dioda zmienia stan na przeciwny.
  • #7 13463201
    Block4r
    Poziom 10  
    500ms, są powstawiane bo chciałem zobaczyć czy działa przerwanie, bo bralem pod uwage że zła wartość mogłem wpisać do rejestru OCR1A, to jest główny powód dlaczego tam to się znajduje.

    Dodano po 6 [minuty]:

    oki, dzięki. Wrzuciłem odrazu program od Ciebie na Atmege i śmiga. Postaram się coś pokombinować jeszcze, doczytać z tego co od was otrzymałem, i zobaczymy jak to będzie.

    Dodano po 15 [minuty]:

    Wrzucam, bo coś doczytałem, wzorowałem się na Twoim programie ale nie dzieje sie nic.

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


    Moderowany przez dondu:

    Wybierając język dla znacznika SYNTAX wybierz "C", a nie "jezyk_c"- zobacz jak wygląda kod programu, którego SYNTAX poprawiłem w tym poście w porównaniu do pierwszego Twojego postu.

  • #8 13463385
    BlueDraco
    Specjalista - Mikrokontrolery
    Skoro co piąte przerwanie każesz mikrokontrolerowi nie zmieniać stanu portu, to brak migania diody jest jak najbardziej normalny.
  • #9 13463406
    Block4r
    Poziom 10  
    Nie rozumiem Twojej wypowiedzi, PORTA=0xff ustawiony jest jako cały wyłączony, a w przerwaniu wyraźnie jest że ma zmienić na 0x00. Zreszta dioda się nawet nie zapala. Ja przerobilem program kolegi wyżej, który działa.
  • #10 13463427
    mi14chal
    Poziom 28  
    Poczytaj jak działa funkcja xor skoro masz na początku 0xFF i zrobisz xor z 0x00 to otrzymasz 0xFF.
  • #11 13463470
    Block4r
    Poziom 10  
    czy ustawie 0xff w ISR, czy 0x00 i tak nie działa i tak nie działa. Próbowałem i z ' |= ' i z '^=' i z samym '=' i jest to samo.
  • #12 13463643
    mi14chal
    Poziom 28  
    Jak chcesz zrobić toggle to musisz zrobić: port ^= 0xFF po za tym zapoznaj się z tabelami prawd, jak działa OR, ADN, XOR, a nie na chybił trafił tak jak w totka.
  • #13 13463902
    dondu
    Moderator na urlopie...
    Block4r napisał:
    czy ustawie 0xff w ISR, czy 0x00 i tak nie działa i tak nie działa. Próbowałem i z ' |= ' i z '^=' i z samym '=' i jest to samo.

    Poćwicz najpierw C w kompilatorze online: http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html

    ... i pokaż swój schemat, bo coś mi się wydaje, że nieprawidłowo podłączyłeś swój mikrokontroler: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html
REKLAMA