hallo zusammen, ich würde gerne an dem OC0A pin meines Atmega48 eine Phase correct pwm ausgeben lassen, doch es will einfach nicht so richtig klappen. Deshalb wäre ich echt froh wenn mir jemand von euch weiterhelfen könnte hier der Quellcode: void main(void) { TCCR0A |= (1<<WGM00) | (1<COM0A1); //phase correct mode TCCR0B |= (1<<CS01) | (1<<CS00); //Prescaler 1/64 OCR0A = 0; //signal bis 100 PORTD = 0; //Pull ups deaktivieren DDRD |= (1<<DDD6); //OC0A output EI; //enable interrupts while(1) { } } vielen dank schon mal im vorraus grüße daniel
ups das muss näturlich heißen OCR0A = 100; funktioniert aber trotzdem nicht... wäre echt nett von euch wenn mir jemand weiterhelfen könnte bin nämlich schon richtig am verzweifeln weil ich einfach den Fehler nicht finde... grüße daniel
Was erwartest du denn bei "OCR0A = 0; "? > If the OCR0A is set equal to BOTTOM, the output will be continuously low > and if set equal to MAX the output will be continuously high for non- > inverted PWM mode. For inverted PWM the output will have the opposite > logic values. Probier mal andere Compare-Werte ... hth. Jörg ps.: Welchen Compiler verwendest du denn da? (das "EI;" hab ich bei AVRs noch nicht gesehen)
Oh, da war ich zu langsam.. Woran merkst du, dass es nicht funktioniert? Wie testest du das, was erwartest du, etc.
ich teste es in dem ich den status von OC0A mit einem oszi messe aber nie ein pwm signal bekomme. erwarten würde ich ein pwm signal das nach 100/255 ausgeht und sich dann bei 1/255 wieder einschaltet. oder hab ich da irgendwas falsch verstanden, könnte ja auch der fall sein. danke übrigensfür deinen beitrag. grüße daniel
ich benutze übrigens iar workbench... bin bis jetzt eigentlich ganz gut damit gefahren zum progen nehm ich winavr...
1 | void main(void) |
2 | {
|
3 | TCCR0A = (1<<WGM01)|(1<<WGM00)|(1<COM0A1); //fast-PWM mode, set on match |
4 | TCCR0B = (1<<CS01) | (1<<CS00); //Prescaler 1/64 |
5 | OCR0A = 128; //signal bis 100 |
6 | |
7 | PORTD = 0; //Pull ups deaktivieren |
8 | DDRD |= (1<<DDD6); //OC0A output |
9 | //nicht noetig EI; //enable interrupts
|
10 | while(1){ |
11 | }
|
12 | }
|
Probier das mal, und schau dir im Datenblatt den Unterschied zwischen Fast-pwm und Phase-correct pwm an. hth. Jörg
Hi jörg, danke für deinen Beitrag, ich habs bei meinem uC ausprobiert, es funktioniert aber immer noch nicht. Ich würde echt gerne wissen, woran es liegt, seit 2 Tagen tu ich schon an dem Schmarn rum und finde einfach den Fehler nicht... Falls dir oder irgendjemand anderem noch etwas einfallen sollte, ich wäre echt froh wenn mir jemand weiterhelfen könnte. gruß Daniel
Alles klar hat sich erledigt, hab zwar den selben Code genommen wie oben, aber jetzt funktionierts komischerweise(Enable Interrupt benötigt man natürlich nicht, dass stand noch von einem früheren Code da)! Danke für deine Hilfe Jörg, der Fast-PWM-Mode funktioniert jetzt auch. bis dann Daniel
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.