- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 10

Thema: Drehgeber Enc. zählt falsch

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.07.2007
    Ort
    Roboland
    Alter
    48
    Beiträge
    70

    Drehgeber Enc. zählt falsch

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo ich hab da ein Enc. (GP1A038RBK) Code der einfach die Hälfte auf der Scheibe Zählt ich hab 120 schw. linien aber da er nur 60 davon zählt also fährt dieser das Doppelte des Weges wo liegt der Fehler!
    Davon abgesehen denk ich das ich noch Probleme mit der Prell Zeit habe wenn mir da Jemand weiter helfen könnte das währe glasse!

    Code:
    SoccerBoard board; 
    
    //Prozedur für das Auslesen eines Encoders
    void WaitForEncoder(int p,int stepps) 
    { 
     bool portstatus=board.digital(p); 
     int zaehler = 0; 
     while(zaehler <= stepps) 
     { 
       if(board.digital(p)!=portstatus) 
       { 
       if(portstatus) zaehler ++;                        
         portstatus=!portstatus; 
       }    
     } 
     return; 
    } 
    int main(void){
     board.ledOn(0);
     board.ledOn(1);
     board.waitForButton(0);
     board.motor(0,255); 
     board.motor(1,-255); 
     WaitForEncoder(0,1200);  10 oder stimmen 20 umdr.                        
     board.motorsOff();
     board.ledsOff(); 
     }

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    Normalerweise würde man eine Flankendetektion einbauen: Merke den letzten Zustand, wenn sich der aktuelle Zustand vom letzten Zustand unterscheidet, hast du eine Flanke erkannt und der Zähler zählt um eins hoch. Auf diese Weise hättest du sogar eine Auflösung von 240! Man kann natürlich auch nur die Flanken in eine Richtung zählen, wenn man will...

    widerhole biz Zähler voll {
    wenn alter Zustand != Zustand dann Zähler = Zähler + 1
    alter Zustand = Zustand
    }

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.07.2007
    Ort
    Roboland
    Alter
    48
    Beiträge
    70
    Hallo
    Das mit der Flanke höhrt sich gut an mir reicht es wenn er seine 120 zählt im moment sieht das nicht toll aus er solte einfach ur die 120 anstatt 60 zählen und das prellen weg lassen

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    ... na dann würde die Zeile heissen

    wenn alter Zustand = 0 und Zustand = 1 dann zähle

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.07.2007
    Ort
    Roboland
    Alter
    48
    Beiträge
    70
    Wo hängts denn sorry aber ich mach das noch nicht so lange
    Code:
    void WaitForEncoder(int p,int stepps) 
    { 
     bool portstatus=board.digital(p); 
     int zaehler = 0; 
     while(zaehler <= stepps) 
     { 
       if(board.digital(p)!=portstatus) 
       { 
       if(portstatus=0 portstatus =1  zaehler ++);                        
         portstatus=!portstatus; 
       }    
     } 
     return; 
    }

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    Probiers doch mal so:

    void WaitForEncoder(int p,int stepps)
    {
    bool portstatus=board.digital(p);
    int zaehler = 0;
    while(zaehler <= stepps)
    {
    if(portstatus==0 && board.digital(p) ==1)
    {
    zaehler ++;
    }
    portstatus=board.digital(p);
    }
    return;
    }

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.07.2007
    Ort
    Roboland
    Alter
    48
    Beiträge
    70
    Irgendwie funktioniert das nicht so !
    Es höhrt nicht mehr auf zu drehen und das ich eien 1Watt Wiederstand genommen hab kann nciht der Fehler sein vorher hatte ich ein signal aber bei dem code nehmen die Runden kein Ende.
    Code:
    SoccerBoard board; 
    
    //Prozedur für das Auslesen eines Encoders
    void WaitForEncoder(int p,int stepps) 
    { 
     bool portstatus=board.digital(p); 
     int zaehler = 0; 
     while(zaehler <= stepps) 
     { 
       if(portstatus==0 && board.digital(p) ==1)
       { 
        zaehler ++;                        
        portstatus=board.digital(p);
       }    
     } 
     return; 
    }

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    portstatus=board.digital(p);
    muß aus der inneren Klammer raus.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    28.07.2007
    Ort
    Roboland
    Alter
    48
    Beiträge
    70
    Hallo beppo
    ich hab jetz { } weg gemacht aber irgendwie ist das nicht auf mein board zu spielen compilieren ja aber es geht nicht auf mein board.

    Wenn ich da einfach die 3ms eingehb wegen der Prellzeit ? ich würde dies ja mal testen aber ich weiss nicht so wo ich die Einfügen soll!

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    Ich kenn deinen Encoder nicht, aber eine Prellzeit gibts normalerweise nur bei mechanischen Kontakten, also Schaltern, Relais, usw.

    Ich würde mich zuerst um das Problem mit dem Board kümmern.

    Dein Sourcecode sollte jetzt so ausschauen:

    //Prozedur für das Auslesen eines Encoders
    void WaitForEncoder(int p,int stepps)
    {
    bool portstatus=board.digital(p);
    int zaehler = 0;
    while(zaehler <= stepps)
    {
    if(portstatus==0 && board.digital(p) ==1)
    zaehler ++;
    portstatus=board.digital(p);
    }
    return;
    }

Berechtigungen

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

Solar Speicher und Akkus Tests