Skocz do zawartości

Przerwania same się odpalają.


piwniczne

Pomocna odpowiedź

Hej,

piszę w elektronice chociaż nie jestem pewien, czy nie jest to kwestia oprogramowania.

Mam problem - piszę prosty program który ma obsłużyć przerwania:

wcześniej tylko sprzęt:

Programator USBasp. zasilanie z programatora 5V.

Płytka stykowa, ATmega 32.

#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>

int main(){
DDRC = 0xff; // port jako wyjscie.
DDRD &= ~(1<<PORTD2); // drugi pin portu D jako wejscie.
DDRD &= ~(1<<PORTD3); // drugi pin portu D jako wejscie.
PORTD|=(1<<PORTD3);  // rezystor podciagajacy
PORTD|=(1<<PORTD3);	 // czyli normalnie jest stan wysoki.


MCUCR|=(1<<ISC01)|(1<<ISC11);
GICR|=(1<<INT0)|(1<<INT1);
sei();

PORTC=0xff;
_delay_ms(300);
PORTC=0x00;

while(1){

}
}

ISR(INT0_vect){

PORTC=0xff;

}

ISR(INT1_vect){

PORTC=0x00;

}

Z tego co rozumiem, oba INT0/1 powinny reagować na zbocze opadające.

Myślę- spoko. Piny są podciągnięte więc będą w stanie wysokim a jak je zewrę do masy to wejdą w stan niski. Więc domyślnie diody się nie świecą, jak zaczne się bawić raz jednym przerwaniem raz drugim to będą migać zależnie od tego co podłączać do masy.

Problem polega na tym, że program mi wariuje. Nawet jak nic nie zmienię- do pinów na przerwanie nie jest nic podpięte - to dioda i tak się sama zapala po jakiejś sekundzie.

Jeżeli gaszę ją przerwaniem- po krótszej chwili (<1s) znów się zapal i świeci.

Nie mam pomysłu o co chodzi dlatego piszę temat.

Wcześniej widziałem dziwne zależności pokroju dioda gaśnie gdy dotykam okolic portu USB 😃

dla przykladu jak zrobię obsługę przerwań w postaci:

ISR(INT0_vect){

//PORTC=0xff;

}

ISR(INT1_vect){
PORTC=0xff;
_delay_ms(500);
PORTC=0x00;

}

to jest ok.

Link do komentarza
Share on other sites

Rezystor podłączyłeś tylko do PORTD3(dałeś dwa razy PORTD|=(1<, więc PORTD2 gdy nie jest do niczego podpięty ma stan nieokreślony i mogą tam się dziać różne rzeczy. Podepnij rezystor i powinno działać OK. I nie powinno dawać się opóźnień w przerwaniu.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.