mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 bit timer


Autor: pille1990 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe mal das folgende programm geschrieben:

int main()
{

  //prescaler einstellen
  TCCR0 |= (1 << CS01);

  TCCR1B |= (1 << CS11);
  
  TCCR2 |= (1 << CS21);


  //timer auf fast pwm mode stellen
  TCCR0 |=  (1 << WGM00);

  TCCR1A |= (1 << WGM10);
  TCCR1B |= (1 << WGM12);

  TCCR2 |= (1 << WGM20);


  //compare output mode 
  TCCR0 |= (1 << COM01);

  TCCR1A |= (1 << COM1A1) | (1 << COM1B1);

  TCCR2 |= (1 << COM21);


  //hiermit wird der gewünschte pwm wert eingestellt
  OCR0 = 0;

  OCR1A = 0;

  OCR2 = 0;


  //pins als ausgänge definieren
  // PD5 gehört zu timer1, PD7 zu timer2, PB3 gehört zu timer0
  DDRD |= (1 << PD5) | (1 << PD7);
  DDRB |= (1 << PB3);

OCR0 = 0;
OCR1A = 0;   //UM DIESE STELLE HIER GEHT ES!!!
OCR2 = 0;


und zwar weise ich dem OCR1A den wert 0 zu aber die led die am ausgang 
angeschlossen ist ist nicht komplett aus, sondern glimmt noch ein 
bisschen. zu erwähnen ist noch das es sich beim timer 1 um einen 16 bit 
timer handelt. die anderen 2 timer gehen schön auf null wenn ich ihnen 
den wert 0 zuweise. der controller ist ein atmega32. jetzt meine frage: 
warum geht der 16 bit timer nicht komplett auf null, die 8 bit timer 
aber schon? habe ich da irgendwas falsch eingestellt?

Autor: pille1990 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir wirklich keiner helfen??

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du betreibst in Timer in Mode5, d.h. 8 Bit fast PWM.
Da bleibt immer ein Pik stehen.

Datenblatt Modes Timer1
The extreme values for the OCR1x Register represents special cases when generating a PWM
waveform output in the fast PWM mode. If the OCR1x is set equal to BOTTOM (0x0000) the output
will be a narrow spike for each TOP+1 timer clock cycle. Setting the OCR1x equal to TOP
will result in a constant high or low output (depending on the polarity of the output set by the
COM1x1:0 bits.)


So kann der Timer kein "echtes" Low/High erzeugen.

Evtl. Pin drehen (Set statt Clear) und Wert invertieren ~0 (=255).

guß avr

Autor: pille1990 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das hört sich erstma kompliziert an....was muss ich denn dann an der 
konfiguration des timers ändern?
prescaler bleibt oder?
fast pwm mode auch oder?
der output compare mode muss geändert werden oder?

gibt es einen avr mit drei 8 bit timern?

danke für antworten

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.