Drehgeber mit 15 Impulse / 30 Rastungen

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Drehgeber mit 15 Impulse / 30 Rastungen

      Hallo Bascom-Freunde!
      Bis dato habe ich immer mit Drehgeber gearbeitet welche pro Rastung einen Impuls erzeugten - immer alles OK!
      Nun habe ich erstmals einen mit Gewindeanschluss gebraucht und übersehen dass dieser Drehgeber meine Werte nur bei jeder zweiten Rastung ändert.

      Aktuell vewende ich den Code aus Stefans Buch "Zustandswechsel mit Byte für ALPS Encoder"! Dieser hat bis jetzt auch immer 1A funktioniert.

      Source Code

      1. Drehencoder:
      2. Timer2 = Timer2_preload
      3. Zustandswechsel.0 = Encoder_a
      4. Zustandswechsel.1 = Encoder_b
      5. Select Case Zustandswechsel
      6. Case &B0000_0010 : Incr Wert
      7. Case &B0000_0001 : Decr Wert
      8. End Select
      9. Zustandswechsel.4 = Zustandswechsel.0
      10. Zustandswechsel.5 = Zustandswechsel.1
      11. Return
      Display All

      Anmerkung: Habe schon einige Drehgeber-Routinen ausprobiert....immer das gleiche Verhalten.
      Diese Routine wird vom Timer2 jede Millisekunde aufgerufen.

      Muss ich damit leben oder gibt es eine Möglichkeit dieses für mich ungewohnte Verhalten per SW so zu ändern dass trotzdem jede Rastung den Variablen-Wert ändert?
    • Die beiden Eingänge a und b wechseln mit jeder Rastung das Muster.
      Es gibt 4 verschiedene Muster.
      In deinem Programm werden nur 2 Muster ausgewertet.

      Wie müsste denn eine Software aussehen, die alle 4 Zustandswechsel erkennt?
      Ein Speichern des vorheriigen Musters und ein Vergleich mit dem aktuellen Muster wäre eine Entscheidungshilfe.
      Abhängig vom Vergleich geht es dann vorwärts oder rückwärts.
    • Danke Micheal - Ein leicher Schlag auf den Hinterkopf.... und schon geht's a_22_9ac28a82

      Michael wrote:

      Wie müsste denn eine Software aussehen, die alle 4 Zustandswechsel erkennt?
      So passt es jetzt wie es soll!!!

      Source Code

      1. Dim Zustand As Byte
      2. Dim Zustand_alt As Byte
      3. Dim Zustandswechsel As Word At Zustand Overlay
      4. Dim Wechsel As Byte
      5. Dim Wert As Single 'Drehencoder Variable
      6. Wechsel = 4
      7. Drehencoder:
      8. Timer2 = Timer2_preload
      9. Zustand.0 = Encoder_a
      10. Zustand.1 = Encoder_b
      11. If Wechsel = 4 Then
      12. Select Case Zustandswechsel
      13. Case &H01_00 : Incr Wert
      14. Case &H00_02 : Incr Wert
      15. Case &H03_02 : Decr Wert
      16. Case &H00_01 : Decr Wert
      17. End Select
      18. End If
      19. Zustand_alt = Zustand
      20. Return
      Display All
    • Drehgeber: = die Timer2 isr!

      Source Code

      1. 'Timer2 fuer Drehencoder
      2. '***********************************************************************************
      3. 'Quarzfrequenz: 16 MHz
      4. 'Gewünschte Zeit: 1 ms
      5. 'Erreichbare Zeit: 1 ms
      6. 'Abweichung: 0 % bzw. 0 ppm
      7. Const Timer2_Preload = 6
      8. Config Timer2 = Timer , Prescale = 64
      9. Enable Timer2
      10. Timer2 = Timer2_preload
      11. On Timer2 Drehencoder
      12. Enable Interrupts
      Display All

      Also ich habe bis jetzt keine Probleme die Drehgeber mit Timer abzufragen. Keine Sprünge, kein Auslassen einer Rasterung!
      Ich würde sagen das funktioniert PERFEKT.
      Mit Interrupt habe ich es noch gar nicht versucht - never change a winnig team