PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Servos/Interupt-problem



ElchiMtr
30.03.2011, 22:24
Hey leute,

ich versuche ein Signal zur Servosteuerung zu erzeugen.

Dazu habe ich folgende ISR geschrieben



ISR(TIMER0_OVF_vect)
{
TCNT0 = preload0;
countTimer0++;


if(countTimer0 <= 2000)
countTimer0 = 0;


if(countTimer0 == 0)
PORTA |= (1 << 1);

if(countTimer0 == 100 + Servo1)
PORTA &= ~(1 << 1);

}


der Timeroverflowinterupt wird alle 10µs ausgelöst so dass 2000 Aufrufe gerade 20ms ergeben. Die Variable Servo enthält zu Beginn den Wert 50.
Also sollte der PinA2 nach 1,5ms wieder auf LOW gehen.
Aber das klappt iwie gar net. Da alles so schnell geht kann ichs mit ner LED nicht testen und nen oszi habe ich net.

Jetzt meine Frage kann das so überhaupt klappen ?
und könnte es sein, dass der Storm aus dem AVR (ATMEGA32) nicht zum Steuern der Taktleitung ausreicht ?

Wenn das nicht ausreicht sagt mir bitte welche Infos ihr noch benötigt.

Vielen Dank für eure hilfe.

radbruch
30.03.2011, 22:41
countTimer0++;

if(countTimer0 <= 2000)
countTimer0 = 0;


countTimer0 wird nie größer als 1!

(1 << 1) ist eine 1 einmal nach links geschoben, also 0b00000010 oder PA1!

(1 << 0) 0b0000 0001 PA0
(1 << 1) 0b0000 0010 PA1
(1 << 2) 0b0000 0100 PA2
...
(1 << 7) 0b1000 0000 PA7

ElchiMtr
31.03.2011, 09:52
Danke,

ich bin so ein Trottel < mit > verwechselt das sollte mir eigentlich selbst auffallen müssen. Das ist jetzt iwie peinlich.

Das: (1<<1) is schon richtig der servo is am Port PA1 war nur für PA1 zu faul und ich selbst finde das mit nur der zahl einfacher zu verstehn.

Danke noch mal für die schnelle Hilfe

PS. Jetzt funktioniert es sogar zwar noch nicht 100% aber der Rest is Feintuning

PSPS. es ist doch immer gut zu wissen wo man wen findet der mal über den Code drüber schaut! Gut das es dieses tolle Forum gibt