Servus erstmal, ich bin gerade dabei mich mit dem Thema PWM zu beschäftigen, doch leider klappt es nicht so gut. Die PWM selbst funktioniert einwandfrei jedoch hab ich das Problem das ich gerne würde, dass das Programm wie eine Art Dimmer die ganze Zeit zuerst ein kleines Tastverhältnis von beispielsweise 25% ausgibt und dann langsam auf z.B. 75% Prozent hochregelt. Doch irgendwie steh ich auf dem Schlauch was die Übergabe des Bottomwertes betrifft. Programm sieht wie folgt aus: #include <avr/io.h> #define F_CPU 8000000UL #include <util/delay.h> int main() { volatile uint16_t counter=0x0028; while(1){ // OC1A auf Ausgang DDRB = (1 << PB1 ); //ATMega88 // // Timer 1 einstellen // // Modus 14: // Fast PWM, Top von ICR1 // // WGM13 WGM12 WGM11 WGM10 // 1 1 1 0 // // Timer Vorteiler: 1 // CS12 CS11 CS10 // 0 0 1 // // Steuerung des Ausgangsport: Set at BOTTOM, Clear at match // COM1A1 COM1A0 // 1 0 TCCR1A = (1<<COM1A1) | (1<<WGM11); TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10); // den Endwert (TOP) für den Zähler setzen // der Zähler zählt bis zu diesem Wert ICR1 = 0x00A0; // der Compare Wert // Wenn der Zähler diesen Wert erreicht, wird mit // obiger Konfiguration der OC1A Ausgang abgeschaltet // Sobald der Zähler wieder bei 0 startet, wird der // Ausgang wieder auf 1 gesetzt // // Durch Verändern dieses Wertes, werden die unterschiedlichen // PWM Werte eingestellt. OCR1A = counter; _delay_ms(50); counter=counter+1; if (counter=0x008C) { counter=0x0028; } } } Schonmal vielen Dank an alle.
if (counter=0x008C) Die Zeile ist falsch geschrieben. Da fehlt was;)
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.