Liebe Genies, ich versuch schon den ganzen tag simpelst eine LED über interrupts blinken zu lassen. Ich habe gefühlt 100 beiträge gelesen, finde dennoch meinen Fehler nicht. der Atmega 328 lauft auf einer platine auf 20MHz. Vielleicht findet ja einer von euch meine(n) Fehler? tausend Dank im Vorraus Markus #include <avr/io.h> #include <asf.h> #include <math.h> #include <stdlib.h> #ifndef F_CPU #define F_CPU 20000000UL #endif #include <util/delay.h> #include <avr/interrupt.h> void servo_init(void); #define SERVOPIN 1 #define SERVOPORT PORTD #define DDRSERVO DDRD int t=0; ISR(TIMER0_COMPA_vect) //interrupt { t++; } void servo_init(void) { TIMSK0|=(1<<OCIE0A); //interrupts TCCR0B |= (1<<CS00); //Prescale=1, TCCR0A |= (1<<WGM01); // CTC mode OCR0A = 199; //alle 10µs ein IRQ 0,00001s DDRSERVO|=(1<<SERVOPIN); //LED Pin als ausgang } int main (void) { servo_init(); sei (); //iknterrups an while(1) { if (t<20000)SERVOPORT|=(1<<SERVOPIN); //bis zum 20000. durchlaufen des Interrupts LED AN (200ms) else SERVOPORT |=~(0<<SERVOPIN); //ab dann LED AUS if(t>40000) t=0; // bei 40000. interruptdurchlauf t zurücksetzen (insg. 400ms) } }
Markus schrieb: > Ich habe gefühlt 100 beiträge gelesen Und in keinem bist du über "volatile" gestolpert? Und so nebenbei: "if (t>40000)" wird niemals wahr.
:
Bearbeitet durch User
Und genau des versteh Ich Net. Warum des? Vilen dank schonmal. Genau danach sahs aus und Ich kapier Net warum.
Markus schrieb: > else SERVOPORT |=~(0<<SERVOPIN); //ab dann LED AUS auch diese Zeile tut bestimmt nicht das, was du von ihr erwartest. Eine geschobene Null bleibt eine Null, egal, wie oft man schiebt.
Markus schrieb: > Und genau des versteh Ich Net. Warum des? Weil ein int gar nicht so groß werden kann um die Bedingung wahr werden zu lassen.
Markus schrieb: > Und genau des versteh Ich Net. Warum des? > Vilen dank schonmal. Genau danach sahs aus und Ich kapier Net warum. Zwei Buchempfehlungen: Kernighan & Ritchie: Programmieren in C Duden: Die deutsche Rechtschreibung
Andere Empfehlung: Die Schweinesprache "C" in den Skat drücken und etwas weniger Fehlerträchtiges erlernen.
die int wars... ich idiot habs im Internet gesucht wie groß ne int is und da hab ichs anscheinend falsch aus der Tabelle gelesen. Vielen dank an die Schreiber.
I am the Wunderer, yeah the Wunderer schrieb: > Die Schweinesprache "C" in den Skat drücken und etwas weniger > Fehlerträchtiges erlernen. Dieses Relikt aus dem vorigen Jahrtausend ist wohl nicht so einfach tot zu kriegen.
I am the Wunderer, yeah the Wunderer schrieb: > Andere Empfehlung: > Die Schweinesprache "C" in den Skat drücken und etwas weniger > Fehlerträchtiges erlernen. Süß. Blöderweise sind so dinge wie die geschobene Null oder die Größe eines Integers erstmal sprachunabhängig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.