New Life Games LLC

Homebrew Player Tracking and EFT Systems => NLG Homebrew Player Tracking and EFT Systems => Topic started by: Merlin on March 02, 2014, 02:37:22 PM

Title: Driving bally player tracking display, card reader, and keypad using I2C
Post by: Merlin on March 02, 2014, 02:37:22 PM
I've been tinkering with a Bally player tracking system with the goal of getting it usable without replacing
the Bally controller boards. I poked around a MC250 and MC300, but I was unable to find any information
and even if I did get it to configure a message I'm not sure what else I could do with it.


My boards all have a chip with a Bally label "BG&S (C) 1998 4405", "28 8751 K01 RB". Removing this
label reveals the Philips 8 bit microcontroller S87C751-4N24. A look at the data sheet reveals it's driven
via I2C, which makes sense since the reader, keypad, and display are all daisy chained. If you'd like to
check out the data sheet:


http://pdf1.alldatasheet.com/datasheet-pdf/view/15893/PHILIPS/S87C751-4N24.html (http://pdf1.alldatasheet.com/datasheet-pdf/view/15893/PHILIPS/S87C751-4N24.html)


All of the boards are interfaced via a 4 pin 4P4C connector. If you're looking at the jack the pin out
is left-to-right (see photo):


+12V SCL SDA GND


I bought a logic analyzer and sniffed the I2C bus when the MC300 boots up and displays a flashing
"UNCONFIGURED" message on the screen. Attached is the capture between the MC300 and the
display. (mc300-boot.txt)


Included is a photo of my display board.
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: foster on March 07, 2014, 06:45:14 PM
To save yourself some work I would forget about using the card reader and just interface to the kaypad and display directly

it would be easy to assign each player a user number and PIN (not recommended for arduino)
 
Depending on which Noritake itron display you have

CU20025ECPB is the Parallel version use the LiquidCrystal library for Arduino
GUxxxxx is the Serial version will need additional serial output, SoftwareSerial


The Keypad is just 12 switches in a matrix which there is a Arduino keypad library
I have the keypad layout in my arduino code and its the same for both the 3x4 and the 2x6 keypad layouts
IF you are not using the Arduino platform at least you can look at the library code to transfer it to whatever platform you are going to use

My TITO system drives the display and reads the keypad to do a legacy bonus, lock/unlock game and activate a function to read and display Coin in, Coin out meters on the Display

Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: ANIslots on March 14, 2014, 10:17:53 AM
To save yourself some work I would forget about using the card reader and just interface to the kaypad and display directly

it would be easy to assign each player a user number and PIN (not recommended for arduino)
 
Depending on which Noritake itron display you have

CU20025ECPB is the Parallel version use the LiquidCrystal library for Arduino
GUxxxxx is the Serial version will need additional serial output, SoftwareSerial


The Keypad is just 12 switches in a matrix which there is a Arduino keypad library
I have the keypad layout in my arduino code and its the same for both the 3x4 and the 2x6 keypad layouts
IF you are not using the Arduino platform at least you can look at the library code to transfer it to whatever platform you are going to use

My TITO system drives the display and reads the keypad to do a legacy bonus, lock/unlock game and activate a function to read and display Coin in, Coin out meters on the Display


I basically did the same as you foster, i removed the controller boards from keypad, display and card reader, and interface card reader directly to UNO and the display and keypad through a small interface i had custom made


the custom interface is compatible with a couple different displays and keypads, and plugs in where the original controller was before, cuts down on alot of wiring,


attached is a pic of the custome intrface


the front has the pc8574, jumpers to change the ic2 address, and the pins to connect ic2
the back has connectors to connect to display or keypad, on this particular one was connected to a keypad so i didnt bother to solder the display connecter or other keypad on. since you can only have one connected at a time


