Wie man im Programm erkennen kann wird eine gelbe Led ca 5 Sekunden
eingeschaltet (1mhz µController), dann wird für ca 0,25 Sekunden
gewartet. Anschließend wird geprüft ob der nullte pin von portD auf
Masse gezogen wurde. Ist dies der Fall, dann wird die rote Led
angeschaltet. Wenn man den nullten pin von portd mit Masse verbindet
während die Überprüfung des Portregisters PIND nicht abgefragt wird und
man dann die Verbindung zur Masse unterbricht, dann wird nicht
gespeichert, dass der pin währenddessen jemals mit Masse verbunden war.
Nun zu meiner Frage: Hat der µController eine Art Puffer der speichern
kann, dass der pin zu jeder zeit des Programms mit Masse verbunden war?
Theoretisch könnte man das irgendwie hardwaremäßig mit einem
selbsthalterelai realisieren, dies möchte/kann ich aber nicht.
Gruß
Erzähl doch lieber kurz und nachvollziehbar, was das Programm so
alles machen soll - und was es nicht macht.
Sich in den Code ohne Beschreibung einzulesen, macht selten Spaß.
Das macht man normalerweise indem man öfter abtastet.
Der User braucht ja eine gewisse Zeit um den Knopf wieder loszulassen
und in dieser Zeit muss man mindestens einmal nachsehen.
Bei sehr speziellen Lösungen kann man das auch per Interrupt lösen.
Ohne Wait arbeiten?
Z.b. Timer verwenden der in der ISR ständig eine Variable hochzählt und
den Portpin abfragt. Die Variable nutzt du als Zeitwert für deine LED
ein und Ausschaltvorgänge.
Schau mal bei Peter Danneggers entprellroutinen, da is auch ne asm
Version und ich meine mit Timer.
Das Programm das dort zu sehen ist, wurde nur zu Testzwecken erstellt um
eine Lösung für mein oben gennantes Problem zu finden. Ursprünglich bin
ich dabei eine Ampelschaltung zu programmieren.
>Das macht man normalerweise indem man öfter abtastet.
Achja? Ich meine das ist z.B. bei der Bibliothek ncurses-dev nicht der
Fall. Ich kann mich aber auch irren. Da konnte man nämlich in einer
Schleife hängen die z.B. nur wartet. Während der Computer diese Schleife
ausführte und der User auf der Tastatur eine Taste drückte, dann wurde
der Tastendruck gespeichert und bei der nächten Auswertung des
"Tastaturpuffers" wurde der Tastendruck von dem Computer registriert.
UND das ganze mit nur einer Abfrage. Das möchte ich auch am liebsten für
den µController realisieren.
>Das macht man normalerweise indem man öfter abtastet.>Der User braucht ja eine gewisse Zeit um den Knopf wieder loszulassen>und in dieser Zeit muss man mindestens einmal nachsehen.
Wäre möglich, aber nicht ideal.
Außerdem würde dafür einfach viel Rechenzeit bei drauf gehen wenn ich
immer diesen Pin abfrage.
>Bei sehr speziellen Lösungen kann man das auch per Interrupt lösen.
Ich möchte es nicht mit einem interrupt lösen. Das hab ich wohl
vergessen in meine ersten Post zu erwähnen.
>Noch Restalkohol im Blut vom Silvester Feiern?
Nein. Und selber? :)
Gruß
>Ich möchte es nicht mit einem interrupt lösen.
Ich eigentlich auch nicht. Mit Interrupts wird es aber einfacher als
ohne.
In deinem Beispiel müsstest du ja in der Warteschleife den Taster
abfragen. Ampel mit einem Taster ginge vielleicht noch. Sobald du
Programme schreibst, die 5 Dinge gleichzeitig machen, wird das Programm
zu unübersichtlich - du findest die Fehler nicht mehr.
ckrex schrieb:> Nun zu meiner Frage: Hat der µController eine Art Puffer der speichern> kann, dass der pin zu jeder zeit des Programms mit Masse verbunden war?
Der Trick an einem MC ist, er macht nur genau das, was man programmiert
hat und er macht es genau und nur dann, wenn der entsprechende Code
ausgeführt wird.
Anders gesagt, von alleine macht er garnichts, Du must es programmieren.
Z.B. einen Ereignispuffer, indem man einen Timerinterrupt aufsetzt, der
zyklisch auf das Ereignis abfragt und den Erfolg in einer Variablen
ablegt.
>Ampel mit einem Taster ginge vielleicht noch. Sobald du>Programme schreibst, die 5 Dinge gleichzeitig machen, wird das Programm>zu unübersichtlich - du findest die Fehler nicht mehr.
Der Wille ist ALLES! Und der Glaube.
Insgesamt habe ich 2 Taster und 2 reed kontakte die quasi eine
induktionschleife darstellen sollen. Also insgesamt 4 Schalter.
Ich werde das ganze nun anders implementiren als gedacht.
Nämlich über mehrfaches Abfragen des Eingangsports.
Der Thread kann von mir aus geschlossen werden ;)