Zum Inhalt springen

Arduino Pinball Controller


Black Knight

Empfohlene Beiträge

vor einer Stunde schrieb Black Knight:

Mir ist übrigens noch ein Problem unserer API aufgefallen:

Wir hatten gesagt, dass wir den Inhalt der Displays als BCD plus Komma in Bit 7 übertragen - das geht aber nur für rein numerische Displays auf BCD Basis. Bei Sys11 Geräten funktioniert das nicht mehr und wir müssen ASCII oder Segmentmuster übertragen. Das Ganze wird dann zum Problem, wenn Leute ihren Flipper mit anderen Display betreiben wollen, als ursprünglich vorgesehen (z.B. einen Comet mit Alphas). Wenn man dieses Gerät jetzt mit PinMame betreiben möchte, dann würde der immer BCD Daten senden. Beim APC wird aber nur der verwendete Displaytyp eingestellt, er weiß also nicht welches Spiel im PinMame läuft und damit auch nicht welche Displays dazu normalerweise gehören. 

Wir müssten also entweder ein gemeinsames Datenformat für alle Displays einführen oder man müsste beim APC einstellen, was da an Displaydaten kommt, damit er sie entsprechend konvertieren kann. 

Ich habe schon angefangen dem Protokoll noch ein paar mehr Methoden hinzuzufügen. Ich würde das gerne zu einem gut dokumentierten schlanken Protokoll für verschiedene Generationen von Maschinen machen. Es muss ja nicht jede Custom Hardware ihr eigenes Protokoll haben. Möglicherweise gibt es da bald noch eine dritte Hardware mit LISY ähnlichem Protokoll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 1,6Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

  • Black Knight

    642

  • bontango

    438

  • Volley

    100

  • jabdoa

    97

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

vor 11 Stunden schrieb Black Knight:

Wir müssten also entweder ein gemeinsames Datenformat für alle Displays einführen oder man müsste beim APC einstellen, was da an Displaydaten kommt, damit er sie entsprechend konvertieren kann.

Da LISY (pinmame) ja davon ausgeht dass da die 'Originalhardware' angeschlossen ist, denke ich dass es am besten ist dass es bei Bedarf am APC eingestellt wird. Zusätzlich kann ich nach dem ersten connect noch eine ID oder einen String schicken was denn da angeschlossen ist also "SYS7", "SYS11", ..  Was meinst Du?

 

Zur seriellen communication: Ich habe jetzt rausgefunden dass der Arduino einen reboot macht, wenn auf Linuxseite ein open auf das device gemacht wird, d.h. ich muss nach dem

open warten bis der Arduino mit dem boot fertig ist und kann erst dann weitermachen, unschön ... beschrieben z.B. hier:

https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection/

Ich probier mal aus ob das auch an dem zweiten Port vom Due so ist

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Stunden schrieb jabdoa:

Ich habe schon angefangen dem Protokoll noch ein paar mehr Methoden hinzuzufügen. Ich würde das gerne zu einem gut dokumentierten schlanken Protokoll für verschiedene Generationen von Maschinen machen. Es muss ja nicht jede Custom Hardware ihr eigenes Protokoll haben. Möglicherweise gibt es da bald noch eine dritte Hardware mit LISY ähnlichem Protokoll.

Hast Du da schon ein Beispiel?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb bontango:

Ich probier mal aus ob das auch an dem zweiten Port vom Due so ist

mmmh, der SerialUSB ( native USB Port am Due) hat andere Probleme, z.B. dass er nicht direkt erkannt wird ( sowohl von Windows als auch von Linux).

Ich habe aber gelesen dass der reset nur ausgeführt wird wenn beim open das 'DTR' Signal hochgenommen wird, was Linux wohl default macht.

Wenn ich vorab "stty -F /dev/ttyACM0 -hupcl" ausführe macht er dass nicht, und der Arduino auch keinen Reset 🙂

@jabdoadas wär dann wohl auch in MPF so zu machen, bist Du da schon mal drüber gestolpert?

Gruesse

Ralf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Switchroutine steht.

