- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: ENCODER Befehl zu langsam

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    E-Bike
    mmhhh. Dann nehm' ich an, daß die LCD Befehle zu lange brauchen.
    Da wärst du mit der interrupt-Methode dann wirklich besser dran
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12

    Encoder

    Hallo zusammen,
    im Anhang ist eine Routine , die einen Encoder über eine state machine voll decodiert und damit die VOLLE Auflösung liefert. (d.h. bei JEDEM H/L Übergang wird rauf oder runter gezählt). Durch Speichern der Interrupts in Int_cnt und Abarbeiten in den While- Schleifen gehen auch bei schnellem Drehen keine Impulse verloren.
    Angehängte Dateien Angehängte Dateien

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.08.2005
    Ort
    Berlin
    Alter
    59
    Beiträge
    239
    Hallo,

    vielen Dank für Deinen gelungenen "Einstand" hier. Herzlich willkommen in Forum.

    Gruß Dirk

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2005
    Beiträge
    18

    Programm für die neuen Bascom Versionen

    Hallo,

    ich habe auch die Statemachine versucht, funktioniert für mich leider auch nicht, ich denke ich habe wohl doch ein Hardwareproblem, denn mit einem anderen Drehgeber funktioniert es. An das Speicheroszi komme ich leider in nächster Zeit nicht ran, aber ich werde mal andere Hardwarelösungen versuchen um meinen Steppermotor zu benutzen.

    Ich wünsche euch noch viel Spaß und nochmals vielen Dank !!!

    Ach so, das Programm muss für die aktuellen Bascom Versionen etwas geändert werden, denn Bascom hat "ENCODER" ja jetzt als reservierten Befehl, das sollte man also nicht mehr als Variable verwenden.

    MfG

    Markus

    Code:
       '-----------------------------------------------------------------
       '                     (c) 2003 Manfred Fleischmann
       '                     full quad encoder implementation with state machine
       '-----------------------------------------------------------------
       $regfile = "m32def.dat"
       $crystal = 16000000
    
       Ddrd.1 = 0                                               ' axial in
       Ddrd.2 = 0                                                  ' coder in
       Ddrd.3 = 0                                                  ' coder in
       Portd.1 = 0                                              ' axial pullup
       Portd.2 = 0                                                 ' coder pullup
       Portd.3 = 0                                                 ' coder pullup
    
       Const True = 1
       Const False = 0
    
       Dim Int_cnt As Byte
       Dim Encoder1 As Bit                                       ' Encoder ist ein reserviertes Wort in Bascom
       Dim Rx_freq As Single
       Dim Old As Byte
       Dim New As Byte
       Dim Calc As Byte
    
       Enable Interrupts
       Enable Int0                                              ' Enable the interrupt 1 / 2
       Enable Int1
       Mcucr = 00000101                                         ' Interrupt 0 und 1 bei logical change auslösen
       On Int0 Int_encoder                                      ' Labels for  the Interrupt routine
       On Int1 Int_encoder
    
       INt_cnt = 128                                               ' Initialisierung
       Encoder1 = True
       Old = 3
    
       Do                                                       ' Main Program Loop ****************************************************************************
          If Encoder1 = True Then
             While INt_cnt > 128
              Rx_freq = Rx_freq + 10
              Decr INt_cnt
             Wend
             While INt_cnt < 128
              Rx_freq = Rx_freq - 10
              Incr INt_cnt
             Wend
             Encoder1 = False
          End If
       Loop                                                     ' END MAIN ****************************************************************************
    
    
    
       '***************** Encoder Interrupt Routine  ***************************************
       Int_encoder:
          Encoder1 = True                                        ' Frequenz muß nachgeführt werden
          New = Pind
          Calc = Old.2 Xor New.3                                ' berechne FSM
          Calc = Calc * 2
          Decr Calc
          INt_cnt = INt_cnt + Calc
          Old = New
       Return
    
       End

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests