f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - niedziałające przerwanie PCINT

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
niedziałające przerwanie PCINT
Autor Wiadomość
maxLay 

Dołączył: 10 Kwi 2012
Posty: 1
Wysłany: Wto Kwi 10, 2012 6:31 pm   niedziałające przerwanie PCINT

Witam!

Mam problem z przerwaniami PCINT, chciałbym aby po wciśnięciu przycisku zostało uruchomione wywoływane przerwanie. Problem polega na tym, żę zawsze uruchamiane jest przerwanie PCINT0, niezależnie od tego jaki przycisk wcisnę.

Jestem początkujący i będę wdzięczny za pomoc i wskazówki dotyczące problemu.
Pozdrawiam.

Kod:

#include <avr/io.h>
#include <avr/interrupt.h>
 
ISR(PCINT0_vect)
{
    PORTB &= ~_BV(0);
}

ISR(PCINT1_vect)
{
    PORTB &= ~_BV(1);
}


 
int main(void)
{
 
   
    DDRB = 0xFF;
    PORTB = 0xFF;

    DDRA=0x00;
    PORTA=0x03;

    PCMSK0 |= (1<<PCINT0)|(1<<PCINT1);
    PCICR |= (1<<PCIE0);
    PCIFR |= (1<<PCIF0);
   
    sei();
     while(1);

return 0;
}
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Wto Kwi 10, 2012 6:49 pm   

1. o jaki procesor chodzi? AtMega644p(tak zakładam i dalej omawiam ten procesor)?
2. przerwania PCInt działają na innej zasadzie niż zwykłe przerwania, pomijając to, że działają na zmianę stanu, funkcjonują tak:

*Przerwania są pogrupowane w odpowiednie grupy:
a) piny PCINT0-PCINT7 -> wywołują przerwanie PCINT0
b) PCINT8-PCINT15 -> PCINT1
c) PCINT16-PCINT23 -> PCINT2
d) PCINT24-PCINT31 -> PCINT3

*do określenia pinów, które mają wywołać przerwanie służą rejestry PCMSK
odpowiadają one odpowiednim bitom i za ich pomocą mozemy wybrać piny, które mają wywoływać przerwanie

*wewnątrz przerwania możemy sprawdzić rejestr PINn i określić który pin zmienił swój stan i wywołał przerwanie

*jeśli przerwania mają wywoływać przyciski to zmiana stanu pinu w przerwaniu nie jest dobrym sposobem - poczytaj: drgania styków

Jednym słowem w celu dalszej nauki polecam lekturę:
1. dokumentacji procesora: http://www.atmel.com/Images/doc8011.pdf (strony 69-71)
2. artykuł o drganiach styków: http://mikrokontrolery.bl...debouncing.html
_________________
http://www.piotr94.net21.pl/
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group