mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik drehencoder in c mit avr


Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe mir mal gedanken zu dem panasonic-drehencoder von pollin 
gemacht und hier etwas gefunden, dass den (nicht so einwandfrei 
gefertigten) Encoder zuverlässig abfragt. damit entfällt auch entprellen 
etc. ... ob man nun dauernd oder per timer pollt ist auch egal.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>

volatile uint8_t t,x;

uint8_t getA()
{ if (PIND & (1<<PD2)) return 1;  else return 0;}
uint8_t getB()
{ if (PIND & (1<<PD3)) return 1;  else return 0;}

SIGNAL(SIG_OUTPUT_COMPARE1A)
{  
  uint8_t a,b;
  a=getA();
  b=getB();
  switch (t)
  {
    case 0:
      if(!(a^b))
      {
        x=0|(a)|(b<<1);
        t++;
      }
      break;
    case 1:
      if((a^b))
      {
        x|=(a<<2)|(b<<3);
        t++;
      }
    break;
    case 2:
      if(!(a^b))
      {
        x|=(a<<4)|(b<<5);
        t=0;
        switch (x)
        {
          case 0b00111000:
          case 0b00000111:
            // hier etwas, das in einer richtung passieren soll
            break;
          case 0b00110100:
          case 0b00001011:
            // hier etwas, das in der anderen richtung passieren soll
            break;
        }
    }
    break;
  }
}
int main()
{
  t=0;  x=0;
  DDRD = 0x00;  PORTD= 0xFF;
  TIMSK |= (1 << OCIE0A);  OCR0A=0xF0;  TCNT0=0x00;  TCCR0B=0b00000011;
  //timer kann auch anders eingestellt werden
  sei();
  while (1)
  {
    __asm__ volatile("nop");
  }
}


ich hoffe ich habe beim einfügen hier keine fehler gemacht.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das erprobt und besser als Encode.c aus
Beitrag "Drehgeber auslesen"

???

Oliver

Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besser ist natürlich ansichtsache ....
und ein fehler hat sich eingeschlichen
SIGNAL(SIG_OUTPUT_COMPARE1A)

muss natürlich der vom timer 0 sein:
SIGNAL(SIG_OUTPUT_COMPARE0A)

erprobt hab ich das ... und es treten keine fehlzählungen auf

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sam schrieb:
> besser ist natürlich ansichtsache ....

Nur mal so als Randnotiz:

"Gut" macht sich daran fest

-- wie gut eder Code nachvollziehbar ist, also auch daran
-- wie gut er dokumentiert ist
-- wie allgemeingültig er ist
-- wie effizient er ist
-- wie elegent er ist

Mal ehrlich: mit obigem Code gewinnst du in keiner dieser Kategorien 
einen Blumentopf.

Johann

p.s.:

Bisher konnte ich auch noch nicht erraten füe welchen µC aus dem AVR-Zoo 
das compilerbar ist...

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann würde ich agen ...

nix vorkauen lassen . sondern selbst diesen code so anpassen das man ihn 
verwenden kann

dann isses egal mit welcher software auf welchem target auch immer

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sam schrieb:
> ich habe mir mal gedanken zu dem panasonic-drehencoder von pollin
> gemacht und hier etwas gefunden, dass den (nicht so einwandfrei
> gefertigten) Encoder zuverlässig abfragt.

Es wäre durchaus begrüßenswert, wenn Du den Code nicht so extrem sparsam 
kommentiert hättest.
Hast Du denn wenigstens nen Ablaufplan oder sonst eine irgendwie 
geartete Funktionsbeschreibung?

Wie hast Du diesen Code ohne Plan überhaupt entwickelt, d.h. welche Idee 
steckt dahinter?

Hast Du irgendwelche Anhaltspunkte, daß er besser funktioniert, als 
bekannte deutlich weniger aufwendigere Lösungen?


Es wirk jedenfalls nicht besonders elegant, wenn man nen Code ohne 
erklärende Worte einfach so dahinschmeißt.


Peter

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie hast Du diesen Code ohne Plan überhaupt entwickelt,

Vermutlich gar nicht.

Die Aussage
>...und hier etwas gefunden,

lese ich wörtlich so, daß das von einem unbekannten Autor stammt, nicht 
von sam. Die etwas antiquierten SIG()-ISR's deuten auch darauf hin, daß 
das alles schon älter ist.

Oliver

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.