Alsoooo.
Das ist evtl etwas ketzerisch jetzt die ganze schöne Software wieder zu entfernen, ABER:
Du gibst doch per Software die Drehrichtung vor, an Pin5.
Dann brauchst du keine 2 Eingänge für Endschalter verwenden, sondern kannst beide per (evtl mit 1k dazwischen) (o.ä.) auf einen Eingang legen.
Nehmen wir mal Pin2 = Stopp
Welcher Endschalter grad klingelt, weisst du ja von Pin5.
Wenn Pin5 LOW
und
"Stopp"signal => Rechtsrum stoppen
Wenn
Pin 5 HIGH
und
"Stopp"signal
=> Linksrum stoppen
Oder einfach den Ausgang 4 deaktiveren (bis taster losgelassen; subroutine intern zum Ende hin überspringen),
dann ist die Drehrichtung Pin5 egal und muss nicht ausgewertet werden.
Damit hast du Pin3 frei,
und kannst diesen als "Turboknopf" verwenden.
Gleiches spiel wäre bei Pin1+2 möglich:
Wenn es einen ADC oder "float*"(?) Pin gibt. *mit "float" meine ich, er hängt ohne signal oder per 10k:10k Spannungsteiler auf ca 2,5V und erkennt high oder low als signal)
Nimm einen Wechseltaster oder Schalter
(1)/0/(1) => ( ) = Tastfunktion; 0 = Ruhestellung
Wenn der Schalter in Mittelstellung ist liegen über einen 10k:10k Spannungsteiler 2,5V am Pin an.
Wenn er links oder rechts gedrückt wird brückt der Taster nach 0V oder 5V. => links/rechts drehen.
Wenn der Chip nen ADC hat, kannst du sogar ein Poti nehmen, und je nach Auslenkung aus der Mittelstellung (mit etwas totbereich 2V..3V),
und damit direkt die Geschwindigkeit proportional dem Ausschlag machen, wie bei ner Modellbausteuerung.
PS.: Quellcode:
Fehlt nach "call init" nicht in
"init"
ein return am Ende ??
Der rasselt da nach "init" doch ins unterprogramm "prüfen" weiter,
und dort steht dann (erst) ein "return", oder ist das Absicht?
Ich würde da
"call init" ... "return"
"call prüfen" ... "return"
[weiter im Programm]
machen.
Dann sieht man oben besser wie die einzelnen Schritte abgearbeitet werden.
Wenn du mit 100nF 100k gemeint hast, kannst du versuchen mal 20k als pulldown oder pullup zu verwenden.
oder ein Entstörglied als Kombination aus 1k + 100nF vor dem Eingangspin setzen.
Am µC hast du direkt nen 100nF ?
-------------------
Alternative ohne ADC / float:
Pin0 - Drehrichtung: HIGH = rechtsrum, LOW = linksrum => KippSCHALTER 1/1 (Pin0 + 20k Widerstand + daran den mittleren Pin vom Kippschalter)
Pin1 - langsam drehen : 20k Pulldown nach Gnd, Taster mit 1k nach +5V => LOW = nichtstun; HIGH (Taster gedrückt) = langsam drehen
Pin2 - schnell drehen : 20k Pulldown nach Gnd, Taster mit 1k nach +5V => Low = nichtstun; HIGH (Taster gedrückt) = schnell drehen
Pin3 - Beide Endschalter (HIGH oder LOW als Stoppsignal je nach Geschmack und el. Schaltung)
Pin4 - Ausgang Impulse (deaktiveren / subroutine übersrpingen bei "Stopp")
Pin5 - Ausgang Drehrichtung
edit: Pin0 und Pin5 haben hier das gleiche Signal! -Wenn du bei Pin0 einen Kippschalter 1/1 verwendest,
brauchst du Pin5 nichtmehr und der wäre frei!! (Für ultraschnell oder anfahren der mittelstellung odersowas)
Bisschen mehr Hardware...
Lesezeichen