so neues problem, dismal mit der ansteuerung eines servos...
noch ohne interrupt... sollte ich mir glaubich mal angucken...
naja hier mal der code, er sollte denke ich genug kommtentiert sein.
leider funzt es nicht, wahrscheinlich irgend ne blöde sache drin...Code:#include <avr/io.h> #include <my.h> int main(void) { DDRD |= (1<<PD2); //PORTD2 wird als ausgang gesetzt uint16_t a = 0; //wert des adc uint32_t a32 = 0; //wert des adc in 32bit, zum berechnen uint8_t ar = 0; //Statuswerte: ob der ADC ausgelesen wurde uint8_t t = 0; //und in welchem Abschnitt wir sind while(1) { if(t==0) //wenn wir im zweiten zyklus sind... { if(!ar) //wenn der ADC noch nicht ausgelesen wurde wird das getan { a32 = ReadChannel(0)*125/8+16000; //ADC wird ausgelesen und "normiert" auf 16000-32000 (1-2ms) a = (uint16_t) a32; ar = 1; //ADC wurde ausgelesen } if(TCNT1 >= 20000) //wenn der Timer bei 20000 ist (10ms) wird: { t = 1; //sind wir als nächstes im ersten Zyklus, also wird: TCCR1B |= (1<<CS10); //PORTD2 gesetzt, PORTD |= (1<<PD2); //der Taktteiler auf 1 gestellt TCNT1 = 0; //und der Timer zurückgesetzt } } if(t==1) //wenn wir im ersten Zyklus sind... { if(TCNT1 >= a) //...und der Timer den ausgerechneten Wert erreicht hat { t = 0; //sind wir als nächstes im zweiten Zyklus, also: ar = 0; //ist der ADC-Wert verbraucht TCCR1B |= (2<<CS10); //und der Taktteiler wird auf 8 gestellt, PORTD &= ~(1<<PD2); //PORTD2 wird nicht gesetzt TCNT1 = 0; //und der Timer wird zurückgesetzt } } } return 0; }
naja an PD2 kommt jedenfalls nix an
ReadChannel is von mir und funzt auf jeden Fall.
edit, blöder fehler,, hab ich grad gemerkt, der timer sollte vielleicht gestartet werden
naja er macht trotzdem noch nicht was er soll, es ist einfach ne rechteckspannung am ausgang







Zitieren
Lesezeichen