Hallo
Mein asuro (mit 8MHz-Megakann es mit deinem minimal veränderten Code:
Das hat bei mir erst funktioniert nachdem ich das TCCR2-Register direkt gesetzt hatte (ohne |) (Es kann aber auch sein, das bei meinen ersten Tests die asuro-Lib störte)Code:#include <avr/io.h> //#include <avr/delay.h> #include <avr/interrupt.h> #define SERVOPIN 4 // Pin6 #define SERVOPORT PORTD #define DDRSERVO DDRD uint8_t servopos=150; volatile uint16_t p=0; void pause(uint16_t p_dauer) { p=p_dauer; while(p); } int main(void) { TIMSK|=(1<<OCIE2); TCCR2 = (1<<WGM21) | (1<<CS20); OCR2 = 80; // Für 8MHz-Takt, 37 für 3686400Hz DDRSERVO|=(1<<SERVOPIN); sei(); while(1) { pause(100); servopos=100; pause(50); servopos=200; pause(50); servopos=150; } return(0); } ISR(TIMER2_COMP_vect) { static uint16_t count=1; if(count>servopos) SERVOPORT&=~(1<<SERVOPIN); else SERVOPORT|=(1<<SERVOPIN); if(count<2000)count++; else { count=1; if(p) p--; } }
Die Positionen stimmen nicht wirklich, aber immerhin bewegt sich was:
Bild hier
http://www.youtube.com/watch?v=VNbpkGiD-YI
Hinweis für asuro-Besitzer: Der verwendete Pin6 (PORTD4) ist beim orginalen asuro belegt, also nicht ohne Anpassung verwenden!
Gruß
mic







Zitieren

Lesezeichen