komischer 3State-Rotary Encoder programmieren

Hallo, ich hab hier diesen
Rotary von Alpha, den ich aus meinem AKAI ausgelötet habe und nun in einem Anderen Projekt wiederverwenden wollte, aber der ist nicht so 2State wie andere Encoder für die man auch massig Tutorials und Skript Beispiele findet.....

Ich hab also keine Ahnung wie ich den Anschließen und Programmieren soll...

Hier das Datasheet-pdf:

http://www.taiwanalpha.com/downloads?target=products&id=80

kann jemand helfen?

Hallo,

das scheint ein Poti mit 3 Schleifwiderständen zu sein. Also kein Encoder mit A/B Phasen.
Du müßtest das Teil analog auswerten wie im Diagramm auf Seite 1. Bestimmt nicht sinnvoll.
Welche Aufgabe hatte das Poti im Akai? Verstärker? Radio? ... ?

du solltest zunächst klären welches Ergebnis du haben willst, denn für die 3 Potis mit Analog Eingängen auswerten könntest ja mal einen Testsketch schreiben und eine Testausgabe am Serial hier reinstellen, wenn du mal eine runde gedreht hast.

Ok, dass ich den Analog auswerten muss bringt mich schon mal ein Stück weiter, ich werd das zusammenstecken und ausprobieren sobald ich zu Hause bin und mich später zurück melden.

und @Doc_Arduino im Grunde senden die nur ganz normal MIDI CC je nach eingestelltem Kanal.
--> hab ich ganz vergessen welches AKAI, Ein MKP 49 hier mal im Video:

Die Encoder sind oben rechts über den Schiebe-Potis.

Hallo,

aha, vom Keyboard. Bei der Endauswertung/Berechnung kann ich dir sicherlich nicht helfen. Da müßten unsere Mathematiker ran. Oder googelst danach. Ich ahne aber das es auf Berechnungen mit Winkelfunktionen hinausläuft. Also sin, cos, tan. Du hast im Endeffekt 3 um 120° versetzte Kurven. Diese irgendwie miteinander verrechnet ergibt die Position.

Haha... Zitat: "Ja ich werd das zusammenstecken und probieren...."

..der hat 4 Beine, und ich brauche drei für die analogReads …. entdecke den Faheler…*kopfkratz

ich hab ja nur noch ein Pin für GND und Strom... Doofes Ding.

encoder.png
Ich denke Pin2 vom Encoder kommt an den ADC. Alle anderen an digitale Ausgänge.

Wenn Pin1 high, Pin 3,4 low sind, lese den ADC. Wenn der Wert 0 ist, ist der Schleifer des Encoders im Bereich R3.

Wenn Pin3 high, Pin 1,4 low sind, und der ADC 0 zurück gibt, ist der Schleifer im Bereich R1.

Wenn Pin4 high, Pin 1,3 low sind, und der ADC 0 zurück gibt, ist der Schleifer im Bereich R2.

Kannst du mal ein Sketch schreiben und prüfen, ob das stimmt?

encoder.png

@Rintin, ich nehme an ADC ist einer der AnalogenIOs?

und wenn ich das so anschließe , brauch der Poti dann kein Strom und kein GND ?

was ist mit dem anderen Diagramm, wie passt das in die Erläuterung?

Also dis da…:

  1. Ja, ADC = AnalogIN

  2. Den Strom bekommt der Encoder über die Digitalen output pins.

  3. Das müssten die Spannungen an Pin2 sein, wenn

Grün: Pin1 high, Pin 3,4 low
Orange: Pin3 high, Pin 1,4 low
Lila: Pin4 high, Pin 1,3 low

Hallo,

