12.11.2012 Aufrufe

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

eschrieben wer<strong>de</strong>n.<br />

Wenn am Input Capture Pin ICP die gemäss Einstellungen im TCCR1B <strong>de</strong>finierte<br />

Flanke erkannt wird so wird <strong><strong>de</strong>r</strong> aktuelle Inhalt <strong>de</strong>s Datenregisters TCNT1H/TCNT1L<br />

sofort in dieses Register kopiert und das Input Capture Flag ICF1 im Timer Interrupt<br />

Flag Register TIFR gesetzt.<br />

Wie bereits oben erwähnt müssen vor <strong>de</strong>m Zugriff auf dieses Register alle Interrupts<br />

gesperrt wer<strong>de</strong>n. Zu<strong>de</strong>m müssen Low- und Highbyte <strong>de</strong>s Registers in <strong><strong>de</strong>r</strong> richtigen<br />

Reihenfolge bearbeitet wer<strong>de</strong>n:<br />

Lesen: ICR1L -> ICR1H<br />

Schreiben: ICR1H -> ICR1L<br />

15.3.1 DIE PWM-BETRIEBSART<br />

Wenn <strong><strong>de</strong>r</strong> Timer/Counter 1 in <strong><strong>de</strong>r</strong> PWM-Betriebsart betrieben wird so bil<strong>de</strong>n das Datenregister<br />

TCNT1H/TCNT1L und das Vergleichsregister OCR1H/OCR1L einen 8-, 9- o<strong><strong>de</strong>r</strong> 10-Bit, frei<br />

laufen<strong>de</strong>n PWM-Modulator, welcher als PWM-Signal am OC1-Pin (PB3 beim 2313) abgegriffen<br />

wer<strong>de</strong>n kann. Das Datenregister TCNT1H/TCNT1L wird dabei als Auf-/Ab-Zähler betrieben,<br />

welcher von 0 an aufwärts zählt bis zur Obergrenze und danach wie<strong><strong>de</strong>r</strong> zurück auf 0.<br />

Die Obergrenze ergibt sich daraus, ob 8- 9- o<strong><strong>de</strong>r</strong> 10-Bit PWM verwen<strong>de</strong>t wird und zwar gemäss<br />

folgen<strong><strong>de</strong>r</strong> Tabelle:<br />

Auflösung Obergrenze Frequenz<br />

8 255 fTC1 / 510<br />

9 511 fTC1 / 1022<br />

10 1023 fTC1 / 2046<br />

Wenn nun <strong><strong>de</strong>r</strong> Zählerwert im Datenregister <strong>de</strong>n in OCR1H/OCR1L gespeicherten Wert erreicht<br />

wird <strong><strong>de</strong>r</strong> Ausgabepin OC1 gesetzt bzw. gelöscht, je nach Einstellung von COM1A1 und COM1A0<br />

im TCCR1A-Register.<br />

Ich habe versucht, die entsprechen<strong>de</strong>n Signale in <strong><strong>de</strong>r</strong> folgen<strong>de</strong>n Grafik zusammenzufassen<br />

15.3.2 VERGLEICHSWERT-ÜBERPRÜFUNG<br />

Hier wird in ein spezielles Vergleichswertregister (OCR1H/OCR1L) ein Wert eingeschrieben,<br />

welcher ständig <strong>mit</strong> <strong>de</strong>m aktuellen Zählerwert verglichen wird.<br />

Erreicht <strong><strong>de</strong>r</strong> Zähler <strong>de</strong>n in diesem Register eingetragenen Wert so kann ein Signal (0 o<strong><strong>de</strong>r</strong> 1) am Pin<br />

OC1 erzeugt und/o<strong><strong>de</strong>r</strong> ein Interrupt ausgelöst wer<strong>de</strong>n.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!