Hallo, ich habe bereits die suche betätigt und auch vieles zu PWM gefunden aber bis jetzt hat bei mir nichts davon funktioniert, ich muss dazu sagen dass ich Anfänger in Sachen µC-Programmierung bin. Ausgangspunkt: ich möchte mit meinem ATmega128 (im STK501) ein PWM-Signal erzeugen, zum Programmieren benutze ich AVR-Studio. Und suche ein Beispiel was funktioniert um damit rumzuspielen leider funktionierten die breits gefunden Bsp. nicht... vielleicht hat jemand von euch sowas da. Zum überprüfen ob es funktioniert benutze ich einen Oszi. Gruß Rene
>>Und suche ein Beispiel was funktioniert um damit rumzuspielen leider >>funktionierten die breits gefunden Bsp. nicht Definiere mal "funktioniert nicht" etwas genauer.
Ein Bsp was ich zB versuche ist http://www.kreatives-chaos.com/index.php?seite=c_t1_pwm muss ich da noch extra einen Ausgabe port bestimmen oder ist das standard auf PB5? Denn es wir nirgendwo etwas ausgegeben.
Jede Compare-Einheit hat einen ihr zugeordneten Pin, der hardwaremäßig mit der Compare-Einheit verbunden werden kann. Dadurch besteht die Möglichkeit, eine echte Hardware-PWM (also ohne dass im Programm irgendwelche Pins umgeschaltet werden müssen) zu implementieren. Wenn man aus irgendwelchen Gründen diesen speziellen Pin (OCnx) nicht nehmen kann (weil z.B. mehrere Pins geschaltet werden sollen) oder will (warum auch immer...), dann kann man eine Soft-PWM machen, die dann allerdings erstens einen erheblich höheren Aufwand an Software erforderlich macht und zweitens nicht so präzise ist, weil vom Auftreten des Compare-Ereignisses bis zum Umschalten des Pins eine gewisse Zeit vergeht.
soweit habe ich es begriffen, es geht mir um die Hardware-PWM. Da ich den Timer1 benutze ist es bei mir der PINB6 OC1(B)... Nur ist nichts auf meinem Oszi zu sehen also muss ich irgend eine kleinigkeit vergessen oder falsch gemacht haben.
also fehlt die in dem oben genannten Beispiel? Ich kenne nur den Assembler Befehl, was müsste ich in C schreiben um es als Ausgang zu konfigurieren... DDRB = (1<<DDRB); so?
Denk doch mal nach. Bei DDRB = (1<<DDRB); Wo kommt hier zum Ausdruck, dass du ausgerechnet Pin Nummer 6 als Ausgang setzen willst. Warum nicht 2 oder 5? DDRB = ( 1 << DDB6 ); Ich empfahler mal das AVR-GCC Tutorial auf dieser Seite zu studieren.
ich habe es so geschrieben weil bei dieser schreibweise am PB1 ein PMW-Signal zu sehen war... und wenn es auf DDB6 oder DDB5 setze kommt auf den jeweiligen pins nichts an. Warum PinB6 weil da die Ausgabe für den Timer1b laut Datenblatt ist...
Danke für die bis jetzt gebrachten Antworten! Ich komme nicht weiter... Dem oben genannten Bsp. habe ich DDRB = (1 << DDB5) | (1 << DDB6); hinzugefügt aber es kommen keine PWM-Signale an diesen Pin´s an, was muss ich noch beachten das die Signale ausgegeben werden? Vielleicht kann jemand von euch das Bsp. mal testen um mir zu sagen ob es bei ihm läuft.
Die Datei http://homepage.hispeed.ch/peterfleury/avrgcc-examples.zip enthält kurze, gut kommentierte Programme, unter anderem ein einfaches Beispiel für PWM in pwmdemo.c. Vielleicht kommst Du damit weiter.
Danke für das Beispiel, ich musst nur den µC Anpassen und es lief aber das Dimmen funktioniert nicht ... warum kann ich nicht sagen ... wenn man OCR1AL direkt einen Wert zuweist kann man die PWM beeinflussen aber bei der for Schleife passiert nichts... Gruß René
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.