work in progress
Dependencies: FastAnalogIn FastIO USBDevice mbed FastPWM SimpleDMA
Fork of Pinscape_Controller by
Diff: config.h
- Revision:
- 17:ab3cec0c8bf4
- Child:
- 18:5e890ebd0023
diff -r c35f905c3311 -r ab3cec0c8bf4 config.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.h Fri Feb 27 04:14:04 2015 +0000 @@ -0,0 +1,356 @@ +// Pinscape Controller Configuration +// +// To customize your private configuration, simply open this file in the +// mbed on-line IDE, make your changes, save the file, and click the Compile +// button at the top of the window. That will generate a customized .bin +// file that you can download onto your KL25Z board. + + +// -------------------------------------------------------------------------- +// +// LedWiz default unit number. +// +// Each LedWiz device has a unit number, from 0 to 15. This lets you install +// more than one LedWiz in your system: as long as each one has a different +// unit number, the software on the PC can tell them apart and route commands +// to the right device. +// +// A *real* LedWiz has its unit number set at the factory. This will be 0 +// unless you specifically request a different number. +// +// We use 7 as our default unit number, to avoid conflicting with any real +// LedWiz devices that you might have in your system. If you have a real +// one, it will most likely be unit #0. If you have two real ones, you +// probably asked for the second one to be unit #1. If you have three, +// the third is probably #2. And so on. I don't think *anyone* has seven +// of these things - that would be 224 separate channels, which seems like +// a lot. That's why I set the default to #7. But if you do happen to have +// a conflict, you can just change this number to one that you're not using +// for one of your real LedWiz devices. +// +// Note 1: on the PC side, all of the software adds 1 to the number you +// see here. 0 here will show up as unit #1 on the PC; 7 here will be #8 +// on the PC. They do it that way because programmers like to start +// counting from 0, but they figure that civilians can't handle that and +// have to start counting at 1. +// +// Note 2: the DOF Configtool (google it) knows about the Pinscape +// controller and knows that it uses 7 as its default unit number, so it +// will name the .ini file for this controller xxx8.ini (the 7 becomes +// an 8 on the PC side as described in the note above). If you change +// this number, you'll have to compensate by changing the number at the +// end of the .ini filename to match. +const uint8_t DEFAULT_LEDWIZ_UNIT_NUMBER = 0x07; + +// -------------------------------------------------------------------------- +// +// Plunger CCD sensor. +// +// If you're NOT using the CCD sensor, comment out the next line (by adding +// two slashes at the start of the line). + +#define ENABLE_CCD_SENSOR 1 + +// The KL25Z pins that the CCD sensor is physically attached to: +// +// CCD_SI_PIN = the SI (sensor data input) pin +// CCD_CLOCK_PIN = the sensor clock pin +// CCD_SO_PIN = the SO (sensor data output) pin +// +// The SI an Clock pins are DigitalOut pins, so these can be set to just +// about any gpio pins that aren't used for something else. The SO pin must +// be an AnalogIn capable pin - only a few of the KL25Z gpio pins qualify, +// so check the pinout diagram to find suitable candidates if you need to +// change this. Note that some of the gpio pins shown in the mbed pinout +// diagrams are committed to other uses by the mbed software or by the KL25Z +// wiring itself, so if you do change these, be sure that the new pins you +// select are really available. + +const PinName CCD_SI_PIN = PTE20; +const PinName CCD_CLOCK_PIN = PTE21; +const PinName CCD_SO_PIN = PTB0; + +// -------------------------------------------------------------------------- +// +// Plunger potentiometer sensor. +// +// If you ARE using a potentiometer as the plunger sensor, un-comment the +// next line (by removing the two slashes at the start of the line), and be +// sure to comment out the ENABLE_CCD_SENSOR line above. + +//#define ENABLE_POT_SENSOR 1 + +// The KL25Z pin that your potentiometer is attached to. Wire the end of +// the potentiometer at the retracted end of the plunger to the 3.3V output +// from the KL25Z. Wire the variable output from the potentiometer to the +// gpio pin below. This must be an AnalogIn capable pin - only a few of the +// KL25Z gpio pins qualify, so check the pinout diagram to find a suitable +// candidate if you need to change this for any reason. Note that we use +// the same analog input that the CCD sensor would use if it were enabled, +// which is why you have to be sure to disable the CCD code if you're using +// this. + +const PinName POT_PIN = PTB0; + +// -------------------------------------------------------------------------- +// +// Plunger calibration button and indicator light. +// +// These specify the pin names of the plunger calibration button connections. +// If you're not using these, you can set these to NC. (You can even use the +// button but not the LED; set the LED to NC if you're only using the button.) +// +// If you're using the button, wire one terminal of a momentary switch or +// pushbutton to the input pin you select, and wire the other terminal to the +// KL25Z ground. Push and hold the button for a few seconds to enter plunger +// calibration mode. +// +// If you're using the LED, you'll need to build a little transistor power +// booster circuit to power the LED, as described in the build guide. The +// LED gives you visual confirmation that the you've triggered calibration +// mode and lets you know when the mode times out. Note that the LED on +// board the KL25Z also changes color to indicate the same information, so +// if the KL25Z is positioned so that you can see it while you're doing the +// calibration, you don't really need a separate button LED. But the +// separate LED is spiffy, especially if it's embedded in the pushbutton. +// +// Note that you can skip the pushbutton altogether and trigger calibration +// from the Windows control software. But again, the button is spiffier. + +// calibration button input +const PinName CAL_BUTTON_PIN = PTE29; + +// calibration button indicator LED +const PinName CAL_BUTTON_LED = PTE23; + + +// -------------------------------------------------------------------------- +// +// Pseudo "Launch Ball" button. +// +// Zeb of zebsboards.com came up with a clever scheme for his plunger kit +// that lets the plunger simulate a Launch Ball button for tables where +// the original used a Launch button instead of a plunger (e.g., Medieval +// Madness, T2, or Star Trek: The Next Generation). The scheme uses an +// LedWiz output to tell us when such a table is loaded. On the DOF +// Configtool site, this is called "ZB Launch Ball". When this LedWiz +// output is ON, it tells us that the table will ignore the analog plunger +// because it doesn't have a plunger object, so the analog plunger should +// send a Launch Ball button press signal when the user releases the plunger. +// +// If you wish to use this feature, you need to do two things: +// +// First, adjust the two lines below to set the LedWiz output and joystick +// button you wish to use for this feature. The defaults below should be +// fine for most people, but if you're using the Pinscape controller for +// your physical button wiring, you should set the launch button to match +// where you physically wired your actual Launch Ball button. Likewise, +// change the LedWiz port if you're using the one below for some actual +// hardware output. This is a virtual port that won't control any hardware; +// it's just for signaling the plunger that we're in "button mode". Note +// that the numbering for the both the LedWiz port and joystick button +// start at 1 to match the DOF Configtool and VP dialog numbering. +// +// Second, in the DOF Configtool, make sure you have a Pinscape controller +// in your cabinet configuration, then go to your Port Assignments and set +// the port defined below to "ZB Launch Ball". +// +// Third, open the Visual Pinball editor, open the Preferences | Keys +// dialog, and find the Plunger item. Open the drop-down list under that +// item and select the button number defined below. +// +// If you wish to disable this feature, just set the LedWiz port number +// to 0. + +const int ZBLaunchBallPort = 32; +const int LaunchBallButton = 24; + + +// -------------------------------------------------------------------------- +// + +// Joystick button input pin assignments. +// +// You can wire up to 32 GPIO ports to buttons (equipped with +// momentary switches). Connect each switch between the desired +// GPIO port and ground (J9 pin 12 or 14). When the button is pressed, +// we'll tell the host PC that the corresponding joystick button is +// pressed. We debounce the keystrokes in software, so you can simply +// wire directly to pushbuttons with no additional external hardware. +// +// Note that we assign 24 buttons by default, even though the USB +// joystick interface can handle up to 32 buttons. VP itself only +// allows mapping of up to 24 buttons in the preferences dialog +// (although it can recognize 32 buttons internally). If you want +// more buttons, you can reassign pins that are assigned by default +// as LedWiz outputs. To reassign a pin, find the pin you wish to +// reassign in the LedWizPortMap array below, and change the pin name +// there to NC (for Not Connected). You can then change one of the +// "NC" entries below to the reallocated pin name. The limit is 32 +// buttons total. +// +// Note: PTD1 (pin J2-12) should NOT be assigned as a button input, +// as this pin is physically connected on the KL25Z to the on-board +// indicator LED's blue segment. This precludes any other use of +// the pin. +PinName buttonMap[] = { + PTC2, // J10 pin 10, joystick button 1 + PTB3, // J10 pin 8, joystick button 2 + PTB2, // J10 pin 6, joystick button 3 + PTB1, // J10 pin 4, joystick button 4 + + PTE30, // J10 pin 11, joystick button 5 + PTE22, // J10 pin 5, joystick button 6 + + PTE5, // J9 pin 15, joystick button 7 + PTE4, // J9 pin 13, joystick button 8 + PTE3, // J9 pin 11, joystick button 9 + PTE2, // J9 pin 9, joystick button 10 + PTB11, // J9 pin 7, joystick button 11 + PTB10, // J9 pin 5, joystick button 12 + PTB9, // J9 pin 3, joystick button 13 + PTB8, // J9 pin 1, joystick button 14 + + PTC12, // J2 pin 1, joystick button 15 + PTC13, // J2 pin 3, joystick button 16 + PTC16, // J2 pin 5, joystick button 17 + PTC17, // J2 pin 7, joystick button 18 + PTA16, // J2 pin 9, joystick button 19 + PTA17, // J2 pin 11, joystick button 20 + PTE31, // J2 pin 13, joystick button 21 + PTD6, // J2 pin 17, joystick button 22 + PTD7, // J2 pin 19, joystick button 23 + + PTE1, // J2 pin 20, joystick button 24 + + NC, // not used, joystick button 25 + NC, // not used, joystick button 26 + NC, // not used, joystick button 27 + NC, // not used, joystick button 28 + NC, // not used, joystick button 29 + NC, // not used, joystick button 30 + NC, // not used, joystick button 31 + NC // not used, joystick button 32 +}; + +// -------------------------------------------------------------------------- +// +// LED-Wiz emulation output pin assignments. +// +// The LED-Wiz protocol allows setting individual intensity levels +// on all outputs, with 48 levels of intensity. This can be used +// to control lamp brightness and motor speeds, among other things. +// Unfortunately, the KL25Z only has 10 PWM channels, so while we +// can support the full complement of 32 outputs, we can only provide +// PWM dimming/speed control on 10 of them. The remaining outputs +// can only be switched fully on and fully off - we can't support +// dimming on these, so they'll ignore any intensity level setting +// requested by the host. Use these for devices that don't have any +// use for intensity settings anyway, such as contactors and knockers. +// +// Ports with pins assigned as "NC" are not connected. That is, +// there's no physical pin for that LedWiz port number. You can +// send LedWiz commands to turn NC ports on and off, but doing so +// will have no effect. The reason we leave some ports unassigned +// is that we don't have enough physical GPIO pins to fill out the +// full LedWiz complement of 32 ports. Many pins are already taken +// for other purposes, such as button inputs or the plunger CCD +// interface. +// +// The mapping between physical output pins on the KL25Z and the +// assigned LED-Wiz port numbers is essentially arbitrary - you can +// customize this by changing the entries in the array below if you +// wish to rearrange the pins for any reason. Be aware that some +// of the physical outputs are already used for other purposes +// (e.g., some of the GPIO pins on header J10 are used for the +// CCD sensor - but you can of course reassign those as well by +// changing the corresponding declarations elsewhere in this module). +// The assignments we make here have two main objectives: first, +// to group the outputs on headers J1 and J2 (to facilitate neater +// wiring by keeping the output pins together physically), and +// second, to make the physical pin layout match the LED-Wiz port +// numbering order to the extent possible. There's one big wrench +// in the works, though, which is the limited number and discontiguous +// placement of the KL25Z PWM-capable output pins. This prevents +// us from doing the most obvious sequential ordering of the pins, +// so we end up with the outputs arranged into several blocks. +// Hopefully this isn't too confusing; for more detailed rationale, +// read on... +// +// With the LED-Wiz, the host software configuration usually +// assumes that each RGB LED is hooked up to three consecutive ports +// (for the red, green, and blue components, which need to be +// physically wired to separate outputs to allow each color to be +// controlled independently). To facilitate this, we arrange the +// PWM-enabled outputs so that they're grouped together in the +// port numbering scheme. Unfortunately, these outputs aren't +// together in a single group in the physical pin layout, so to +// group them logically in the LED-Wiz port numbering scheme, we +// have to break up the overall numbering scheme into several blocks. +// So our port numbering goes sequentially down each column of +// header pins, but there are several break points where we have +// to interrupt the obvious sequence to keep the PWM pins grouped +// logically. +// +// In the list below, "pin J1-2" refers to pin 2 on header J1 on +// the KL25Z, using the standard pin numbering in the KL25Z +// documentation - this is the physical pin that the port controls. +// "LW port 1" means LED-Wiz port 1 - this is the LED-Wiz port +// number that you use on the PC side (in the DirectOutput config +// file, for example) to address the port. PWM-capable ports are +// marked as such - we group the PWM-capable ports into the first +// 10 LED-Wiz port numbers. +// +// If you wish to reallocate a pin in the array below to some other +// use, such as a button input port, simply change the pin name in +// the entry to NC (for Not Connected). This will disable the given +// logical LedWiz port number and free up the physical pin. +// +// If you wish to reallocate a pin currently assigned to the button +// input array, simply change the entry for the pin in the buttonMap[] +// array above to NC (for "not connected"), and plug the pin name into +// a slot of your choice in the array below. +// +// Note: PTD1 (pin J2-12) should NOT be assigned as an LedWiz output, +// as this pin is physically connected on the KL25Z to the on-board +// indicator LED's blue segment. This precludes any other use of +// the pin. +// +struct { + PinName pin; + bool isPWM; +} ledWizPortMap[32] = { + { PTA1, true }, // pin J1-2, LW port 1 (PWM capable - TPM 2.0 = channel 9) + { PTA2, true }, // pin J1-4, LW port 2 (PWM capable - TPM 2.1 = channel 10) + { PTD4, true }, // pin J1-6, LW port 3 (PWM capable - TPM 0.4 = channel 5) + { PTA12, true }, // pin J1-8, LW port 4 (PWM capable - TPM 1.0 = channel 7) + { PTA4, true }, // pin J1-10, LW port 5 (PWM capable - TPM 0.1 = channel 2) + { PTA5, true }, // pin J1-12, LW port 6 (PWM capable - TPM 0.2 = channel 3) + { PTA13, true }, // pin J2-2, LW port 7 (PWM capable - TPM 1.1 = channel 13) + { PTD5, true }, // pin J2-4, LW port 8 (PWM capable - TPM 0.5 = channel 6) + { PTD0, true }, // pin J2-6, LW port 9 (PWM capable - TPM 0.0 = channel 1) + { PTD3, true }, // pin J2-10, LW port 10 (PWM capable - TPM 0.3 = channel 4) + { PTD2, false }, // pin J2-8, LW port 11 + { PTC8, false }, // pin J1-14, LW port 12 + { PTC9, false }, // pin J1-16, LW port 13 + { PTC7, false }, // pin J1-1, LW port 14 + { PTC0, false }, // pin J1-3, LW port 15 + { PTC3, false }, // pin J1-5, LW port 16 + { PTC4, false }, // pin J1-7, LW port 17 + { PTC5, false }, // pin J1-9, LW port 18 + { PTC6, false }, // pin J1-11, LW port 19 + { PTC10, false }, // pin J1-13, LW port 20 + { PTC11, false }, // pin J1-15, LW port 21 + { PTE0, false }, // pin J2-18, LW port 22 + { NC, false }, // Not used, LW port 23 + { NC, false }, // Not used, LW port 24 + { NC, false }, // Not used, LW port 25 + { NC, false }, // Not used, LW port 26 + { NC, false }, // Not used, LW port 27 + { NC, false }, // Not used, LW port 28 + { NC, false }, // Not used, LW port 29 + { NC, false }, // Not used, LW port 30 + { NC, false }, // Not used, LW port 31 + { NC, false } // Not used, LW port 32 +}; +