the plan is to ship all three on board so can just plug it to correct displat and go





Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: bhinkley on March 30, 2014, 06:20:26 PM
This sounds interesting.  I have been wanting to work with someone to get all the features working on my MC250 units all the way to the card reader for some fun.  Anyone up to the challenge?
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: foster on April 01, 2014, 01:29:45 AM
I think part of the problem is figuring out the address bally assigned to each device
The MasterCom 250, 300 main box, keypad, display, and card reader.

I just didn't dive into it when I found out the VFD and keypad could be used with existing Arduino libraries which with some tweeking could be used for Raspberry PI or other microcontroller platforms.
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: bhinkley on April 01, 2014, 06:10:10 AM
Foster,  did you have the Mastercom 250 manual at all?  I found it online if you would like to have more info.  It shows things like what value is sent for each command
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: Eddiie on December 12, 2017, 05:13:21 PM
Any progress on this?

I too have done some hacking on these devices and found they are I2C.
My analyzer mangles the Read / Write bit on the output and shows everything as a write, which seems odd to me.  The dump posted by Merlin looks like the same situation.. Curious to know what analyzer you used... Saleae?


Someone asked for i2c addresses of the devices:

Mastrercom 250 = 0x28 (40)
VFD  =  0x27 (39)
Card Reader = 0x1F (31)
Keypad = 0x1E (30)

Those are all the devices I have.  There are more, relay board(s), service button, order button, change button...

I am now trying to compile panalyzer for Raspberry Pi and will recapture if it works.

The addresses were found by running a I2C scanner on the Arduino with the device(s) connected and cross-referenced with what I saw in the captures.

Funny how the Mastercom 250 has an address..  It is the master.   Maybe that is the norm in a multi-master type of setup?


Why all the effort making new boards to interface with the devices?   My first thought was remove old microcontroller, install new one (with your code on it).  The existing board has the traces for power, comms, filters, power regulation, etc.   Just need to match the pinouts, or put an arduino boot loader on one that does match or the philips one that is on there, use it.  ??????

Any hints or code people can send where they've made some steps forward or discovered something new, even old, let me know.
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: ANIslots on August 08, 2018, 06:54:11 AM
Any progress on this?



Why all the effort making new boards to interface with the devices?   My first thought was remove old microcontroller, install new one (with your code on it).  The existing board has the traces for power, comms, filters, power regulation, etc.   Just need to match the pinouts, or put an arduino boot loader on one that does match or the philips one that is on there, use it.  ??? ???

Any hints or code people can send where they've made some steps forward or discovered something new, even old, let me know.
the reason i am making the interface is so that as time passes i can make it compatible with different player tracking keypads,displays and card readers. instead of just the bally ones


just change a jumper or 2 , remove the old interface, plug in mine, connect my ip arduino interface , and plugin and start up the sas host,
then away you go. my sas host handles all the polling and player tracking. on my test system , i just overwrote existing player cards .


play machine as normal. if you insert player card, then my sas host retrieves the card number and starts tracking the win loss, you can press * on keypad then a predetermined pin number and $500 in promo gets transfer to the machine, if card is removed unused promo gets transfered back to host, and a force cashout and ticket is printed. if you press cashout while card is inserted, all promo and winnings is transferred to host


oh course this will change, but its still in testing

Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: Eddiie on June 17, 2019, 06:53:05 PM
To save yourself some work I would forget about using the card reader and just interface to the kaypad and display directly

FWIW,
The card reader's microcontroller does a lot of the work.  It is not a simple dumb read the strip and put the bits on the bus.  After much tinkering, I found it looks for a stream of 8 or 9 numbers.
Making a simple I2C sketch, purchasing some 100+ old-school player tracking cards off ebay, ... about card 60 I finally got a result...  !  Pretty exciting to finally see something come across the bus...
The first 3 bytes are EPI protocol info (any packet has this), the address of the device (Card Reader = 3E), the other 2 are a calculation of the number of bytes in the message and the checksum.  The real data comes after the first 3.
The last byte seems to be another checksum but havent spent any time with it..   The odd thing is, not all cards would return 11 bytes, some would return 10.  Meaning the player id was up to 2 digits shorter.

