Forum: Mikrocontroller und Digitale Elektronik Positioniercontroller Hacken


von Daniel A. (daniel_a32)


Angehängte Dateien:

Lesenswert?

Hallo,

ich beschäftige mich gerade mit einem Getränkeautomat und versuche die 
einzelnen Komponenten anzusteuern.

Die Spiralen sind schon erledigt und wurden in einem anderen Thread 
behandelt: Beitrag "Re: Unbekanntes Bus System entschlüsseln"

Der Automat hat auch einen Lift, welcher mit einem DC Motor mit Encoder 
ausgestattet ist. Dieser Motor wird über einen Atmega48 gesteuert.

Auf der Platine befinden sich eine H-Brücke mit MOSFET und ein Eingang 
für einen Endlagenschalter.

Ich habe mich bereits erfolgreich in den Bus gehängt und einen Dump von 
einer zyklischen Abfrage erstellt.

Mein Logik-Analyzer könnte eigentlich I2C lesen und ausgeben, aber 
leider nicht sehr zuverlässig.
Ich konnte schon das Positionier-Kommando entschlüsseln, bei der 
Status-Abfrage hat sich der I2C Parser irgendwie verabschiedet.

Im anderen Thread wurde PulseView zur Analyse genutzt, leider bekomme 
ich die Daten meines LA nicht ohne Nachbearbeitung rein.

Ich spiele mich mal ein wenig mit Python, im anderen Thread wurde hierzu 
schon ein Script geschrieben, jedoch für USART und nicht I2C.
Eventuell ist hier wieder jemand schneller. ;-)

EDIT:
Daten vom Positionier-Befehl
1
01011001 11011100 => Position 89
2
01011000 11011100 => Position 88
3
01010111 11011100 => Position 87
4
01010110 11011100 => Position 86
5
01010101 11011100 => Position 85
6
10000010 11011100 => Position 130
7
00000000 11011100 => Position 0

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

...und was ist jetzt die Frage...?

Bei den "Positionierbefehlen" vermisse ich ein wenig das I2C-typische 
(Adresse, Register-Nummer etc.).

Die Daten aus "i2clift.png" ergeben folgendes:
1
S     0101100   1    0   00000000 1    P
2
START Addr=0x2C Read ACK 0x00     NACK STOP

Seltsam ist hier, dass offenbar Register 0x00 von Device 0x2c ausgelesen 
werden soll, allerdings fehlt die Übertragung des Registerinhaltes (nach 
der Register-Nummer).

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Das sieht eher SPI aus. Dein Positionierbefehl ist doch recht eindeutig, 
erst die Nummer, dann das Kommando...

von Joe F. (easylife)


Lesenswert?

Stefan schrieb:
> Das sieht eher SPI aus

Für mich sieht das eindeutig nach I2C aus.
Start/Stop conditions, Anordnung der Clock-Flanken zu den Daten, 
tri-staten für das NACK/ACK Bit, alles deutlich sichtbar...

: Bearbeitet durch User
von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> ...und was ist jetzt die Frage...?
>
wie muss ich den STM32L476RG in cubeMx Konfigurieren damit ich diese 
Daten senden kann.

Aber mal step by step.

Ich denke, dass es I2C ist, nicht nur aufgrund der Beschriftung auf der 
Platine.

Die Clk Data Signale sehen auch sehr danach aus

von Joe F. (easylife)


Lesenswert?

Daniel A. schrieb:
> Aber mal step by step.

Genau, aber erstmal müsstest du evtl. erläutern, wie du auf die Daten

01011001 11011100 => Position 89

kommst. Ich sehe wie gesagt eine Device Adresse 0x2C, die kommt in 
deinen Daten nicht vor.

Ein Screenshot eines solchen vollständigne Positionier-Kommandos würde 
ausreichen (in der Art wie i2clift.png).
Das Decodieren "zu Fuß" ist nicht allzu schwierig...

: Bearbeitet durch User
von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> Daniel A. schrieb:
>> Aber mal step by step.
>
> Genau, aber erstmal müsstest du evtl. erläutern, wie du auf die Daten
>
> 01011001 11011100 => Position 89
>
> kommst. Ich sehe wie gesagt eine Device Adresse 0x2C, die kommt in
> deinen Daten nicht vor.

