Gast
#5832260
Hallo Zusammen, irgendwie fehlt es mir gerade an ein bisschen Logik und ich hoffe mir könnte jemand von euch helfen. Ich Zähle über den Pin Change Interrupt bei meinem ATMega324PA positive und negative Flanken von einem Motor. Dreht sich der Motor nach Links -> Werte zählen Aufwärts Dreht sich der Motor nach Rechts -> Werte zählen Abwärts. Bei mir gibt es jedoch keine Möglichkeit die Endschalter abzufragen, da diese nicht mit dem µC verbunden sind. Durch den PCINT gibt es immer ein paar takte Zähltolleranz, das heißt es kann auch sein, wenn der Motor nach Rechts gelaufen ist und auf Endposition steht -> Wert ist ein bisschen über 0. Nun suche ich eine Möglichkeit über meinen Timer abzufragen, ob das Signal zum Verfahren des Motors anliegt, sich aber eine gewisse Zeit keine Pulse verändert haben. -> Motorposition = 0.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Somit könnte ich ja irgendwie abfragen:
if (digitalRead(M1_AB) == HIGH) && Änderungen der Pulse in einer
gewissen Zeit < als es sollte)
{
M1_ist_position=0;
}
Nur fehlt mir irgendwie die Logik für "Änderungen der Pulse in einer
gewissen Zeit < als es sollte).
Kann ich einfach eine Variable nehmen und den jetzigen Wert des Motors
in die Variable speichern
und eine neue Variable nehmen und den Wert des Motors nach x Zeit
einspeichern,
beide Variablen vergleichen und falls die Differenz zu gering ist -> Es
hat zu wenig Pulse stattgefunden -> M1_ist_position=0?
Wie würdet ihr das Ganze vergleichen?
Wäre Froh über ein paar Ansätze ;)