niedziela, 7 października 2012

Obsługa przerwań dla Attiny2313

Witam

Dzisiaj opiszę Wam obsługę przerwań przez mikro kontroler Attiny2313.

Nasz mikro kontroler posiada dwa przerwania oznaczone jako INT0 i INT1, które zostały oznaczone w czerwonej ramce na poniższym zdjęciu.
Jak widać niektóre nóżki mają podwójne a nawet potrójne zastosowania. My będziemy dzisiaj korzystać z przerwania INT0 na porcie PD2.

Co to są przerwania?

Przerwania można opisać jako zadanie które trafia do naszego procesora i zostaje wykonane prawie natychmiast. Czyli jeżeli mamy w programie w nieskończonej pętli jakiś skrypt który zapala i gasi diody LED w określonej kolejności , to możemy dopisać przerwanie które gasi wszystkie diody LED na kilka sekund. Inaczej mówiąc kontroler zapisze sobie aktualne miejsce i zatrzyma program , a tym samym rozpocznie uruchamianie funkcji przerwania, które zrealizuje określone zadania.  Jest to bardzo przydatna rzecz w naszych programach.

Kod programu w C.

#include <avr/io.h>

#include <util/delay.h>   

#include <avr/interrupt.h>

   

char liczby[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

// liczby od 0 do 9 zapisane szesnastkowo

int i=0;



SIGNAL (SIG_INTERRUPT0)  // funckaj obsługi przerwania

{

    PORTB = 0xb6;  // wyświetla pewien znak

    _delay_ms(150);  // czeka ok 2 sekund

}



int main( void )

{

    DDRB=0xff;    // ustawia porty B jak wyjścia

  

    DDRD &= ~(1<<PORTD2); // 2 pin D jako wejśćie to jest nasz przycisk

    PORTD |= (1<<PORTD2); // podciąga do niego napięcie

  

    MCUCR |= (1<<ISC00);  // ustawienie przerwania przy zmianie stanu

    GIMSK |= (1<<INT0);   // włączenie przerwania INT0

    sei(); // uruchomienie systemu przerwań

   

  while(1)

  {

  

  for(i=0;i<=9;i++) {  // pętla która wyświetla nam cyfry od 0 do 9

    PORTB = liczby[i];  // wysyła do wyświetlacza odpowiednie piny (liczbę)

    _delay_ms(60);  // czekanie

  }

    

  

   }

  return 0;

}


Schemat układu.

Korzystamy dalej z naszego wyświetlacza 7 segmentowego, który będzie odliczał od 0 do 9 a po wciśnięciu przycisku (micro-switch), na 2 sekundy pojawi się pewnie symbol na wyświetlaczu , po czym nastąpi dalsze odliczanie na wyświetlaczu.

Do każdego pinu portu B naszego Attiny2313 podpinamy wyświetlacz jak w poprzednich artykułach.  Do portu PD2 podpinamy przycisk. Do 10 portu podpinamy masę (GND), a do 20 podpinamy napięcie (VCC) ok. 3-5V.  Najlepiej całość zmontować na pajączku lub płytce stykowej.

Tak wygląda nasz układ na płytce stykowej.


Brak komentarzy:

Prześlij komentarz