Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
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.