Schwierigkeiten mit Phase Correct PWM Mode

Gast #645914
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
Gast #645940
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
Gast #645945
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)
Gast #645974
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
Gast #646008
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
Gast #646422
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
Gast #646446
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.