Drehgeber mit 15 Impulse / 30 Rastungen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • 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.

      Quellcode

      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
      Alles anzeigen

      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 schrieb:

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

      Quellcode

      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
      Alles anzeigen
    • Drehgeber: = die Timer2 isr!

      Quellcode

      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
      Alles anzeigen

      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