Hallo zusammen,
dacht ich frag mal in die Runde ob jemand von euch schon einmal eine SSI Encoder Antwort im Gray Format umgerechnet hat. Und zwar bekomme ich von einem Encoder folgende Antwort:
12 Bit Multiturn (4096)
15 Bit Singleturn (32786)
Diese Werte sind allerdings "gray codiert". Nun müsste ich die Werte in Binär bzw. in ein dezimalformat umrechnen. Derzeit liegen sie als Binärarray vor. Hat mir der ein oder andere ein Tip???
Vielen Dank
Guten Morgen,
hab ihn einem amerikanischen Forum eine passende Lösung gefunden, welche ich auch umgesetzt hab. Funktioniert einwandfrei (siehe Anhang)
Viele Grüße und Danke
EDIT: Lösung ignorieren... siehe unten

Hallo Nullstrom,
kannst du die Quelle auch angeben?
- Wieso rechnest du einmal die komplette SSI-Angabe von 27bit und dann jeweils noch einmal die 12bit und 15bit-Anteile? zumindest der 12bit-Anteil sollte identisch ausfallen…
- Wieso nimmst du erst ein 15bit-Arraysubset und formst dieses dann noch einmal in ein 15bittiges Array um? Rube-Goldberg lässt grüßen!
- Im Link oben gab es auch Implementierungen, die ohne boolsches Array auskommen und deutlich effizienter sind…
- IndexArray benötigt keine Null am Indexeingang…
- Deine Lösung wäre hier auch als VI interessant, am besten reduziert auf die Kernfunktion "Graycode to Binary" (d.h. ohne deine FPGA-Aufrufe drumherum)…
Ich hab gerade gemerkt, das ich totaler Müll programmiert hab - bzw. einen Denkfehler hatte.
Hab jetzt erst einmal die Quelle wieder suchen müssen. Die Idee bzw. das VI hatte ich aus folgendem Link:
http://forums.ni.com/t5/Motion-Control-a...d-p/406509
Nun zu meinem Denkfehler:
Der Encoder gibt mir (in meinem Falle) 30 Bit aus. Diese setzen sich wie folgt zusammen:
- 3 Fehlerbits
- 15 Bit Single
- 12 Bit Multi
wie man sehen kann, hatte ich erst die einteilung vorgenommen und dann den jeweiligen Bereich von Gray zu Binär umgewandelt -> was absoluter schwachsinn ist. Der Fehler äußerte sich indem mein Single Wert von 0...32768,32767...0 gezählt hat. War also nicht sofort ersichtlich.
nachdem ich jetzt noch einmal eine Nacht drüber gepennt hab, kam mir folgende Idee:
Ich werf erstmal meine 3 Fehlerbits weg. Anschließend übersetzte ich die 27 Positionsbits von Gray ins Binäre und dort teile ich dann in Single und Multi -> siehe da, es funktioniert
PS: Falls ich irgend ein Urheberrecht verletze bzgl. des Links oben, sagt mir bescheid

Hallo Nullstrom,
gleich noch ein

hinterher, wenn du inzwischen auf LV2014 umgestiegen bist!
Erledigt
Die Updates kommen schneller ins Haus geflattert als ich es hier nachtragen kann

Hallo Nullstrom,
ich habe den Code aus deinem Link mal umgebaut, er sieht jetzt so aus:
[
attachment=51645]
Habt ihr die Anhänge aus dem
Link in Beitrag #2 gesehen? Nix umwandeln nach Array of Boolean, gleich die Logik in U32...
Gruß, Jens