Jump to content

Arduino Pinball Controller


Recommended Posts

OK, ich kann allerdings frühestens Sonntag Abend noch was testen.

Ich habe auch immer noch Probleme mit dem Advance und Up/Down Switch, aber ich glaube verstanden zu haben was los ist:

Nicht die Polarität von Advance (Switch 72) war vertauscht, sondern die von Up/Down (Switch 73). Ich würde dich also bitten, den 72 wieder zurück zu setzen, wie er am Anfang war und stattdessen die Polarität von 73 zu ändern.

Sorry für die Verwirrung, aber das lässt sich doch alles etwas besser testen, wenn die Displays funktionieren.

Link to comment
Share on other sites

  • Replies 1.4k
  • Created
  • Last Reply

Top Posters In This Topic

Am 22/03/2019 um 08:27 schrieb Black Knight:

Eu me tornei um pouco escasso nos últimos anos, mas não estava totalmente inativo.

Durante meu último ataque de raiva artesanal, um controlador para dispositivos Williams do System6 ao System11c (tudo dos anos 80) foi lançado. A peça substitui a CPU, o driver de energia e as placas de som e é executada no Arduino. Extensões de hardware também são possíveis.

Também escrevi um sistema operacional de pinball que assume o controle do hardware e fornece uma API para o programador de jogos.

Para mais informações, consulte o meu

Página do projeto no GitHub

Eu não quero ganhar dinheiro com isso e, portanto, não vou vender nada para ninguém. Em vez disso, coloquei todos os dados para a produção das placas on-line.

Minha esperança seria que houvesse algumas pessoas que se divertissem programando suas próprias máquinas de pinball e construindo expansões de hardware, para que eu não precisasse fazer tudo sozinha. Claro que também estou pronto para ajudá-lo a começar.

Os custos para o conselho são muito gerenciáveis (detalhes no wiki da página do projeto), mas é claro que você precisa estar familiarizado com o hardware e se divertir com a programação depois.

Daí a minha pergunta: quem poderia imaginar construir algo assim? Você pode organizar um pedido em massa de um fabricante de placas.

Deixe-me saber se você pode estar interessado no quadro.

saudação

franco

PS Aqui está uma foto da APC no meu pinbot:

APC_Pinbot.JPG.320602a31421020843f0e1ebe811fc6e.JPG

 

Show

 

Link to comment
Share on other sites

Am 25.1.2020 um 13:06 schrieb Black Knight:

OK, ich kann allerdings frühestens Sonntag Abend noch was testen.

hat Zeit, ich hab jetzt auch erst mal nur die Switches gedreht, Log folgt morgen. Die lisy_update.tgz ist jetzt auf 5.25-38

Kannst ja mal schauen wenn Du Zeit hast. Bitte kritsich betrachten, könte sein dass da von meiner Seite auch noch nicht alles korrekt war mit der 37er .. 🙄

Link to comment
Share on other sites

3 hours ago, bontango said:

wusste gar nicht dass Du so gut Spanisch kannst

Ich auch nicht.

@Toninhomaquina Was möchte mir dein Beitrag denn sagen, hast du das in einem spanischen Forum gepostet oder möchtest du das posten?

3 hours ago, bontango said:

Kannst ja mal schauen wenn Du Zeit hast.

Hab's mir gerade mal kurz angesehen. Das mit dem Advance und Up/Down Schalter ist besser, stimmt aber immer noch nicht so ganz. Leider kann ich da noch gar kein richtiges Fehlerbild erkennen - da muss ich also nochmal in Ruhe drauf schauen.

Es stimmt wohl auch noch irgendwas mit dem A/C Relais nicht, denn wenn er einen Ball vom Outhole in die Truhe schiebt (Solenoid 1A) betätigt er auch immer den Knocker (1C), was so nicht korrekt ist. Da scheint Solenoid 1 also zweimal betätigt zu werden, einmal mit dem Relais in Stellung A und einmal in C - oder das Relais schaltet mittendrin um. Das mag auch bei den anderen A Solenoids so sein, aber da muss ich mal genau auf die entsprechenden Flasher achten.

