In diesem kurzen Demonstrationsbeispiel, wird gezeigt, wie man mittels Timer0 eine Vergleichswertauswertung vornimmt. Ziel ist es, bei Erreichen eines bestimmten (frei definierbaren) Zählerstandes und somit einer frei definierbaren Zeit nach Zählerstart , den Ausgang des Timers am Mikrocontroller zu steuern. In diesem Fall, soll der Ausgang (OC0A = digitaler Pin 6 am Arduino) getoggelt werden.

An Pin 6 des Arduinos ist eine LED mit Vorwiderstand angeschlossen, die das toggeln optisch sichtbar macht:

  Aufbau Hardware

Abb.: Einfacher Aufbau; Quelle: BBS2 Wolfsburg


Folgender Quellcode realisiert das Beispiel:

Es wird der größte Vorteiler (1024) verwendet, um das Toggeln optisch sichtbar zu machen.

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>


int main(void)
{
	DDRD = (1<<DDD7) | (1 << DDD6) |(0 << DDD5);                      // setzt digitalen Pin 6 als Output
	
	PORTD |= (1<<PORTD5);
	OCR0A = (0<<7) | (0<<6) | (1<<6) | (0 <<5) | (0 << 4) | (0<<3) | (0<<2) | (1<<1) | (1 <<0);   // setzen des Vergleichwertes 001000011 entspricht 67
	
	//TCCR0A = (0<< COM0A1) | (1<<COM0A0) | (0<< COM0B0) | (0<<COM0B1) | (0<<WGM01) | (0<<WGM00);  // konfig. Timer0 -> Toggeln OC0A (Pin 6) bei 
	                                                                                             // erreichen des Vergleichwertes
	//TCCR0B = (0<<FOC0A) | (0<<FOC0B) | (0<<WGM02) | (1 << CS02) | (0<<CS01) | (1<<CS00);         //konfig. Timer0 -> Vorteiler 1024
	
    while (1) 
    {
		if((PIND & (1 << PORTD5)))
		{
			PORTD = (1<<PORTD7);
		}
		else
		{
			PORTD = (0<<PORTD7);
		}
	}
}


Ergebnis:

Trotz des hohen Vorteilers (1024), zählt der 8-Bit-Zähler sehr schnell. Das heißt die Zeit von Vergleichswert zu Vergleichswert ist sehr kurz, somit geht auch das Toggeln sehr schnell. Als Ergebnis erhält man eine schnell flackernde LED.

Frequenz der Zählerdurchläufe: Mikorcontroller-Taktfrequenz / (Vorteiler * Anzahl der Schritte pro Durchlauf) = 16 MHz / (1024 * 256 ) = 61,035 Hz

Die Blinkfrequenz liegt bei der Hälfte der Taktfrequenz: 61,035 Hz / 2 = 30,52 Hz

Dauer eines Zählerdurchlaufes: 1/Blinkfrequenz = 1 / 61,035 Hz = 16,384 ms

In Bezug auf den Zählerstand 0 findet der Zustandswechsel der LED nach jeweils:

t = 67/256 * 16,384 ms = 4,288 ms

Zuletzt geändert: Montag, 21. Februar 2022, 09:14