Okay - 2 Kanäle, handelsübliche Impulslängen von 0,8 - 2,0 ms, 16 MHz Taktfrequenz.
Wenn Du mit Timer1 ohne Prescaler arbeitest, zählt er während eines kurzen Impulses (0,8ms) um 12.800 weiter, während eines langen Impulses (2ms) um 32.000 - stimmt´s?
Der Code liefert Dir erstmal die beiden Impulsdauern in dieser Form, d.h. als Word-Variablen zwischen 12.800 und 23.000. Wie Du sie dann in %-Angaben oder sonstwas verwurstest, bleibt Dir überlassen![]()
Die Idee ist die, den Timer einfach durchlaufen zu lassen. Außerdem konfigurierst Du zwei Interrupt-Eingänge auf "Change", für jeden Kanal einen.
In der ISR fragst Du den Level des auslösenden Pins ab. Ist er 1 (d.h. Impuls hat gerade begonnen), weist Du einer Variablen "Start" den aktuellen Timerwert zu. Ist der Pin 0 (d.h. der Impuls ist zu Ende), weist Du einer Variablen "Stop" wiederum den aktuellen Timerwert zu - und setzt ein Flag.
In der Hauptschleife fragst Du das Flag ab. Ist es 1, subtrahiertst Du einfach "Stop" - "Start". Dadurch, dass man auch über den Wert 0 hinweg subtrahieren kann, ist es egal, wenn der Timer während des Impulses überläuft. Die Differenz entspricht der Impulslänge und liegt zwischen 12.800 und 32.000.
Konkret also etwa so:
Ist ungeprüft, weil ich 1. gerade nicht @home bin und 2. noch nie sowas wie einen Mega32 in den Händen hatteCode:... ... Config Timer1 = timer Start timer1 Dim Start1 as word Dim Stop1 as word Dim Impuls1 as word Dim Flag1 as bit Dim Start2 as word Dim Stop2 as word Dim Impuls2 as word Dim Flag2 as bit Config Int0=Change On Int0 Impuls1 Enable Int0 Config Int1=Change On Int1 Impuls2 Enable Int1 Enable Interrupts Do If Flag1 = 1 then Flag1 = 0 Impuls1 = Stop1 - Start1 Locate 1,1 Lcd Impuls1 End if If Flag2 = 1 then Flag2 = 0 Impuls2 = Stop2 - Start2 Locate 2,1 LCD Impuls2 End if Loop Impuls1: If Pind.2=1 then Start1 = Timer1 Else Stop1 = Timer1 Flag1 = 1 End if Return Impuls2: If Pind3 = 1 then Start2 = Timer1 Else Stop2 = Timer1 Flag2 = 1 End if ReturnMüsste aber funktionieren...
Gruß,
Daniel







Zitieren

Lesezeichen