Forum: Mikrocontroller und Digitale Elektronik Lichtschranke_in C_Dämpfung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von programmiernoob (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Team,

ich habe zwei Lichtschranken. Diese kann ich auch perfekt einlesen.
Mein "Programm in C" besteht Grundsätzlich aus if-Schleifen in der ich 
Und-Oder Befehle verarbeite.

Ich habe es so programmiert: Wenn beide Lichtschranken unter einem Wert 
X liegen, passiert etwas. Wenn mindestens eine Lichtschranke über den 
Wert X liegt, passiert etwas anderes.

Nun folgendes Problem: Den Bereich den meine Lichtschranken einlesen, 
ist nicht immer zu 100% spiegelnd (Unebenheiten). Quasi, dass zum 
Beispiel eine Lichtschranke für eine sehr kurze Zeit über dem Wert X 
ist.

Ich will es nun so Programmieren, dass die Lichtschranken mindestens 
eine Zeit T(zum Beispiel mindestens 100ms) betätigt/unbetätigt sein 
müssen, damit meine if-Schleifen erst reagieren.

Ich habe gar keine Ahnung, wo nach ich "googlen" müsste oder wie ich es 
Anstellen könnte.
(Ich hoffe ich habe es nicht zu allgemein geschrieben, dass man nichts 
mehr versteht:/)
Danke für mögliche Antworten!:D

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Das problem ist derart allgemein und unkonkret formuliert das eine Hilf 
unmöglich ist. Meine Glaskugel sagt: Gugst Du Timer.

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oder guckst du "Zustandsautomat" oder "FSM" und liest über Timer 
gesteuert regelmäßig den Zustand (was auch immer X ist, Zeit oder 
Pegel?) deiner Lichtschranken ein.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@ programmiernoob (Gast)

>ich habe zwei Lichtschranken. Diese kann ich auch perfekt einlesen.

Aha.

>Mein "Programm in C" besteht Grundsätzlich aus if-Schleifen

Das wage ich zu bezweiflen.

http://www.if-schleife.de/

> in der ich
>Und-Oder Befehle verarbeite.

Nennt sich Bitmanipulation.

>Ich habe es so programmiert: Wenn beide Lichtschranken unter einem Wert
>X liegen, passiert etwas. Wenn mindestens eine Lichtschranke über den
>Wert X liegt, passiert etwas anderes.

Komisch. Lichtschranken sind im Normalfall digital, genauer, binär. Da 
gibt es nur 1 oder 0 und keine Zwischenstufen.

>Ich will es nun so Programmieren, dass die Lichtschranken mindestens
>eine Zeit T(zum Beispiel mindestens 100ms) betätigt/unbetätigt sein
>müssen, damit meine if-Schleifen erst reagieren.

Nennt sich Entprellung und ist vermutlich besser in der Hardware 
aufgehoben.

: Bearbeitet durch User
von Joe F. (easylife)


Bewertung
0 lesenswert
nicht lesenswert
a)
"if" bildet keine Schleife in C, im Gegensatz zu "for", "do" oder 
"while"

b)
Der Ansatz mit zeitlichen Verzögerungen zu arbeiten ist bei diese 
Problemstellung (verrauschtes Eingangssignal) nicht unbedingt das Beste.

Besser ist es mit einer Hysterese bei den Eingangsdaten zu arbeiten.
D.h. du definierst nicht nur einen Schwellwert "X", sondern zwei, die 
einen gewissen Abstand voneinander haben ("threshold_high", 
"threshold_low").

Das ganze sieht dann exemplarisch so aus:
1
if (adc_value > threshold_high)
2
  state = 1;
3
else if (adc_value < threshold_low)
4
  state = 0;

Im Bereich zwischen "threshold_high" und "threshold_low" behält "state" 
also erstmal den vorherigen Wert, und toggelt nicht wild hin und her.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Rechnest du eigentlich das störende Umgebungslicht heraus (oder filterst 
es analog)?

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]
  • [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.