Gast
#2206769
Hallo kann mal einer schnell über mein Programm gucken ! Hab versucht
über die Schleifen ne höhere Auflösung für meinen Servo zu bekommen, da
ich nur einen Attiny13 habe und die Auflösung mit TC ist zu niedrig.
Der Tiny läuft mit 1,2 Mhz, in der ersten Schleife wird bis 12 gezählt
ergibt meiner Rechnung nach 0,01 ms !
Danach wird in einer zweiten Schleife der umgerechnete ADC-Wert x den
0,01 ms aus der ersten Schleife gezählt.
Am Ende noch eine Pausenschleife.
Der Servo dreht allerdings nur langsam auf Linksanschlag.
Danke
#include <avr/io.h>
int main(void)
{
unsigned ADCWERT;
unsigned Zaehler;
unsigned Zaehler2;
unsigned Zaehler3;
Zaehler = 0;
Zaehler2= 0;
Zaehler3= 0;
unsigned Ergebnis;
Ergebnis = 0;
while(1)
{
DDRB = (1<<DDB0);
Anfang:
ADMUX = (1<<ADLAR)|(1<<MUX1)|(1<<MUX0); // 8Bit , PB3
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADPS2); // Start, Vorteiler 16
while (ADCSRA & (1<<ADSC)){} //Warten bis Fertig
Ergebnis = ADCH;
ADCWERT = ((Ergebnis*100)/256)+100 ;//ADC Wert in Schleifendurchläufe
umrechnen
PORTB = (1<<PB0);
Schleife:
if(Zaehler == 12) //Zaehler für 0,01 ms
goto Schleife2;
else Zaehler++;
goto Schleife;
Schleife2:
Zaehler = 0; //Zaehler wieder auf 0 setzen
if(Zaehler2 == ADCWERT)
goto Pause;
else Zaehler2 ++;
goto Schleife;
Pause:
Zaehler2 = 0; // Zaehler 2 wieder auf 0 setzen
PORTB =(0<<PB0);
if(Zaehler3 == 1000) //10 ms Pause
goto Anfang;
else Zaehler3++;
goto Pause;
}
}