Forum: Mikrocontroller und Digitale Elektronik Mikro als Schalter, digitale regelung mit Interrupt


von Peter F. (piet)


Lesenswert?

Hallo!
Ich bin derzeit dabei ein Batteriebetriebenes Gerät zu entwerfen das 
quasi eine eierlegende Wollmilchsau für verschiedene Anwendungen werden 
soll.
Es handelt sich um einen 16mHz Mega32 bei 5V mit einem KS0108 GLCD aber 
zukünftig soll ein Mega128 eingesetzt werden.
Das ganze in C mit dem AVR Studio als IDE.
Eine der Anwendungen ist ein schall getriggerter Timer für 
intervallzeiten, auflösung 0.01 Sekunden, ähnlich diesem zum Beispiel:
http://www.cedhk.com/show.php/Object518

Mein erster Aufbau bestand aus einem OpAmp mit Poti zur einstellung des 
Schwellwertes und einem FET am PortPin des AVR.
Wenn es laut genug wird schaltet der FET durch und eine Zeit wird 
gestoppt.

Dann habe ich den OpAmp an den ADC angeschlossen mit fester verstärkung 
um den Schwellwert digital über das Menü mit dem AVR ändern zu können.
In einer Schleife dann einfach jeweils eine einzelne Wandlung:
1
if ( getADC(0) > threshold ) {
2
bla;
3
}

Funktioniert auch wunderbar, jetzt kommt das aber:
Ich möchte kontinuierlich die verbleibene/laufende Zeit auf dem Display 
ausgeben und jede gestoppte Zeit per UART versenden.

Dabei tritt nun das Problem auf das auch schon vorher bestand aber 
vernachlässigbar war, wenn der "ist-wert" über den schwellwert steigt 
und der Controller gerade mit dem ausgeben auf das Display beschäftigt 
ist gibt es natürlich einen ofset oder das Ereignis wird garnicht 
registriert.

Nun kann ich ja den ADC kontinuierlich messen lassen mit ein paar kHz 
auflösung und den vergleich immer im Interrupt vornehmen.
Nun habe ich ja schon einen Timer interrupt laufen, für die RTC und 
Tastenentprellung.

Das würde heissen sobald das Programm startet wird immer folgendes 
abgearbeitet:
Laufende Zeit auf LCD ausgeben, Restzeit auf LCD ausgeben, ADC 
Interrupt, RTC Interrupt, Zeit per Uart ausgeben.

Um das Signal zu glätten addiere ich mehrere Messungen auf und Teile 
dann das Ergebnis. Das währe ja auch im Interrupt kein Problem.
Jeden Interrupt die Messung addieren, zähler hochsetzen und beim 
zähler-anschlag erst den Vergleich vornehmen, zähler zurücksetzen, neu 
anfangen.

Spricht da irgendwas gegen, überlasten sollte das ganze den AVR ja nicht 
aber könnte z.B. der ADC interrupt zusammen mit dem timer Interrupt das 
Timing des LCDs aus dem Schritt bringen?

Oder hat vielleicht jemand eine ganz andere Idee?

Mfg,
Peter

von Peter F. (piet)


Lesenswert?

bump

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.