mediakasper:
ich kenne mich überhaupt nicht aus, weiss auch nicht genau wie ich da anfangen soll.
habe also noch keinerlei anfänge in einem sketch
will aber auch nicht das mir jemand den ganzen sketch vorsagt...will nur einen einstieg. ist es denn richtig das die reed kontakte in die analogen eingänge müssen oder gibt es digitale eingänge?
Ein Reedkontakt ist ein Schalter, der kennt nur "ein" und "aus", das ist ein digitales Signal und das wird digital abgefragt.
Und wenn es um extrem schnelle Signale geht, die auf schnarchlangsamen Geräten ausgegeben werden sollen (LCD-Display löschen dauert z.B. zwei Millisekunden), dann kommt nur eine Abfrage der Eingänge per Interrupt in Frage. Beim Polling der Leitung kann es Dir sonst passieren, dass auf Deiner Rundenzeitanzeige gerade eine langsame Aktualisierung der Anzeige läuft, während gerade der Rennwagen den superkurzen Impuls gibt, und dann bekommt der Wagen für eine Runde keine Rundenzeit oder beim nächsten Durchfahren als Rundenzeit die Zeit für eine Runde angeschrieben in der er tatsächlich zwei Runden gefahren ist.
Ein Polling der Eingänge reihum funktioniert nur dann, wenn die Summe der Zeiten für das Abfragen sämtlicher zu überwachenden Eingänge plus die Summe der Zeiten für die langsamste Aktualisierung der Anzeigen sehr klein ist im Verhältnis zur Auslösezeit, während der Reedschalter Kontakt gibt.
Rechenbeispiel:
Mal angenommen die langsamste Abfrage und Display-Aktualisierung dauert 4 Millisekunden (zwei Leitungen abfragen, Display löschen, zwei Zeilen auf Display ausgeben) und der Reed-Kontakt gibt einen Kontakt, während das Slotcar eine Fahrstrecke von 10 mm zurücklegt, dann darf die Geschwindigkeit bei Polling-Abfrage maximal betragen:
0,01 m / 0,004 s = 2,5 m/s.
D.h. bei Abfrage per Polling statt Interrupt können Dir im ungünstigsten Fall ab einer Fahrgeschwindigkeit von mehr als 2,5 m/s einzelne Rundenimpulse verloren gehen, wenn nämlich gerade das Display aktualisiert wird während der nächste Wagen durchfährt. Dies würde immer dann eintreffen, wenn der nachfolgende Wagen nahezu gleichauf ist, also wenn er weniger als 10mm hinter dem ersten Wagen hängt, dann würde beim Polling nur die Rundenzeit des ersten Wagens ermittelt und die Runde des nur wenige Millimeter hintendran hängenden Fahrzeugs würde komplett unter den Tisch fallen, weil der Kontakt auslöst, während gerade das Display des knapp voranfahrenden Fahrzeugs aktualisiert wird.
Dies vermeidest Du durch die Nutzung von Hardware-Interrupts: Solange der Reedkontakt einen noch so kurzen Kontakt gibt, wird der Impuls korrekt erfaßt, auch wenn das Programm gerade dabei ist, die Anzeigetafel zu aktualisieren. Deshalb die Nutzung von Hardware-Interrupts und deshalb auch der Test bei Maximalgeschwindigkeit.
mediakasper:
habe es gerade getestet und siehe da, es klappt. selbst bei maximaler Geschwindigkeit reagiert der Reed Kontakt und LED 13 sind an.
Na bravo! Dann kannst Du darauf aufbauen!
mediakasper:
Noch eine Frage zu den I/O´s....habe gerade gelesen das ich...weil es ja I/O´s sind mit Hilfe des Pin Mode befehls sagen kann ob es eingang oder ausgang ist. warum habe ich dann nur zwei und nicht 12 eingänge?
Ein UNO hat sogar 20 digitale Ein-/Ausgänge, nämlich 14 digitale und 6 analoge, wobei aber auch die analogen Eingänge wie digitale Eingänge genutzt werden können. Das Problem bei schnellen Timings ist aber: Du hast NUR ZWEI INTERRUPTS auf einem Uno. Und daher kannst Du per Interrupt nur zwei Timings machen.
Mit Polling (nacheinander alle Eingänge abfragen) könntest Du zwar bis zu 20 Fahrzeuge einzeln timen, aber wie oben vorgerechnet: Bereits ab einer Fahrgeschwindigkeit von 2,5 m/s und höher würde bei einer sehr knappen Abfolge der Fahrzeuge immer nur das erste erfaßt werden: Wenn das wenige Millimeter hintendranhängende Fahrzeug folgt, ist ein Polling-Programm nämlich dabei gerade das langsame Display zu aktualisieren, und dann geht der Impuls verloren.
Wenn es nicht so genau drauf ankommt, dass in manchen (seltenen) Fällen eine Runde gar nicht gezählt wird, kannst Du es natürlich per Polling machen. Aber wenn die Fahrzeuge dann mit mehr als 2,5m/s unterwegs sind und sie gleichzeitig ganz knapp nacheinander (also fast zeitgleich) ihre Reedkontakte auslösen, mußt Du mit Rundenverlusten rechnen.
Wie viele Fahrzeuge möchtest Du denn erfassen?
Mehr als zwei, wie es Dein ursprüngliches Posting nahelegt?