Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
millennium:coinvalidator [2016/03/17 15:19] – [Commands to validator] martin | millennium:coinvalidator [2024/01/28 14:42] (current) – martin | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
Produced by Landis& | Produced by Landis& | ||
Line 50: | Line 50: | ||
===== Decoding ===== | ===== Decoding ===== | ||
- | ^ Offset (h) ^ 00 ^ 01 ^02 ^ 03 ^ 04 ^ 05 ^ 06 ^ 07 ^ 08 ^ 09 ^ 0A ^ 0B ^ 0C ^ 0D ^ 0E ^ 0F ^ | + | * MS: Most significant Byte |
- | ^ 00 | OPTR | CHKSUM || Escrow-related? | + | * LS: Least significant Byte |
- | ^ 10 | + | |
- | ^ 20 | Coin 1? |||||||||| Coin 2? | + | |
- | ^ 30 | <- 2 cont |||| Coin 3? | + | |
- | ^ 40 | <- 4 cont |||||||| Coin 5? | + | |
- | ^ 50 | <- 5 cont|| Coin 6? |||||||||| Coin 7? |||| | + | |
- | ^ 60 | <- 7 cont |||||| Coin 8? | + | |
- | ^ 70 | Coin 9? |||||||||| Coin 10? |||||| | + | |
- | ^ 80 | <- 10 cont |||| Coin 11? |||||||||| Coin 12? || | + | |
- | ^ 90 | <- 12 cont | + | |
- | ^ A0 | + | |
- | ^ B0 | <- 15 cont | + | |
- | ^ C0 | + | |
- | ^ D0 | + | |
- | ^ E0 | + | |
- | ^ F0 | + | |
- | ==== OPTR ==== | + | |
- | * EEPROM | + | ^ Offset (h) ^ 00 ^ 01 ^ 02 ^ 03 ^ 04 ^ 05 ^ 06 ^ 07 ^ 08 ^ 09 ^ 0A ^ 0B ^ 0C ^ 0D ^ 0E ^ 0F ^ |
+ | ^ 00 | Options register | ||
+ | ^ 10 | Half-window for detector C avg LS | Half-window for detector F avg MS | Half-window for detector F avg LS | Half-window for detector G avg MS | Half-window for detector G avg LS | Firing duration for solenoid MS | Firing duration for solenoid LS | Minimum coin separation time | Pause time during cash or refund cycle | number of bytes in coin table | number of coins in coin table | On-time for validator entry and exit sensors (A, B) | Blocked-time for escrow sensors (C, F, G) | Timeout on escrow motion (rotation jam) | Unused | ||
+ | ^ 20 | Coin 1 | ||
+ | ^ 30 | <- 2 cont |||| Coin 3 | ||
+ | ^ 40 | <- 4 cont | ||
+ | ^ 50 | <- 5 cont || Coin 6 |||||||||| Coin 7 | ||
+ | ^ 60 | <- 7 cont |||||| Coin 8 |||||||||| | ||
+ | ^ 70 | Coin 9 | ||
+ | ^ 80 | <- 10 cont |||| Coin 11 |||||||||| Coin 12 || | ||
+ | ^ 90 | <- 12 cont |||||||| Coin 13 |||||||| | ||
+ | ^ A0 | <- 13 cont || Coin 14 | ||
+ | ^ B0 | <- 15 cont | ||
+ | ^ C0 | Coin 17 (Calibration Coin A) | ||
+ | ^ D0 | <- 18 cont |||| Unknown (Calibration? | ||
+ | ^ E0 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | | ||
+ | ^ F0 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | ROM Version | ||
+ | |||
+ | ==== Options Register | ||
+ | * EEPROM | ||
* 03: Part 2 of the EEPROM array is not protected; all 256 bytes of EEPROM can be accessed for any read, erase or programming operations. / Security Bit is not set | * 03: Part 2 of the EEPROM array is not protected; all 256 bytes of EEPROM can be accessed for any read, erase or programming operations. / Security Bit is not set | ||
* [[http:// | * [[http:// | ||
+ | |||
+ | ==== Checksum ==== | ||
+ | * Some CRC - don't bother and just issue the k-command to have it calculated and written to the EEPROM automagically. | ||
+ | |||
+ | ==== Western Electric refit flag ==== | ||
+ | * Unused | ||
+ | |||
+ | ==== Nominal avg sensor C/F/G time ==== | ||
+ | * 0.25 µs increments | ||
+ | |||
+ | ==== Instantaneous half-window for detector C/F/G ==== | ||
+ | * 2 µs increments | ||
+ | |||
+ | ==== Half-window for detector C/F/G avg ==== | ||
+ | * 0.25 µs increments | ||
+ | |||
+ | ==== Firing duration for solenoid ==== | ||
+ | * 2 µs increments | ||
+ | |||
+ | ==== Minimum coin separation time ==== | ||
+ | * 8 µs increments | ||
+ | |||
+ | ==== Pause time during cash or refund cycle ==== | ||
+ | * 8 µs increments | ||
+ | |||
+ | ==== number of bytes/coins in coin table ==== | ||
+ | * not actively used | ||
+ | |||
+ | ==== On-time for validator entry and exit sensors (A, B) ==== | ||
+ | * 2 µs increments | ||
+ | |||
+ | ==== Blocked-time for escrow sensors (C,F,G) ==== | ||
+ | * 8 ms increments | ||
+ | |||
+ | ==== Timeout on escrow motion (rotation jam) ==== | ||
+ | * 64 ms increments | ||
+ | |||
+ | |||
+ | ==== Coin definitions ==== | ||
+ | 28.05.2016: This is the first time, that coin-definitions have been publicly documented, after [[User: | ||
+ | |||
+ | Each defined coin is represented by 5 measurement-values of 2 Bytes each, so 10 Bytes in total. | ||
+ | Each measurement of 2 Bytes/16 Bits contains the following information: | ||
+ | * Enable/ | ||
+ | * Median value (V): 9 Bits | ||
+ | * Validity range (R): 6 Bits | ||
+ | |||
+ | In other words, the acceptance range for each of the five parameters, given a measured value of M is: V-R <= M <= V+R (If the measured value is 100 and the range is set to 30, coins with a measurement of M in between 70 and 130 will pass). | ||
+ | |||
+ | |||
+ | ^ First Byte | ||
+ | | E | V | V | V | V | V | V | V | V | V | R | R | R | R | R | R | | ||
+ | |||
+ | |||
+ | The Enable-Bit is only set on the first tuple of each coin - the other four tuples have it set to zero. | ||
+ | Unused coin-slots are written as 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 | ||
+ | |||
+ | === Median tuple transformation === | ||
+ | Alway rounded to ,0. | ||
+ | |||
+ | * 1st tupel: (X1 - 0x1000) / 0x10 | ||
+ | * 2nd tuple: X2 / 0x04 | ||
+ | * 3rd tuple: (X3 - 0x1000) / 0x10 | ||
+ | * 4th tuple: X4 /0x02 | ||
+ | * 5th tuple: X5 / 0x80 | ||
+ | |||
+ | === Tuple construction === | ||
+ | - Obtain a sufficient amount of test-data for each coin using the TST-command. | ||
+ | - Calculate median value | ||
+ | - Transform tuples according to section above | ||
+ | - Calculate necessary range (max. +- 63) to cover all measurements | ||
+ | - Convert median and range into single Bits and fill in table | ||
+ | - Convert Bit-Table into 2 Hex-numbers and write to EEPROM. | ||
==== ROM Version / EEPROM Config ID ==== | ==== ROM Version / EEPROM Config ID ==== | ||
Line 90: | Line 167: | ||
===== Pinout ===== | ===== Pinout ===== | ||
- | Looking at the receptacle on the Control PCP | ||
- | |||
| **1** \\ GND | **3** \\ DIn | **5** \\ GND | **7** \\ GND | **9** \\ +12VDC | | | **1** \\ GND | **3** \\ DIn | **5** \\ GND | **7** \\ GND | **9** \\ +12VDC | | ||
| **2** \\ DOut | **4** \\ GND | **6** \\ GND | **8** \\ GND | **10** \\ Reset | | | **2** \\ DOut | **4** \\ GND | **6** \\ GND | **8** \\ GND | **10** \\ Reset | | ||
Line 116: | Line 191: | ||
| q< | | q< | ||
| TST | 0x54 0x53 0x54 | n/a | {{https:// | | TST | 0x54 0x53 0x54 | n/a | {{https:// | ||
- | | EAPw < | + | | EAPw < |
17.03.2016: This is the first time, that the commands TST and EAPw have been publicly documented, after [[User: | 17.03.2016: This is the first time, that the commands TST and EAPw have been publicly documented, after [[User: | ||
Line 154: | Line 229: | ||
17.03.2016: This is the first time, that N-command has been publicly documented, after [[User: | 17.03.2016: This is the first time, that N-command has been publicly documented, after [[User: | ||
+ | |||
+ | ===== The proper way to program coin validators ===== | ||
+ | The original software used to program these coin validators ist called VAL-ESC, a itty-bitty-shitty DOS-application that also just issues the previous commands to calibrate a device, download the current coinset, or upload a new one. | ||
+ | |||
+ | There is a repository of some coin sets, that we should probably put online at some point in the future. | ||
+ | |||
+ | |||