Forum: Mikrocontroller und Digitale Elektronik Drehrichtung und Umdrehungen erkennen u. zählen


von ANDREAS25 (Gast)


Lesenswert?

Hallo
Ich habe eine Frage
Ich möchte von einer Seiltrommel die sich von 0 bis max. 200 U/min Dreht
die Anzahl der Umdrehungen (nicht die Drehzahl/min) auf einem lcd 
ausgeben und wenn sich die Trommel in die andere Richtung dreht sollen 
die Umdrehungen wieder heruntergezählt werden. (Seil abspulen 
raufzählen,
Seil aufspulen runterzählen, Seil völlig aufgewickelt Zähler wieder bei 
0)
Ich habe dazu zwei Reedschalter einen für die Richtung einen für die
Umdrehungen.
Eigendlich ganz einfach.
Meine Frage ist nur wie ich das Ganze am besten an einen Atmega8
anschließe. Meine Überlegung.
Die zwei Reeds an Int0 und Int1,für jeden eine eigene ISR
Die erste ISR setzt eine Variable für die Drehrichtung auf 1
Die zweite ISR zählt eine Variable je nach Drehrichtung rauf oder runter
und gibt diese am lcd aus und sezt die Drehrichtung wieder auf 0.
Oder kann ich bei so langsamen Ereignissen die Interrupts weglassen
und das Ganze in eine Schleife setzen und mit if then wie einen
Taster abfragen?
mfg andreas

von Frank501 (Gast)


Lesenswert?

Eigentlich braucht man dazu nur eine ISR.
Wenn Eingang A einen Interrupt auslöst, wird Eingang B abgefragt. Wenn 
Eingang B dann hi ist dreht sich die Trommel z.B. rechts herum und man 
inkrementiert einen Zähler. Wenn Eingang B lo ist, dreht sich die 
Trommel in die andere Richtung und der Zähler wird wieder dekrementiert.

Die Herausforderung sehe ich aber eher darin, das wenn das Seil nicht 
gleichmäßig aufgewickelt wird, das dann die Umdrehungen beim Aufwickeln 
nicht mehr mit denen beim Abwickeln übereinstimmern, weil das Seil sich 
anders aufwickelt und über einer anderen Windung liegt.

Frank

von ANDREAS25 (Gast)


Lesenswert?

Hallo
Das mit dem ungleichmäßigen Aufwickeln ist mir bewusst stellt aber in 
dem
Fall kein Problem dar.
Aber wie stelle ich mit einer ISR die Drehrichtung fest.
Ich bekomme vom Reed ja nur eine kurze Flanke oder "merkt" sich der Int
die fallend Flanke. Wenn ich langsam drehe ist der eine Eingang schon 
wieder low bis der zweite ausgelöst wird.
mfg andreas

von Frank501 (Gast)


Lesenswert?

In dem Falle würde es helfen, die Magneten so zu versetzen, daß die 
Reedkontakte versetzt so ausgelöst werden, daß sich die Signale zu 50% 
überlappen.

Frank

von ANDREAS25 (Gast)


Lesenswert?

Hallo ich habe es mal mit folgendem Code im MyAVR Board versucht.
Hab noch zwei externe Pullups hizugefügt, funktioniert im Versuchsaufbau
eigendlich.
mfg andreas


Reed1 Alias Pind.2
Config Reed1 = Input
Reed1 = 1
Reed2 Alias Pind.3
Config Reed2 = Input
Reed2 = 1

On Int0 On_int0
On Int1 On_int1
Config Int0 = Falling                                       '
Config Int1 = Falling
Enable Int0
Enable Int1
Enable Interrupts

Do
Loop

On_int0:
    Waitms 10
    Richtung = 1
Return

On_int1:
      Waitms 10
   If Richtung = 0 Then
      Incr Umdrehungen
      Else
      Decr Umdrehungen
   End If

      Print "Umdrehungen" ; "  " ; Umdrehungen
      Richtung = 0

Return

von Ralph (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.