PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Ausgang ansteuern - wie?



Barthimaeus
06.11.2007, 15:49
So, ihr AVR-GCC Cracks schüttelt jetzt warscheinlich wieder den Kopf und denkt euch ich sollte mit lieber ein Lehrbuch anschaffen als ständig hier Leute mit Fragen zu nerven, die sich nicht in einem Satz abhandeln lassen.

Ich habe mit grade bei Reichelt zwei Motortreiber vom Typ L293D bestellt, nachdem ich mir im Artikelbereich die Ansteuerung angesehen hatte. Dort steht, dass man über ein PWM Signal an den enable Ports die Geschwindigkeit eines Getriebemotors regeln kann. Was ein PWM Signal ist weiss ich dank Lernpaket Mikrocontroller bereits, jedoch habe ich es da nur über eine Interfaceprogramm für den PC und über Assembler Programme genutzt. Jetzt wüsste ich gern wie man mit C die PWM Ports ansteuert und die Pulsdauer festlegt. Kann mir villeicht jemand ein klitzekleines kommentiertes Beispiel schreiben?

Kontroller die ich zZ verwende sind attiny13 und atmega8

roboterheld
06.11.2007, 18:44
hier steht soviel :

http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=pwm

kanste garnicht alles verarbeiten!!!!!

Barthimaeus
06.11.2007, 21:22
Leider ist da (soweit ich sehe) keine Erklärung dabei mit welchem Code man ein PWM Signal generiert, oder? Der attiny13 hat an PORTB 0 und der atmega 8 and OC 0 OC1A, OC1B, sowie OC2 einen PWM Ausgang.
Wie (mit welchem Code) generiere ich dort ein PWM Signal?

Zimble
07.11.2007, 08:07
Das PWM generierst ja nicht du, sondern der Controller. Das ist halt das praktische.

Bei PWM zählt immer erst einmal ein Counter bis bspw. 512 hoch (je nach PWM - 8,9,10 Bit) und danach wieder runter.
Durch geschickte Wahl eines Prescalers bekommst du so erst mal die Dauer einer Periode.
Mit dem OCR-Register wird nun eine Aussage über das Verhalen in dieser Periode ausgesagt, d.h. wie lange ist der Port HIGH, wie lange LOW.

Nimmst du bspw. einen OCR von 200, zählt er 200Ticks hoch, schaltet dann den Port auf HIGH, zählt weiter bis 512, von 512 runter auf 200 und dort schaltet er den Port wieder auf LOW.
Also hast du in dieser Beispielrechnung bei ner Periodendauer von 1024 Ticks (hoch+runter) den Port 624 Ticks lang HI und 400Ticks LOW.

Lässt sich aber ganz gut hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_PWM-Betriebsart) herauslesen

P.S: Das ist ein möglicher PWM-Modus. Weitere s.o. Link

roboterheld
07.11.2007, 09:04
das datenblatt vom chip bei winavr-c ist "PFLICHT" , sonst läuft nichts und ist alles glücksache. daher bin ich teilweise auf bascom umgestiegen, mit 60 jahren wollte ich möglichs wenig datenblätter wälzen.

man oh man, nimm dieses hier :

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

"Tutorial" musste von hand einfügen, wird hier im forum ignoriert???!!!!???



mfg

oberallgeier
07.11.2007, 10:21
Hallo Barthimaeus,

wir kennen uns noch von der Diskussion mit dem tiny13 (und dem Lernpaket) an der Batterie :)


So, ihr AVR-GCC Cracks schüttelt jetzt warscheinlich wieder den Kopf ... bei Reichelt zwei Motortreiber vom Typ L293D bestellt, ... Jetzt wüsste ich gern wie man mit C die PWM Ports ansteuert und die Pulsdauer festlegt. ... ein klitzekleines kommentiertes Beispiel schreiben? ... Kontroller die ich zZ verwende sind attiny13 und atmega8

Leider kann ich Dir mit dem C-Code nicht helfen. Aber ich habe mit PWM´s schon ein bisschen rumgespielt. Mit der WIRKLICHEN PWM vom Controller. Für die Servos fahre ich im Prinzip auch eine PWM, ich nenn die PseudePWM, da schalte ich einen Port Timer-Interrupt-gesteuert aus und ein.

Zurück zur PWM. Wenn Dich Assembler nicht abschreckt, könnte ich Dir mal dienen, leider eben nicht in C. Aber Du hast es doch einfach - guck doch mal in Dein Franzis-Buch ("Lernpaket..") etwa Seite 100, mit dem "weichen" Blinker. Dann weisste wie das geht. Ich hab das dort gelernt. ACHTUNG: dieses Tutorial fährt immer mit 1,2 MHz. Aber die PWM fährt ja immer einen von Dir vorgegebenen ANTEIL von einem Gesamtzyklus.

Ziemlicht gut, aber anstrengend, weil alles in Englisch dasteht, sind die Handbücher der Controller. Hol Dir die doch. Die habe ich als PDF im Rechner, und zum grössten Teil auch ausgedruckt. Es ist einfach fast unmöglich, die vielen Variationsmöglichkeiten ohne diese Datenblätter (ATMEL nennt sie Datasheets) hinzukriegen.

http://www.atmel.com/dyn/products/datasheets.asp?family_id=607

Die gibts da zum mega8 und zum tiny13 - aber zu allen anderen auch. Ach ja - es gibt von den datasheets eine Kurzfassung und eine lange. Nimm gleich die Langfassung - die Kurzfassung ist nur eine grobe Übersicht - zum Programmieren nicht geeignet.

Wenns noch Probleme gibt frag mich einfach. Aber wie gesagt, im Moment bin ich noch auf dem Assembler-Trip.

Barthimaeus
07.11.2007, 11:05
villeicht steige ich dann auch auf BASCOM um, wenn das einfacher ist

oberallgeier
07.11.2007, 12:53
Ach - also in manchen Dingen ist Assembler leichter - man weiss (fast) immer, was man tut. Ok, für komplexere Aufgaben ist das - - - eben komplex, die muss man dann halt in einer Hochsprache machen.

Ich schick Dir mal das PWM-Beispiel für den tiny13

Barthimaeus
07.11.2007, 14:35
wär klasse ! (die datasheets sind ja tatsächlich brauchbar ^^)