Forum: Mikrocontroller und Digitale Elektronik Instruction Sequence K8056


von Matthias (Gast)


Lesenswert?

Hallo.

Ich bräuchte bitte eure Hilfe. (mal wieder)

Ich möchte per serieller Schnittstelle eine Sequenz an meine K8056 
senden um ein Relais zu schalten (ganz einfach gehalten um zu testen und 
zu lernen) (Raspberry 3B+ und Python3)

Die Anleitung wie diese Sequenz aufgebaut sein muss habe ich als link 
kopiert:

https://www.velleman.eu/downloads/0/illustrated/illustrated_assembly_manual_k8056.pdf

und die Programmzeilen hab ich aus meinem Python-Lehrbuch:

###
import serial

ser = serial.Serial("/dev/ttyUSB0", 2400, timeout = 10)

ser.write(13, card adress, instruction, adress, checksum)

ser.close()
###

Adresse der Karte müsste 1 sein.
Instruktion wäre S um das erste Relais einzuschalten
Adresse wäre dann 1 für 1.Relais

Wie schreibe ich das dann damit es auch richtig ankommt und wie bilde 
ich die "checksum"?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

5. checksum (2-complement of the sum of the 4 previous bytes + 1)

von Stefan F. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Wenn man sich ganz dumm stellt, findet man sogar eine fix und fertige
> Klasse in Python, die genau das umsetzt:
> https://github.com/jerch/python-k8056

Wenn man sich noch dummer anstellt, fragt man zweimal das Selbe ohne 
sich die Antworten anzuschauen.

von Matthias (Gast)


Lesenswert?

Dennis H. schrieb:
> 5. checksum (2-complement of the sum of the 4 previous bytes + 1)

Gelesen hab ich es auch schon aber ich verstehe es leider nicht.

von Matthias (Gast)


Lesenswert?

Stefanus F. schrieb:
> Wenn man sich noch dummer anstellt, fragt man zweimal das Selbe ohne
> sich die Antworten anzuschauen.

Ich hab mir die Antworten mehr als einmal abgesehn aber leider 
funktioniert es nicht. Deshalb versuche ich es jetzt so.

von Stefan F. (Gast)


Lesenswert?

Matthias schrieb:
> Gelesen hab ich es auch schon aber ich verstehe es leider nicht.

Tja, dann musst du wohl den Quelltext benutzen oder abschreiben, den ich 
Dir auf dem Silbertablett präsentiert habe.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

https://de.wikipedia.org/wiki/Zweierkomplement

sum heißt Summe

Vorzugsweise der 4 Bytes.

um ein Hochgezählt.

Und dann 2-er-Komplement

von Stefan F. (Gast)


Lesenswert?

Der Python Code entspricht der Doku. Du solltest hier nicht 
verschweigen, dass du auch mit dem Programm von Vellemann keine Reaktion 
erreichen konntest.

Wenn zwei völlig unterschiedliche Programme nicht funktionieren, sollte 
man mal in eine andere Richtung denken. Dann ist wohl etwas an der 
Hardware nicht in Ordnung.

Hast du ein Oszilloskop oder einen Logic Analyzer? Wenn nicht, kaufe Dir 
einen, damit kann man das prima untersuchen. Kostet keine 10 Euro.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Sequenz:
13
1
'B' (66)
2


13+1+66+2=82
2-er-Komplement
(82-1)xor 255=174


python-sample
243-2-66-1=174

Irgendwie kommt mir da das (+1) aus der PDF nicht vor.

Die Velleman-Software sendet genau das gleiche wie oben berechnet.

(+1) kommt da nicht vor.

: Bearbeitet durch User
von Chris (Gast)


Lesenswert?

Es kommt vor wenn man mit 2er Kompliment rechnet.
Bei Umstellung der Rechnung auf XOR verschwindet es.

von Stefan F. (Gast)


Lesenswert?

Das Python Script sendet wie du die Kanalnummer binär. Die Nummer des 
Relais sendet es hingegen als Zeichen (n+48), also nicht 1 sondern '1'.

Im Zweifelsfall könntest du unabhängig vom Algorithmus einfach mal alle 
256 Möglichkeiten durchprobieren. Ich würde außerdem mal probieren, nach 
der Checksumme einen zusätzlichen Zeilenumbruch (13) zu senden.

Ich würde mich allerdings erst mal auf das Programm von Vellemann 
konzentrieren. Vielleicht ist dein USB-UART Adapter irgendwie 
inkompatibel.

Auf https://forum.vellemanprojects.eu/t/serial-cable-to-k8056/5727/5 und 
https://forum.classic-computing.de/forum/index.php?thread/8581-apple-c-f%C3%BCr-robotik-nutzen/ 
steht, dass der COM-Port COM1 oder COM2 heißen muss. Das kann man ja 
irgendwo in der Systemsteuerung beeinflussen (lang ist's her, dass ich 
das mal machen musste).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefanus F. schrieb:
> steht, dass der COM-Port COM1 oder COM2 heißen muss.

