Hallo, Habe das Problem, daß ich Länge eines Impulses (bis 20ms) messen möchte.. Im Moment mache ich es so: Warten bis High , dann Timer starten. Warten bis Low , Timer stopen, den Timerwert ablesen , fertig. Nun aber das Problem, daß das Programm in dieser Routine immer hängt, bis der Impuls auf Low geht... Das ist bei 20ms etwas ungünstig! Ich möchte das jetzt irgendwie eleganter lösen. Per Interrupteingang? Nur kann ich da nur eine Flanke definieren..Wie kann ich die andere erkennen? Oder gibt es da was anderes? mfg
Wieder mal: Was für ein Controller ist das? Ohne die Information kann hier keiner helfen!
Ups, vergesse immer, daß es nicht nur AVR's gibt.. :( Atmega8 , schreibe mit Bascom. INT1 ist noch frei.
Nabend! Schau dir das Datenblatt nochmal kurz an und erklär mir dann nochmal kurz wozu man den 2. Modus verwenden könnte (ISC11 = 0; ISC10 = 1) Bis bald
Der ATMega hat ne Input Capture Einheit. Damit sollte es gehen, wenn Timer 1 frei ist. Ist eigentlich die übliche Methode. Ansonsten sind die Interrupts umschaltbar (pos., neg. Flanke, beides oder Low Level).
Danke an alle! Bin noch grün, was AVR's angeht. Habe mich auf die Bascom -Beschreibung verlassen. Und da gibt es nur Config INTx (LOW LEVEL, FALLING ,RISING)
Selbst mit den Parametern gehts. Musst nur in der ersten ISR den Level umschalten. Der nächste kommt dann auf die jeweils andere Flanke. Aber wie gesagt, Längen von Signalen erfassen geht am elegantesten mit Input Capture. Gruß johnny
> Der ATMega hat ne Input Capture Einheit. Damit sollte es gehen, > wenn Timer 1 frei ist. Timer 1 muss dazu nicht frei sein. Das geht auch, wenn Timer 1 nebenbei noch für OC1A und OC1B verwendet wird. Man muss nur darauf achten, dass niemand den Timerstand manipuliert. Man setzt also bei ICP den Timer nicht auf 0, sondern merkt sich den "Zeitstempel" der letzten Abfrage und subtrahiert diesen vom aktuellen Zeitstempel. Bei OC1x addiert man das Intervall zum nächsten Interrupt zum aktuellen OCR1x-Register dazu. Somit kann Timer 1 gleichzeitig zwei hochgenaue Interrupt-Folgen erzeugen und einen Impuls hochgenau ausmessen. Falls deine Programmiersprache das nicht nutzen kann, solltest du über eine andere Programmiersprache nachdenken. ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.