das macht man glaub ich nicht mit PWM. Timer auf 20ms setzten und im Interrupt Pulseout....auf 1,5ms. Einfacher als mit PWM.
Druckbare Version
das macht man glaub ich nicht mit PWM. Timer auf 20ms setzten und im Interrupt Pulseout....auf 1,5ms. Einfacher als mit PWM.
Aaaaaaargh!!!!! Ich WILL es mit PWM machen! Ich weiss selber, dass es tausend andere Wege gibt.... hab ich aber oben schon gesagt!
Ich krieg einfach die Überleitung von ms zu Takten nicht hin....
Wie kann ich die PWM einstellen, damit sie mit 1000000Mhz 1.5ms Pulse macht, und das alle 20ms.... Es geht um das Verständnis, nicht um die Methode.
Herzliche Grüsse
Mario
1000000Mhz? Wow!!!!!....den AVR will ich auch....is ja besser als intel und amd zusammen :D
Es gibt ein Berechnungsprogramm, welches du im Downloadbereich findest, welches dir die Zahlen und Prescaler ausrechnet.
lol... Meine natürlich Hz...:) Wär aber cool gewesen...
Also das Proggi find ich jetzt partout nich.... Hast du einen Link?
Danke und Gruss
Mario
1/ f = t
1/1000000 hz = 0,000001 sec = 0,001 msec
so sieht mein PWM Servo code aus bei 16 MHzCode:
#define SERVO1 OCR1A
#define SERVO2 OCR1B
// PWM Timmer
SIGNAL(SIG_OVERFLOW1)
{
TCNT1 = 0;
/* configure to set outputs on compare match so we can turn on the
* pulse in the next statement */
TCCR1A |= BV(COM1A1)|BV(COM1A0)|BV(COM1B1)|BV(COM1B0);
/* force compare match to set outputs */
TCCR1A |= BV(FOC1A)|BV(FOC1B);
/* configure to clear outputs on compare match so that the output
* compare function ends the pulse */
TCCR1A &= ~(BV(COM1A0)|BV(COM1B0));
}
void init_servos(void)
{
/* Use Timers 1 generate the pulses for 2 R/C servos; each
* timer can do up to 3 servos. */
/*
* configure OC1A for mode 0: normal, top=0xffff prescale=8 (f~=30):
*
* WGM33=0, WGM23=0, WGM13=0, WGM03=0, CS32=0, CS31=1, CS30=0
*/
DDRD |= BV(PORTD5) | BV(PORTD4);
TCCR1A &= ~(BV(WGM11) | BV(WGM10) | BV(COM1A1) | BV(COM1B1));
TCCR1A |= BV(COM1A0) | BV(COM1B0);
TCCR1B &= ~(BV(WGM13) | BV(WGM12) | BV(CS12) | BV(CS10));
TCCR1B |= BV(CS11);
TCNT1 = 0;
TIMSK |= BV(TOIE1);
/* set all servos to their center positions */
SERVO1 = SERVO_MID;
SERVO2 = SERVO_MID;
}
vielleicht hilft es dir
In C... :) Verstehe leider kein Wort...
Aber wenigstens das mit der Frequenz und Periode ist jetzt klar...
Nur: Kriegt man das mit 8Bit PWM und 1000000Hz überhaupt genau hin??
Herzliche Grüsse
Mario
8 bit = max 256 = 0,001 msec * 256 = 0,256 msec bis der abläuft.
man bin heute morgen noch nicht so fit mußda nochmal drüber nach denken.
warum c ist auch nicht anders als basic alles nur ne sprache
SIGNAL(SIG_OVERFLOW1)
wird auf gerufen wenn der timmer ab gelaufen ist.
der rest ist der init des Timers.
Neine ich denk das du das PWM nicht mit dem 8bit timer hin bekommst.
Der ist zu schnell
Ok, dann kann mans so also nur schlecht machen...
Herzlichen Dank für die Info!!
Greets
Mario