Przerwania dla odczytu diody – cz.4

W mikrokontrolerach AVR wyróżniamy przerwania sprzętowe oraz programowe timery, które mogą przejąć ich funkcję.

Przerwania sprzętowe.

W przykładowej Atmedze 32/328 występują 2 przerwania sprzętowe, na pinach INT0 oraz INT1.
Dla atmegi 32 są to piny – (PD2[16]/PD3[17]) oraz dla atmegi 328 piny (PD2[18]/PD3[19]) – proszę zwrócić uwagę, że piny mają lub mogą mieć trochę odmienne numeracje.

Atmega 328 pinout

Przerwania sprzętowe mogą reagować na zbocze rosnące, opadające oraz na wykrytą zmianę stanu. Odpowiedni zapis w kodzie pozwala reagować na zmiany stanu na pinie, jest to metoda “attachInterrupt(<pin>, <callback>, <zbocze>)” która na skutek wzrostu napięcia (zbocze rosnące) uruchamia instrukcję “setEdge”. Założeniem jest aby kod pod przerwaniem wykonywał się krótko, może to być flaga wpływająca na wywołanie innego kodu w pętli loop programu. Zapobiega to wstrzymywaniu pracy procesora na dłuższy czas. Oczywiście wykorzystanie osobnego przerwania pinu do takiej czynności jest trochę marnotrawstwem zasobu, jednak w tym momencie i tak do niczego innego nie będę go wykorzystał. Również można wykorzystać timery wewnętrzne.

 

#include "Arduino.h"

int interruptPin = 2;
int sendToDiode = 13;
volatile auto flaga = false;

void setup()
{
	Serial.begin(9600);
	pinMode(interruptPin, INPUT); //pin dla przerwania
	attachInterrupt(digitalPinToInterrupt(interruptPin), setEdge, RISING); //przerwanie na zbocze wznoszace
}

void loop()
{
        //test sprawdzający działanie przerwania.
	if(flaga){
		Serial.print("1");
		digitalWrite(sendToDiode, 1);
		_delay_ms(100);
		digitalWrite(sendToDiode, 0);
		flaga = false;
	}

}

void setEdge(){ //reakcja na przerwanie
	flaga = true;
}

Co dalej z pomiarem energii

Kontynuując temat licznika energii, miganie diody trzeba zastąpić kodem obsługującym wykonanie konkretnego zadania. Informacje, że takie przerwanie nastąpiło wysłać można bezpośrednio do innego urządzenia agregującego dane. W tym wypadku należałoby obsłużyć interfejs komunikacyjny dowolnego rodzaju. Idąc dalej tym tropem nie zawsze można liczyć, że przesyłanie danych odbędzie się poprawnie i na pewno do niego dojdzie. W razie problemów z połączeniem dłuższym niż kilkanaście sekund, może nawarstwić się informacji o liczbie przerwań. Przesłanie ich jednym ciągiem, z pewnością zaburzy dokładność takiego pomiaru energii. Dlatego dobrze byłoby zapisywać gdzieś aktualną godzinę razem z informacją o przerwaniu, czyli zużyciu 1W. Tu posłużyć warto się zewnętrznym zegarem RTC, ceny zwykle występują między 4-100zł. Można też łączyć się przez internet i pobierać aktualny czas z jakiegoś serwera, najlepiej własnego. Następnie działać na kwarcu procesora i co jakiś czas uaktualniać wartość czasu.

 

 

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.