Forum: Mikrocontroller und Digitale Elektronik Pulsdauer + Impulsanzahl messen ATMega88


von Andreas (Gast)


Lesenswert?

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!

von Alois (Gast)


Lesenswert?

Gedanke: Input Pins lassen sich auch parallel schalten. Die Impulse 
gleichzeitig auf INT0 und einen PCINT schalten?

von siehe hier (Gast)


Lesenswert?


von Tom M. (tomm) Benutzerseite


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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...

von Ulrich (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.