Die Daten hat mein LA noch ausgegeben bevor der I2C Parser den Geist 
aufgegeben hat. Jetzt gibt er nur noch Müll aus. Hab noch ein weiteres 
softoszi mit NucleoBoard, aber das brauche ich auch zum Entwickeln also 
muss ich irgendwie mit diesen Daten was anfangen.

Mein LA konnte nämlich auf I2C Bytes triggers und somit konnte ich die 
Daten schon mal rausfiltern und dokumentieren

von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> Ein Screenshot eines solchen vollständigne Positionier-Kommandos würde
> ausreichen (in der Art wie i2clift.png).
> Das Decodieren "zu Fuß" ist nicht allzu schwierig...

Hab leider keine Möglichkeit die Befehle aus dem zyklischen Stream zu 
filtern. Muss ein I2C zu USB Interface suchen oder gleich am STM32 herum 
probieren und mal Daten reinschieben und schauen was rauskommt. Will 
aber nicht zu viel probieren, nicht dass ich eventuell noch Parameter 
verstelle.

von Joe F. (easylife)


Lesenswert?

Daniel A. schrieb:
> Joe F. schrieb:
>> Ein Screenshot eines solchen vollständigne Positionier-Kommandos würde
>> ausreichen (in der Art wie i2clift.png).
>> Das Decodieren "zu Fuß" ist nicht allzu schwierig...
>
> Hab leider keine Möglichkeit die Befehle aus dem zyklischen Stream zu
> filtern. Muss ein I2C zu USB Interface suchen oder gleich am STM32 herum
> probieren und mal Daten reinschieben und schauen was rauskommt. Will
> aber nicht zu viel probieren, nicht dass ich eventuell noch Parameter
> verstelle.

Dann logge es doch als Rohdaten mit.
Mit dem .MSD File kann man auch was anfangen, die Bits kann man dann 
z.B. auch in Excel importieren und als Waveform anzeigen lassen.
Hauptsache es ist das komplette Kommando zu sehen, und nicht irgendwas, 
was ein offenbar kaputter Parser rauswirft.

: Bearbeitet durch User
von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> Dann logge es doch als Rohdaten mit.
> Mit dem .MSD File kann man auch was anfangen, die Bits kann man dann
> z.B. auch in Excel importieren und als Waveform anzeigen lassen.
> Hauptsache es ist das komplette Kommando zu sehen, und nicht irgendwas,
> was ein offenbar kaputter Parser rauswirft.

Da kann ich nur die zyklischen Daten aufzeichnen, ich müsste das Signal 
der Tastatur abgreifen damit ich einen trigger für das interessante 
signal hätte.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Daniel A. schrieb:
> Da kann ich nur die zyklischen Daten aufzeichnen,

besser als nichts

> ich müsste das Signal
> der Tastatur abgreifen damit ich einen trigger für das interessante
> signal hätte.

oder vom Motor, der sich nach dem Befehl bewegt.
Lass' dir was einfallen... ;-)

von Joe F. (easylife)


Lesenswert?

