www.mikrocontroller.net

Forum: Compiler & IDEs Drehimpulsgeber einlesen / auswerten


Autor: Florian K. (flo7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich weiß, dass es einige Beiträge zur Auswertung von Drehimpulsgebern 
hier gibt, die bei mir allerdings nicht funktionieren. Der Fehler liegt 
wahrscheinlich ca. 30cm vor dem Bildschirm, wie ihr euch sicherlich 
vorstellen könnt.

Ich kenn mich leider nicht allzu gut damit aus, und hoffe nun auf eure 
Hilfe.

Ich verwende den Drehimpulsgeber: ALPS STEC12E von Reichelt und einen 
ATmega8.

Ich habe bereits herausgefunden, dass der Drehgeber 2 Signale ausgibt, 
besser 2 Flanken ausgibt (A und B). Wenn man nun dreht, und die die 
Flanke A vor der Flanke B kommt, ist es eine linksdrehung, umgekehrt 
eine rechtsdrehung.

Nun will ich durch eine rechtsdrehung einen bestimmten Wert erhöhen, und 
durch eine Linksdrehung den Wert natürlich wieder erniedrigen.

A hängt am PORTB4 und B hängt am PORTB4 vom ATmega8.

Gesamtziel wäre es dann, den Phasenwinkel eines PWM-Signals mittels 
diesem Drehimpulsgeber zu variieren.

Nun such ich einen Ansatz, wie ich diesen Drehimpulsgeber mit 24 
Impulsen einlesen bzw. auswerten kann.

Danke im Voraus

gruß, Flo

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Artikel Drehgeber. War jetzt wirklich schwer zu finden . . .

Autor: Florian K. (flo7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da war ich schon ;)

Nur mein Timer0 lässt sich nicht initialisieren...

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nur mein Timer0 lässt sich nicht initialisieren...
1. dann sag das doch gleich und mach einen beitrag mit entsprechendem 
betreff auf...
2. ich glaube eher, dass er sich sehr wohl initialisieren lässt und 
vielmehr du etwas falsch machst.

Autor: Florian K. (flo7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht gibts ja noch einen anderen Ansatz, deshalb mein neuer 
Beitrag mit den ganzen Infos.

Michael H. schrieb:
> 2. ich glaube eher, dass er sich sehr wohl initialisieren lässt und
> vielmehr du etwas falsch machst.

Das ist mir auch klar, nur will ich rausfinden was es ist.
Das ich offensichtlich irgendwas falsch mache weiß ich ja.

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal deinen Code

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ja lobenswert das Du den Fehler im Programm erstmal bei Dir 
suchst und Du bist wahrscheinlich sehr genervt und gestresst und hast 
deswegen nicht gemerkt, dass Du Dir selbst widersprichst:

Entweder Du:
1. Suchst das Problem bei der Timerinitialisierung
oder
2. Du suchst einen ganz anderen Ansatz ohne Timer, den Du ja nicht zum 
laufen kriegst.

Aber gleichzeitig:
>Vielleicht gibts ja noch einen anderen Ansatz
UND
>nur will ich rausfinden was es ist.
geht nicht und dann hätte die Information gefehlt, das kein Timer 
verwendet werden darf.

Ich würde Dir vorschlagen, mal ganz tief durchzuatmen, eine Nacht 
darüber zu schlafen und Dir morgen nochmal das Timerproblem anzugucken 
und uns dann bezüglich dieses Problems zu fragen.

Einen anderen Ansatz zu wählen wenn garnicht der Ansatz falsch ist 
sondern die Realisierung Schwierigkeiten macht bringt Dich nicht weiter.

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Laubnitz schrieb:
> Poste doch mal deinen Code
Sicher? Meinst du wirklich, das muss sein?

Autor: Florian K. (flo7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guru schrieb:
> Es ist ja lobenswert das Du den Fehler im Programm erstmal bei Dir
> suchst und Du bist wahrscheinlich sehr genervt und gestresst

ich kann dir gar nicht sagen wie recht du hast!

Ich werds wohl besser für heute gut sein lassen anstatt mich verzweifelt 
hier an dieses forum zu klemmen.

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abend : )

ich habe den gleichen Encoder wie du und hatte auch das Problem, dass er 
nicht funktioniert hat, mit den Programmen die hier zu finden sind, ich 
poste dir mal den Beitrag und das Program welches definitiv läuft : )

Beitrag "Drehcoder ALPS Stec12E08 will nicht"

#define XTAL        8e6                 // 8MHz
 
#define PHASE_B     (PIND & 1<<PD6)     // an Pinbelegung anpassen
#define PHASE_A     (PIND & 1<<PD4)     // an Pinbelegung anpassen

volatile int8_t enc_delta;              // Drehgeberbewegung zwischen
                                        // zwei Auslesungen im 

int8_t table[16] PROGMEM = {0,0,-1,0,0,0,0,1,1,0,0,0,0,-1,0,0};    //halb


ISR( TIMER0_COMP_vect )             // 1ms fuer manuelle Eingabe
{
    static int8_t last=0;           // alten Wert speichern
 
    last = (last << 2)  & 0x0F;
    if (PHASE_A) last |=2;
    if (PHASE_B) last |=1;
    enc_delta += pgm_read_byte(&table[last]);
}

void encode_init( void )            // nur Timer 0 initialisieren
{
  TCCR0 = (1<<WGM01) | (1<<CS01) | (1<<CS00);     // CTC, XTAL / 64
  OCR0 = (uint8_t)(XTAL / 64.0 * 1e-3 - 0.5);       // 1ms
  TIMSK |= 1<<OCIE0;
}
int8_t encode_read( void )         // read two step encoders
{
  int8_t val;
 
  cli();
  val = enc_delta;
  enc_delta = val & 1;
  sei();
  return val >> 1;
}

int main (void)
  {
  encode_read();
  while (1) 
  {
  val += encode_read(); 
  }
}


wenn du noch fragen hast kann ich dir gern helfen...

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.