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"?
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.
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.
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.
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.
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.
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).
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.
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.
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...
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.
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.
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.
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.
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?
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.
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.
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.