Hallo, ich will mit einem Mega88 die Pulsdauer und die Anzahl der Impulse bezogen auf eine Zeit messen die von einem Sensor geliefert werden. Das Ganze in doppelter Ausführung. Das Ganze ist noch in der Planung desswegen erläutere ich meine Ideen... Folgende Frage: Ich werde INT0 und INT1 als externe Interrupts verwenden. Da ich sowohl Pulsbreite und Impulsanzahl messen möchte sehe ich zwei Varianten a)Ich Konfiguriere EICRA auf steigende Flanke, dann starte ich beim eintreten der ISR einen Timer, außerdem zähle ich eine Variable hoch zum zählen der Pulse, ich konfigurire EICRA im ISR auf fallende Flanke. Beim nächsten ISR Aufruf stoppe ich den Timer. Natrülich müsste dann noch eine Abfrage vorher passieren, die abfragt ob EICRA auf fallend oder steigend konfiguriert ist. b)Ich konfiguriere EICRA auf alle Flanken, dann starte ich beim eintreten der ISR einen Timer, außerdem zähle ich eine Variable hoch zum zählen der Pulse. Beim nächsten eintreten der ISR stoppe ich den Timer. Das Problem hierbei ist, dass ich nicht weiß ob ich die Pulsbreite messe oder ob ich die Zeit zwischen zwei Pulsen messe, dies lässt sich jedoch durch die bekannte Dauer der Pulse initialisieren. Jetzt stellen sich mir die Fragen, seht ihr das genau so, gibt es bessere Alternativen, wie würdet ihr das Problem lösen. Habe auch gelesen das die Problemstellung sich auch mit der Input Capture Einheit lösen lässt, jedoch hat der ATMega88 nur einen Pin dafür(?)... Noch ein paar Infos: Die minimale Pulsbreite beträgt 38µs, die maximale Pulsbreite 207 µs. Danke!
Gedanke: Input Pins lassen sich auch parallel schalten. Die Impulse gleichzeitig auf INT0 und einen PCINT schalten?
Andreas schrieb: > ich will mit einem Mega88 die Pulsdauer und die Anzahl der Impulse > bezogen auf eine Zeit messen die von einem Sensor geliefert werden. Das > Ganze in doppelter Ausführung. Fragst du die Sensoren zeitgleich ab/kommen da zeitgleich Daten rein? Andreas schrieb: > Die minimale Pulsbreite beträgt 38µs, die maximale Pulsbreite 207 µs. Das klingt für mich nach einem "one wire" Protokoll, wie es die DHT/SHT Sensoren verwenden. Was sind das für Sensoren, bzw. wie ist das Protkoll spezifiziert? Die paar us sind sehr wenig. Zwei ISRs mit C Overhead (Register auf Stack sichern und wieder herstellen) sind da problematisch. Nested interrupts erst recht. Das vermasselt dir die Zeitmessung.
Die Idee mit dem parallel Schalten von zwei Pins hört sich gut an. Jedoch frage ich mich gerade ob ich nicht einfach in der ISR den Zustand des Pins abfragen kann??? Das wäre natrülich der einfachste und unkomplizierteste Weg...
Wenn man die beiden Signale nicht gleichzeitig messen muss, kann man den Eingang für die Capture Unit über den Komparator und den MUX vom AD auf jeden AD Eingang legen. Auch wenn man die beiden Signale gleichzeitig messen muss kann man wenigstens eines mit der ICP Einheit erledigen. Damit hat man dann mehr Zeit und eine schnellere Reaktion für den anderen Kanal.
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.