Inkremente zählen ...

vor 42 weeks 4 days von ultraschlachtschiff

Hallo Gemeinde,

als alter Aufzugsmonteur habe ich mir einen Modell-Aufzug gebastelt. Kern der Steuerung ist der Arduino von FRANZIS(Lernpaket). Für die Information des Kabinenstandes verwende ich einen Inkrementalgeber mit 1024 Impulsen pro Umdrehung. Eine Lernfahrt ermittelt die Impulse pro Etage und verwendet diese Werte zum Bedienen der Haltestellen. Endlich funktioniert alles, bis 6 Haltestellen! Jetzt wollte ich mein Projekt hier vorstellen. Allerdings sollte auch ein "normaler" Arduino Uno mit der Software klarkommen. Also habe ich einen bestellt, die Soft aufgespielt und jetzt kommt es: UNO zählt die Inkremente des Gebers anders als DUEMILLANOVE. Das zählen der Inkremente mache ich über einen Interupt. Und digitale Inkrementalgeber muß man doch net entprellen, oder?
Ich wüsste auch net, wie man diese Informationen entprellen könnte. Hab es mit dem Lib METRO versucht, kommt nur Bullshit raus.
Beide Chips werden doch mit 16MHz getaktet, wie kann es da zu unterschiedlichen Werten kommen?
Von den Werten hängen die Anhaltewege ab. Da ist schon Präzision gefragt. Weiß jemand Rat ?
Das Video zum Projekt in der DUEMILLENOVE-Phase bei Youtube:
http://www.youtube.com/watch?v=syUvyoYR5Bk
Ich habe auch eine Doku bereit. Kann man die hier online stellen?

Grüße von Olli, dem Ultraschlachtschiff ;)

Ähnliche Posts

7 Antworten auf “Inkremente zählen ...”


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
  1. uwe sagt:

    Der Francis und der UNO-Arduino mußten gleich sein. Schick mal das Interruptprogramm.
    Grüße Uwe

    Login or register to post comments

  1. ultraschlachtschiff sagt:

    Hi Uwe,

    Hier der Zählvorgang

    long a=0;//Zählervariable für Encoder
    int richtung=0;//gibt die Fahrtrichtung vor. 1=auf 2=ab 0=stillstand

    void setup()
    {
    attachInterrupt(0, zahl, CHANGE);//Dieser Interrupt zählt die Impulse des Encoders
    }

    void loop()

    {
    // Steuerung des Antriebs (Richtung/Geschwindigkeit), Rufverarbeitung usw
    }

    void zahl()
    {
    if(richtung==1){a++;}
    else if(richtung==2){a--;}
    }

    Da ist doch nix verkehrt,oder? Der Code in der Hauptschleife spielt doch - wenn ich das richtig verstanden habe - für den Interrupt keine Rolle. Werde jetzt mal verschiedene Bedingungen ausprobieren (RISING,FALLING usw). Habe mir gerade überlegt, ob es am CHANGE liegen kann.

    Login or register to post comments

  1. ultraschlachtschiff sagt:

    Jetzt bin ich total verwirrt...

    Der selbe Code zählt einwandfrei und EXAKT auf dem FRANZIS-Arduino mit 168er Chip
    Auf dem UNO kommen JEDESMAL andere Werte raus. Beim überspielen der Software habe ich auch immer auf die richtigen Einstellungen (Boardtyp) geachtet. Es funktioniert ja auch alles, nur der Interrupt net.
    Ich werde jetzt den Encoder aus meiner Bastelarbeit ausbauen und mal ein paar Schreibtischversuche mit den beiden Boards machen. Gibts doch net !!!

    Login or register to post comments

  1. ultraschlachtschiff sagt:

    Nochmal ein kleines Update: Jetzt hab ich in meiner Verzweiflung den 328er Chip ins Board von Franzis gesteckt und mal geguckt, was passiert.
    Auch so zählt der Chip net richtig. Als ob die Pins 2 und 3 gar keine Interrupt-Pins seien. Oder muß ich die vieleicht extra einspielen (irgendein Library) ???
    Habe im Netz nix gefunden. Hab nur ich das Problem?
    Habe den UNO von Watterott bezogen. Da schreib ich mal ne Mail hin.

    Login or register to post comments

  1. Spot sagt:

    Hallo

    In der Hinsicht sind der Mega168 und der Mega328 eigentlich identisch, du brauchst also nichts anderes.

    Hast du zufällig ein Oszi zur Verfügung? Wenn ja kannst du in deiner Interrupt-Service-Routine mal einen Pin toggeln lassen und dir dann das Signal von deinem Inkrementalgeber und den Pin am Oszi anschauen.

    Der Code den du gepostet hast zeigt eigentlich auch keine Aufälligkeiten, das ganze macht nicht so richtig Sinn.
    Kannst du mir mal einen Link zu dem Datenblatt von dem Inkrementalgeber posten?

    Momentan weiß ich nicht was ich dir raten sollte.

    mfg
    Spot

    Login or register to post comments

  1. ultraschlachtschiff sagt:

    Oh Mann ! Hab einen Fehler gemacht wie ein Lehrbub! Danke Spot, wenn ich net nach dem Typenschild des Inkrementalgebers wegen dem Datenblatt geguckt hätte, ware mir bis jetzt noch net aufgefallen das die Leitung des Enkoders auf einem Meter parallel zu einer Motorleitung verlegt ist. Beide Leitungen sind geschirmt. Trotzdem hat das scheinbar zu EMV-Problemen geführt. Nachdem ich die Leitungen 10 cm auseinander gelegt habe, zählt auch der UNO exakt. Scheinbar ist der 168er Chip da etwas unempfindlicher. Mann ey, wegen sowas banalem so eine Aufregung - also für mich ;)

    Login or register to post comments

  1. Spot sagt:

    Hallo

    Naja das ist doch immer wieder fein wenn die Fehler sich dann als solche Kleinigkeiten heraustellen.

    Freud mich das es wieder geht, auch wenn ich eigentlich nichts nützliches dazu beigetragen habe.

    mfg
    Spot

    Login or register to post comments