Diesen Fehler in der Software könnte man ja auch beheben, und dann 
auch dafür sorgen, daß Schnittstellen > COM9 mit der korrekten Syntax 
("\\.\COMx" statt "COMx") angesprochen werden, wie es seit über einem 
Vierteljahrhundert in der Windows-API-Dokumentation steht. Kann 
natürlich sein, daß das der Python-Wrapper schon erledigt, aber den 
kenne ich nicht.

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Stefanus F. schrieb:
> Hast du ein Oszilloskop oder einen Logic Analyzer? Wenn nicht, kaufe Dir
> einen, damit kann man das prima untersuchen. Kostet keine 10 Euro.

Ich hab mir jetzt mal ein kleines oszilloskop besorgt. Auf dem Bild das 
Ergebnis wenn ich zwischen txd und gnd vom Adapter Messe. Messfehler 
oder kommt hier wirklich kein richtiges Signal an?

Wenn ich das Programm starte kommen diese kurzen ausschläge aber mehr 
passiert da nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
> Wenn ich das Programm starte kommen diese kurzen ausschläge aber mehr
> passiert da nicht.
So wie es aussieht, ist das Ding schlicht zu langsam. Ein Bit bei 2400 
dauert gerade mal 400µs. Du hast da pro Pixel etwa 1ms...

von Matthias (Gast)


Lesenswert?

Lothar M. schrieb:
> So wie es aussieht, ist das Ding schlicht zu langsam. Ein Bit bei 2400
> dauert gerade mal 400µs. Du hast da pro Pixel etwa 1ms

Zu dem Entschluss kam ich auch gerade. Da werd ich mir wohl ein anderes 
holen müssen.

von Matthias (Gast)


Lesenswert?

Stefanus F. schrieb:
> dass der COM-Port COM1 oder COM2 heißen muss.

Es gibt bereits eine überarbeitete Version die auch andere com's 
erkennt. Wenn ich relais schalte in der vellemansoftware wird auch etwas 
über den Adapter gesendet. Ich kann zwar mit meinem langsamen oszi nicht 
sehen was gesendet wird aber es gibt bei jedem Klick eine Reaktion.

von Stefan F. (Gast)


Lesenswert?

Matthias schrieb:
> Es gibt bereits eine überarbeitete Version die auch
> andere com's erkennt.

> Ich kann zwar mit meinem langsamen oszi nicht
> sehen was gesendet wird aber es gibt bei jedem Klick eine Reaktion.

Na das ist doch schon mal eine wertvolle Information. Jetzt wäre 
wirklich interessant, das Signal in seiner ganzen Pracht zu sehen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
> aber es gibt bei jedem Klick eine Reaktion.
Stell doch einfach mal eine ganz langsame Baudrate ein, die das Ding 
können müsste. Und sende definierte Daten, wie z.B. ein 'U', das dir die 
Bitfolge 01010101 beschert.

Denn so wie es aussieht, wird da nur ganz wenig oder ganz schnell 
gesendet.

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hab jetzt mal txd und rxd verbunden um auszulesen was da überhaupt 
gesendet wird. Auf dem Bild sieht man was dabei rauskommt. Wörter und 
Buchstaben kommen 1zu1 an aber aus dem befehlsarray wird so ein 
komisches 'ding'. Hat das schon mal jemand gesehen? Soll das so sein? 
Oder ist der Konverter überfordert?

von Stefan F. (Gast)


Lesenswert?

Matthias schrieb:
> aber aus dem befehlsarray wird so ein
> komisches 'ding'.

Logisch, weil das Binärdaten sind, kein Text. Das ist soweit in Ordnung.

Ist Dir der Unterschied zwischen 1 und '1' klar? Hat etwas mit ASCII 
Code zu tun.

von Matthias (Gast)


Lesenswert?

Das hilft mir dann bei der Fehlersuche schon mal weiter. Mit binärdaten 
und der ASCII Tabelle bin ich schon etwas vertraut aber das ausgelesene 
binärdaten als kraklige Vierecke im terminal erscheinen ist mir neu.

von Stefan F. (Gast)


Lesenswert?

Matthias schrieb:
> aber das ausgelesene
> binärdaten als kraklige Vierecke im terminal erscheinen ist mir neu.

Da verhält sich jedes Programm anders, dafür gibt es keine einheitliche 
Regelung. Du kannst Binärdaten recht gut mit dem Hammer Terminal 
darstellen. Überhaupt ist dieses Programm für solche Diagnose-Aufgaben 
meiner Meinung nach das Beste.

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.