ehrlich gesagt weiß ich nicht wie man das Teil anschließt. Aus dem Diagramm entnehme ich nur das man immer 2 Spannungen zum Vergleich benötigt. Was bedeutet es sind immer mindestens 2 Schleifer aktiv o.ä.. Denn wenn bspw. das braune Dreieck bei 2,5V steht, weiß man noch nicht ob bei 60° oder bei 180°, man benötigt noch eine 2. Spannung. Vielleicht ist das Teil intern anders aufgebaut wie schematisch dargestellt. Gesucht habe ich auch schon, jedoch nichts gefunden. Zudem alle 3 Potis da drin verschiedene Werte haben. 1k, 500k, 1M Ohm. Auch dazu habe ich keine Erklärung warum die verschieden sind. Kannste mal durchmessen ob dem so ist.
Oder es ist dann doch so wie Rintin andeutete. Man muss alle 3 im Wechsel permanent abfragen und miteinander vergleichen. I/Os sollte man zwar eigentlich nicht als Spannungsquelle missbrauchen, aber 1k halten die aus. Nur falsch anschließen darfste die nicht, dann ist der I/O defekt. Sicherer wäre eine extra Beschaltung die dann reihum angesteuert wird. Mehr kann ich dazu nicht sagen.

imho kannst aus den 3 Analogwerten mehr oder weniger exakt auf die Position schließen, aber dazu müsste man halt mal die 3 Werte auslesen wie schon in #2 empfohlen.

TO: Auch mal ein Multimeter zwischen Pin 2 und den anderen Anschlüssen halten würde einiges an Erkenntnis bringen. Das musst aber du machen, weil das Teil bei dir am Tisch liegt - nicht bei uns!

Einen fertigen Sketch wirst hier nicht bekommen. Wenn du sowas willst besorg dir übliche Digital-Encoder.

