mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drehimpulsgeber 427 - kleines Auswertungsproblem


Autor: Martin 567 (martink11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe einen At90Can128 und programmiere in C mit AVRStudio.
ich habe einen Drehimpulsgeber 427, den ich zyklisch per Timer abfrage.

den Code hab ich auch im Netz entdeckt, er läuft auch zuverlässig, nur 
brauche ich bei einer RECHTSDREHUNG immer 2 Klicks ("Drehklicks"). Bei 
einer Linksdrehung jedoch funktioniert es einwandfrei.

Dabei kann es sich doch sicher nur um ein kleines Problem handeln?

Hier wäre noch mein verwendeter CODE:
// ********************************** Drehimpulsgeber ***********************************
ISR(TIMER2_OVF_vect)
{
  static unsigned char alter_status = 0,step = 0;
  unsigned char        neuer_status;

speed++;

      neuer_status = Geber & (_BV(Schalter_A) | _BV(Schalter_B)); // Änderung einlesen
  if ((neuer_status ^ step)==(_BV(Schalter_A) | _BV(Schalter_B)))
  {

    if (zahler<2)
    {
    //  if(speed>80)
    //  {s=1;}
      if(speed>150)    //bei Vorteiler = 128:  150
      {s=10;}
      else if(speed>20)  //bei Vorteiler = 128:   20
      {s=100;}
    }
    else s=1;

      speed=0;  //Geschwindigkeitszähler zurücksetzen (zählt von 0 bis 18.446.744.073.709.551.615)


    if ((neuer_status ^ alter_status)==_BV(Schalter_A))
        {richtung_enc += s;               // Es war nach rechts
       drehung=1;
      }
    else if ((neuer_status ^ alter_status)==_BV(Schalter_B))
        {richtung_enc -= s;                // Es war nach links

      if(richtung_enc>65000)
      {richtung_enc=0;}

        step = neuer_status;
      drehung=1;
      }
  }

  alter_status = neuer_status;

}
// **************************************************************************************

Danke für jede Hilfe!!!
Martin

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich verwende immer eine an den Drehencoder angepaßte Statemachine.
Und zusätzlich eine einfache Entprellroutine.
Damit wird vermieden daß unzulässige Zustandsübergänge beim Prellen 
(z.B. von 00 nach 11 oder 01 nach 10) nicht zu einem falschen 
Schaltzustand führen.

Autor: Martin567 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

an alle danke

das problem hat sich schon erledigt hatte eine Klammer falsch gesetzt.
kann ja passieren, jetzt funktioniert das ganze einwandfrei

servus!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.