www.mikrocontroller.net

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


Autor: Peter F. (piet)
Datum:

Bewertung
0 lesenswert
nicht 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:
if ( getADC(0) > threshold ) {
bla;
}

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

Autor: Peter F. (piet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bump

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.