Hi ich habe das Forum durchsucht, aber nicht die Lösung zu meinem Problem gefunden. Ich möchte auf Basis eines externen PWM-Signals ein PWM-Signal generieren, welches 1.5 ms auf high ist. (für servo) Nun eigentlich müsste das Programm funktionieren, nur tut es das nicht. Ich habe kein Oszilloskop zur hand, deshalb weiss ich nicht, welches Signal tatsächlich generiert wird, auf jeden fall nicht die 1.5 ms, denn der Servo fährt immer an den Anschlag und nicht schön in die Mitte. Vielleicht kann mir jemand sagen, was der Fehler ist. Vielen dank schonmal, adi PS: ich bin noch ein ziehmlicher Anfänger
adi schrieb: > PS: ich bin noch ein ziehmlicher Anfänger Schneide die Aufgabe in mehrere Teile. 1. PWM messen 2. Ausgabe auf eine LED z.B. mit einem Vergleicher 3. Ausgabe des neuen PWM Signals mit festem Sollwert 4. jetzt alles zusammen, Ausgabe des neuen PWM Signals mit eingelesenem Sollwert Dann berichte, an welcher Stelle Du gescheitert bist. Axel
ach ja, das kann vielleicht zu Verwirrung führen... Der Input capture dient vorerst nur als externer Interrupt. adi
Vielen Dank für die Antwort! ich probiers gleich mal aus... adi
Düsendieb schrieb: > Schneide die Aufgabe in mehrere Teile. Full Ack > > 1. PWM messen > 2. Ausgabe auf eine LED z.B. mit einem Vergleicher > 3. Ausgabe des neuen PWM Signals mit festem Sollwert > 4. jetzt alles zusammen, Ausgabe des neuen PWM Signals mit eingelesenem > Sollwert Ich würds umdrehen und erst mal mit der 'Ausgabenseite' anfangen. D.h Servo-Positionierung. Erst mit fixen Werten. Dann mit variablen Werten. Und erst wenn das läuft, wird die Input Seite in Angriff genommen. Ist meistens eine gute Idee, wenn man erst mal dafür sorgt, dass man in irgendeiner Form Werte sichtbar machen kann.
1 | int main(void) |
2 | {
|
3 | TCCR1B |= (1<<ICNC1) | (1<<ICES1); |
4 | TIMSK |= (1<<TICIE1); |
5 | |
6 | DDRC |= (1<<DDRC0); |
täusch ich mich oder hat der Timer keinen Vorteiler?
@ kbuchegg In dem Programm oben habe ich die Input capture-Funktion nur als externen Interrupt benutzt, das funktioniert auch ohne den Timer zu starten, der wird dann erst in der Interrupt-routine gestartet. (hat wohl noch niemand versucht?) Das Programm war nur dafür gedacht, auf basis des inputs ein pwm signal zu generieren, also bei jedem IC-interrupt (alle 20ms) ein signal von 1.5ms auszugeben. ... Ich hab jetzt mal versucht, das eingangssignal zu messen und zu vergleichen, aber der wert schwankt die ganze Zeit, die LED blinkt, auch wenn ich das input signal verändere. adi
Hi also vielen Dank nochmal für die Hilfe und hier ist jetzt mein fertiges Programm, wo Input Capture und PWM-generierung seperat erfolgen, aber mit dem selben Timer. Und es funktioniert bestens! gute Nacht, adi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.