Irgendeine Fehlermeldung kommt am Anfang immer, aber das wird wieder irgendwas in der API sein, das Jan und ich verändert haben und du nicht mitgekriegt hast. Da sollte uns das Log also weiter helfen.

Also alles keine großen Probleme - ich konnte wieder ein Spiel machen und bis auf die halbe Geschwindigkeit läuft schon alles ziemlich gut und die Updates über Lisy_Control sind wirklich sehr bequem 👍

Link to comment
Share on other sites

nächstes update ist online ( 5.25-41). Ich habe beim erstellen der Logs noch nen Fehler entdeckt, könnte sein

dass die fehlerhaft gemeldeten codes auf deiner Seite damit weg sind. Falls nicht habe ich hier noch nen debug file angehängt.

Zusätzlich habe ich auch die 'Bremse' rausgenommen, schau mal ob er jetzt nicht zu schnell läuft 😁

Du kannst die Geschwindigkeit auch selber anpassen indem Du die /lisy/lisy_m/cfg/lisyminigames.csv auf der SD Karte editierst und da in der Zeile

für den pinbot den letzten Parameter anpasst. Der steht default auf 300, jetzt auf 3 .. je höher desto mehr wird gebremst

Bin gespannt, danach widme ich mich dem A/C Relais und dann dem Sound

APC_debug.pdf

Link to comment
Share on other sites

1 hour ago, bontango said:

könnte sein

dass die fehlerhaft gemeldeten codes auf deiner Seite damit weg sind.

Ja sind weg. Sieht schon viel besser aus und die Flashlampen leuchten auch nicht mehr dauerhaft. Er beschwert sich ganz am Anfang noch, dass er ein bestimmtes Soundfile (mit unleserlichem Namen) nicht findet - da werde ich morgen mal in Ruhe reinschauen.

1 hour ago, bontango said:

Zusätzlich habe ich auch die 'Bremse' rausgenommen, schau mal ob er jetzt nicht zu schnell läuft

Oh ja, das ist jetzt Pinbot im Zeitraffer :P. Ziemlich lustig, aber ich werde das nachjustieren.

Hattest du die Polarität von Schalter 73 (Up/Down) eigentlich schon geändert? Die stimmt nämlich noch nicht. Aber immerhin habe ich kapiert, warum das Navigieren in den Service-Menüs nicht richtig läuft. Das liegt nicht an Lisy, sondern daran dass ich meinen Servicemode auch mit dem Advance Button (72) einschalte wenn dieser 1 Sekunde lang gedrückt wird. Dazu gebe ich die Schalteränderung eine Sekunde verzögert an Lisy weiter und das bringt den PinMame durcheinander. Da muss ich mir wohl was anderes einfallen lassen.

Insgesamt ein deutlicher Fortschritt, also wieder ein klares 👍 von mir.

Link to comment
Share on other sites

vor 21 Stunden schrieb Black Knight:

Hattest du die Polarität von Schalter 73 (Up/Down) eigentlich schon geändert? Die stimmt nämlich noch nicht.

Ja hatte ich gemacht, evtl. muss ich das wieder zurück drehen weil wir am Anfang andere Probleme hatten?

Link to comment
Share on other sites

1 hour ago, bontango said:

Ja hatte ich gemacht, evtl. muss ich das wieder zurück drehen weil wir am Anfang andere Probleme hatten?

Möglich, so ist es zumindest noch/wieder falsch herum. Das kann ich nun testen, denn seitdem ich das mit dem Advance Schalter geändert habe klappt auch das Service Menü.

Der Throttle-Wert steht jetzt auf 150, das macht einen ganz vernünftigen Eindruck.

