Hallo Leute, Ich möchte gerne eine Fast PWM mit meinem mega8535 machen und irgendwie haut das ganze nicht so hin. Hab das datenblatt jetzt schon öfters durchforstet aber ich komme nicht so ganz drauf. Meine Schritte: 1.)(DDRB = (1<<PB3) Pin andem sich oc0 befindet auf ausgang setzten. 2.) WGM00 und WGM01 setzen ---- FAST PWM 3.) COM00 und COM01 setzen ---- wenn der vergleichswert erreicht wird, wird OC0 gesetzt. Wenn der Timer max erreicht hat, wird OC0 gelöscht. 4.) CS00 setzen .. Prescaler einstellen.. (hier kein prescaler da ich mit dem simulator arbeite) 5.)OCR0 -- Vergleichswert laden... z.b. 0xF so und jetzt müsste doch die ganze geschichte laufen oder?? oder hab ich da was falsch verstanden.. aber im simulator kann ich nicht mal sehen das sich der Wert 0x0F im OCR0 befindet.. Erst wenn der Timer einen Overflow macht, steht OCR0 im Simulator auf 0x0F. der wert von OCR0 müsste doch erhalten bleiben.. oder muss ich den bei jedem max vom timer wieder refreshen???? Code: #include <avr/io.h> #include <lcd.c> void main () { DDRB = (1<<PB3); TCCR0 = (1<<WGM01) | (1<<WGM00) | (1<<COM01) | (1<<COM00) | (1<<CS00); OCR0=0x0F; for(;;); } Danke für eure Hilfe. greets
also ich kenn mich mit c ja nicht aus, aber das ist doch n hardware PWM also brauchst du auch keine schleife! einfach den timer initialisieren (mit prescaler 1, so dass er mit dem systemtakt arbeitet, aber nicht dass er stehen bleibt!!) und dann den wert laden. jetzt sollte auf dem pin das PWM signal ankommen!
Ja das komische daran war ja das ich den wert lade aber laut simulator kein wert im vergleichregister ist.. mfg
wie gesagt ... ich kenn mich mit c nciht aus! vielleicht spielt der simulator auch verrückt! hast du den code s chon mal in nen controlle geladen?
Habe folgenden Code mal schnell im AVR-Studio eingehackt und da geht das zumindest in der Sinulation: .include "m8535def.inc" .org 0x0 rjmp reset reset: ldi r16,(1<<WGM01) | (1<<WGM00) | (1<<COM01) | (1<<COM00) | (1<<CS00) out TCCR0,r16 ldi r16,(1<<PB3) out DDRB,r16 ldi r16,0x0f out OCR0,r16 j1: rjmp j1 PinB.3 geht kurz auf low und dann auf high usw. Drücke in der Simu die Taste "F11" führ Einzelschritt und öffne unter I/O Port B. MfG Andi
ja ist doch gut! dann lad das in den controller und zum testen kannst du den vorteiler mal sehr hoch stellen, dann kannst du das bei niedrigem takt sogar mit ner LED sehen!
dankesehr für die mühen.. Habs jetzt selber einfach mal reingeflasht.. pwm funktioniert nur scheint die simulation nicht ganz richtig zu sein.. der wert vom vergleichsregister wird erst dann angezeigt wenn der timer einmal auf max war. danke nochmals mfg
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.