Hallo Zusammen, ich versuche mich derzeit an einer HW PWM mit dem mega8. Ziel soll es sein einen Servo zu Steuern. Nun muss ich sagen das ich irgendwie das ganze net wirklich auf die Reihe bringe. Ich hab mir mal gedach t das ich hier niederschreibe was ich so in etwa habe und meine verstanden zu haben und Ihr sagt mir dann ob das kompletter nonsen ist oder ob ich doch net ganz so doof bin ;-) Also ich hab mir das wie folgt gedacht: Damit mein Servo so das tut was ich will brauch ich ne Frequenz von 50Hz (20ms) und ein variables ti von 1-2ms. Am besten geeignet schein mir dafür der Timer1 (16bit) mit einem 256 Vorteiler. Das müsste bei meinem mega8 mit 4MHz und einem Vorteiler von 8 der Counter bis 10.000 Zählen und dan wären 20ms um. 4.000.000 / 8 = 500.000 => 500.000 * 0.02 = 10.000 Dann soll noch für die z.B. ersten 1,5 ms H sein d.h. 500.000 * 0.0015 = 750 das würde dann bedeuten das ich den Timer0 als Fast PMW mit Obergrenze OCR1A (10.000) und als Vergleicher zum umschalten von H nach L OCR1B (750) nehemen würde. das ganze würde ich in C wie folgt formulieren TCCR1A = (1<<COM1A0) | (1<<WGM11) | (1<<WGM10); TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS11); OCR1AH = 0x27; //Obergrenze auf 10.000 OCR1AL = 0x10; OCR1BH = 0x02; //Vergleich auf 750 OCR1BL = 0xEE; DDRB = 0x02; //OC1A als Ausgang So, wenn sich nu jemand durch das hier durchgewühlt hat und mir noch sagen könnte wie meine Überlegungen so hinhauen würde ich mich sehr freuen. Vorab schon mal ein Danke, der Jochen
Ups, ich seh gerade das ich was von einem 256er Vorteiler geschrieben hab, der soll natürlich 8 sein. Und es ist der Timer1 und nicht der Timer0 gemeint Grüßle Jochen
Schön geschrieben, nur wo liegt dein Problem? Funktioniert es nicht? Kommt die falsche Frequenz raus?
Na das ich net weiß ob es so tut. Probieren bringt auch nix da ich kein Oszi habe um mir das Signal anzuschaune. Hab das ganze mal im AVRStudio simuliert und es verhält sich nicht so wie ich es erwartet habe. So wie ich das verstanden habe sollte der Counter bei Fast PWM von 0 bis TOP bzw bei dem von mir eingestellten Modus bis OCR1A Zählen und dann wieder bei Null anfangen. Tut er aber net. Erzählt bis auf 3FF und dann wieder runter auf Null. Das heißt für mich das es sich um ein 10bit und net um nen 16bit Timer handelt und das ich das mit dem FastPWM net verstanden habe. Dazum kommt noch das der Zähler net nur bis auch OCR1A zählt sondern bis 3FF (hab das im Code auf 0x0210 geändert) Also auf gut deutsch ich versteh garnix mehr ;-o Auf Erleuchtung hoffen Jochen
AAAAAAAAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHH sch***** AVRStudio. Hab durch Zufall beim Suchen hier im Forum einen Beitrag gefunden das auch schon andere Leute wohl beim simulieren von PWM Geschickten Problem hatten. Hab dann das ganze doch mal auf den uC geladen und getestet und es tut genau so wie ich es mir vorstelle. Daraus schließ ich jetzt einfach mal das mein PWM Signal genau so erzeugt wir wie ich es mir erwartet habe. Da ich kein Oszi habe kann ich es net mit sicherheit sagen. Aber lt. Frequenzmessung hab ich 50Hz und der Servo geht da hin wo er hin soll also den ich mal das ist schon so i.O. Grüßle der Jochen
> OCR1AH = 0x27; //Obergrenze auf 10.000 > OCR1AL = 0x10; Tu sowas nicht, das versteht hinterher doch kein Schwein mehr. Schreib wenigstens OCR1A = 10000; /* Kommentar brauchst Du wohl keinen mehr :-) */ oder ggf. statt der ,magischen' Zahl 10000 gleich eine Berechnungsformel.
Joo, hast ja recht ;-) hab das auch schon geändert weil ich gesehen hab das man die 16bit Register direkt schreiben kann. Die 10.000 brauch ich in dem Fall ja nicht mehr neu berechnen da ich für den Servo ja immer ein T von 20ms brauche. Aber ich werd mir so grob die Abhandlung die ich hier gepostet habe aufheben das ich in Zukunft wieder nach schaune kann wie das ging. Und ich werd nie wieder was im AVRStudio simulierne ;-)))) Grüßle Jochen
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.