mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Gleichzeitig Overflow + PWM


Autor: Sam Fischer (fm85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen Mega644 und benutze den Timer1 um alle 25ms mittels des 
Overflow Interrupts einen Aktion auszuführen.
  TCCR1A = 0;
  TCCR1B |= (1<<CS12);// prescaler 256
  TCNT1 = 0xF3CB;    // 25ms OVF @16MHz    
  TIMSK1 |= (1<<TOIE1);  

Leider habe ich hardwaretechnisch an die Verwendung von Timer1 zur PWM 
Erzeugung gebunden, daher meine Frage ob es möglich ist gleichzeitig ein 
PWM Signal an OC1A zu erzuegen? Welcher PWM Modus ist dafür am 
geeignetsten?

Vielen Dank schon mal und Grüße!

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, du kannst PWM erzeugen und gleichzeitig die Overflow ISR verwenden.

Autor: Sam Fischer (fm85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das habe ich so:
TCCR1A |= (1<<COM1A1) | (1<<WGM10);
TCCR1B |= (1<<CS12);              // prescaler 256
TCNT1 = 0xF3CB;                     // 25ms OVF @16MHz    
TIMSK1 |= (1<<TOIE1);
OCR1A  = 0xF3DB;

versucht. Dadurch stimmen meine 25ms aber nicht mehr.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Sam Fischer (fm85)

>Erzeugung gebunden, daher meine Frage ob es möglich ist gleichzeitig ein
>PWM Signal an OC1A zu erzuegen?

Ja. Aber das hat dann 1/25ms = 40 Hz. Wenn dir das zu niedrig ist, musst 
du eine höhere PWM-Freqeunz erzeugen und per Software nur jeden Xten 
Overflow zur Berechung nutztn.

> Welcher PWM Modus ist dafür am geeignetsten?

Fast alle.

MFG
Falk

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm lieber ICR1 als TOP wenns noch frei is und rechne dir den nötigen 
TOP Wert aus. Sonst musst du natürlich jedes mal im Overflow auch das 
TCNT1 Register vorladen.

Autor: Sam Fischer (fm85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
40Hz könnten noch gehen, ich will nur eine LED in der Helligkeit 
steuern. Was mir gerade nur suspekt vorkommt ist die Tatsache dass mein 
Timer jetzt scheinbar viel schneller läuft als vorher. Dabei habe ich 
nur die Zeile
TCCR1A |= (1<<COM1A1) | (1<<WGM10);

eingefügt.

Das mit dem ICR1 stimmt natürlich. Im moment lade ich immer TCNT1 neu 
wie du gesagt hast.

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.