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.
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;
}
leider funzt es nicht, wahrscheinlich irgend ne blöde sache drin...
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
Lesezeichen