Gibt es eine einfache Möglichkeit Switches direkt am Arduino zu simulieren? (Drahtbrücke zwischen zwei Ports oder so ..?)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst Switches auslösen, indem du die Switch-Inputs mit GND verbindest. Das sind die Ports 54 bis 61 (auf dem Arduino Board steht A0 - A7).

Mit jedem Pin löst du aber eine komplette Spalte aus, also 9 Schalter (8 in der Matrix + 1 Special Solenoid Schalter)

11 hours ago, bontango said:

Zusätzlich kann ich nach dem ersten connect noch eine ID oder einen String schicken was denn da angeschlossen ist also "SYS7", "SYS11", ..  Was meinst Du?

Ja, sowas in der Art werden wir wohl machen müssen. Wir werden wohl sowieso nicht umhin kommen, die Sys11 Displays als Segmentmuster zu übertragen. Viele Spiele nutzen 'Grafik'-Effekte, die sich nicht als ASCII ausdrücken lassen. Der PinMame wird vermutlich nicht zwischen ASCII und Grafik unterscheiden (können) und immer Muster senden - wir sollten das daher auch tun. Das würde also bedeuten, für jedes Zeichen 2 Byte zu senden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich nichts vergessen habe, dann sollte jetzt alles in die SW integriert sein, was wir besprochen haben.

Ich habe bei der Gelegenheit auch gleich noch einen größeren Umbau vorgenommen. Falls du (Ralf) also schon irgendwas mit meinem Code machst, dann sei gewarnt dass es die Lamp und Switch Arrays nicht mehr gibt. Das wird jetzt alles intern geregelt und man kann von außen nur noch mit den Befehlen TurnOnLamp(Lamp), TurnOffLamp(Lamp) und QueryLamp(Lamp) auf die Lampen zugreifen. Den Query Befehl gibt es jetzt auch für Schalter und Spulen (QuerySwitch(Switch) und QuerySolenoid (Spule)).

Ich muss jetzt noch die Doku updaten, aber dazu fehlt mir gerade die Lust.

Bis Samstag

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gut zu wissen, ich lads mir morgen mal runter und schau was LISY Mini sagt.

Habe jetzt soweit Switches, Solenoids & Lamps in LISY Mini drin.

Ziel ist Samstag ein Spielchen am Jungle Lord mit APC&LISY Mini hinzukriegen

Bis Samstag, freu mich 🙂

Gruesse

Ralf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Klingt gut! Soll ich auch irgendwas vorbereiten? Irgendwas neues im Protokoll oder sind wir im ersten Schritt 100% LISY kompatibel?

Jan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem Datenformat für die Displays steht noch aus und über den Sound müssen wir auch noch sprechen. Aber das können wir auch am Samstag klären, wir können ja nicht NUR essen.

1 hour ago, bontango said:

Bis Samstag, freu mich

Ich mich auch, bringt vernünftiges Wetter mit.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 1.5.2019 um 18:11 schrieb Black Knight:

Falls du (Ralf) also schon irgendwas mit meinem Code machst, dann sei gewarnt dass es die Lamp und Switch Arrays nicht mehr gibt.

Ja, der 'nackte' Arduino läuft mit der neuen Version direkt auf Error, dann schauen wir Samstag am lebenden Objekt .

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast du dran gedacht, dass sich das APC_defaults verändert hat? Das ActiveGame Setting ist jetzt an die zweite Stelle gewandert.

Für die USB-Ansteuerung sollte sich nämlich ansonsten nichts geändert haben.

Bis morgen

Frank

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Black Knight:

Hast du dran gedacht, dass sich das APC_defaults verändert hat?

Natürlich nicht! 😉Das wirds sein. Ich mach da aber Heut nix mehr, sind ja morgen zusammen.

ich bring mein Netbook mit, dann kann ich ggf. vor Ort ein wenig am LISY code rumdoktern.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin übrigens noch mal in mich gegangen und ich glaube, dass meine Molex-Steckerleisten von Farnell sind.

Letztendlich ist es zwar egal, aber da die Dinger auf der Platine relativ eng zusammen sitzen dürfen sie natürlich nicht zu groß sein.

