Jump to content

APC im Riverboat Gambler


kobza
 Share

Recommended Posts

vor 11 Stunden schrieb kobza:

Habe ich jetzt das Update drauf oder nicht?

Das könnte daran liegen, dass du Lisy nicht automatisch startest, sondern dich über ssh einloggst und dann run_lisy_apc ausführst um das Debug Log auf dem PC zu haben. Eventuell muss da noch was angepasst werden damit das Kommando die richtige Version ausführt aber da kann der Ralf mehr zu sagen.

Link to comment
Share on other sites

vor 35 Minuten schrieb Black Knight:

aber da kann der Ralf mehr zu sagen.

im script wird die exe aus dem source Verzeichnis gestartet, die wird mit dem 'kleinen' update leider nicht aktualisiert.

Einfach im Script die Zeilen

sudo ./lisy/xpinmame.vid_lisy -nosound -skip_disclaimer -skip_gameinfo -nvram_directory /pinmame/nvram -rp /boot/lisy/lisy_m/roms lisy_apc
#sudo /usr/local/bin/lisy -nosound -skip_disclaimer -skip_gameinfo -nvram_directory /pinmame/nvram -rp /boot/lisy/lisy_m/roms lisy_apc

zu

#sudo ./lisy/xpinmame.vid_lisy -nosound -skip_disclaimer -skip_gameinfo -nvram_directory /pinmame/nvram -rp /boot/lisy/lisy_m/roms lisy_apc
sudo /usr/local/bin/lisy -nosound -skip_disclaimer -skip_gameinfo -nvram_directory /pinmame/nvram -rp /boot/lisy/lisy_m/roms lisy_apc

ändern ( also die andere Befehlszeile auskommentieren ) dann sollte es gehen ...

 

Link to comment
Share on other sites

vom log her sieht es aber auch mit der -67er Version so aus als würde LISY die Solenoids 14&15 pulsen,

zwar mit teilweise komischen Pulszeiten aber Immerhin, wenn das so beim Wheel ankommt würde ich

zumindest ein Zucken erwarten.

@Black Knight kann das theoretisch auch am Arduino liegen? Kommt der mit 10ms Pulszeiten klar?

Link to comment
Share on other sites

vor 13 Minuten schrieb bontango:

zumindest ein Zucken erwarten.

Gezuckt hat das Rad am Montag auch.

vor 13 Minuten schrieb bontango:

Kommt der mit 10ms Pulszeiten klar?

Ja, meine Auflösung liegt bei 1ms, alles darüber ist OK.

Link to comment
Share on other sites

Kurzes Update. Mit der neuen Lisy Version sieht es besser aus allerdings sind die PWM Pulse immer noch nicht in Ordnung.

Hier ein Video aus dem Wheel Test, passiert sehr selten, man muss immer wieder nachhelfen: Wheel issue

Zusätzlich habe ich die Inputs zum Motor Board (Selenoids 14 und 15) gemessen. Unten ein paar Bilder. Manchmal fehlen welche und im allgemeinen wenn man diese mit den aus dem Pinside Forum vergleich sieht man keinen Versatz.

DS1Z_QuickPrint2.png.aa86dc8548ae1189a8b54ae6e3f81fa0.png

DS1Z_QuickPrint3.png.766b9cba158976b465cf9590b240cf3c.png

DS1Z_QuickPrint5.png.6db9c31d000a11ea189cc96d9440907d.png

Und hier das Debug Log, die Stelle wo as Wheel sich drehen sollte:

This is LISY (Lisy W) by bontango, Version 527 68
[972.655301][0.163353] Info: LISYMINI this game has AC Relais on solenoid 12
[972.655607][0.000306] Info_boot: System_ID: SYS11C
[972.655753][0.000146] Info_boot: gamename: RIVERBOAT GAMBLER
[972.655891][0.000138] Info_boot: S2 Setting: 71
[972.656035][0.000144] Info_boot: SW Version: 527 68

...

