- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 10

Thema: Drehencoder entprellen?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.04.2006
    Ort
    Bayern
    Alter
    34
    Beiträge
    182

    Drehencoder entprellen?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich hab mir von csd-electronics einen Drehencoder gekauft.
    Hab den jetzt an meinen Atmega16 hängen


    Den A-Ausgang hab ich an einen Interrupt(INT2 da kein anderer mehr frei ist)

    Ich frage in der ISR nur ab ob der B-Ausganbg 0 oder 1 ist und je nach dem springe ich zu einem label wo er die variable incrementiert oder decrementiert.


    Nun mein Problem:
    Im großen und ganzen funtkioniert es schon, nur überspringt er mir manchmal werte oder geht in die Falsche Richtung ( ich dreh hoch, er zählt runter) etc.

    Ich vermute das es am Kontaktprellen liegt.
    Nur wie kann ich das Entprellen?
    Per Software hab ich mal nach dem aufruf eine kleine Pause ( 500us) eingefügt. Das bringt etwas aber es ist nicht berauschend.

    Per Hardware habe ich mir gedacht kleine RC Kombinationen zwischen Encoder und Controller zu hängen.

    mfg Benedikt

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    Ich weiß leider nicht womit du programmierst aber in Bascom gibts den Debounce Befehl dafür. Wenns nicht Bascom sein soll, dann kannst dir das ja trotzdem mal ansehen. Vielleicht erkennst du ja wie die das gemacht haben.

    mfg milkbubi

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    62
    Beiträge
    534
    Also es gibt verschiedene Möglichkeiten .. aber im Prinzip läßt man einen Zähler laufen und schreibst in eine Variable pro Taste .. und schaust nach einer gewissen Zeit z.b. 100ms nach ob die Taste noch gedrückt ist und wertest das dann erst als gedrückt aus ... so kannst Du z.b. auch unterscheiden, ob die Taste kurz oder lang gedrückt wurde ... bei den Drehgebern gehst Du genauso vor, nur solltest Du einen Ausgang auf einen INT setzen und dort dann nachsehen, was der zweite Ausgang liefert .. daraus ermittelt man die Drehrichtung ...
    Ich kann mir keine Signatur leisten - bin selbständig!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.04.2006
    Ort
    Bayern
    Alter
    34
    Beiträge
    182
    Hallo,

    ich programmiere in Bascom.

    Ich versteh nicht ganz wie ich ich den encoder entprellen soll.
    Soll ich mit A einen Interrupt auslösen, dann eine zeit Starten und dann nachsehen ob B da ist oder nicht.?

    mfg Benedikt

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    62
    Beiträge
    534
    nun, mit Bascom kenn ich micht nicht aus .. das kapselt vieles ... da gabs ja oben den debounce-befehl ... wie der auch immer aufgebaut ist.
    Du must halt zwei ports abfragen, einer davon sollte einen interrupt auslösen .. dann fragst Du beide ab, siehe Datenblatt des encoders weißt Du dann die Richtung ...
    Ich kann mir keine Signatur leisten - bin selbständig!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.04.2006
    Ort
    Bayern
    Alter
    34
    Beiträge
    182
    Hallo,

    Ich habe es mit dem debounce befehl probiert.
    Nur nach einem Interruptaufruf kann ich auf dem gleichen Pin keinen Debounce befehl mehr anwenden.

    Hat jemand kein Beispielprogramm für Bascom.

    Würde es etwas nützen wenn ich RC-Glieder zwischen µC und Encoder schalt


    mfg Benedikt

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.01.2007
    Beiträge
    52
    Ein RC-Glied (Tiefpass) hilft bestimmt. Du musst aber zwei Bauteile mehr verlöten.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.04.2006
    Ort
    Bayern
    Alter
    34
    Beiträge
    182
    Hallo,
    Die 2 Bauteile sind egal.

    Weis sonst niemand wie man so einen drehencoder per software entprelltß


    Danke
    mfg Benedikt

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    28.01.2007
    Beiträge
    52
    Ich kenne mich mit AVR-Mikrocontrollern zwar nicht so gut aus, aber da müsste es doch eine Möglichkeit geben Interrupts zu sperren?
    Am Anfang der Interrupt-Routine sperrst du also den Interrupt und startest einen Timer welcher nach 100ms überläuft. Der Timer löst beim Overflow einen anderen Interrupt aus, in welchem du den gesperten Interrupt wieder freigibst.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    03.12.2007
    Alter
    52
    Beiträge
    18
    Hallo,

    leider kenne ich deinen Drehimplusgeber nicht.
    Hochwertige funktionieren mit Lichtschranken. Da prellt normal nicht so viel.
    Wenn es sich um Schalter handelt, dann könntest du das ganze doch mit Flip-Flops entprellen: Ein Ausgang am Set-Eingang des FF, der andere Ausgang am Rücksetz-Eingang. Mit einem 2ten FF könntest du dir die Richtung anzeigen lassen.
    Mit einem 74HCT74 sollte das möglich sein.

    CU
    Rob

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test