friemel schrieb:
> folgende Situation: Auf einem atmega16A läuft ein Programm, welches
> einen Port pin für eine exakte Zeit ein- oder ausschalten soll. Das Zeit
> intervall ist ca. 10-400usec.
> Ich suche eine Möglichkeit, dieses Verhalten möglich mit timern zu
> erreichen, sodaß das timing eben auch im Interruptfall etc. eingehalten
> werden kann. Die Hardware selbst, soll also den io pin schalten.
> Ist das machbar?
Dafür gibt es die OUTPUT COMPARE Funktionalität. Funktioniert allerdings
nur mit einigen Pins. Und es gibt nur ein Compare Event pro Pin, du mußt
das Compare-Register also während des Impulses umprogrammieren.
Pseudocode:
1 | config_compare_unitA(set_pin_on_match);
|
2 | compare_regA=startzeit;
|
3 | (warte auf compare match, evtl. im Interrupt)
|
4 | config_compare_unitA(reset_pin_on_match);
|
5 | compare_regA=endzeit;
|
Für sehr kurze Impulse ist es besser, einen PWM-Modus der Compare Unit
zu verwenden und den Timer für genau einen Impuls laufen zu lassen.