Zum Inhalt springen

Entwicklung APC 3.0 -> Lisy_APC


Black Knight

Empfohlene Beiträge

Ja, läuft 🙂 Es ist halt wie immer: kaum macht mans richtig funktioniert es.

Zum Protokoll: wie wäre es wenn Du als Slave immer als erstes Byte einen Status zurück gibst?

Mögliche Werte:

0 : nicht bereit/beschäftigt  -> Master wiederholt Befehl nach Wartezeit ( wie lange soll ich warten, 1ms ? )

Anzahl empfangener Bytes -> Befehl angenommen und ausgeführt ( Minimum 1 )

-1: Befehl angenommen aber Interpretationsprobleme Error

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 206
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

  • Black Knight

    111

  • bontango

    95

  • Volley

    1

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

vor 14 Stunden schrieb bontango:

Zum Protokoll: wie wäre es wenn Du als Slave immer als erstes Byte einen Status zurück gibst?

Ja genau, das meinte ich. Ich wollte zwar, dass der APC die Anzahl der Bytes schickt die er im Sendepuffer hat, aber du hast Recht; es macht mehr Sinn den APC die Anzahl der empfangenen Bytes bestätigen zu lassen.

vor 14 Stunden schrieb bontango:

( wie lange soll ich warten, 1ms ? )

Ja, lass uns mal mit 1ms starten. Ich rechne sowieso damit, dass dieser Mechanismus nur nach Soundkommandos zum Einsatz kommen wird. Ansonsten ist der APC vermutlich schnell genug.

Dann sähe unsere initiale Kommunikation also wie folgt aus:

Lisy: 0x00

APC: 0x00 falls der Befehl noch nicht komplett verarbeitet wurde, ansonsten

APC: 0x01 (Bestätigung des empfangenen Bytes), dann "APC\0" als Antwort

Lisy: 0x40, 0x01, 0x02 (Lese Setting 2 aus Gruppe 1)

APC: 0x00 falls der Befehl noch nicht komplett verarbeitet wurde, ansonsten

APC: 0x03 (Bestätigung der empfangenen Bytes), dann den Wert des Settings als Antwort

 

Falls irgendwas schief geht antwortet der APC mit 0xff

Das müsste es doch sein, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Black Knight:

Das müsste es doch sein, oder?

Ja denke auch, lass uns das mal auf beiden Seiten implementieren und schauen was passiert

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab's jetzt drin.

War ein größerer Umbau, bin gespannt ob's klappt.

Kommunikation über USB funktioniert zur Zeit nicht, die muss ich wieder dazu basteln wenn I2C läuft.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sieht gut aus.

Ich habe dein getDIPfrom APC mal angepasst. Normalerweise sieht es so aus:

pi@lisy(ro):/run/user/1000$ ./getDIPfromAPC 2 -v
we are in verbose mode
try to get value of dip number 2
API_read_string: Byte no 1 is (0x01)""
API_read_string: Byte no 0 is (0x41)"A"
API_read_string: Byte no 1 is (0x50)"P"
API_read_string: Byte no 2 is (0x43)"C"
connected HW is: APC
API_read_string: Byte no 1 is (0x03)""
value of Dip number 2 is 45

Wenn ich den APC jetzt absichtlich ausbremse, dann kommen die 'Wartenullen' dazu:

pi@lisy(ro):/run/user/1000$ ./getDIPfromAPC 2 -v
we are in verbose mode
try to get value of dip number 2
API_read_string: Byte no 1 is (0x00)""
API_read_string: Byte no 1 is (0x01)""
API_read_string: Byte no 0 is (0x41)"A"
API_read_string: Byte no 1 is (0x50)"P"
API_read_string: Byte no 2 is (0x43)"C"
connected HW is: APC
API_read_string: Byte no 1 is (0x00)""
API_read_string: Byte no 1 is (0x00)""
API_read_string: Byte no 1 is (0x00)""
API_read_string: Byte no 1 is (0x00)""
API_read_string: Byte no 1 is (0x00)""
API_read_string: Byte no 1 is (0x03)""
value of Dip number 2 is 45

So ungefähr hatten wir uns das doch vorgestellt,oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja genau 🙂

Die API habe ich soweit auf meiner Seite geändert, sieht auch gut aus.

Derzeit liest er die Gamenummer und die Optionen aber noch von den Dips auf meiner LISY_mini,

da bin ich grad dran ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, die ist wie vorher.

