mikrocontroller.net

Forum: Compiler & IDEs WGM13 in TCCR1A?


Autor: Udo Scharnitzki (Firma: allround) (1udo1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

10-Bit PWM, Phase and Frequency Correct:

So funktioniert das Programm: Position WGM13!!??

OC1A_DDR |= _BV(OC1A_PIN);     

TCCR1A= _BV(WGM10) | _BV(WGM13) | _BV(COM1A1) | _BV(COM1A0) ;

TCCR1B= _BV(CS10);

Das Programm dimmt eine LED an PD5 des MEGA16. Aber nur dann, wenn WGM13 
in TCCR1A steht. Sobald ich, wie im Datenblatt zu finden ist, WGM13 nach 
TCCR1B stecke, dann bleibt PD5 auf LOW. Auf meinem Rechner ist 
WinAVR-20081205-install.exe installiert. Im Internet finde ich keinen 
Hinweis, ob WGM13 mal einem anderen Register zugeordnet war.

Auch, wenn manche zweifeln: WGM13 in TCCR1B bleibt die LED an PD5 
dunkel. Ich habe es mehrere Male umprogrammiert. WGM13 in TCCR1B. Nix 
geht mehr.

Was läuft hier schief?

// PWM 10 Bit Phase und Frequency Correct PWM


#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 7372800UL       

#include <util/delay.h>     

#define OC1A_PIN PD5    // OC1A pin 
#define OC1A_DDR DDRD     // OC1A DDR 


uint8_t i = 0;


void init(void)
{
   // set OC1A PD5 pin as output, required for output toggling
    OC1A_DDR |= _BV(OC1A_PIN);     

  TCCR1A= _BV(WGM10)|_BV(COM1A1) | _BV(COM1A0) ;

  TCCR1B= _BV(WGM13) | _BV(CS10); // so funktioniert es nicht!!!

  
  DDRA=0xff;

  PORTA=0xff;

  }   

//############################# MAIN #######################################

int main(void)
{

  init();  

    for(;;)
    {  // Anfang for-Schleife

          for(i=0;i<255;i++)
      {
      
         OCR1AL = i;    //Ausgabe an PORTD5
             _delay_ms(50); // delay 10 ms
      }

      for(i=255;i>0;i--)
      {
    
         OCR1AL = i;    //Ausgabe an PORTD5
             _delay_ms(50); // delay 10 ms
      }
    }  // Ende for-Schleife
    return 0;
}


Gruß

Udo

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit WGM10 und WGM13 gesetzt hast Du Mode 9, und bei dem steht der 
TOP-Wert in OCR1A, was die Benutzung von OC1A als PWM-Ausgang 
ausschließt! Wenn Du "WGM13 in TCCR1B setzt", dann bedeutet das nur, 
dass in TCCR1A COM1B0 gesetzt wird, was für Dein Programm keinerlei 
Auswirkung hat. Der andere Effekt ist, dass WGM13 in TCCR1B gar nicht 
gesetzt wird, was zu Mode 1 (8-Bit Phase Correct PWM) führt...

Ich habe den Eindruck, dass Du das Funktionsprinzip der PWM nicht ganz 
verstanden hast. Wenn Du an OC1A ein PWM-Signal ausgeben willst, dann 
musst Du einen Modus benutzen, bei dem OCR1A nicht für den TOP-Wert 
belegt wird. Wenn TOP (und damit die PWM-Frequenz) tatsächlich frei 
einstellbar sein soll, dann musst Du in dem Fall einen Modus nehmen, in 
dem TOP in ICR1 abgelegt wird.

Bei einer PWM musst Du immer zwei Dinge angeben:
- TOP bestimmt die Frequenz der PWM, ist entweder fest vorgegeben (bei 
8-, 9- oder 10-Bit-PWM mit 0xFF, 0x1FF bzw. 0x3FF) oder kann je nach 
Modus in OCR1A oder ICR1 geschrieben werden.

- Compare-Wert bestimmt das Tastverhältnis der PWM und wird in das dem 
gewünschten Ausgang zugeordnete Compare-Register geschrieben und darf 
(sinnvollerweise) nicht größer als TOP sein.

Wenn OCR1A schon anderweitig belegt ist, kann die Compare-Einheit nicht 
mehr zur Ausgabe eines PWM-Signals benutzt werden.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

naja, Wanderbits kenne ich nicht, WGM13 in TCCR1B gibt ja nur eine 
Bitnummer in einem Register an.
WGM13 ist Bit 4.
Bit 4 in TCCR1A ist COM1B0.

Deine LED ist also vermutlich an PD4 (OC1B) statt an PD5 (OC1A) 
gelandet?

Gruß aus Berlin
Michael

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.