Die Sequenz aus deinem Debug File sieht für mich auf der ersten Blick korrekt aus. Ich habe da einen Verdacht, dass die Geschichte mit den 'Unknown Commands' vielleicht doch an mir liegen könnte - werde dem morgen mal weiter nachgehen.

Wenn ich den Spulentest mache wird übrigens keine C-Bank Spule (bzw. Flasher betätigt), man hört nur das A/C Relais schalten.

Link to comment
Share on other sites

vor 17 Stunden schrieb Black Knight:

Wenn ich den Spulentest mache wird übrigens keine C-Bank Spule (bzw. Flasher betätigt), man hört nur das A/C Relais schalten.

laut meinen logs scheint pinmame die 'C' Spulen neu zu nummerieren.

Beim Spulentest sehe ich erst Spule 1, dann Spule 14 (AC-Relais) und dann Spule '25'; beim nächsten Test

erst Spule 2, dann Spule 14 (AC-Relais) und dann Spule '26'; usw. ...

Hat der APC dafür evtl. auch eigene Spulennummern die ich verwenden kann, oder soll ich einfach bei einem aktiviertem A/C Relais

24 von der Spulenummer abziehen?

Gingen während des Spiels denn Spulen auf der 'C' Seite?

Link to comment
Share on other sites

4 hours ago, bontango said:

Hat der APC dafür evtl. auch eigene Spulennummern die ich verwenden kann, oder soll ich einfach bei einem aktiviertem A/C Relais

24 von der Spulenummer abziehen?

Der APC hat eigene Befehle für A und C Bank Spulen, dann setzt er aber auch das A/C Relais entsprechend. Wenn du das A/C Relais selbst steuern möchtest solltest du also einfach 24 abziehen.

4 hours ago, bontango said:

Gingen während des Spiels denn Spulen auf der 'C' Seite?

Das sind fast alles nur Flasher, da muss ich nochmal genau drauf achten. Der Knocker (1C) war allerdings nicht zu überhören, aber das habe ich ja oben schon geschrieben.

Quote

Es stimmt wohl auch noch irgendwas mit dem A/C Relais nicht, denn wenn er einen Ball vom Outhole in die Truhe schiebt (Solenoid 1A) betätigt er auch immer den Knocker (1C), was so nicht korrekt ist. Da scheint Solenoid 1 also zweimal betätigt zu werden, einmal mit dem Relais in Stellung A und einmal in C - oder das Relais schaltet mittendrin um. Das mag auch bei den anderen A Solenoids so sein, aber da muss ich mal genau auf die entsprechenden Flasher achten.

 

Link to comment
Share on other sites

Jawohl das klappt jetzt alles.

Leider bin ich mit meiner Suche nach unserem Startproblem (unkown command und so) nicht wirklich weiter gekommen. Das Problem scheint irgendwann in Sekunde 56 aufzutreten, denn zum Zeitpunkt 56.799705 werden unsere Problemflashlampen eingeschaltet und um 56.841867 sollen sie wieder aus gehen, was aber meistens nicht klappt und stattdessen ein 'Unknown Command' kommt. Richtig reproduzierbar ist das aber nicht, denn manchmal gehen die Lampen aus und die Kommandonummer bei Unknown Command ist auch nicht immer gleich.

Kann es sein, das Lisy einfach zu schnell zu viel sendet und der Arduino nicht mitkommt? Ich habe mal versucht herauszufinden, wie groß beim DUE der Empfangspuffer für den UART ist, habe aber bisher nichts gefunden. Falls dies die Ursache ist, dann wäre Sekunde 56 natürlich der logische Zeitpunkt, da dann das Spiel gestartet wird und jede Menge Kommandos gesendet werden.

Kannst du diese Kommunikation irgendwie zeitlich strecken, um mal zu probieren ob das die Ursache ist? Ansonsten müsste ich mal in der Arduino Serial-Lib nachsehen, wie groß dieser Puffer ist und wie man einen Überlauf angezeigt bekommt.

