work in progress

Dependencies:   FastAnalogIn FastIO USBDevice mbed FastPWM SimpleDMA

Fork of Pinscape_Controller by Mike R

Committer:
mjr
Date:
Fri Feb 27 04:14:04 2015 +0000
Revision:
17:ab3cec0c8bf4
Child:
18:5e890ebd0023
FastIO and FastAnalogIn; better firing event sensing; potentiometer plunger sensor option; new key debouncing; ZB Launch Ball feature

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mjr 17:ab3cec0c8bf4 1 // Pinscape Controller Configuration
mjr 17:ab3cec0c8bf4 2 //
mjr 17:ab3cec0c8bf4 3 // To customize your private configuration, simply open this file in the
mjr 17:ab3cec0c8bf4 4 // mbed on-line IDE, make your changes, save the file, and click the Compile
mjr 17:ab3cec0c8bf4 5 // button at the top of the window. That will generate a customized .bin
mjr 17:ab3cec0c8bf4 6 // file that you can download onto your KL25Z board.
mjr 17:ab3cec0c8bf4 7
mjr 17:ab3cec0c8bf4 8
mjr 17:ab3cec0c8bf4 9 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 10 //
mjr 17:ab3cec0c8bf4 11 // LedWiz default unit number.
mjr 17:ab3cec0c8bf4 12 //
mjr 17:ab3cec0c8bf4 13 // Each LedWiz device has a unit number, from 0 to 15. This lets you install
mjr 17:ab3cec0c8bf4 14 // more than one LedWiz in your system: as long as each one has a different
mjr 17:ab3cec0c8bf4 15 // unit number, the software on the PC can tell them apart and route commands
mjr 17:ab3cec0c8bf4 16 // to the right device.
mjr 17:ab3cec0c8bf4 17 //
mjr 17:ab3cec0c8bf4 18 // A *real* LedWiz has its unit number set at the factory. This will be 0
mjr 17:ab3cec0c8bf4 19 // unless you specifically request a different number.
mjr 17:ab3cec0c8bf4 20 //
mjr 17:ab3cec0c8bf4 21 // We use 7 as our default unit number, to avoid conflicting with any real
mjr 17:ab3cec0c8bf4 22 // LedWiz devices that you might have in your system. If you have a real
mjr 17:ab3cec0c8bf4 23 // one, it will most likely be unit #0. If you have two real ones, you
mjr 17:ab3cec0c8bf4 24 // probably asked for the second one to be unit #1. If you have three,
mjr 17:ab3cec0c8bf4 25 // the third is probably #2. And so on. I don't think *anyone* has seven
mjr 17:ab3cec0c8bf4 26 // of these things - that would be 224 separate channels, which seems like
mjr 17:ab3cec0c8bf4 27 // a lot. That's why I set the default to #7. But if you do happen to have
mjr 17:ab3cec0c8bf4 28 // a conflict, you can just change this number to one that you're not using
mjr 17:ab3cec0c8bf4 29 // for one of your real LedWiz devices.
mjr 17:ab3cec0c8bf4 30 //
mjr 17:ab3cec0c8bf4 31 // Note 1: on the PC side, all of the software adds 1 to the number you
mjr 17:ab3cec0c8bf4 32 // see here. 0 here will show up as unit #1 on the PC; 7 here will be #8
mjr 17:ab3cec0c8bf4 33 // on the PC. They do it that way because programmers like to start
mjr 17:ab3cec0c8bf4 34 // counting from 0, but they figure that civilians can't handle that and
mjr 17:ab3cec0c8bf4 35 // have to start counting at 1.
mjr 17:ab3cec0c8bf4 36 //
mjr 17:ab3cec0c8bf4 37 // Note 2: the DOF Configtool (google it) knows about the Pinscape
mjr 17:ab3cec0c8bf4 38 // controller and knows that it uses 7 as its default unit number, so it
mjr 17:ab3cec0c8bf4 39 // will name the .ini file for this controller xxx8.ini (the 7 becomes
mjr 17:ab3cec0c8bf4 40 // an 8 on the PC side as described in the note above). If you change
mjr 17:ab3cec0c8bf4 41 // this number, you'll have to compensate by changing the number at the
mjr 17:ab3cec0c8bf4 42 // end of the .ini filename to match.
mjr 17:ab3cec0c8bf4 43 const uint8_t DEFAULT_LEDWIZ_UNIT_NUMBER = 0x07;
mjr 17:ab3cec0c8bf4 44
mjr 17:ab3cec0c8bf4 45 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 46 //
mjr 17:ab3cec0c8bf4 47 // Plunger CCD sensor.
mjr 17:ab3cec0c8bf4 48 //
mjr 17:ab3cec0c8bf4 49 // If you're NOT using the CCD sensor, comment out the next line (by adding
mjr 17:ab3cec0c8bf4 50 // two slashes at the start of the line).
mjr 17:ab3cec0c8bf4 51
mjr 17:ab3cec0c8bf4 52 #define ENABLE_CCD_SENSOR 1
mjr 17:ab3cec0c8bf4 53
mjr 17:ab3cec0c8bf4 54 // The KL25Z pins that the CCD sensor is physically attached to:
mjr 17:ab3cec0c8bf4 55 //
mjr 17:ab3cec0c8bf4 56 // CCD_SI_PIN = the SI (sensor data input) pin
mjr 17:ab3cec0c8bf4 57 // CCD_CLOCK_PIN = the sensor clock pin
mjr 17:ab3cec0c8bf4 58 // CCD_SO_PIN = the SO (sensor data output) pin
mjr 17:ab3cec0c8bf4 59 //
mjr 17:ab3cec0c8bf4 60 // The SI an Clock pins are DigitalOut pins, so these can be set to just
mjr 17:ab3cec0c8bf4 61 // about any gpio pins that aren't used for something else. The SO pin must
mjr 17:ab3cec0c8bf4 62 // be an AnalogIn capable pin - only a few of the KL25Z gpio pins qualify,
mjr 17:ab3cec0c8bf4 63 // so check the pinout diagram to find suitable candidates if you need to
mjr 17:ab3cec0c8bf4 64 // change this. Note that some of the gpio pins shown in the mbed pinout
mjr 17:ab3cec0c8bf4 65 // diagrams are committed to other uses by the mbed software or by the KL25Z
mjr 17:ab3cec0c8bf4 66 // wiring itself, so if you do change these, be sure that the new pins you
mjr 17:ab3cec0c8bf4 67 // select are really available.
mjr 17:ab3cec0c8bf4 68
mjr 17:ab3cec0c8bf4 69 const PinName CCD_SI_PIN = PTE20;
mjr 17:ab3cec0c8bf4 70 const PinName CCD_CLOCK_PIN = PTE21;
mjr 17:ab3cec0c8bf4 71 const PinName CCD_SO_PIN = PTB0;
mjr 17:ab3cec0c8bf4 72
mjr 17:ab3cec0c8bf4 73 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 74 //
mjr 17:ab3cec0c8bf4 75 // Plunger potentiometer sensor.
mjr 17:ab3cec0c8bf4 76 //
mjr 17:ab3cec0c8bf4 77 // If you ARE using a potentiometer as the plunger sensor, un-comment the
mjr 17:ab3cec0c8bf4 78 // next line (by removing the two slashes at the start of the line), and be
mjr 17:ab3cec0c8bf4 79 // sure to comment out the ENABLE_CCD_SENSOR line above.
mjr 17:ab3cec0c8bf4 80
mjr 17:ab3cec0c8bf4 81 //#define ENABLE_POT_SENSOR 1
mjr 17:ab3cec0c8bf4 82
mjr 17:ab3cec0c8bf4 83 // The KL25Z pin that your potentiometer is attached to. Wire the end of
mjr 17:ab3cec0c8bf4 84 // the potentiometer at the retracted end of the plunger to the 3.3V output
mjr 17:ab3cec0c8bf4 85 // from the KL25Z. Wire the variable output from the potentiometer to the
mjr 17:ab3cec0c8bf4 86 // gpio pin below. This must be an AnalogIn capable pin - only a few of the
mjr 17:ab3cec0c8bf4 87 // KL25Z gpio pins qualify, so check the pinout diagram to find a suitable
mjr 17:ab3cec0c8bf4 88 // candidate if you need to change this for any reason. Note that we use
mjr 17:ab3cec0c8bf4 89 // the same analog input that the CCD sensor would use if it were enabled,
mjr 17:ab3cec0c8bf4 90 // which is why you have to be sure to disable the CCD code if you're using
mjr 17:ab3cec0c8bf4 91 // this.
mjr 17:ab3cec0c8bf4 92
mjr 17:ab3cec0c8bf4 93 const PinName POT_PIN = PTB0;
mjr 17:ab3cec0c8bf4 94
mjr 17:ab3cec0c8bf4 95 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 96 //
mjr 17:ab3cec0c8bf4 97 // Plunger calibration button and indicator light.
mjr 17:ab3cec0c8bf4 98 //
mjr 17:ab3cec0c8bf4 99 // These specify the pin names of the plunger calibration button connections.
mjr 17:ab3cec0c8bf4 100 // If you're not using these, you can set these to NC. (You can even use the
mjr 17:ab3cec0c8bf4 101 // button but not the LED; set the LED to NC if you're only using the button.)
mjr 17:ab3cec0c8bf4 102 //
mjr 17:ab3cec0c8bf4 103 // If you're using the button, wire one terminal of a momentary switch or
mjr 17:ab3cec0c8bf4 104 // pushbutton to the input pin you select, and wire the other terminal to the
mjr 17:ab3cec0c8bf4 105 // KL25Z ground. Push and hold the button for a few seconds to enter plunger
mjr 17:ab3cec0c8bf4 106 // calibration mode.
mjr 17:ab3cec0c8bf4 107 //
mjr 17:ab3cec0c8bf4 108 // If you're using the LED, you'll need to build a little transistor power
mjr 17:ab3cec0c8bf4 109 // booster circuit to power the LED, as described in the build guide. The
mjr 17:ab3cec0c8bf4 110 // LED gives you visual confirmation that the you've triggered calibration
mjr 17:ab3cec0c8bf4 111 // mode and lets you know when the mode times out. Note that the LED on
mjr 17:ab3cec0c8bf4 112 // board the KL25Z also changes color to indicate the same information, so
mjr 17:ab3cec0c8bf4 113 // if the KL25Z is positioned so that you can see it while you're doing the
mjr 17:ab3cec0c8bf4 114 // calibration, you don't really need a separate button LED. But the
mjr 17:ab3cec0c8bf4 115 // separate LED is spiffy, especially if it's embedded in the pushbutton.
mjr 17:ab3cec0c8bf4 116 //
mjr 17:ab3cec0c8bf4 117 // Note that you can skip the pushbutton altogether and trigger calibration
mjr 17:ab3cec0c8bf4 118 // from the Windows control software. But again, the button is spiffier.
mjr 17:ab3cec0c8bf4 119
mjr 17:ab3cec0c8bf4 120 // calibration button input
mjr 17:ab3cec0c8bf4 121 const PinName CAL_BUTTON_PIN = PTE29;
mjr 17:ab3cec0c8bf4 122
mjr 17:ab3cec0c8bf4 123 // calibration button indicator LED
mjr 17:ab3cec0c8bf4 124 const PinName CAL_BUTTON_LED = PTE23;
mjr 17:ab3cec0c8bf4 125
mjr 17:ab3cec0c8bf4 126
mjr 17:ab3cec0c8bf4 127 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 128 //
mjr 17:ab3cec0c8bf4 129 // Pseudo "Launch Ball" button.
mjr 17:ab3cec0c8bf4 130 //
mjr 17:ab3cec0c8bf4 131 // Zeb of zebsboards.com came up with a clever scheme for his plunger kit
mjr 17:ab3cec0c8bf4 132 // that lets the plunger simulate a Launch Ball button for tables where
mjr 17:ab3cec0c8bf4 133 // the original used a Launch button instead of a plunger (e.g., Medieval
mjr 17:ab3cec0c8bf4 134 // Madness, T2, or Star Trek: The Next Generation). The scheme uses an
mjr 17:ab3cec0c8bf4 135 // LedWiz output to tell us when such a table is loaded. On the DOF
mjr 17:ab3cec0c8bf4 136 // Configtool site, this is called "ZB Launch Ball". When this LedWiz
mjr 17:ab3cec0c8bf4 137 // output is ON, it tells us that the table will ignore the analog plunger
mjr 17:ab3cec0c8bf4 138 // because it doesn't have a plunger object, so the analog plunger should
mjr 17:ab3cec0c8bf4 139 // send a Launch Ball button press signal when the user releases the plunger.
mjr 17:ab3cec0c8bf4 140 //
mjr 17:ab3cec0c8bf4 141 // If you wish to use this feature, you need to do two things:
mjr 17:ab3cec0c8bf4 142 //
mjr 17:ab3cec0c8bf4 143 // First, adjust the two lines below to set the LedWiz output and joystick
mjr 17:ab3cec0c8bf4 144 // button you wish to use for this feature. The defaults below should be
mjr 17:ab3cec0c8bf4 145 // fine for most people, but if you're using the Pinscape controller for
mjr 17:ab3cec0c8bf4 146 // your physical button wiring, you should set the launch button to match
mjr 17:ab3cec0c8bf4 147 // where you physically wired your actual Launch Ball button. Likewise,
mjr 17:ab3cec0c8bf4 148 // change the LedWiz port if you're using the one below for some actual
mjr 17:ab3cec0c8bf4 149 // hardware output. This is a virtual port that won't control any hardware;
mjr 17:ab3cec0c8bf4 150 // it's just for signaling the plunger that we're in "button mode". Note
mjr 17:ab3cec0c8bf4 151 // that the numbering for the both the LedWiz port and joystick button
mjr 17:ab3cec0c8bf4 152 // start at 1 to match the DOF Configtool and VP dialog numbering.
mjr 17:ab3cec0c8bf4 153 //
mjr 17:ab3cec0c8bf4 154 // Second, in the DOF Configtool, make sure you have a Pinscape controller
mjr 17:ab3cec0c8bf4 155 // in your cabinet configuration, then go to your Port Assignments and set
mjr 17:ab3cec0c8bf4 156 // the port defined below to "ZB Launch Ball".
mjr 17:ab3cec0c8bf4 157 //
mjr 17:ab3cec0c8bf4 158 // Third, open the Visual Pinball editor, open the Preferences | Keys
mjr 17:ab3cec0c8bf4 159 // dialog, and find the Plunger item. Open the drop-down list under that
mjr 17:ab3cec0c8bf4 160 // item and select the button number defined below.
mjr 17:ab3cec0c8bf4 161 //
mjr 17:ab3cec0c8bf4 162 // If you wish to disable this feature, just set the LedWiz port number
mjr 17:ab3cec0c8bf4 163 // to 0.
mjr 17:ab3cec0c8bf4 164
mjr 17:ab3cec0c8bf4 165 const int ZBLaunchBallPort = 32;
mjr 17:ab3cec0c8bf4 166 const int LaunchBallButton = 24;
mjr 17:ab3cec0c8bf4 167
mjr 17:ab3cec0c8bf4 168
mjr 17:ab3cec0c8bf4 169 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 170 //
mjr 17:ab3cec0c8bf4 171
mjr 17:ab3cec0c8bf4 172 // Joystick button input pin assignments.
mjr 17:ab3cec0c8bf4 173 //
mjr 17:ab3cec0c8bf4 174 // You can wire up to 32 GPIO ports to buttons (equipped with
mjr 17:ab3cec0c8bf4 175 // momentary switches). Connect each switch between the desired
mjr 17:ab3cec0c8bf4 176 // GPIO port and ground (J9 pin 12 or 14). When the button is pressed,
mjr 17:ab3cec0c8bf4 177 // we'll tell the host PC that the corresponding joystick button is
mjr 17:ab3cec0c8bf4 178 // pressed. We debounce the keystrokes in software, so you can simply
mjr 17:ab3cec0c8bf4 179 // wire directly to pushbuttons with no additional external hardware.
mjr 17:ab3cec0c8bf4 180 //
mjr 17:ab3cec0c8bf4 181 // Note that we assign 24 buttons by default, even though the USB
mjr 17:ab3cec0c8bf4 182 // joystick interface can handle up to 32 buttons. VP itself only
mjr 17:ab3cec0c8bf4 183 // allows mapping of up to 24 buttons in the preferences dialog
mjr 17:ab3cec0c8bf4 184 // (although it can recognize 32 buttons internally). If you want
mjr 17:ab3cec0c8bf4 185 // more buttons, you can reassign pins that are assigned by default
mjr 17:ab3cec0c8bf4 186 // as LedWiz outputs. To reassign a pin, find the pin you wish to
mjr 17:ab3cec0c8bf4 187 // reassign in the LedWizPortMap array below, and change the pin name
mjr 17:ab3cec0c8bf4 188 // there to NC (for Not Connected). You can then change one of the
mjr 17:ab3cec0c8bf4 189 // "NC" entries below to the reallocated pin name. The limit is 32
mjr 17:ab3cec0c8bf4 190 // buttons total.
mjr 17:ab3cec0c8bf4 191 //
mjr 17:ab3cec0c8bf4 192 // Note: PTD1 (pin J2-12) should NOT be assigned as a button input,
mjr 17:ab3cec0c8bf4 193 // as this pin is physically connected on the KL25Z to the on-board
mjr 17:ab3cec0c8bf4 194 // indicator LED's blue segment. This precludes any other use of
mjr 17:ab3cec0c8bf4 195 // the pin.
mjr 17:ab3cec0c8bf4 196 PinName buttonMap[] = {
mjr 17:ab3cec0c8bf4 197 PTC2, // J10 pin 10, joystick button 1
mjr 17:ab3cec0c8bf4 198 PTB3, // J10 pin 8, joystick button 2
mjr 17:ab3cec0c8bf4 199 PTB2, // J10 pin 6, joystick button 3
mjr 17:ab3cec0c8bf4 200 PTB1, // J10 pin 4, joystick button 4
mjr 17:ab3cec0c8bf4 201
mjr 17:ab3cec0c8bf4 202 PTE30, // J10 pin 11, joystick button 5
mjr 17:ab3cec0c8bf4 203 PTE22, // J10 pin 5, joystick button 6
mjr 17:ab3cec0c8bf4 204
mjr 17:ab3cec0c8bf4 205 PTE5, // J9 pin 15, joystick button 7
mjr 17:ab3cec0c8bf4 206 PTE4, // J9 pin 13, joystick button 8
mjr 17:ab3cec0c8bf4 207 PTE3, // J9 pin 11, joystick button 9
mjr 17:ab3cec0c8bf4 208 PTE2, // J9 pin 9, joystick button 10
mjr 17:ab3cec0c8bf4 209 PTB11, // J9 pin 7, joystick button 11
mjr 17:ab3cec0c8bf4 210 PTB10, // J9 pin 5, joystick button 12
mjr 17:ab3cec0c8bf4 211 PTB9, // J9 pin 3, joystick button 13
mjr 17:ab3cec0c8bf4 212 PTB8, // J9 pin 1, joystick button 14
mjr 17:ab3cec0c8bf4 213
mjr 17:ab3cec0c8bf4 214 PTC12, // J2 pin 1, joystick button 15
mjr 17:ab3cec0c8bf4 215 PTC13, // J2 pin 3, joystick button 16
mjr 17:ab3cec0c8bf4 216 PTC16, // J2 pin 5, joystick button 17
mjr 17:ab3cec0c8bf4 217 PTC17, // J2 pin 7, joystick button 18
mjr 17:ab3cec0c8bf4 218 PTA16, // J2 pin 9, joystick button 19
mjr 17:ab3cec0c8bf4 219 PTA17, // J2 pin 11, joystick button 20
mjr 17:ab3cec0c8bf4 220 PTE31, // J2 pin 13, joystick button 21
mjr 17:ab3cec0c8bf4 221 PTD6, // J2 pin 17, joystick button 22
mjr 17:ab3cec0c8bf4 222 PTD7, // J2 pin 19, joystick button 23
mjr 17:ab3cec0c8bf4 223
mjr 17:ab3cec0c8bf4 224 PTE1, // J2 pin 20, joystick button 24
mjr 17:ab3cec0c8bf4 225
mjr 17:ab3cec0c8bf4 226 NC, // not used, joystick button 25
mjr 17:ab3cec0c8bf4 227 NC, // not used, joystick button 26
mjr 17:ab3cec0c8bf4 228 NC, // not used, joystick button 27
mjr 17:ab3cec0c8bf4 229 NC, // not used, joystick button 28
mjr 17:ab3cec0c8bf4 230 NC, // not used, joystick button 29
mjr 17:ab3cec0c8bf4 231 NC, // not used, joystick button 30
mjr 17:ab3cec0c8bf4 232 NC, // not used, joystick button 31
mjr 17:ab3cec0c8bf4 233 NC // not used, joystick button 32
mjr 17:ab3cec0c8bf4 234 };
mjr 17:ab3cec0c8bf4 235
mjr 17:ab3cec0c8bf4 236 // --------------------------------------------------------------------------
mjr 17:ab3cec0c8bf4 237 //
mjr 17:ab3cec0c8bf4 238 // LED-Wiz emulation output pin assignments.
mjr 17:ab3cec0c8bf4 239 //
mjr 17:ab3cec0c8bf4 240 // The LED-Wiz protocol allows setting individual intensity levels
mjr 17:ab3cec0c8bf4 241 // on all outputs, with 48 levels of intensity. This can be used
mjr 17:ab3cec0c8bf4 242 // to control lamp brightness and motor speeds, among other things.
mjr 17:ab3cec0c8bf4 243 // Unfortunately, the KL25Z only has 10 PWM channels, so while we
mjr 17:ab3cec0c8bf4 244 // can support the full complement of 32 outputs, we can only provide
mjr 17:ab3cec0c8bf4 245 // PWM dimming/speed control on 10 of them. The remaining outputs
mjr 17:ab3cec0c8bf4 246 // can only be switched fully on and fully off - we can't support
mjr 17:ab3cec0c8bf4 247 // dimming on these, so they'll ignore any intensity level setting
mjr 17:ab3cec0c8bf4 248 // requested by the host. Use these for devices that don't have any
mjr 17:ab3cec0c8bf4 249 // use for intensity settings anyway, such as contactors and knockers.
mjr 17:ab3cec0c8bf4 250 //
mjr 17:ab3cec0c8bf4 251 // Ports with pins assigned as "NC" are not connected. That is,
mjr 17:ab3cec0c8bf4 252 // there's no physical pin for that LedWiz port number. You can
mjr 17:ab3cec0c8bf4 253 // send LedWiz commands to turn NC ports on and off, but doing so
mjr 17:ab3cec0c8bf4 254 // will have no effect. The reason we leave some ports unassigned
mjr 17:ab3cec0c8bf4 255 // is that we don't have enough physical GPIO pins to fill out the
mjr 17:ab3cec0c8bf4 256 // full LedWiz complement of 32 ports. Many pins are already taken
mjr 17:ab3cec0c8bf4 257 // for other purposes, such as button inputs or the plunger CCD
mjr 17:ab3cec0c8bf4 258 // interface.
mjr 17:ab3cec0c8bf4 259 //
mjr 17:ab3cec0c8bf4 260 // The mapping between physical output pins on the KL25Z and the
mjr 17:ab3cec0c8bf4 261 // assigned LED-Wiz port numbers is essentially arbitrary - you can
mjr 17:ab3cec0c8bf4 262 // customize this by changing the entries in the array below if you
mjr 17:ab3cec0c8bf4 263 // wish to rearrange the pins for any reason. Be aware that some
mjr 17:ab3cec0c8bf4 264 // of the physical outputs are already used for other purposes
mjr 17:ab3cec0c8bf4 265 // (e.g., some of the GPIO pins on header J10 are used for the
mjr 17:ab3cec0c8bf4 266 // CCD sensor - but you can of course reassign those as well by
mjr 17:ab3cec0c8bf4 267 // changing the corresponding declarations elsewhere in this module).
mjr 17:ab3cec0c8bf4 268 // The assignments we make here have two main objectives: first,
mjr 17:ab3cec0c8bf4 269 // to group the outputs on headers J1 and J2 (to facilitate neater
mjr 17:ab3cec0c8bf4 270 // wiring by keeping the output pins together physically), and
mjr 17:ab3cec0c8bf4 271 // second, to make the physical pin layout match the LED-Wiz port
mjr 17:ab3cec0c8bf4 272 // numbering order to the extent possible. There's one big wrench
mjr 17:ab3cec0c8bf4 273 // in the works, though, which is the limited number and discontiguous
mjr 17:ab3cec0c8bf4 274 // placement of the KL25Z PWM-capable output pins. This prevents
mjr 17:ab3cec0c8bf4 275 // us from doing the most obvious sequential ordering of the pins,
mjr 17:ab3cec0c8bf4 276 // so we end up with the outputs arranged into several blocks.
mjr 17:ab3cec0c8bf4 277 // Hopefully this isn't too confusing; for more detailed rationale,
mjr 17:ab3cec0c8bf4 278 // read on...
mjr 17:ab3cec0c8bf4 279 //
mjr 17:ab3cec0c8bf4 280 // With the LED-Wiz, the host software configuration usually
mjr 17:ab3cec0c8bf4 281 // assumes that each RGB LED is hooked up to three consecutive ports
mjr 17:ab3cec0c8bf4 282 // (for the red, green, and blue components, which need to be
mjr 17:ab3cec0c8bf4 283 // physically wired to separate outputs to allow each color to be
mjr 17:ab3cec0c8bf4 284 // controlled independently). To facilitate this, we arrange the
mjr 17:ab3cec0c8bf4 285 // PWM-enabled outputs so that they're grouped together in the
mjr 17:ab3cec0c8bf4 286 // port numbering scheme. Unfortunately, these outputs aren't
mjr 17:ab3cec0c8bf4 287 // together in a single group in the physical pin layout, so to
mjr 17:ab3cec0c8bf4 288 // group them logically in the LED-Wiz port numbering scheme, we
mjr 17:ab3cec0c8bf4 289 // have to break up the overall numbering scheme into several blocks.
mjr 17:ab3cec0c8bf4 290 // So our port numbering goes sequentially down each column of
mjr 17:ab3cec0c8bf4 291 // header pins, but there are several break points where we have
mjr 17:ab3cec0c8bf4 292 // to interrupt the obvious sequence to keep the PWM pins grouped
mjr 17:ab3cec0c8bf4 293 // logically.
mjr 17:ab3cec0c8bf4 294 //
mjr 17:ab3cec0c8bf4 295 // In the list below, "pin J1-2" refers to pin 2 on header J1 on
mjr 17:ab3cec0c8bf4 296 // the KL25Z, using the standard pin numbering in the KL25Z
mjr 17:ab3cec0c8bf4 297 // documentation - this is the physical pin that the port controls.
mjr 17:ab3cec0c8bf4 298 // "LW port 1" means LED-Wiz port 1 - this is the LED-Wiz port
mjr 17:ab3cec0c8bf4 299 // number that you use on the PC side (in the DirectOutput config
mjr 17:ab3cec0c8bf4 300 // file, for example) to address the port. PWM-capable ports are
mjr 17:ab3cec0c8bf4 301 // marked as such - we group the PWM-capable ports into the first
mjr 17:ab3cec0c8bf4 302 // 10 LED-Wiz port numbers.
mjr 17:ab3cec0c8bf4 303 //
mjr 17:ab3cec0c8bf4 304 // If you wish to reallocate a pin in the array below to some other
mjr 17:ab3cec0c8bf4 305 // use, such as a button input port, simply change the pin name in
mjr 17:ab3cec0c8bf4 306 // the entry to NC (for Not Connected). This will disable the given
mjr 17:ab3cec0c8bf4 307 // logical LedWiz port number and free up the physical pin.
mjr 17:ab3cec0c8bf4 308 //
mjr 17:ab3cec0c8bf4 309 // If you wish to reallocate a pin currently assigned to the button
mjr 17:ab3cec0c8bf4 310 // input array, simply change the entry for the pin in the buttonMap[]
mjr 17:ab3cec0c8bf4 311 // array above to NC (for "not connected"), and plug the pin name into
mjr 17:ab3cec0c8bf4 312 // a slot of your choice in the array below.
mjr 17:ab3cec0c8bf4 313 //
mjr 17:ab3cec0c8bf4 314 // Note: PTD1 (pin J2-12) should NOT be assigned as an LedWiz output,
mjr 17:ab3cec0c8bf4 315 // as this pin is physically connected on the KL25Z to the on-board
mjr 17:ab3cec0c8bf4 316 // indicator LED's blue segment. This precludes any other use of
mjr 17:ab3cec0c8bf4 317 // the pin.
mjr 17:ab3cec0c8bf4 318 //
mjr 17:ab3cec0c8bf4 319 struct {
mjr 17:ab3cec0c8bf4 320 PinName pin;
mjr 17:ab3cec0c8bf4 321 bool isPWM;
mjr 17:ab3cec0c8bf4 322 } ledWizPortMap[32] = {
mjr 17:ab3cec0c8bf4 323 { PTA1, true }, // pin J1-2, LW port 1 (PWM capable - TPM 2.0 = channel 9)
mjr 17:ab3cec0c8bf4 324 { PTA2, true }, // pin J1-4, LW port 2 (PWM capable - TPM 2.1 = channel 10)
mjr 17:ab3cec0c8bf4 325 { PTD4, true }, // pin J1-6, LW port 3 (PWM capable - TPM 0.4 = channel 5)
mjr 17:ab3cec0c8bf4 326 { PTA12, true }, // pin J1-8, LW port 4 (PWM capable - TPM 1.0 = channel 7)
mjr 17:ab3cec0c8bf4 327 { PTA4, true }, // pin J1-10, LW port 5 (PWM capable - TPM 0.1 = channel 2)
mjr 17:ab3cec0c8bf4 328 { PTA5, true }, // pin J1-12, LW port 6 (PWM capable - TPM 0.2 = channel 3)
mjr 17:ab3cec0c8bf4 329 { PTA13, true }, // pin J2-2, LW port 7 (PWM capable - TPM 1.1 = channel 13)
mjr 17:ab3cec0c8bf4 330 { PTD5, true }, // pin J2-4, LW port 8 (PWM capable - TPM 0.5 = channel 6)
mjr 17:ab3cec0c8bf4 331 { PTD0, true }, // pin J2-6, LW port 9 (PWM capable - TPM 0.0 = channel 1)
mjr 17:ab3cec0c8bf4 332 { PTD3, true }, // pin J2-10, LW port 10 (PWM capable - TPM 0.3 = channel 4)
mjr 17:ab3cec0c8bf4 333 { PTD2, false }, // pin J2-8, LW port 11
mjr 17:ab3cec0c8bf4 334 { PTC8, false }, // pin J1-14, LW port 12
mjr 17:ab3cec0c8bf4 335 { PTC9, false }, // pin J1-16, LW port 13
mjr 17:ab3cec0c8bf4 336 { PTC7, false }, // pin J1-1, LW port 14
mjr 17:ab3cec0c8bf4 337 { PTC0, false }, // pin J1-3, LW port 15
mjr 17:ab3cec0c8bf4 338 { PTC3, false }, // pin J1-5, LW port 16
mjr 17:ab3cec0c8bf4 339 { PTC4, false }, // pin J1-7, LW port 17
mjr 17:ab3cec0c8bf4 340 { PTC5, false }, // pin J1-9, LW port 18
mjr 17:ab3cec0c8bf4 341 { PTC6, false }, // pin J1-11, LW port 19
mjr 17:ab3cec0c8bf4 342 { PTC10, false }, // pin J1-13, LW port 20
mjr 17:ab3cec0c8bf4 343 { PTC11, false }, // pin J1-15, LW port 21
mjr 17:ab3cec0c8bf4 344 { PTE0, false }, // pin J2-18, LW port 22
mjr 17:ab3cec0c8bf4 345 { NC, false }, // Not used, LW port 23
mjr 17:ab3cec0c8bf4 346 { NC, false }, // Not used, LW port 24
mjr 17:ab3cec0c8bf4 347 { NC, false }, // Not used, LW port 25
mjr 17:ab3cec0c8bf4 348 { NC, false }, // Not used, LW port 26
mjr 17:ab3cec0c8bf4 349 { NC, false }, // Not used, LW port 27
mjr 17:ab3cec0c8bf4 350 { NC, false }, // Not used, LW port 28
mjr 17:ab3cec0c8bf4 351 { NC, false }, // Not used, LW port 29
mjr 17:ab3cec0c8bf4 352 { NC, false }, // Not used, LW port 30
mjr 17:ab3cec0c8bf4 353 { NC, false }, // Not used, LW port 31
mjr 17:ab3cec0c8bf4 354 { NC, false } // Not used, LW port 32
mjr 17:ab3cec0c8bf4 355 };
mjr 17:ab3cec0c8bf4 356