Hallo, ich habe fogendes Problem bei der PWM-Sognalerzeugung, dass ich am Ausgang gar nichts tut. Wahrscheilich habe ich was versehen. So sieht mein Programm aus: #include <avr/io.h> //#define F_CPU 8000000UL int main() { // Timer 1 PWM Init //define TOP or value to compare ICR1 = 499; DDRB |= (1 << PB3); // OC1A PWM Port // Set to Fast Phase Mode OCR1 = TOP TCCR1A = (1 << WGM11) ; TCCR1B = (1 << WGM12) | (1 << WGM13) ; //Set to Toggle on OC1A TCCR1A |= (1 << COM1A0); //Set Prescaler to TCCR1B |= (1 << CS10) | (0 << CS11) | (0 << CS12); //Prescaler 1 while(1); return 1; } Danke im Voraus
Hallo Spess53, Du meist die Register OCR1A und OCR1B. Ich benutzte den Modus 14 mit ICR1, dafuer kann man die Beide Register ignorieren. So steht mindestens auf Datenblatt. MfG
Hallo, was hat das Toogeln des Ausgangs OC1A mit einer PWM zu tun?? So hast du immer ein Verhältnis von 50%. Eine "echte" PWM sieht anders aus ... Ausserdem kann ich spess53 nur recht geben: Wo werden die Register OCR1A und/oder OCR1B zugewiesen? Ohne die hast du eine PWM von Null ... (Mit diesen Registern wird das PWM-Verhältnis vorgegeben; ICR1 ist der maximal mögliche Wert.) Gruss
Tetef El schrieb: > Ich benutzte den Modus 14 mit ICR1, dafuer kann man die Beide Register > ignorieren. So steht mindestens auf Datenblatt. Du hast falsch gelesen
hallo, ich gebe euch recht, ich habe die beiden Register eingefuegt, jetzt tut er was. Mit den Beiden Register kann ich meine Duty definieren. Einverstanden Sorry
Hallo zusammen, mal eine Frage, ist das Ausgangsignal kontinuerlich oder nicht? Meine Ausgangsignal hat eine Frequenz vom 20kHz. ich bekomme mein Signal als Sigmenten, und wenn ich eine in die Lupe anschaue, dann entspricht die gleiche Freuquenz, die ich eingestellt habe. So sieht mein Programm aus: #define F_CPU 8000000UL #include <avr/io.h> int main() { // Timer 1 PWM Init //define TOP or value to compare DDRB |= (1 << PB3); // OC1A PWM Port // Set to Fast Phase Mode OCR1 = TOP ICR1 = 399; OCR1A = 199; OCR1B = 199; TCCR1A = (1 << WGM11) ; TCCR1B = (1 << WGM12) | (1 << WGM13) ; //Set to Toggle on OC1A TCCR1A |= (1 << COM1A0) | (1 << COM1A1); TCCR1A |= (1 << COM1B0) | (1 << COM1B1); //Set Prescaler to TCCR1B |= (1 << CS10) | (0 << CS11) | (0 << CS12); //Prescaler 1 while(1); return 1; }
Tetef El schrieb: > Hallo zusammen, > > mal eine Frage, ist das Ausgangsignal kontinuerlich oder nicht? Das Ausgangssignal ist eine Rechteckschwingung.
noch mal, das Bild1 zeigt, dass das PWM-Signal als Segment dargestellt und wenn ich es in die Lupe anschaue, dann entspricht meine Rechnung. Meine Frage, warum gibt es eine tote Zeit dazwischen?? Gruss
<weit aus dem Fenster lehn> könnte es sich dabei um einen Messfehler deines Digital-Ossis handeln? Das der den Eingang eine zeitlang genau dann sampelt, wenn die PWM auf 0 ist. Welche Samplefrequenz benutzt dein Ossi beim linken Bild? Setz mal die OCR Werte auf 390. Sind die Lücken dann kleiner?
Hallo Karl, wenn ich OCR auf 390 einstelle, dann sind die Luecken kleiner. Ich verwende die Samplefrequenz bei beiden Bilder, nur die sec/Div anderes Bild 1 20 ms Bild2 5ous.
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.