Link to comment
Share on other sites

vor 12 Minuten schrieb Black Knight:

Kannst du diese Kommunikation irgendwie zeitlich strecken, um mal zu probieren ob das die Ursache ist?

Serielle Kommunikation schaue ich mir auch mal an, haben wir da eigentlich ne Flusssteuerung drin ( XON/XOFF) ?

Du könntest zum Test den throttle wert mal auf 3000 oder so hochziehen, dass sollte ihn deutlich verlangsamen.

Link to comment
Share on other sites

4 hours ago, bontango said:

Serielle Kommunikation schaue ich mir auch mal an, haben wir da eigentlich ne Flusssteuerung drin ( XON/XOFF) ?

Ich habe keine Ahnung, da ich für die serielle Kommunikation einfach nur die Arduino-Library benutze. Da muss ich wohl mal nachsehen, was die genau macht.

4 hours ago, bontango said:

Du könntest zum Test den throttle wert mal auf 3000 oder so hochziehen, dass sollte ihn deutlich verlangsamen.

Das Problem scheint ja die Initialisierungsphase beim Spielstart zu sein. Meinst du die wird dadurch auch verlangsamt? Das wird für den PinMame ja vermutlich ein Simulationsschritt sein, in dem jede Menge Kommandos zum gleichen Zeitpunkt fällig werden.

4 hours ago, bontango said:

all 5ms ab ob sich ein Switch geändert hat, dass könnte ich auch mal testweise hochschrauben?!

Ja, das ist vermutlich etwas zu oft. Durch die Switch-Matrix wird jeder Switch sowieso nur alle 20ms abgefragt und die wirklich Latenz-kritischen Schalter haben ja sowieso eine HW-Rule.

Link to comment
Share on other sites

vor 13 Stunden schrieb Black Knight:

Das Problem scheint ja die Initialisierungsphase beim Spielstart zu sein. Meinst du die wird dadurch auch verlangsamt? Das wird für den PinMame ja vermutlich ein Simulationsschritt sein, in dem jede Menge Kommandos zum gleichen Zeitpunkt fällig werden.

Ja, aus irgendeinem Grund werden beim Start alle Lampen und Spulen erst auf ON, und dann sofort wieder auf OFF gesetzt. Das erzeugt ne Menge Traffic

und wird durch meinen Throttle auch nicht gebremst, ich seh mal ob ich das nicht ausblenden kann.

vor 13 Stunden schrieb Black Knight:

einfach nur die Arduino-Library benutze.

Habe mal etwas gegoogelt, da scheint keine Flowcontrol drin zu sein und der interne Puffer ist nur 64 Byte. Ich hatte das bei meinen PICs bei der I2C Kommunikation

auch, und habe dann einen eigenen groesseren Puffer eingerichtet. Die Bytes vom I2C Bus hole ich mit nem Interrupt ab und schreibe die erst mal in meinen Puffer.

Eine Loop baut dann meinen Puffer ab, dann sieht man auch wenn der Puffer überläuft und kann ggf. vergroessern.

Evtl. kannst Du das beim Arduino ähnlich machen?

Link to comment
Share on other sites

3 hours ago, bontango said:

Habe mal etwas gegoogelt, da scheint keine Flowcontrol drin zu sein und der interne Puffer ist nur 64 Byte.

Da muss man vorsichtig sein, da sich das Meiste was man im Internet zu Arduinos findet auf die kleinen AVR basierten Controller bezieht. Der DUE hat aber einen ARM basierten SAM Controller.

Ich habe das große G aber auch mal bemüht und festgestellt, dass der Puffer bei den ARMs 128 Byte groß ist und auch kein Flowcontrol hat. Dann habe ich die entsprechende Stelle im Code gefunden und die Größe auf 256 gesetzt und siehe da … unsere Probleme sind weg. Ich weiß noch nicht, wie ich das richtig einbauen soll, da die Arduino Libs wohl immer zuerst kompiliert werden und diese Puffergröße als Compilervariable definiert ist. D.h. wenn ich das in meinem Code neu setze hat es keine Auswirkungen, da die Libs dann schon kompiliert sind.