Player ID on Card = 17010024195590
Byte[0] = 3E
Byte[1] = 88
Byte[2] = 40

Byte[3] = 17
Byte[4] = 1
Byte[5] = 0
Byte[6] = 24
Byte[7] = 19
Byte[8] = 55
Byte[9] = 90
Byte[10] = 48


Player ID on Card = 34513709201330
Byte[0] = 3E
Byte[1] = 88
Byte[2] = 40

Byte[3] = 34
Byte[4] = 51
Byte[5] = 37
Byte[6] = 9
Byte[7] = 20
Byte[8] = 13
Byte[9] = 30
Byte[10] = FE

Shorter Player Number - 111000519881
Byte[0] = 3E
Byte[1] = 87
Byte[2] = 41

Byte[3] = 11
Byte[4] = 10
Byte[5] = 0
Byte[6] = 51
Byte[7] = 98
Byte[8] = 81
Byte[9] = E1



Bally's EPI protocol and devices use a multi-master I2C bus, which is not typical.  I've learned so much about the EPI protocol it is insane.  Thanks to Bitpusher for his help back in the day for helping crack the packet structure and checksums for me.  It was a fun project at the time.

The Card reader I2C address (probably posted elsewhere) is
#define CARD_READER_I2C_ADDRESS      0x1f  // << 0x3e   one is master one is slave, if I recall.

It has been about year or more since I've played with these but slowly getting the desire again.   My event handler needs to be re-written, works fine with one or two devices connected but with all 3, there is a lot of hello packets between the devices and my loop is too slow,  maybe rewrite in C++.  The Arduino library is taking care of a lot of the I2C communication,  I am no programmer.   
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: ptc559 on December 30, 2020, 05:57:55 PM
Guys I know this is an old post but Did you ever get the Bally Mastercom 250 to work ...
-Create a new Player card
- put in vfd and enter a player PIN
- Message to say Welcome "Player Name"
- and then capture the data for future reference like points etc


I would love to have it actually capture data out put to a PC or tablet... 


Any Ideas

Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: marcdavis on December 30, 2020, 06:58:15 PM
My Arduino TITO and Player Tracking project can replace the BalyComm device and do all of the things you are looking for - feel free to take a look.  https://github.com/marcrdavis/ArduinoTITO-PlayerTracking
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: ptc559 on December 30, 2020, 07:30:14 PM
WOW
OK I will look into it and be contacting you TY
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: Eddiie on December 31, 2020, 06:41:54 PM
My Arduino TITO and Player Tracking project can replace the BalyComm device and do all of the things you are looking for - feel free to take a look.  https://github.com/marcrdavis/ArduinoTITO-PlayerTracking

How do you prefer to be contacted?  I got no reply to an email I sent to the address noted on the project.
Do you want issues opened under the project?

Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: ptc559 on December 31, 2020, 06:53:25 PM
Eddie Not sure if you referring to me ? I did say I will look into it ASAP


ITY
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: Eddiie on December 31, 2020, 07:00:26 PM
haha no, I was speaking out to the author of the software.  :)
Title: Re: Driving bally player tracking display, card reader, and keypad using I2C
Post by: marcdavis on January 01, 2021, 11:53:55 AM
My Arduino TITO and Player Tracking project can replace the BalyComm device and do all of the things you are looking for - feel free to take a look.  https://github.com/marcrdavis/ArduinoTITO-PlayerTracking (https://github.com/marcrdavis/ArduinoTITO-PlayerTracking)

How do you prefer to be contacted?  I got no reply to an email I sent to the address noted on the project.
Do you want issues opened under the project?


Hi - did not see any direct message - may have gone to junk by mistake. I did get the messages through github though.

SimplePortal 2.3.5 © 2008-2012, SimplePortal