mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie überprüfen, ob sich anligendes Signal nicht verändert?


Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich möchte mit einem uC überprüfen, ob sich ein Signal, 
welches am Controller anliegt über eine gewisse Spanne, sagen wir 1 
Sekunde, nicht verändert. Ich arbeite mit einem Atmega 32 und 
programmiere in C. Kann mir da jemand einen Tip geben, wie das am besten 
geht?

Autor: Dida N. (quader)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Digitales oder analoges Signal?

Falls es ein digitales Signal ist, sollte ein einfacher Statuswechsel 
detektiert werden, oder ändert sich da ein ganzes Muster? Ersteres wäre 
ja mit einer einfachen Abfrage zu lösen.

Bei einem analogen Signal einfach jede Sekunde die ADC-Werte miteinander 
vergleichen mit berücksichtigung einiger Bits Ungenauigkeit...

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es ist ein digitales Signal...es soll nur überprüft werden, ob das 
Signal eine Sekunde lang auf HIGH.

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
is es zu einfach, dass mir keiner antwortet?;)

Autor: 6640 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist zu einfach. Ja. Weshalb nicht eine Sekunde lang alle 10ms messen und 
vergleichen, ob es sich geaendert hat ?

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leg es dir auf einen externen interrupt pin.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, so schwer ist das wirklich nicht.

Da gibt es viele Strategien, die man einsetzen kann.
Kommt auch darauf wann, wozu das gut sein soll, bzw.
wie dein Signal konkret aussieht.

Eine Möglichkeit ist zb.:

Das schwierigste ist es wohl, 1 Sekunde abzumessen.
Dazu benutzt du einen Timer, der zb. alle 10ms einen
Interrupt (Overflow oder einen CTC Interrupt) auslöst.

In der ISR passiert dann erstaunlich wenig:

   Einen Zähler erhöhen. Dieser Zähler wird im Hauptprogramm
   ständig abgefragt, ob er schon 100 erreicht hat. Da die ISR
   alle 10ms aufgerufen wird, ist 1 Sekunde vergangen wenn der
   Zähler 100 erreicht hat. Dadurch geht es dann im Hauptprogramm
   weiter.


Das Hauptprogramm wartet in einer Schleife, bis der Zähler
die 100 erreicht hat. Gleichzeitig überprüft sie innerhalb
der Schleife ständig, ob der Eingangspin noch immer 1 ist.
Ist er das nicht -> dann hat das Signal gewechselt.
Das wird dann vermerkt und der Timer kann wieder angehalten
werden.
Konnte aber die Schleife den Zähler bis 100 durchlaufen
lassen (sprich: Ist 1 Sekunde vergangen) und es wurde keine
0 am Eingang gesehen, dann wahr wohl das Signal die ganze Zeit
auf 1


In Pseudocode

volatile uint8_t TimeCounter;

ISR( .... )
{
  TimeCounter++;
}

uint8_t CheckInput()
{
  uint8_t InputDown;

  TimeCounter = 0;

  // hier kommt die Timer Initialisierung
  // so dass der Timer mit der richtigen Frequenz zählt
  // und regelmässig einen Interrupt auslöst

  ...


  InputDown = 0;
  while( TimeCounter < 100 ) {
    if( PINxx & ( 1 << Pxx ) == 0 ) {
      InputDown = 1;
      break;
    }
  }

  // Timer wieder stoppen

  ...

  // das wars
  return InputDown;
}


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.