4 hours ago, bontango said:

Evtl. kannst Du das beim Arduino ähnlich machen?

Schöner wär's natürlich, aber ich bin kein C++ Experte, sondern bin froh wenn ich ohne ++ klar komme. Daher tu mich mit diesen Libraries ziemlich schwer. Mal sehen, ob und wann ich mich dazu aufraffen kann.

Wir haben aber leider auch noch ein ganz anderes Problem: irgendwas scheint sich verändert zu haben, so dass ich kein Spiel mehr starten kann. Wenn ich das tu dann gibt der Ballauswurf nicht nur einen Ball, sondern hört nicht mehr auf zu hämmern - hat mich schon eine Spulensicherung gekostet. Das hat nichts mit meiner Änderung des seriellen Puffers zu tun, hab's extra nochmal zurück genommen.

Kann das was mit deiner A/C Änderung zu tun haben? Ich glaube nämlich nicht, dass ich danach nochmal wirklich ein Spiel gestartet habe und davor ging's ja.

Link to comment
Share on other sites

vor 33 Minuten schrieb Black Knight:

Dann habe ich die entsprechende Stelle im Code gefunden und die Größe auf 256 gesetzt und siehe da … unsere Probleme sind weg.

Na, das ist doch schon mal gut, habe nämlich keine wirklich gute Methode gefunden die calls am Anfang zu unterdrücken.

vor 33 Minuten schrieb Black Knight:

Kann das was mit deiner A/C Änderung zu tun haben? Ich glaube nämlich nicht, dass ich danach nochmal wirklich ein Spiel gestartet habe und davor ging's ja.

Möglich, werde ich morgen mal via log nachzuvollziehen.

Link to comment
Share on other sites

57 minutes ago, bontango said:

Na, das ist doch schon mal gut, habe nämlich keine wirklich gute Methode gefunden die calls am Anfang zu unterdrücken

Ich kann mir auch gar nicht vorstellen, dass diese Calls alleine das Problem sind. Wenn wir mal nachrechnen, dann haben wir eine Datenrate von 115200 Bd, also gerade mal knapp 15 Byte pro ms. Der DUE hat eine Clockfrequenz von 84MHz, d.h. er kann mehrere 10.000 Instruktionen pro ms durchführen und die meisten Lisy-Kommandos machen ihm nicht viel Arbeit. Außerdem dauert es über 9 ms bis die 128 Byte des Puffers voll sind.

Ich vermute daher, dass zur gleichen Zeit ein oder mehrere Audiofiles auf der SD-Karte geöffnet werden, denn das kann den Prozessor tatsächlich mehrere ms aufhalten.

Link to comment
Share on other sites

vor 19 Stunden schrieb Black Knight:

Wir haben aber leider auch noch ein ganz anderes Problem: irgendwas scheint sich verändert zu haben, so dass ich kein Spiel mehr starten kann. Wenn ich das tu dann gibt der Ballauswurf nicht nur einen Ball, sondern hört nicht mehr auf zu hämmern - hat mich schon eine Spulensicherung gekostet. Das hat nichts mit meiner Änderung des seriellen Puffers zu tun, hab's extra nochmal zurück genommen.

Das scheint was mit meinem Handling der 'C-Seite' zu tun zu haben. Irgendwie werden die Spulen im Spulentest anders behandelt als im Spiel??

Hab das jetzt mal teilweise zurückgedreht. Kannst du bitte mal Augenmerk auf die C-Spulen bzw. Flasher im Spiel legen?

Im Spulentest werden die nicht funktionieren, aber im Spiel bin ich mir nicht sicher.

kleines Update 5.25-45 ist online

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

Privacy Policy and Community Guidelines