[274.982295][2.649369] LISY_W_SOLENOID_HANDLER: Solenoid:14, changed to 1 ( AC is 1)
[274.982371][0.000076] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 1 ( AC is 1)
[275.112317][0.129946] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 0 ( AC is 1)
[275.130504][0.018187] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 1 ( AC is 1)
[275.807853][0.677349] LISY_W_SOLENOID_HANDLER: Solenoid:14, changed to 0 ( AC is 1)
[275.807926][0.000073] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 0 ( AC is 1)
[276.971118][1.163192] LISY_W_SOLENOID_HANDLER: Solenoid:10, changed to 1 ( AC is 1)
[276.987977][0.016859] LISY_W_SOLENOID_HANDLER: Solenoid:14, changed to 1 ( AC is 1)
[277.009271][0.021294] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 1 ( AC is 1)
[277.026525][0.017254] LISY_W_SOLENOID_HANDLER: Solenoid:14, changed to 0 ( AC is 1)
[277.043430][0.016905] LISY_W_SOLENOID_HANDLER: Solenoid:14, changed to 1 ( AC is 1)
[277.079058][0.035628] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 0 ( AC is 1)
[277.096261][0.017203] LISY_W_SOLENOID_HANDLER: Solenoid:11, changed to 1 ( AC is 1)
[277.096327][0.000066] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 1 ( AC is 1)
[277.096380][0.000053] LISY_W_SOLENOID_HANDLER: Solenoid:16, changed to 1 ( AC is 1)
[277.220780][0.124400] LISY_W_SOLENOID_HANDLER: Solenoid:11, changed to 0 ( AC is 1)
[277.220848][0.000068] LISY_W_SOLENOID_HANDLER: Solenoid:16, changed to 0 ( AC is 1)
[277.786223][0.565375] LISY_W_SOLENOID_HANDLER: Solenoid:14, changed to 0 ( AC is 1)
[277.804886][0.018663] LISY_W_SOLENOID_HANDLER: Solenoid:15, changed to 0 ( AC is 1)
[278.153158][0.348272] LISY_W_SOLENOID_HANDLER: Solenoid:11, changed to 1 ( AC is 1)
[278.153234][0.000076] LISY_W_SOLENOID_HANDLER: Solenoid:16, changed to 1 ( AC is 1)
[278.258896][0.105662] LISY_W_SOLENOID_HANDLER: Solenoid:11, changed to 0 ( AC is 1)
[278.258967][0.000071] LISY_W_SOLENOID_HANDLER: Solenoid:16, changed to 0 ( AC is 1)
[279.183970][0.925003] LISY_W_SOLENOID_HANDLER: Solenoid:11, changed to 1 ( AC is 1)

 

P.S. Zur Info im Terminal kann ich die "run_lisy_apc" nicht ändern da "read only", habe Lisy daher im Debug Mode per copy&paste aktiviert.

Link to comment
Share on other sites

vor 39 Minuten schrieb kobza:

Unten ein paar Bilder.

Ja, das sieht nicht so aus als würde sich ein Schrittmotor darüber freuen. 
Trotzdem ist das ein großer Fortschritt denn wir müssen die Pulse ja nur zählen können, die korrekten Pulse für den Motor können wir relativ einfach in einer PinMameException erzeugen.

vor 42 Minuten schrieb kobza:

Zur Info im Terminal kann ich die "run_lisy_apc" nicht ändern da "read only", habe Lisy daher im Debug Mode per copy&paste aktiviert.

Wenn du vorher den Befehl rw ausführst, dann kannst du auch editieren.

Link to comment
Share on other sites

Ich habe die nächsten Tage wohl wenig Zeit. Du kannst dir daher  aussuchen ob ich mich erst an das Display machen soll oder ob du erst gerne eine PinMameException hättest, die die Basics für System 11 Sound und eine Pulserzeugung für den Schrittmotor enthält.

Link to comment
Share on other sites

Hi BlackKnight, dann Display zuerst 🙂 Ich werde dann am Wochenende alle fehlenden Sound samplen. PinMameException kann ich gerne selbst versuchen 😉

Grüße

Thomas

 

Link to comment
Share on other sites

OK, nimm am besten EX_Rollergames als Vorlage, der hat das gleiche Soundboard. 
Da siehst du z.B. dass PinMame alle Audio-Kommandos auf Kanal 2 schickt.

case SoundCommandCh2:                               // sound commands for channel 1
  if (!Command){                                    // sound command 0x00 - stop sound
	AfterSound = 0;
	StopPlayingSound();
	AfterMusic = 0;
	StopPlayingMusic();}

Das liegt daran, dass er nur die Audioboards unterscheidet und dein RG hat nur eins. Das Kommando 0x00 für Sound Stop brauchst du auch.

Danach kommen ein paar Audio-Kommandos, die im PinMame keinen Sound erzeugen und daher geblockt werden, die könnten bei dir anders sein.

else if (Command == 32 || Command == 64) { }            // unknown commands

Dann kommen die 0x6x Kommandos, die für die Lautstärke der Musik zuständig sind, das sollte bei dir genauso sein.

else if (Command > 95 && Command < 100) {               // music volume command 0x6X
	MusicVolume = Command - 96;}

Die LastMusic Abfrage bei den Musikstücken würde ich erst mal weglassen. Die ist bei Rollergames nötig, da der PinMame hier wohl einen Bug hat und die Musikstücke ständig neu startet - wir wollen ja hoffen, dass er das bei dir nicht auch tut.

