Hallo

als ich noch mit dem Asuro gespielt hatte, hab ich den in Assembler programmiert
Ich hab' mir den asuro ins Haus geholt, weil ich endlich mal in c einsteigen wollte. In Assembler ist halt alles was anspruchsvoller ist etwas zäh, da ist c als "Hochsprache" schon deutlich mächtiger. Außerdem kann man mit c auch recht nahe an der Maschine bleiben, wenn man weis, wie es geht. Mit Hilfe der tollen Tutorials auf deiner HP habe ich nun endlich auch die Timergeschichte kapiert und damit auch die nächste Hürde genommen:

Code:
#include <avr/io.h>
#include <avr/interrupt.h>

unsigned int timer_startwert=65536-7812; // 8MHz/1024=7812,5
int main(void)
{
	DDRB=0; // nicht benoetigte Ports auf Eingang setzen
	DDRC=0;
	DDRD=(1 << PD2); //rote StatusLED haengt an PD2(= Port D, Bit2)
	PORTD=0; // alles aus
	
/* Es folgt eine Verzögerung von ca. 1 Sekunde */

   TCNT1=timer_startwert; // 16-Bit auf einmal laden?
   TCCR1B |= 0b00000101; // Prescaller Timer1 auf 1024 setzen
   while(!(TIFR & 0b00000100)); //Warten bis Überlauf Timer1
   TCCR1B &= ~0b00000101; // Prescaller löschen bedeutet Timer1 stoppen
   TIFR |= 0b00000100; // Flag setzen bedeutet Flag wieder löschen

	while(1) PORTD=((PINC & (1<<PC4))  >> 2); // eine Taste schaltet StatusLED aus

	return(0);
}
Das lief dann übrigens auf Anhieb, obwohl ich mir nicht sicher bin, ob das Laden eines 16Bit-Wertes nach TCNT1 legitim ist. Meine Optimierung steht übrigens auf "size" habe ich jetzt gesehen.

Gruß

mic