• Grupa PINO
  • Prv.pl
  • Patrz.pl
  • Jpg.pl
  • Blogi.pl
  • Slajdzik.pl
  • Tujest.pl
  • Moblo.pl
  • Jak.pl
  • Logowanie
  • Rejestracja

Programowanie mikrokontrolerów AVR

Materiał kierowany będzie głównie do studentów lub hobbystów programowania mikrokontrolerów, z naciskiem na praktyczną wiedzę opartą na własnych doświadczeniach.

Kategorie postów

  • elektronika (3)

Strony

  • Strona główna
  • Księga gości

Kategoria

Elektronika


Przerwania zewnętrzne AVR cz3

W języku C wyglądałoby to :

GICR |= (1 << INT0);

Co w tym wypadku jak i poprzednim oznacza operator '<<' ? Jest to tzw przesunięcie bitowe, które za parametr obiera liczbę o ile mamy przeunąć daną "1". Jeśli o 0, to de facto oznacza to sumę logiczną rejestru GICR z 1. Jeśli o 1 to sumę logiczną z 2, o 2 to z 4 itd. Jest to niejawne, ale należy o tym pamiętać jeśli chcemy być świadomymi kontruktorami. 

Aby móc korztać z przerwań na miktrokontrolerze AVR należy dołączyć bibliotekę:

#include <avr/interrupt.h>

oraz załączyć obsługę przerwań funkcją sei:  (ang. Set Interrupts – ustaw przerwania)

sei();   

 

Po ustawieniu niezbędnych rejestrów należy jeszcze wskazać co miktrokontroler ma wykonać w ramach przerwania. Do tego służy funkcja ISR (ang. Interrupt Service Routine). Jako argument przyjmują wskazany wektor przerwań. 

Dla przerwania pochodzącego z pinu INT0, wywołanie funkcji wyglądać będzie następująco:

ISR(INT0_vect) {

      //obsługa przerwania

}

 

Zbierajć wszystko w całość program poglądowy mógłby wyglądać następująco:

#include <avr/io.h>

#inculde <avr/interrupt.h>

 

ISR (INT0_vect) {

         PORTB ^= 1;

         _delay_ms(30);

}

 

int main() {

            GICR |= (1<<INT0);

            DDRB = 1;       //ustawiamy pin jako output

            sei();

            while(1) {

 

            }

}

Podsumowanie:

 

Zastosowanie przerwań z początku wydawć się może utrudnianiem życia, dla początkujących, jednak z czasem gdy projekt nie będzie miał za zadanie tylko zaświecić diody LED, ale i wiele innych czynności w tym samym momencie okaże się, że nie będzie innego wyboru. Stosowanie przerwań także pozwala na programistyczne uporanie się z tzw. drganiami styków, czyli efektowi gdy przycisk wcinął się dwkuktotnie, choć użytkownik zrobił to tylko raz. 

 

Proszę o komentarze, pomysły na kolejne wpisy lub pytania, chętnie podzielę się zdobytą ciężko wiedzą jak i umiejętnościami nabytymi we własnym zakresie.

 

Autor: Dawid Sudowski 

02 maja 2021   Dodaj komentarz
elektronika   external   interrupts   AVR  

Przerwania zewnętrzne_cz2

Na obrazku powyżej przedstawiony najbardziej popularny schemat podłączenia przycisku do miktrokontrolera. Gdy przycisk nie jest wciśnięty, obwód jest otwarty i na pinie PD2 jest stan wysoki. Gdy przycisk zostanie wciśnięty całe napięcie odłoży się na rezystancji podłączonej do zasilania Vcc, i na pinie PD2 będzie stan niski. Taka konfiguracja jest defaultowa i wymaga najmniej zmian w rejestrach.


Zaczynając zabawę zwłaszcza z procesorami ATmega, jesteśmy zdani na dokumentacje czyli potocznie zwane datasheety. Są na szczęście tak napisane, że bardzo łatwo po małej wprawie znajdziemy informacje, których potrzebujemy jako młodzi kontruktorzy. W wypadku obsługi przerwań zewnętrznych jest nie inaczej.

