Hallo liebes Forum, ich hab da ein Problem. Ich komm echt nicht weiter. Und ich hoffe, dass ich mit Eurer Hilfe endlich zu einem Ergebnis komme. Leider kann ich momentan mein Programm bzw. meine Ideen nicht testen, da der Mikrocontroller in der Schule liegt. Komm erst in einer Woche wieder dazu. Bis dahin will ich die Zeit nicht sinnlos vergolden, sondern will theoretisch das durcharbeiten. Achja. Ist mein erster Versuch einen Mikrocontroller zu programmieren! :) So. Aufgabe ist es, eine PWM zu erzeugen. Ist mir auch gelungen. Hab nun das Datenblatt studiert, das ACR-GCC-Tutorial durchgelesen und mir einige Notizen gemacht. /* ***************************************************************/ /* Programm: PWM auf AVR-Board mit ATMega8 */ /* Name: Patrick Willenshofer */ /* Datum: 18.12.2011 */ /* ***************************************************************/ #include <avr/io.h> int main (void) { DDRB = (1 << PB1 ); // Freischalten des Ausganges PB1(OC1A) am PortB TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //Um die PWM starten zu können müssen Parameter für das Controll Register A (TCCR1A) //laut Tabellen gesetzt werden hier handelt es sich um eine 8-Bit, invertierende PWM TCCR1B = (1<<CS12); //Das Controllregister B (TCCR1B) ist für den Takt zuständig und kann ebenfalls //durch Parameter aus den Tabellen bestimmt bzw. eingestellt werden. OCR1A = 200; // Das Output Compare Register (OCR1A) gibt den Vergleichswert an. } Lasst die Doku mal so neben stehen.. Ich habe jetzt einige Fragen: 1. Beispiel: TCCR1B = (1<<CS12); <<--- clkI/O/256 (From prescaler) - Was ist clkI/O? Ist das nun die Frequenz, mit der die PWM ausgegeben wird?! 2. Was bewirkt der CTC-Modus? Hab schon einiges im Forum gelesen, dass der CTC-Modus empfohlen wird? 3. Ich will noch ein Poti an ADC0 und ein Poti an ADC1 anschließen, um je Frequenz und Pulsbreite zu verändern. Ich kann es laut dem Tutorial nicht nachvollziehen, wie das funktionieren soll? Ich wurde darauf hingewiesen, es nachzulesen. Irgendwas mit Routinen - aber dazu finde ich nichts! Ich bitte euch wirklich um Hilfe. Achja - ADC hab ich schon alles gelesen. Die einzelnen Register und alles. Nur wie ich eben den Wert, nachdem ich ihn eingelesen habe, ihn dazu bringe, die Frequenz/Pulsbreite zu verändern, verstehe ich nicht mehr. :( Mein µC ist ein Atmel Atmega8. Ich wär euch sehr dankbar!
Hallo Patrick, dieses ist Super im GCC-Tutorial beschrieben Gruß Detlev http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29
Hallo Detlev, ich hab mir den Artikel über Pulsweitenmodulation und ADC schon durchgelesen. Aber ich finde da echt nirgends das Beispiel mit 2 Potis um Frequenz und Pulsbreite zu verändern? Lg
Patrick Willenshofer schrieb: > Hallo Detlev, > > ich hab mir den Artikel über Pulsweitenmodulation und ADC schon > durchgelesen. Aber ich finde da echt nirgends das Beispiel mit 2 Potis > um Frequenz und Pulsbreite zu verändern? Das gibts auch so nicht fertig. ABer man kann es aus den Einzelteilen zusammenstoppeln, wenn man verstanden hat wie die Einzelteile funktionieren. Tip: Um eine PWM mit (in Grenzen) variabler Frequenz in Hardware zu erzeugen, brauchst du einen PWM Modus, bei dem du den TOP Wert in einem Register vorgeben kannst.
Patrick Willenshofer schrieb: > 1. Beispiel: TCCR1B = (1<<CS12); <<--- clkI/O/256 (From prescaler) - Was > ist clkI/O? Ist das nun die Frequenz, mit der die PWM ausgegeben wird?! Das ist die Frequenz mit der dein µC läuft. > 2. Was bewirkt der CTC-Modus? Hab schon einiges im Forum gelesen, dass > der CTC-Modus empfohlen wird? Er bewirkt, dass der Timer nicht bis zu seiner durch die Bitbreite vorgegebenen Höstzahl hochzählt, sondern schon vorher bei einem anderen Wert wieder auf 0 zurückgesetzt wird. > Ich kann es laut dem Tutorial nicht nachvollziehen, wie das > funktionieren soll? Ich wurde darauf hingewiesen, es nachzulesen. > Irgendwas mit Routinen - aber dazu finde ich nichts! Dann musst du als nächstes verstehen, wie PWM auf Hardware Ebene genau funktioniert. Wie der Timer arbeitet und wie daraus ein PWM Puls entsteht. > nachdem ich ihn eingelesen habe, ihn dazu bringe, die > Frequenz/Pulsbreite zu verändern, verstehe ich nicht mehr. :( vergiss fürs erste den ADC. Der ist nicht wichtig, wenn du dich erst mal mit PWM beschäftigst. Ob die PWM durch Wert vom ADC beeinflusst werden oder ob du die Werte erst mal einfach nur als Konstante Zahlen vorgibst, ist der PWM ja egal. Du musst wissen: Welche PWM Modi gibt es und welchen brauch ich? WElche Register muss ich für diesen Modus wie einstellen? Welche Zahlenwerte bewirken welche Veränderung des PWM-Pulses (dazu musst du aber wiederrum wissen, was PWM eigentlich ist und wie sie vom Timer erzeugt wird. Und das ist im Grunde sehr simpel)
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.