Ansonsten hat es mir heute sehr gut gefallen und wir waren ja sogar zusätzlich noch erfolgreich.

Schönes Rest-WE

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Ralf,

Ich nehme an, wenn du mir das Image für den Pi schickst ist da kein Betriebssystem drin, oder?

Welches sollte ich denn vorher runter laden oder ist das egal?

Und wie ist denn die Lage bezüglich der Schalter, hast du den Fehler schon gefunden?

Fragen über Fragen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nabend Frank,

Image ist basierend auf Raspbian, ( Debian Stretch für Raspberry) und kommt mit, Du brauchst nichts vorba runterladen.

Schalter habe ich noch nichts dran gemacht, da wollte ich warten bis ich nen lauffähigne APC habe.

Wenn Du schon mal 'proben' willst kannst Du Dir hier das letzte Image ( ohne APC support ) ziehen:

http://www.lisy80.com/deutsch/lisy35/

Link ganz unten ...

Doku wie das auf die SD zu bringen ist, findest Du hier in Kapitel 3 http://www.lisy80.com/app/download/9634659/LISY_user+manual_v5.11.pdf

Image ist read-only und hat keinen Desktop (nur commandline)! ssh und dhcp sind aktiv.

User-IDs und passwds findest Du auch in der Doku

Wenn Du also den Raspi ans LAN hängst und dann ein ssh auf 'lisy' machst sollte es schon mal gehen ...

Gruesse

Ralf

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, das werde ich bei Gelegenheit mal probieren.

Wir hatten am Samstag ja auch mal kurz das Thema Sound angeschnitten. Um die Soundausgabe bei APC nutzen zu können müsste jeder Sound als WAV Datei verfügbar sein. Meinst du man könnte die in einer vernünftigen Qualität aus PinMame herausquetschen?

In diesem Fall könnte man den Dateien dann z.B. einfach Nummern als Namen geben und das Play Sound # Kommando (Nr. 50) nutzen, um dem APC mitzuteilen welche Datei er abspielen soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 41 Minuten schrieb Black Knight:

Meinst du man könnte die in einer vernünftigen Qualität aus PinMame herausquetschen?

Wenn dann aus der Windows Version, ich hatte da mal was gelesen, teste ich die Woche ..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das klingt ziemlich mühsam. Vor allem scheint man danach einen Haufen Sounds ohne jede Zuordnung zu haben, d.h. man weiß nicht welchen Sound PinMame wann spielen möchte.

Vielleicht gibt es solche Soundsammlungen der einzelnen Flipper ja schon irgendwo im Netz...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Ralf,

kannst du im PinMame Code irgendwo sehen, wieviele verschiedene Sounds er z.B. für den Jungle Lord kennt?

Man kann bei den Geräten ja einen Sound Test machen und da werden bei den alten Geräten  gerade mal 10 Sounds oder so abgespielt. Zu diesen Sounds wird auch immer eine Nummer angezeigt, damit wäre dann eventuell eine Zuordnung möglich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im code sieht man nur wie er PIA1B abfragt und die Daten dann an den Soundhandler schickt.

Ich schau mal ob ich das nicht simulieren kann ...

static WRITE_HANDLER(pia1b_w) {
  if (data != s7locals.solBits2) {
    s7locals.solBits2 = data;
    updsol();
  }
  if (s7locals.s6sound) {
    sndbrd_0_data_w(0, ~data); data &= 0xe0; /* mask of sound command bits */
  }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

PIA1B wundert mich, denn laut Schaltplan hängt das Soundboard an PIA V - die Nummerierung vom PinMame orientiert sich also schon mal nicht am Schaltplan.

Im Soundboard geht's wieder an eine PIA, ich kann also nichts erkennen, was den Zahlenraum irgendwie einschränken würde. Wir haben es also maximal mit 128 verschiedenen Sounds zu tun, aber in der Realität werden vermutlich nicht mehr als 15 benutzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zur Info:

Ich hab auch kurz M1 und die pinmame32 Methode ausprobiert. M1 unterstützt nur neuere Geräte und die Pinmame Methode ist arg umständlich

und funktionierte bei mir auch nur einmal ...

Ich google mal weiter ...

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