Pierwszym interesującym rejestrem jest rejestr :  MCUCR – MCU Control Register

The MCU Control Register contains control bits for interrupt sense control and general MCU functions.

ISC01 ISC00 Description
0    0 The low level of INT0 generates an interrupt request.
0 1  Any logical change on INT0 generates an interrupt request
1 1  Any logical change on INT0 generates an interrupt request

Gdy chcemy korzytać z konfiguracji, gdy to stan niski aktywuje przerwanie, ten rejestr nas nie interesuje. Dla osób, które z jakigoś powodu chcą aby to stan wysoki zgłaszał przerwanie, a stan niski nie musi wykorzystać opcje rising edge, czyli zgłoszenie przerwania spowodowane rosnącym zboczem.

Wtedy taki zapis w języku C wyglądałby następująco:

MMUCR |= (1 << ISC01) | (1 << ISC00) ;

Dla niewtajemniczonych co oznacza zapis '|=' można to zapisać także jako :

MMUCR = MMUCR |  (1 << ISC01) | (1 << ISC00) ; 

Operator '|' jest tak zwaną sumą logiczną lub logicznym OR. Dla sumy logicznej wystarczy jeden argument o wartości "1", aby jej suma wynosiła "1", dlatego w postaci sumy zapisujemy do rejestrów poszególne je wartości. 

 

Kolejnym rejestrem, który będzie nas interesował jest rejestr : GICR – General Interrupt Control Register 

 

 

Dla ustalenia uwagi będzie to INT0. Ten rejestr odpowiada, który dokładnie PIN będzie odpiwiadał za zgłoszenie przerwania. Dla ATmego16 będzie to pin PD2, ale dla innego miktrokontrolera będzie to odpowiednio inna wartość.

 

02 maja 2021   Dodaj komentarz
elektronika   external   interrupts  

Przerwania zewnętrzne AVR

Przerwania zewnętrzne nie tylko w miktrokontrolerach AVR, ale ogólnie służą do przerwania dotychczas wykonywanego kody i obsłużenie przerwania i powrót do dalej wykonywanego kodu. Dla hobbistów i studentów dopiero zaczynających zabawę w świecie miktrokontrolerów może to być zagadnienie nowe, jednak jest to niemalże must-have jeśli chcemy stworzyć dobry projekt.

 

Przerwań zewnętrznych używamy gdy chcemy aby to zdarzenie z zewnątrz wywołało pewną reakcję naszego miktrokontrolera. Najbardziej typowym zastosowaniem przerwania jest użycie przycisku, który np może zmieniać stan diody LED z włącząnej na wyłączoną, ale także klawiatura 4x4. 

 

Teraz konkrety, czyli to co misie lubią najbardziej:

Osobiście będę opierać się na wyprowadzeniach dla miktrokontrolera ATmega 16A.

 

Na obrazku powyżej przedstawiony najbardziej popularny schemat podłączenia przycisku do miktrokontrolera. Gdy przycisk nie jest wciśnięty, obwód jest otwarty i na pinie PD2 jest stan wysoki. Gdy przycisk zostanie wciśnięty całe napięcie odłoży się na rezystancji podłączonej do zasilania Vcc, i na pinie PD2 będzie stan niski. Taka konfiguracja jest defaultowa i wymaga najmniej zmian w rejestrach.


Zaczynając zabawę zwłaszcza z procesorami ATmega, jesteśmy zdani na dokumentacje czyli potocznie zwane datasheety. Są na szczęście tak napisane, że bardzo łatwo po małej wprawie znajdziemy informacje, których potrzebujemy jako młodzi kontruktorzy. W wypadku obsługi przerwań zewnętrznych jest nie inaczej.

Pierwszym interesującym rejestrem jest rejestr :  MCUCR – MCU Control Register

 

02 maja 2021   Dodaj komentarz
elektronika   AVR   external   interrupts  
Elektroniczne_hobby | Blogi