www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schwierigkeiten mit Phase Correct PWM Mode


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, da war ich zu langsam..
Woran merkst du, dass es nicht funktioniert?
Wie testest du das, was erwartest du, etc.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze übrigens iar workbench... bin bis jetzt eigentlich ganz gut 
damit gefahren zum progen nehm ich winavr...

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void main(void)
{
    TCCR0A = (1<<WGM01)|(1<<WGM00)|(1<COM0A1);    //fast-PWM mode, set on match
    TCCR0B = (1<<CS01) | (1<<CS00);             //Prescaler 1/64
    OCR0A = 128;                                //signal bis 100

    PORTD = 0;                                //Pull ups deaktivieren
    DDRD |= (1<<DDD6);                        //OC0A output
    //nicht noetig EI;                       //enable interrupts
    while(1){
   }
}
Probier das mal, und schau dir im Datenblatt den Unterschied zwischen 
Fast-pwm und Phase-correct pwm an.

hth. Jörg

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.