Link to comment
Share on other sites

Sieht ja ganz gut aus, ich klink mich dann erst mal aus. Lasst mich bitte wissen wie es ausgegangen ist, und vor allem ob ich die 'smooth' Änderung

in die LISY version einbauen soll ( wenn eh eine exception nötig ist könnte auch die 67er funktionieren, never change a running system ...)

Link to comment
Share on other sites

Ich habe mal einen ersten Versuch zum Thema Schrittmotor gemacht. Das Prinzip ist auf dem Bild zu sehen und der vorläufige Code sieht so aus:

void EX_StepperMotor(byte State) {                    // control stepper motor
  static byte MainTimer = 0;                          // number of the main timer
  static unsigned int RefTime;                        // stores the start value of the main timer
  static unsigned int PWMtime;                        // stores the PWM time for the active cycle
  switch(State) {                                     // state machine
  case 0:                                             // procedure is called from solenoid exception
    if (!MainTimer) {                                 // initial call, stepper motor not yet running
      RefTime = 60;                                   // set timeout to 60ms
      MainTimer = ActivateTimer(RefTime, 1, EX_StepperMotor);}  // start main timer
    else {                                            // not the first solenoid call from PinMame as main timer is already running
      PWMtime = RefTime - TimerValue[MainTimer];      // calculate time difference between PinMame's solenoid pulses
      KillTimer(MainTimer);                           // cancel timeout
      RefTime = PWMtime + 10;                         // set new timeout value based on last PWM cycle time
      MainTimer = ActivateTimer(RefTime, 1, EX_StepperMotor); // restart main timer
      ActivateSolenoid(PWMtime/2, 14);                // generate PWM pulse on first solenoid
      ActivateTimer(PWMtime/4, 2, EX_StepperMotor);}  // come back to generate pulse on second solenoid
      break;
  case 1:                                             // timeout has occurred as no pulses from PinMame have been detected recently
    MainTimer = 0;                                    // indicate that main timer is not active
    ActivateSolenoid(PWMtime/2, 14);                  // generate last step on the solenoids anyway
    ActivateTimer(PWMtime/4, 2, EX_StepperMotor);
    break;
  case 2:                                             // generate pulse on second solenoid
    ActivateSolenoid(PWMtime/2, 15);
    break;}}

Das Programm soll die PinMame Aufrufe an Spule 14 abfangen. 
Beim ersten Aufruf (State = 0) startet es nur einen Timer (MainTimer) für 60ms und wartet auf den nächsten Schritt von PinMame.  
Wenn der nächste Schritt kommt (wieder State = 0, aber der Timer läuft schon), dann wird der aktuelle Stand des Timers genommen (TimerValue[MainTimer]) und vom Startwert abgezogen. Dadurch kennen wir die PWMtime, die PinMame haben will und können die Erzeugung unserer eigenen Pulse starten. Der MainTimer wird mit der PWMtime + 10ms neu gestartet und misst wieder die Zeit bis zum nächsten Puls von PinMame.  
Sollte der MainTimer auslaufen, dann wird das als Ende der Schrittfolge gedeutet (timeout) und das Rad bleibt stehen, ein letzter Schritt wird aber noch nachgeholt, denn den haben wir ja am Anfang verpasst, als wir erst die PWMtime messen mussten.

Ich habe diese Routine auch schon in V00.23 eingecheckt. Da ich deine Riverboat Exceptions aber nicht sehe müsstest du das Ding da eintragen. Dazu musst du folgenden Abschnitt in deine Exceptions einfügen:

  case SolenoidActCommand:                            // activate solenoids
    if (Command == 14){                               // handle the activation of solenoid 14
      EX_StepperMotor(0);                             // call the stepper motor handler
      return(1);}                                     // ignore the command
    else if (Command == 15){                          // handle the activation of solenoid 1
      return(1);}                                     // ignore the command
    return(0);                                        // solenoid will be activated. Use return(1) to suppress this
  case SolenoidRelCommand:                            // deactivate solenoids
    if (Command == 14){                               // handle the activation of solenoid 14
      return(1);}                                     // ignore the command
    else if (Command == 15){                          // handle the activation of solenoid 1
      return(1);}                                     // ignore the command
    return(0);                                        // solenoid will be deactivated. Use return(1) to suppress this

Dadurch wird unsere Ex_StepperMotor Routine mit 0 als Parameter aufgerufen, wenn PinMame Spule 14 aktivieren will, ansonsten werden alle Kommandos für die Spulen 14 und 15 einfach ignoriert damit wir die alleinige Kontrolle darüber haben.
 

 

Riverboat.png

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