Hab mal eben nen Parser zusammengehackt, der mit deinem .msd format 
arbeiten kann.
1
(#107) <S> <0x2C R> <A> <0x00> <N> <P> (#323)
Jetzt fehlt Testmaterial...

von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> Daniel A. schrieb:
>> Da kann ich nur die zyklischen Daten aufzeichnen,
>
> besser als nichts
>
>> ich müsste das Signal
>> der Tastatur abgreifen damit ich einen trigger für das interessante
>> signal hätte.
>
> oder vom Motor, der sich nach dem Befehl bewegt.
> Lass' dir was einfallen... ;-)

Hatte das selbe Problem beim UART stream.
Ich werde mir dann wohl ein Nucleo Board als LA aufbauen damit ich 
weiter analysieren kann.

Daten folgen...

von Joe F. (easylife)


Lesenswert?

Achso verstehe, dein jetziger "Logic Analyzer" mit dem das File erstellt 
wurde scheint ein "MSO-19" zu sein, und das kann wohl nur 1000 
Messpunkte aufnehmen...?!
Das taugt natürlich nicht viel.

von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> Achso verstehe, dein jetziger "Logic Analyzer" mit dem das File erstellt
> wurde scheint ein "MSO-19" zu sein, und das kann wohl nur 1000
> Messpunkte aufnehmen...?!
> Das taugt natürlich nicht viel.

Nein, es ist ein MSO-28
Ist aber auch nicht besser.

von Daniel A. (daniel_a32)


Lesenswert?

Nun habe ich es geschafft alle gesendeten Kommandos und Status-Signale 
zu interpretieren und der Automat läuft auch schon über meinen 
Controller.

Problem war die Leitungslänge beim Analysieren. Das Kabel ist nämlich 
20m lang vom Automat bis ins Büro. Das I2C Signal hatte daher ein paar 
Peaks, was zu einer Fehlinterpretation bei meinem LA führte. Direkt 
angesteckt mit 20cm Leitungslänge ging es dann wieder.

Der MSO-28 stößt hier an seine Grenzen. Deswegen habe ich mir gestern 
einen LA um 15€ für PulseView bestellt.
Die Software Analyzer2Go, welcher Nucleo Boards unterstützt, hab ich mir 
auch mal gekauft. Die aber ist extrem schlecht. Die Software stürzt 
ständig ab und verwechselt intern die Signale. Das war ein richtiger 
Fehlkauf.

Welchen LA würdet ihr für Bus-Analysen verwenden?

Hätte mir vor einiger Zeit mal ein Hantek 4032L für die Verwendung mit 
PulseView bestellt, was leider nie gekommen ist :-(

Bin jetzt wieder auf der Suche nach einem Halbwegs vernünftigen Gerät, 
das aber nicht gleich 1000€ kostet.

Bei einer anderen Anwendung habe ich einen 8 Bit parallel-Bus untersucht 
und war mit 10 Signalen auch wieder am Limit. Ich denke PulseView wird 
mir da schon viel helfen. Bin gespannt wie der billig LA funktioniert.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Daniel A. schrieb:
> Welchen LA würdet ihr für Bus-Analysen verwenden?

Ich bin mit dem Saleae Logic Pro 16 äußerst zufrieden. Kostet zwar knapp 
900 EUR, ist sein Geld aber durchaus wert.
Wenn man mit 8 Ch auskommt und die Signale nicht allzu schnell sind, 
gibts auch günstige Saleae Clones am Markt für unter 10 EUR (für I2C und 
die meisten SPI und UART Anwendungen absolut ausreichend).

Für deine Zwecke bei diesem Projekt würde es aber vermutlich ausreichen, 
wenn du dir für irgend eines deiner Boards eine Firmware schreibst, die 
dir die I2C Leitungen schnell genug sampelt und in eine Datei 
wegschreibt.
Dann kannst du den Traffic bequem offline mit Sigrok (Pulseview) 
analysieren.
Diese open source Software kann einige Fileformate importieren, z.B. 
rohe Binärdaten oder .csv.
Dein .MSD file in .csv konvertiert und importiert sieht dann so wie im 
Anhang aus.

: Bearbeitet durch User
von Daniel A. (daniel_a32)


Lesenswert?

Joe F. schrieb:
> Ich bin mit dem Saleae Logic Pro 16 äußerst zufrieden. Kostet zwar knapp
> 900 EUR, ist sein Geld aber durchaus wert.

Was würdest du zum Rigol MSO5072 sagen? 
https://www.batronix.com/versand/oszilloskope/Rigol-MSO5072.html
Da ist gerade das Software Optionsbundle im Wert von 600€ dabei.
Nur der nötige LA Adapter PLA2216 um 300€ ist schon heftig.

Nach ein bisschen recherchieren im Netz habe ich keine vernünftige 
Software gefunden und das Rigol hat eine höhere Abtastrate und größere 
Speichertiefe.

von Joe F. (easylife)


Lesenswert?

Daniel A. schrieb:
> Nach ein bisschen recherchieren im Netz habe ich keine vernünftige
> Software gefunden und das Rigol hat eine höhere Abtastrate und größere
> Speichertiefe.

Tja, keine Ahnung, kenne das Ding nicht.
Persönlich habe ich den Logicanalyzer lieber separat vom Scope und schön 
klein (transportabel) muss es sein.
Die "Speichertiefe" des Pro16 ist im Prinzip nur durch den Rechner 
begrenzt, das erlaubt minutenlanges Samplen. Ausserdem habe ich gerne 
die Möglichkeit, Daten zu exportieren, um eigene Analyzer draufzuwerfen, 
wenn die Möglichkeiten der mitgelieferten Software nicht ausreichen 
(z.B. Timinganalysen, Fehlersuche in exotischen Protokollen).

von Daniel A. (daniel_a32)


Angehängte Dateien:

Lesenswert?

Habe gestern versehentlich 5V anstelle einer Messleitung am SDA Pin der 
Platine angeschlossen und auf einmal hat die Karte nichts mehr gesendet.

Ich habe die Platine dann schnell mal nachgezeichnet um das große Ganze 
zu verstehen und eventuell nachzubauen. Ist eine ganz primitive H-Brücke 
mit einfachstem I2C Pegelwandler auf PNP Transistor Basis.

Meine erste Vermutung war, dass die 5V durch das Low-Ziehen einen 
Kurzschluss im Atmega48 verursacht hat. Habe daher zuerst den Atmega 
ausgelesen, leider Schreibgeschützt. :-(

Also entweder tot oder ein anderes Problem finden...

Interessanterweise hat aber der Atmega48 noch auf Kommandos reagiert, 
aber kein ACK-Bit und keine Antwort gesendet.

Daher war meine zweite Vermutung ein defekter Transistor und daher habe 
ich den PNP Transistor der SDA Leitung ausgelötet und einen anderen 
eingelötet.

*Angesteckt, eingeschaltet und ging wieder*

Dieser Fehler ist mir aber nur passiert, weil ich entdeckt habe, dass 
meine FDTI-RS232-5V Kabel perfekte Logik Analyzer sind und ich das 
gleich probieren musste. Leider waren auch 5V am Stecker und ich habs 
mit einer Messleitung verwechselt.

Vor vielen Jahren habe ich für ein Projekt über 20 Stk. gekauft und nie 
wirklich gebraucht. Jetzt waren sie die perfekte Lösung mit 8 Eingängen.

Im Anhang ist noch der Log von PulseView. Sieht jetzt viel besser aus 
und die Startup Signalfolge ist schön ersichtlich.

Der Lift fährt zuerst eine Referenzfahrt nach unten aus und dann fährt 
der Lift nach ganze unten und schlussendlich zum ersten Produkt.

Gibt es eine Möglichkeit in PulseView den Datenstream eines Kanals im 
Terminal auszugeben oder umzuleiten? Mit dem CLI geht es ja, wäre in der 
GUI aber auch schön.

Beitrag #6020135 wurde von einem Moderator gelöscht.
von 50c (Gast)


Lesenswert?

Joe F. schrieb:
> Ich bin mit dem Saleae Logic Pro 16 äußerst zufrieden. Kostet zwar knapp
> 900 EUR, ist sein Geld aber durchaus wert.

Daniel A. schrieb:
> Nach ein bisschen recherchieren im Netz habe ich keine vernünftige
> Software gefunden

...man "irgendeinen 0815-LA" für 10 Euro und als Software 
https://sigrok.org/

von Rene K. (xdraconix)


Lesenswert?

Daniel A. schrieb:
> Das Kabel ist nämlich 20m lang vom Automat bis ins Büro. Das I2C Signal
> hatte daher ein paar Peaks

20 Meter bei I2C? Das ist schon extrem sportlich! Hast du da 
zwischengeschaltete Verstärker? Du weißt schon das I2C nie als Feldbus 
konzipieren war und, wie der Name schon sagt als Platinenbus?

von Daniel A. (daniel_a32)


Lesenswert?

Rene K. schrieb:
> 20 Meter bei I2C? Das ist schon extrem sportlich! Hast du da
> zwischengeschaltete Verstärker? Du weißt schon das I2C nie als Feldbus
> konzipieren war und, wie der Name schon sagt als Platinenbus?

Nein, da ist kein Verstärker drin. Ich hatte einfach noch 6 Leiter im 
CAT5 Kabel frei und habs einfach probiert. Interessanterweise 
funktioniert über die 20m die Ansteuerung durch den STM32 besser als die 
Auswertung über den LA mit Pulseview.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.