So, dann erstmal danke für die Antworten und die Beteiligung, natürlich könnte ich am Ende
auch einen normalen Encoder nehmen, weil`s einfacher ist - aber irgendwie reizt es mich auch
herauszufinden wie der funktioniert. Auch ich hab natürlich schon das Netz durchforstet und die
wirklich einzigen Informationen dazu die ich gefunden habe, ist das PDF auf der Taiwan Alpha Seite.

Wenn mein Multimeter wieder Strom hat, dann messe ich das auch mal und schaue ob das was
bringt.

Und da ich noch ein bisschen Zeit habe, bis ich heute Abend zu Hause bin, oder am Wochenende
das ausprobieren kann, hier mal noch ein paar Bilder von der Originalplatine. Vielleicht hilft das ja
dem der Elektrisch versierter ist, falls fragen dazu sind, kann ich auch noch mehr fotografieren…

.
PS: fertigen Sketch mach ich mir dann schon, wenn ich weiß wo alles ran muss … :wink:

Hallo,

wenn du die Platine nochmal zum laufen bekommst, könntest du direkt messen wo welches Potential anliegt. Mit Oszi ob was umgeschalten wird. Vom Platinenfoto kann ich nichts ableiten, außer dass das Schleifersignal ein C dran hat. Du müßtest schauen wo die Durchkontaktierungen hinführen. Das kann dir aus der Ferne niemand abnehmen. Geduldig Stück für Stück vorgehen.

encoder.jpg
Meiner Meinung muß man an den Pins an den pins 1-3-4 Masse und +5V Schalen wobei immer alle 3 mit Spannung beaufschlagt werden müssen. So kann man die absolute Position des Encoders betimmen.
also 1 auf 5V 4 und 3 auf Masse. mese ich 0V ist der Schleifer zwischen 3 und 4.
also 3 auf 5V 1 und 4 auf Masse. mese ich 0V ist der Schleifer zwischen 1 und 4.
also 4 auf 5V 1 und 3 auf Masse. mese ich 0V ist der Schleifer zwischen 1 und 3.
Dann Spannungsmessung des Spannungsteilers zwischen den Kontakten die ich gerade gefunden habe, also 3-4, 1-4 oder 1-3 ( 5V bzw Gnd anschließen) und die Spannung ist proportional zum Drehwinkel innerhalb dieser 120 °.

Also das was Rintint in #8 gesagt hat

Grüße Uwe

encoder.jpg

so, ich hab das Ding angeschlossen und hier ist der TestSketch

#define valuePin A0

int digiIO[]  = {2,3,4}; 
int pin2_value     = 0;
int read_1 = 0;
int read_3 = 0;
int read_4 = 0;

void setup() {
  
  Serial.begin(9600);

  for(int i;i <3; i++)
  {
    pinMode(i,INPUT);
  }
}

void loop() {
  
  read_1 = digitalRead(digiIO[0]); 
  read_3 = digitalRead(digiIO[1]);
  read_4 = digitalRead(digiIO[2]);
  
  if(read_1 == HIGH && read_3 == LOW && read_4 == LOW)  {
      
      pin2_value = analogRead(valuePin);  
      Serial.println(pin2_value);
      delay(100);
  }
  else if(read_1 == LOW && read_3 == HIGH && read_4 == LOW)  {

      pin2_value = analogRead(valuePin);  
      Serial.println(pin2_value);
      delay(100);
      
  }
  else if(read_1 == LOW && read_3 == LOW && read_4 == HIGH)  {
      
      pin2_value = analogRead(valuePin);  
      Serial.println(pin2_value);
      delay(100);
    }  
  
  //if Pin1 = 1 && Pin3 == 0 && Pin4 == 0; pin2_value = analogRead(analogIO); if pin2_value == 0 println("R3");
  //if Pin3 = 1 && Pin1 == 0 && Pin4 == 0; pin2_value = analogRead(analogIO); if pin2_value == 0 println("R1");
  //if Pin4 = 1 && Pin3 == 0 && Pin3 == 0; pin2_value = analogRead(analogIO); if pin2_value == 0 println("R2");
}

Erstmal große Freude, das Werte herauskommen, dann kleine Ernüchterung, beim Drehen passiert nix,

die Ausgabewerte schwanken immer so um die 520 herum mit kleinen Ausreissern. hmmm…

0 zeigt er leider nirgends wo an… hab ich irgendwas vergessen ?

@uwefed – was ist denn mit Spannung beaufschlagen ?

Doc_Arduino:
Zudem alle 3 Potis da drin verschiedene Werte haben. 1k, 500k, 1M Ohm. Auch dazu habe ich keine Erklärung warum die verschieden sind.

Ich glaub das hast du falsch verstanden, der OrderCode 0B1M bezieht sich auf einen linearen 1MOhm Drehregler
Die verfügbaren Resistance Values müsste das in der darunterliegenden Reihe sein.

auf dem Rotary in dem Akai hier, steht "0B2.5K" aufgedruckt sollte also ein 2,5kOhm Encoder sein.

Ich dachte im 1. Schritt an eine einfache Messung und Ausgabe:

#define valuePin A0

int digiIO[]  = {2, 3, 4};
int pin2_value     = 0;

void setup() {

  Serial.begin(9600);

  for (int i = 0; i < 3; i++)
  {
    pinMode(digiIO[i], OUTPUT);
  }
}

void setPins(int idx) {
  for (int i = 0; i < 3; i++)
  {
    digitalWrite(digiIO[i], LOW);
  }
  digitalWrite(digiIO[idx], HIGH);

}
void loop() {
  for (int i = 0; i < 3; i++) {
    setPins(i);
    pin2_value = analogRead(valuePin);
    pin2_value = analogRead(valuePin);
    Serial.print(pin2_value);
    Serial.print("   ");
  }
  Serial.println("");
}

der OUTPUT ist

1023 1023
1808 916 1023
1023 1023 1023
1023 1023 1023
1023 1023 1023
1023 1023 1023
1023 1023 1023
1023 1023 1023
1023 1023 1023
1023 1023 1023

... fortlaufend

Kannst du mal den Schaltplan posten und aussagekräftige Fotos vom Aufbau?

ist das ein aussagekräftiges Foto vom Aufbau ?

Schaltplan ist auf die schnelle bisschen doof, weil ich natürlich den Encoder erstmal bauen
müsste, da er in keiner Part-Library drin ist... aber wie man eigentlich sieht, ist es PIN 2 an A0 und die anderen Pins dann an digitale IOs - und sonst nütschz...

ohh ich fritzel schnell mal was, muss u dir vorstellen der Rotary hätte 4 pins (IMG2)

Gruß
deHeavy

PS. bin erstmal schlafen, kurz...