Da die ja auch für MPF verwendet wird, müssten wir das ja zuerst mit Jan klären.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, dann muss ich da noch nen Schalter einbauen.

Irgendwas hackt derzeit beim Start, morgen mehr, Manni tanzt auf der Tastatur rum ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier mal die erste Version zum Test: http://www.flipperkeller.de/lisy/lisy_update_5_26_33.tgz

Derzeit wird nur S2 (setting 3; game number) vom APC gelesen.

Den Autostart habe ich fest rausgenommen weil ich immer mal wieder den Effekt hatte dass es ne Zeitlang lief

und dann plötzlich nur noch '0x0' vom APC zurück kam. Liess sich nur durch neustart Arduino beheben.

Du musst dich einloggen und dann Manuell starten mit "./run_lisy_apc"

 

Schau mal bitte wie weit Du kommst.

Gruesse

Ralf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie kann ich denn LisyControl starten, ohne einen Flipper angeschlossen zu haben? Oder kann ich das Update direkt irgendwo auspacken?

Dadurch dass der blöde Pi 3B+ nicht funzt habe ich gerade keine Möglichkeit Lisy an einen Flipper anzuschließen. Wenn ich nun DIP6 setze, dann springt irgendwann die rote LED und er scheint LisyControl nicht zu starten.

Ich werde mir übrigens wieder einen Pi 3A bestellen, damit ich Lisy auch wieder über USB nutzen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Lisy mag mich nicht mehr:

pi@lisy(ro):~$ run_lisy_apc
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'dhcpcd.service'.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
/usr/local/bin/run_lisy_apc: line 69: /dev/serial0: Permission denied

Ich hab's dann auch mal mit 'sudo run_lisy_apc' probiert. Da kommt dann auch keine Fehlermeldung mehr aber es passiert trotzdem nichts am I2C Bus.

Auch bei den LEDs tut sich nichts; nach dem Bootvorgang leuchtet die gelbe LED durchgehend und das war's

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ups, ich hätte evtl. kreativer bei der Namensgebung sein sollen 🙄

Der script den Du aufrufst ist ein startscript aus /usr/local/bin daher will der nochmal das Netzwerk starten.

Es gibt im Homeverzeichnis von pi noch einen.

Probier mal ./run_lisy_apc bitte

Link zu diesem Kommentar
Auf anderen Seiten teilen

ah, wird auch schief gehen, die lisy binary die da im Pfad steht ist nicht upgedated worden 😐

du musst den script ändern von

sudo ./lisy/xpinmame.vid_lisy -nosound -skip_disclaimer -skip_gameinfo -nvram_di
rectory /pinmame/nvram -rp /boot/lisy/lisy_m/roms lisy_apc

nach

sudo /usr/local/bin/lisy -nosound -skip_disclaimer -skip_gameinfo -nvram_di
rectory /pinmame/nvram -rp /boot/lisy/lisy_m/roms lisy_apc

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt läuft's und ich kann das Problem nachstellen.

Es sieht so aus, als würde Lisy nicht auf den APC warten. Im beigefügten Screenshot schickt der APC eine Null um zu signalisieren, dass er den Befehl noch nicht komplett bearbeitet hat. Lisy scheint daraufhin auch zu warten, fragt aber nicht erneut nach, ob der APC nun fertig ist, sondern schickt direkt den nächsten Befehl.

Ich hatte das jetzt so eingebaut, dass Lisy nochmal ein Byte liest und zwar so lange bis der APC die Länge des letzten Befehls zurück schickt.

screenshot.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei mir wiederholt er den Befehl nach ca. 1ms wenn er ne Null zurückbekommt. d..h Du bufferst dei Antwort und schickst sie dann 'irgendwann'?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ausser beim pollen mit 'get status of switch' da interpretiert er das als keine Änderung und wartet nicht sondern verlässt sich auf den nächsten Poll

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Minuten schrieb bontango:

Du bufferst dei Antwort und schickst sie dann 'irgendwann'?

Genau, es könnte ja auch länger als einen Wartezyklus dauern den Befehl zu bearbeiten. Deshalb geht es bei mir nicht weiter bevor der APC seine Antwort nicht los geworden ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei 'get status of switch' könnte man natürlich eine Ausnahme machen, aber momentan werden bei mir alle Befehle gleich behandelt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

×
×
  • Neu erstellen...

Wichtige Information

Datenschutzerklärung und Registrierungsbedingungen