PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC und Lichtschranken



zappel76
04.08.2010, 21:19
Hallo!
Ich (absoluter Neuling) will eine Spielstandsanzeige für ein Brettspiel erstellen.

Um Spielscheiben zu erfassen benutze ich Lichtschranken, die über die ADC Ports ausgelesen werden.

Mein Problem:
Wenn eine Spielscheibe in der Lichtschranke liegen bleibt zählt der Zähler hoch. Die Spielscheibe, darf jedoch nur einmal gezählt werden.

Gibt es eine Software-Lösung?
Ich dachte da an Merker oder so!? (R-S-Flip-Flop)????

TobiKa
04.08.2010, 21:31
Die ADC Ports von was?!
Was für Spielsteine?
Was für Lichtschranken?
Wo und was wird hochgezählt?
...

zappel76
04.08.2010, 21:44
Die ADC Ports (ADC1-ADC7)vom AT Mega 16

Das Spiel nennt sich Jakkolo (www.jakkolo.de)!
Man muss Holzscheiben über ein Brett in Fächer schieben.

Die Lichtschranken sind Infrarotdiode und Fotodiode.
Über ein Spannungsteiler messe ich die Spannung an z.B ADC 7. Es funktioniert auch alles.

NUr wenn eine Scheibe in der Lichtschranke liegen bleibt kommt dauernd ein Impuls und lässt den Spielstand hochschnellen, wobei die Scheibe nur einmal gewertet werden darf!

Ich dachte an ein R-S-Flip-Flop.
Habe halt nur keine Ahnung ob diese Möglichkeit beim Prozessor existiert, oder ob ich mit einem RC-Glied mit Flanken arbeite.

TobiKa
04.08.2010, 21:49
Du hast nen Mikrocontroller und willst mit FlipFlop bzw. RC Glied arbeiten...

Du must doch einfach nur warten bis die Lichtschranke nicht mehr unterbrochen ist und erst dann wieder hochzählen.

Besserwessi
04.08.2010, 21:54
Das Problem wird man am besten in Software lösen können. Wenn der Stein nicht gerade halb unter der Lichtschranke stehen bleibt, müßte da schon ein grober Fehler in der Software sein, wenn die weiterzählt.
Die seltenen Grenzfälle, dass der Stein gerade halb unter der Lichtschranke ist, könnte man z.B. mit einer gewisse Hysterese (in Software) lösen.

zappel76
04.08.2010, 22:06
Das Programm lautet:

Schranke2 = Getadc (7)
If schranke2 < 500 then
x= x + 2

Das Problem hierbei:
Bleibt eine Scheibe in der Lichtschranke liegen zählt mein Zähler immer weiter, weil die Spannung < 500 ist. (In diesem Fall 0.3V)

Kann ich es programmieren, dass nur ein Impuls weitergegeben wird ?
Gibt es da eine Möglichkeit?

markusj
04.08.2010, 23:18
Lege eine Merkervariable an die gesetzt wird, wenn ein Spielstein in der Lichtschranke ist. Erst wenn die Variable wieder zurückgesetzt wird (=> Stein ist durchgefallen) wird der Punktestand erhöht.
Natürlich kannst du dieses Schema auch umgekehrt machen, sprich den Zähler erhöhen wenn der Stein in die Lichtschranke eintritt.

Momentan arbeitest du pegelgesteuert und reagierst auf "Dunkel", du musst aber flankengesteuert entweder das Ereignis "Dunkel->Hell" (Stein ist rausgefallen) oder "Hell->Dunkel" (Stein ist reingefallen) detektieren!

mfG
Markus

zappel76
04.08.2010, 23:38
Also geht es mit Merker!!!
Danke!

hardware.bas
19.08.2010, 17:18
Wenn Du die Ports für die Lichtschranke unbedingt als ADC konfigurieren willst, vermute ich, dass Du Fremdlicht eliminieren willst, oder? Die Ports lassen sich jedoch auch als Komperatoren einsetzen, dann hat man die gewünschte Triggerfunktion. VG Micha

zappel76
19.08.2010, 18:15
Die Lichtschranken funktionieren mittlerweile!

Die Lichtschranke sperrt wenn eine Scheibe gezählt wird und wird wieder frei gegeben, wenn die Spannung wieder einen bestimmten Wert erreicht hat!

Wie kann ich denn Fremdlicht eliminieren!?

hardware.bas
19.08.2010, 18:19
Ich dachte, weil von einem ADC-Port die Rede war, hätte man auch "Zwischenhelligkeiten" ausblenden können. Wenn es jedoch funktioniert, würde ich jetzt alles so lassen. VG Micha

zappel76
19.08.2010, 18:24
Das ist aber trotzdem interessant, weil ich bisher nur in einer Werkstatt ohne natürliches Licht gearbeitet habe.
Bei Turnieren kann es vorkommen, das so ein Brett auch am Fenster steht und natürlichen Lichteinfall ausgesetzt ist. Dies würde die Werte ja verändern.
Kann man es trotzdem ausschalten?

Habe noch ein Problem: Die Verständigung der Prozessoren unterenander (AT Mega 8 und AT Mega 16) wie programmiert man so einen I2C-Bus?

Besserwessi
19.08.2010, 20:12
Die hintergrundhelligkeit könnte man z.B. So eliminieren, dass man über längere Zeiträume jeweils den maximalwert und ggf. auch minimlawert der Helligkeit mit aufnimmt. Wenn Minimal- und Maximal-wert deutlich verschieden sind, hat man werte für Lichtschranke frei und unterbrochen. Wenn man immer ähnliche Werte kreigt, kann man nur raten ob die Lichtschranke frei ist, und muß wohl die alten Werte nutzen.

Eine Alternative wäre eine Flankenerkennung über die rate mit der die Helligkeit abnimmt / Zunimmt. Beim ADC dazu z.B. die letzen 2 Werte immer merken, und die Lichtschranke auslösen, wenn innerhalb der 3 Messungen die Hellikeit um einen gewissen Betrag gestiegen oder gefallen ist. Ein Problem hat man dann eventuell, wenn Steine die Lichtschrane nur halb blockieren.