Lösung: Arduino UNO Zähler

C-Quelltext:

#define F_CPU 16000000UL

#include <avr/io.h>
#include <stdint.h>


int main(void)
{
	DDRD = 0b11111111;
	PORTD = 0b00000000;
	
	TCCR1B = 0b00000101;
	
	uint16_t zaehler = 0;
	
	while (1)
	{
		zaehler = TCNT1;
		PORTD = zaehler/256;
	}
}

Quelltext: Erklärung

Compiler-Direktiven

#include

#include <avr/io.h>: AVR-I/O Bibliothek einbinden

#include <stdint.h>: Standard-Integer Bibliothek einbinden

main() Funktion

DDRD |= 0b11111111;
PORTD &= 0b00000000;

PortD als Ausgang definieren. Alle Pins sollen als Ausgang fungieren. Alle LEDs sollen aus sein.

TCCR1B = 0b00000101;

Zähler TC1 mit einem Prescaler von 1024 im Normalmodus Zählen.

uint16_t zaehler=0;

Variable zaehler als uint16_t deklarieren und mit 0 initialisieren.

Hauptschleife

  • zaehler abfragen
  • zaehler durch 256 dividieren (was einem Bitshifting von 8 Stellen nach rechts entspricht) und an PortD ausgeben