An input/output controller for virtual pinball machines, with plunger position tracking, accelerometer-based nudge sensing, button input encoding, and feedback device control.
Dependencies: USBDevice mbed FastAnalogIn FastIO FastPWM SimpleDMA
config.h
00001 // Pinscape Controller Configuration 00002 // 00003 // To customize your private configuration, simply open this file in the 00004 // mbed on-line IDE, make your changes, save the file, and click the Compile 00005 // button at the top of the window. That will generate a customized .bin 00006 // file that you can download onto your KL25Z board. 00007 00008 #ifndef CONFIG_H 00009 #define CONFIG_H 00010 00011 // --------------------------------------------------------------------------- 00012 // 00013 // Expansion Board. If you're using the expansion board, un-comment the 00014 // line below. This will select all of the correct defaults for the board. 00015 // 00016 // The expansion board settings are mostly automatic, so you shouldn't have 00017 // to change much else. However, you should still look at and adjust the 00018 // following as needed: 00019 // - TV power on delay time 00020 // - Plunger sensor settings, if you're using a plunger 00021 // 00022 //#define EXPANSION_BOARD 00023 00024 00025 // -------------------------------------------------------------------------- 00026 // 00027 // Enable/disable joystick functions. 00028 // 00029 // This controls whether or not we send joystick reports to the PC with the 00030 // plunger and accelerometer readings. By default, this is enabled. If 00031 // you want to use two or more physical KL25Z Pinscape controllers in your 00032 // system (e.g., if you want to increase the number of output ports 00033 // available by using two or more KL25Z's), you should disable the joystick 00034 // features on the second (and third+) controller. It's not useful to have 00035 // more than one board reporting the accelerometer readings to the host - 00036 // doing so will just add USB overhead. This setting lets you turn off the 00037 // reports for the secondary controllers, turning the secondary boards into 00038 // output-only devices. 00039 // 00040 // Note that you can't use button inputs on a controller that has the 00041 // joystick features disabled, because the buttons are handled via the 00042 // joystick reports. Wire all of your buttons to the primary KL25Z that 00043 // has the joystick features enabled. 00044 // 00045 // To disable the joystick features, just comment out the next line (add 00046 // two slashes at the beginning of the line). 00047 // 00048 #define ENABLE_JOYSTICK 00049 00050 00051 // --------------------------------------------------------------------------- 00052 // 00053 // USB device vendor ID and product ID. These values identify the device 00054 // to the host software on the PC. By default, we use the same settings as 00055 // a real LedWiz so that host software will recognize us as an LedWiz. 00056 // 00057 // The standard settings *should* work without conflicts, even if you have 00058 // a real LedWiz. My reference system is 64-bit Windows 7 with a real LedWiz 00059 // on unit #1 and a Pinscape controller on unit #8 (the default), and the 00060 // two coexist happily in my system. The LedWiz is designed specifically 00061 // to allow multiple units in one system, using the unit number value 00062 // (see below) to distinguish multiple units, so there should be no conflict 00063 // between Pinscape and any real LedWiz devices you have. 00064 // 00065 // However, even though conflicts *shouldn't* happen, I've had one report 00066 // from a user who experienced a Windows USB driver conflict that they could 00067 // only resolve by changing the vendor ID. The real underlying cause is 00068 // still a mystery, but whatever was going on, changing the vendor ID fixed 00069 // it. If you run into a similar problem, you can try the same fix as a 00070 // last resort. Before doing that, though, you should try changing the 00071 // Pinscape unit number first - it's possible that your real LedWiz is using 00072 // unit #8, which is our default setting. 00073 // 00074 // If you must change the vendor ID for any reason, you'll sacrifice LedWiz 00075 // compatibility, which means that old programs like Future Pinball that use 00076 // the LedWiz interface directly won't be able to access the LedWiz output 00077 // controller features. However, all is not lost. All of the other functions 00078 // (plunger, nudge, and key input) use the joystick interface, which will 00079 // work regardless of the ID values. In addition, DOF R3 recognizes the 00080 // "emergency fallback" ID below, so if you use that, *all* functions 00081 // including the output controller will work in any DOF R3-enabled software, 00082 // including Visual Pinball and PinballX. So the only loss will be that 00083 // old LedWiz-only software won't be able to control the outputs. 00084 // 00085 // The "emergency fallback" ID below is officially registerd with 00086 // http://pid.codes, a registry for open-source USB projects, which should 00087 // all but guarantee that this alternative ID shouldn't conflict with 00088 // any other devices in your system. 00089 00090 00091 // STANDARD ID SETTINGS. These provide full, transparent LedWiz compatibility. 00092 const uint16_t USB_VENDOR_ID = 0xFAFA; // LedWiz vendor ID = FAFA 00093 const uint16_t USB_PRODUCT_ID = 0x00F0; // LedWiz start of product ID range = 00F0 00094 00095 00096 // EMERGENCY FALLBACK ID SETTINGS. These settings are not LedWiz-compatible, 00097 // so older LedWiz-only software won't be able to access the output controller 00098 // features. However, DOF R3 recognizes these IDs, so DOF-aware software (Visual 00099 // Pinball, PinballX) will have full access to all features. 00100 // 00101 //const uint16_t USB_VENDOR_ID = 0x1209; // DOF R3-compatible vendor ID = 1209 00102 //const uint16_t USB_PRODUCT_ID = 0xEAEA; // DOF R3-compatible product ID = EAEA 00103 00104 00105 // --------------------------------------------------------------------------- 00106 // 00107 // LedWiz unit number. 00108 // 00109 // Each LedWiz device has a unit number, from 1 to 16. This lets you install 00110 // more than one LedWiz in your system: as long as each one has a different 00111 // unit number, the software on the PC can tell them apart and route commands 00112 // to the right device. 00113 // 00114 // A real LedWiz has its unit number set at the factory. If you don't tell 00115 // them otherwise when placing your order, they will set it to unit #1. Most 00116 // real LedWiz units therefore are set to unit #1. There's no provision on 00117 // a real LedWiz for users to change the unit number after it leaves the 00118 // factory. 00119 // 00120 // For our *emulated* LedWiz, we default to unit #8 if we're the primary 00121 // Pinscape controller in the system, or unit #9 if we're set up as the 00122 // secondary controller with the joystick functions turned off. 00123 // 00124 // The reason we start at unit #8 is that we want to avoid conflicting with 00125 // any real LedWiz devices in your system. Most real LedWiz devices are 00126 // set up as unit #1, and in the rare cases where people have two of them, 00127 // the second one is usually unit #2. 00128 // 00129 // Note 1: the unit number here is the *user visible* unit number that 00130 // you use on the PC side. It's the number you specify in your DOF 00131 // configuration and so forth. Internally, the USB reports subtract 00132 // one from this number - e.g., nominal unit #1 shows up as 0 in the USB 00133 // reports. If you're trying to puzzle out why all of the USB reports 00134 // are all off by one from the unit number you select here, that's why. 00135 // 00136 // Note 2: the DOF Configtool (google it) knows about the Pinscape 00137 // controller. There it's referred to as simply "KL25Z" rather than 00138 // Pinscape Controller, but that's what they're talking about. The DOF 00139 // tool knows that it uses #8 as its default unit number, so it names the 00140 // .ini file for this controller xxx8.ini. If you change the unit number 00141 // here, remember to rename the DOF-generated .ini file to match, by 00142 // changing the "8" at the end of the filename to the new number you set 00143 // here. 00144 const uint8_t DEFAULT_LEDWIZ_UNIT_NUMBER = 00145 #ifdef ENABLE_JOYSTICK 00146 0x08; // joystick enabled - assume we're the primary KL25Z, so use unit #8 00147 #else 00148 0x09; // joystick disabled - assume we're a secondary, output-only KL25Z, so use #9 00149 #endif 00150 00151 00152 // -------------------------------------------------------------------------- 00153 // 00154 // Accelerometer orientation. The accelerometer feature lets Visual Pinball 00155 // (and other pinball software) sense nudges to the cabinet, and simulate 00156 // the effect on the ball's trajectory during play. We report the direction 00157 // of the accelerometer readings as well as the strength, so it's important 00158 // for VP and the KL25Z to agree on the physical orientation of the 00159 // accelerometer relative to the cabinet. The accelerometer on the KL25Z 00160 // is always mounted the same way on the board, but we still have to know 00161 // which way you mount the board in your cabinet. We assume as default 00162 // orientation where the KL25Z is mounted flat on the bottom of your 00163 // cabinet with the USB ports pointing forward, toward the coin door. If 00164 // it's more convenient for you to mount the board in a different direction, 00165 // you simply need to select the matching direction here. Comment out the 00166 // ORIENTATION_PORTS_AT_FRONT line and un-comment the line that matches 00167 // your board's orientation. 00168 00169 #define ORIENTATION_PORTS_AT_FRONT // USB ports pointing toward front of cabinet 00170 // #define ORIENTATION_PORTS_AT_LEFT // USB ports pointing toward left side of cab 00171 // #define ORIENTATION_PORTS_AT_RIGHT // USB ports pointing toward right side of cab 00172 // #define ORIENTATION_PORTS_AT_REAR // USB ports pointing toward back of cabinet 00173 00174 00175 00176 // -------------------------------------------------------------------------- 00177 // 00178 // Plunger CCD sensor. 00179 // 00180 // If you're NOT using the CCD sensor, comment out the next line (by adding 00181 // two slashes at the start of the line). 00182 00183 #define ENABLE_CCD_SENSOR 00184 00185 // Physical pixel count for your sensor. This software has been tested with 00186 // TAOS TSL1410R (1280 pixels) and TSL1412R (1536 pixels) sensors. It might 00187 // work with other similar sensors as well, but you'll probably have to make 00188 // some changes to the software interface to the sensor if you're using any 00189 // sensor outside of the TAOS TSL14xxR series. 00190 // 00191 // If you're not using a CCD sensor, you can ignore this. 00192 const int CCD_NPIXELS = 1280; 00193 00194 // Number of pixels from the CCD to sample on each high-res scan. We don't 00195 // sample every pixel from the sensor on each scan, because (a) we don't 00196 // have to, and (b) we don't want to. We don't have to sample all of the 00197 // pixels because these sensors have much finer resolution than we need to 00198 // get good results. On a typical pinball cabinet setup with a 1920x1080 00199 // HD TV display, the on-screen plunger travel distance is about 165 pixels, 00200 // so that's all the pixels we need to sample for pixel-accurate animation. 00201 // Even so, we still *could* sample at higher resolution, but we don't *want* 00202 // to sample more pixels than we have to, because reading each pixel takes 00203 // time. The limiting factor for read speed is the sampling time for the ADC 00204 // (analog to digital converter); it needs about 20us per sample to get an 00205 // accurate voltage reading. We want to animate the on-screen plunger in 00206 // real time, with minimal lag, so it's important that we complete each scan 00207 // as quickly as possible. The fewer pixels we sample, the faster we 00208 // complete each scan. 00209 // 00210 // Happily, the time needed to read the approximately 165 pixels required 00211 // for pixel-accurate positioning on the display is short enough that we can 00212 // complete a scan within the cycle time for USB reports. Visual Pinball 00213 // only polls for input at about 10ms intervals, so there's no benefit 00214 // to going much faster than this. The sensor timing is such that we can 00215 // read about 165 pixels in well under 10ms. So that's really the sweet 00216 // spot for our scans. 00217 // 00218 // Note that we distribute the sampled pixels evenly across the full range 00219 // of the sensor's pixels. That is, we read every nth pixel, and skip the 00220 // ones in between. That means that the sample count here has to be an even 00221 // divisor of the physical pixel count. Empirically, reading every 8th 00222 // pixel gives us good results on both the TSL1410R and TSL1412R, so you 00223 // shouldn't need to change this if you're using one of those sensors. If 00224 // you're using a different sensor, you should be sure to adjust this so that 00225 // it works out to an integer result with no remainder. 00226 // 00227 const int CCD_NPIXELS_SAMPLED = CCD_NPIXELS / 8; 00228 00229 // The KL25Z pins that the CCD sensor is physically attached to: 00230 // 00231 // CCD_SI_PIN = the SI (sensor data input) pin 00232 // CCD_CLOCK_PIN = the sensor clock pin 00233 // CCD_SO_PIN = the SO (sensor data output) pin 00234 // 00235 // The SI an Clock pins are DigitalOut pins, so these can be set to just 00236 // about any gpio pins that aren't used for something else. The SO pin must 00237 // be an AnalogIn capable pin - only a few of the KL25Z gpio pins qualify, 00238 // so check the pinout diagram to find suitable candidates if you need to 00239 // change this. Note that some of the gpio pins shown in the mbed pinout 00240 // diagrams are committed to other uses by the mbed software or by the KL25Z 00241 // wiring itself, so if you do change these, be sure that the new pins you 00242 // select are really available. 00243 00244 const PinName CCD_SI_PIN = PTE20; 00245 const PinName CCD_CLOCK_PIN = PTE21; 00246 const PinName CCD_SO_PIN = PTB0; 00247 00248 // -------------------------------------------------------------------------- 00249 // 00250 // Plunger potentiometer sensor. 00251 // 00252 // If you're using a potentiometer as the plunger sensor, un-comment the 00253 // next line (by removing the two slashes at the start of the line), and 00254 // also comment out the ENABLE_CCD_SENSOR line above. 00255 00256 //#define ENABLE_POT_SENSOR 00257 00258 // The KL25Z pin that your potentiometer is attached to. The potentiometer 00259 // requires wiring three connectins: 00260 // 00261 // - Wire the fixed resistance end of the potentiometer nearest the KNOB 00262 // end of the plunger to the 3.3V output from the KL25Z 00263 // 00264 // - Wire the other fixed resistance end to KL25Z Ground 00265 // 00266 // - Wire the potentiometer wiper (the variable output terminal) to the 00267 // KL25Z pin identified below. 00268 // 00269 // Note that you can change the pin selection below, but if you do, the new 00270 // pin must be AnalogIn capable. Only a few of the KL25Z pins qualify. Refer 00271 // to the KL25Z pinout diagram to find another AnalogIn pin if you need to 00272 // change this for any reason. Note that the default is to use the same analog 00273 // input that the CCD sensor would use if it were enabled, which is why you 00274 // have to be sure to disable the CCD support in the software if you're using 00275 // a potentiometer as the sensor. 00276 00277 const PinName POT_PIN = PTB0; 00278 00279 // -------------------------------------------------------------------------- 00280 // 00281 // Plunger calibration button and indicator light. 00282 // 00283 // These specify the pin names of the plunger calibration button connections. 00284 // If you're not using these, you can set these to NC. (You can even use the 00285 // button but not the LED; set the LED to NC if you're only using the button.) 00286 // 00287 // If you're using the button, wire one terminal of a momentary switch or 00288 // pushbutton to the input pin you select, and wire the other terminal to the 00289 // KL25Z ground. Push and hold the button for a few seconds to enter plunger 00290 // calibration mode. 00291 // 00292 // If you're using the LED, you'll need to build a little transistor power 00293 // booster circuit to power the LED, as described in the build guide. The 00294 // LED gives you visual confirmation that the you've triggered calibration 00295 // mode and lets you know when the mode times out. Note that the LED on 00296 // board the KL25Z also changes color to indicate the same information, so 00297 // if the KL25Z is positioned so that you can see it while you're doing the 00298 // calibration, you don't really need a separate button LED. But the 00299 // separate LED is spiffy, especially if it's embedded in the pushbutton. 00300 // 00301 // Note that you can skip the pushbutton altogether and trigger calibration 00302 // from the Windows control software. But again, the button is spiffier. 00303 00304 // calibration button input 00305 const PinName CAL_BUTTON_PIN = PTE29; 00306 00307 // calibration button indicator LED 00308 const PinName CAL_BUTTON_LED = PTE23; 00309 00310 00311 // --------------------------------------------------------------------------- 00312 // 00313 // TV Power-On Timer. This section lets you set up a delayed relay timer 00314 // for turning on your TV monitor(s) shortly after you turn on power to the 00315 // system. This requires some external circuitry, which is built in to the 00316 // expansion board, or which you can build yourself - refer to the Build 00317 // Guide for the circuit plan. 00318 // 00319 // If you're using this feature, un-comment the next line, and make any 00320 // changes to the port assignments below. The default port assignments are 00321 // suitable for the expansion board. Note that the TV timer is enabled 00322 // automatically if you're using the expansion board, since it's built in. 00323 //#define ENABLE_TV_TIMER 00324 00325 #if defined(ENABLE_TV_TIMER) || defined(EXPANSION_BOARD) 00326 # define PSU2_STATUS_SENSE PTD2 // Digital In pin to read latch status 00327 # define PSU2_STATUS_SET PTE0 // Digital Out pin to set latch 00328 # define TV_RELAY_PIN PTD3 // Digital Out pin to control TV switch relay 00329 00330 // Amount of time (in seconds) to wait after system power-up before 00331 // pulsing the TV ON switch relay. Adjust as needed for your TV(s). 00332 // Most monitors won't respond to any buttons for the first few seconds 00333 // after they're plugged in, so we need to wait long enough to make sure 00334 // the TVs are ready to receive input before pressing the button. 00335 #define TV_DELAY_TIME 7.0 00336 00337 #endif 00338 00339 00340 // -------------------------------------------------------------------------- 00341 // 00342 // Pseudo "Launch Ball" button. 00343 // 00344 // Zeb of zebsboards.com came up with a clever scheme for his plunger kit 00345 // that lets the plunger simulate a Launch Ball button for tables where 00346 // the original used a Launch button instead of a plunger (e.g., Medieval 00347 // Madness, T2, or Star Trek: The Next Generation). The scheme uses an 00348 // LedWiz output to tell us when such a table is loaded. On the DOF 00349 // Configtool site, this is called "ZB Launch Ball". When this LedWiz 00350 // output is ON, it tells us that the table will ignore the analog plunger 00351 // because it doesn't have a plunger object, so the analog plunger should 00352 // send a Launch Ball button press signal when the user releases the plunger. 00353 // 00354 // If you wish to use this feature, you need to do two things: 00355 // 00356 // First, adjust the two lines below to set the LedWiz output and joystick 00357 // button you wish to use for this feature. The defaults below should be 00358 // fine for most people, but if you're using the Pinscape controller for 00359 // your physical button wiring, you should set the launch button to match 00360 // where you physically wired your actual Launch Ball button. Likewise, 00361 // change the LedWiz port if you're using the one below for some actual 00362 // hardware output. This is a virtual port that won't control any hardware; 00363 // it's just for signaling the plunger that we're in "button mode". Note 00364 // that the numbering for the both the LedWiz port and joystick button 00365 // start at 1 to match the DOF Configtool and VP dialog numbering. 00366 // 00367 // Second, in the DOF Configtool, make sure you have a Pinscape controller 00368 // in your cabinet configuration, then go to your Port Assignments and set 00369 // the port defined below to "ZB Launch Ball". 00370 // 00371 // Third, open the Visual Pinball editor, open the Preferences | Keys 00372 // dialog, and find the Plunger item. Open the drop-down list under that 00373 // item and select the button number defined below. 00374 // 00375 // To disable this feature, just set ZBLaunchBallPort to 0 here. 00376 00377 const int ZBLaunchBallPort = 32; 00378 const int LaunchBallButton = 24; 00379 00380 // Distance necessary to push the plunger to activate the simulated 00381 // launch ball button, in inches. A standard pinball plunger can be 00382 // pushed forward about 1/2". However, the barrel spring is very 00383 // stiff, and anything more than about 1/8" requires quite a bit 00384 // of force. Ideally the force required should be about the same as 00385 // for any ordinary pushbutton. 00386 // 00387 // On my cabinet, empirically, a distance around 2mm (.08") seems 00388 // to work pretty well. It's far enough that it doesn't trigger 00389 // spuriously, but short enough that it responds to a reasonably 00390 // light push. 00391 // 00392 // You might need to adjust this up or down to get the right feel. 00393 // Alternatively, if you don't like the "push" gesture at all and 00394 // would prefer to only make the plunger respond to a pull-and-release 00395 // motion, simply set this to, say, 2.0 - it's impossible to push a 00396 // plunger forward that far, so that will effectively turn off the 00397 // push mode. 00398 const float LaunchBallPushDistance = .08; 00399 00400 00401 // -------------------------------------------------------------------------- 00402 // 00403 // TLC5940 PWM controller chip setup - Enhanced LedWiz emulation 00404 // 00405 // By default, the Pinscape Controller software can provide limited LedWiz 00406 // emulation through the KL25Z's on-board GPIO ports. This lets you hook 00407 // up external devices, such as LED flashers or solenoids, to the KL25Z 00408 // outputs (using external circuitry to boost power - KL25Z GPIO ports 00409 // are limited to a meager 4mA per port). This capability is limited by 00410 // the number of available GPIO ports on the KL25Z, and even smaller limit 00411 // of 10 PWM-capable GPIO ports. 00412 // 00413 // As an alternative, the controller software lets you use external PWM 00414 // controller chips to control essentially unlimited channels with full 00415 // PWM control on all channels. This requires building external circuitry 00416 // using TLC5940 chips. Each TLC5940 chip provides 16 full PWM channels, 00417 // and you can daisy-chain multiple TLC5940 chips together to set up 32, 00418 // 48, 64, or more channels. 00419 // 00420 // If you do add TLC5940 circuits to your controller hardware, use this 00421 // section to configure the connection to the KL25Z. 00422 // 00423 // Note that when using the TLC5940, you can still also use some GPIO 00424 // pins for outputs as normal. See ledWizPinMap[] for 00425 00426 // Number of TLC5940 chips you're using. For a full LedWiz-compatible 00427 // setup, you need two of these chips, for 32 outputs. The software 00428 // will handle up to 8. 00429 // If you're using the expansion board, the main KL25Z interface board 00430 // has 2 chips and the MOSFET board has 2 more, for a total of 4. If 00431 // you add extra daisy-chained MOSFET boards, add 2 more per board. 00432 #ifdef EXPANSION_BOARD 00433 # define TLC5940_NCHIPS 4 00434 #else 00435 # define TLC5940_NCHIPS 0 // change this if you're using TLC5940's without the expansion board 00436 #endif 00437 00438 // If you're using TLC5940s, change any of these as needed to match the 00439 // GPIO pins that you connected to the TLC5940 control pins. Note that 00440 // SIN and SCLK *must* be connected to the KL25Z SPI0 MOSI and SCLK 00441 // outputs, respectively, which effectively limits them to the default 00442 // selections, and that the GSCLK pin must be PWM-capable. These defaults 00443 // all match the expansion board wiring. 00444 #define TLC5940_SIN PTC6 // Serial data - Must connect to SPI0 MOSI -> PTC6 or PTD2 00445 #define TLC5940_SCLK PTC5 // Serial clock - Must connect to SPI0 SCLK -> PTC5 or PTD1, 00446 // but don't use PTD1 because it's hard-wired to the on-board 00447 // blue LED 00448 #define TLC5940_XLAT PTC10 // XLAT (latch) signal - Any GPIO pin can be used 00449 #define TLC5940_BLANK PTC7 // BLANK signal - Any GPIO pin can be used 00450 #define TLC5940_GSCLK PTA1 // Grayscale clock - Must be a PWM-capable pin 00451 00452 00453 // -------------------------------------------------------------------------- 00454 // 00455 // 74HC595 digital output setup - "Chime Board" module 00456 // 00457 // The 74HC595 is an 8-output serial-to-parallel shift register IC. This lets 00458 // us add extra digital outputs (on/off only, not PWM), 8 at a time, similar 00459 // to the way the TLC5940 lets us add extra PWM outputs. The 74HC595 requires 00460 // four control signals, so one chip gives us 8 outputs using only 4 GPIOs. 00461 // The chips can be daisy-chained, so by adding multiple chips, we can add 00462 // any number of new outputs, still using only 4 GPIO pins for the whole chain. 00463 // 00464 // The TLC5940 is more useful for general-purpose outputs because of its PWM 00465 // capabilities, but digital-only outputs are better for some special cases. 00466 // 00467 // The Expansion Board "Chime" module uses these chips to add timer-protected 00468 // outputs. The timer triggers are edge-sensitive, so we want simple on/off 00469 // signals to control them; a PWM signal wouldn't work properly because it's 00470 // constantly switching on and off even when nominally 100% on. 00471 // 00472 00473 #define HC595_NCHIPS 0 // Number of chips == number of Chime boards connected 00474 #define HC595_SIN PTA5 // Serial data - use any GPIO pin 00475 #define HC595_SCLK PTA4 // Serial clock - use any GPIO pin 00476 #define HC595_LATCH PTA12 // Latch signal - use any GPIO pin 00477 #define HC595_ENA PTD4 // Enable signal - use any GPIO pin 00478 00479 00480 #endif // CONFIG_H - end of include-once section (code below this point can be multiply included) 00481 00482 00483 #ifdef DECL_EXTERNS // this section defines global variables, only if this macro is set 00484 00485 // -------------------------------------------------------------------------- 00486 // 00487 00488 // Joystick button input pin assignments. 00489 // 00490 // You can wire up to 32 GPIO ports to buttons (equipped with 00491 // momentary switches). Connect each switch between the desired 00492 // GPIO port and ground (J9 pin 12 or 14). When the button is pressed, 00493 // we'll tell the host PC that the corresponding joystick button is 00494 // pressed. We debounce the keystrokes in software, so you can simply 00495 // wire directly to pushbuttons with no additional external hardware. 00496 // 00497 // Note that we assign 24 buttons by default, even though the USB 00498 // joystick interface can handle up to 32 buttons. VP itself only 00499 // allows mapping of up to 24 buttons in the preferences dialog 00500 // (although it can recognize 32 buttons internally). If you want 00501 // more buttons, you can reassign pins that are assigned by default 00502 // as LedWiz outputs. To reassign a pin, find the pin you wish to 00503 // reassign in the LedWizPortMap array below, and change the pin name 00504 // there to NC (for Not Connected). You can then change one of the 00505 // "NC" entries below to the reallocated pin name. The limit is 32 00506 // buttons total. 00507 // 00508 // (If you're using TLC5940 chips to control outputs, many of the 00509 // GPIO pins that are mapped to LedWiz outputs in the default 00510 // mapping can be reassigned as keys, since the TLC5940 outputs 00511 // take over for the GPIO pins. The exceptions are the pins that 00512 // are reassigned to control the TLC5940 chips.) 00513 // 00514 // Note: PTD1 (pin J2-12) should NOT be assigned as a button input, 00515 // as this pin is physically connected on the KL25Z to the on-board 00516 // indicator LED's blue segment. 00517 PinName buttonMap[] = { 00518 PTC2, // J10 pin 10, joystick button 1 00519 PTB3, // J10 pin 8, joystick button 2 00520 PTB2, // J10 pin 6, joystick button 3 00521 PTB1, // J10 pin 4, joystick button 4 00522 00523 PTE30, // J10 pin 11, joystick button 5 00524 #ifdef EXPANSION_BOARD 00525 PTC11, // J1 pin 15, joystick button 6 00526 #else 00527 PTE22, // J10 pin 5, joystick button 6 00528 #endif 00529 00530 PTE5, // J9 pin 15, joystick button 7 00531 PTE4, // J9 pin 13, joystick button 8 00532 PTE3, // J9 pin 11, joystick button 9 00533 PTE2, // J9 pin 9, joystick button 10 00534 PTB11, // J9 pin 7, joystick button 11 00535 PTB10, // J9 pin 5, joystick button 12 00536 PTB9, // J9 pin 3, joystick button 13 00537 PTB8, // J9 pin 1, joystick button 14 00538 00539 PTC12, // J2 pin 1, joystick button 15 00540 PTC13, // J2 pin 3, joystick button 16 00541 PTC16, // J2 pin 5, joystick button 17 00542 PTC17, // J2 pin 7, joystick button 18 00543 PTA16, // J2 pin 9, joystick button 19 00544 PTA17, // J2 pin 11, joystick button 20 00545 PTE31, // J2 pin 13, joystick button 21 00546 PTD6, // J2 pin 17, joystick button 22 00547 PTD7, // J2 pin 19, joystick button 23 00548 00549 PTE1, // J2 pin 20, joystick button 24 00550 00551 NC, // not used, joystick button 25 00552 NC, // not used, joystick button 26 00553 NC, // not used, joystick button 27 00554 NC, // not used, joystick button 28 00555 NC, // not used, joystick button 29 00556 NC, // not used, joystick button 30 00557 NC, // not used, joystick button 31 00558 NC // not used, joystick button 32 00559 }; 00560 00561 // -------------------------------------------------------------------------- 00562 // 00563 // LED-Wiz emulation output pin assignments 00564 // 00565 // This sets the mapping from logical LedWiz port numbers, as used 00566 // in the software on the PC side, to physical hardware pins on the 00567 // KL25Z and/or the TLC5940 controllers. 00568 // 00569 // The LedWiz protocol lets the PC software set a "brightness" level 00570 // for each output. This is used to control the intensity of LEDs 00571 // and other lights, and can also control motor speeds. To implement 00572 // the intensity level in hardware, we use PWM, or pulse width 00573 // modulation, which switches the output on and off very rapidly 00574 // to give the effect of a reduced voltage. Unfortunately, the KL25Z 00575 // hardware is limited to 10 channels of PWM control for its GPIO 00576 // outputs, so it's impossible to implement the LedWiz's full set 00577 // of 32 adjustable outputs using only GPIO ports. However, you can 00578 // create 10 adjustable ports and fill out the rest with "digital" 00579 // GPIO pins, which are simple on/off switches. The intensity level 00580 // of a digital port can't be adjusted - it's either fully on or 00581 // fully off - but this is fine for devices that don't have 00582 // different intensity settings anyway, such as replay knockers 00583 // and flipper solenoids. 00584 // 00585 // In the mapping list below, you can decide how to dole out the 00586 // PWM-capable and digital-only GPIO pins. To make it easier to 00587 // remember which is which, the default mapping below groups all 00588 // of the PWM-capable ports together in the first 10 logical LedWiz 00589 // port numbers. Unfortunately, these ports aren't *physically* 00590 // together on the KL25Z pin headers, so this layout may be simple 00591 // in terms of the LedWiz numbering, but it's a little jumbled 00592 // in the physical layout.t 00593 // 00594 // "NC" in the pin name slot means "not connected". This means 00595 // that there's no physical output for this LedWiz port number. 00596 // The device will still accept commands that control the port, 00597 // but these will just be silently ignored, since there's no pin 00598 // to turn on or off for these ports. The reason we leave some 00599 // ports unconnected is that we don't have enough physical GPIO 00600 // pins to fill out the full LedWiz complement of 32 ports. Many 00601 // pins are already taken for other purposes, such as button 00602 // inputs or the plunger CCD interface. 00603 // 00604 // The mapping between physical output pins on the KL25Z and the 00605 // assigned LED-Wiz port numbers is essentially arbitrary. You can 00606 // customize this by changing the entries in the array below if you 00607 // wish to rearrange the pins for any reason. Be aware that some 00608 // of the physical outputs are already used for other purposes 00609 // (e.g., some of the GPIO pins on header J10 are used for the 00610 // CCD sensor - but you can of course reassign those as well by 00611 // changing the corresponding declarations elsewhere in this file). 00612 // The assignments we make here have two main objectives: first, 00613 // to group the outputs on headers J1 and J2 (to facilitate neater 00614 // wiring by keeping the output pins together physically), and 00615 // second, to make the physical pin layout match the LED-Wiz port 00616 // numbering order to the extent possible. There's one big wrench 00617 // in the works, though, which is the limited number and discontiguous 00618 // placement of the KL25Z PWM-capable output pins. This prevents 00619 // us from doing the most obvious sequential ordering of the pins, 00620 // so we end up with the outputs arranged into several blocks. 00621 // Hopefully this isn't too confusing; for more detailed rationale, 00622 // read on... 00623 // 00624 // With the LED-Wiz, the host software configuration usually 00625 // assumes that each RGB LED is hooked up to three consecutive ports 00626 // (for the red, green, and blue components, which need to be 00627 // physically wired to separate outputs to allow each color to be 00628 // controlled independently). To facilitate this, we arrange the 00629 // PWM-enabled outputs so that they're grouped together in the 00630 // port numbering scheme. Unfortunately, these outputs aren't 00631 // together in a single group in the physical pin layout, so to 00632 // group them logically in the LED-Wiz port numbering scheme, we 00633 // have to break up the overall numbering scheme into several blocks. 00634 // So our port numbering goes sequentially down each column of 00635 // header pins, but there are several break points where we have 00636 // to interrupt the obvious sequence to keep the PWM pins grouped 00637 // logically. 00638 // 00639 // In the list below, "pin J1-2" refers to pin 2 on header J1 on 00640 // the KL25Z, using the standard pin numbering in the KL25Z 00641 // documentation - this is the physical pin that the port controls. 00642 // "LW port 1" means LED-Wiz port 1 - this is the LED-Wiz port 00643 // number that you use on the PC side (in the DirectOutput config 00644 // file, for example) to address the port. PWM-capable ports are 00645 // marked as such - we group the PWM-capable ports into the first 00646 // 10 LED-Wiz port numbers. 00647 // 00648 // If you wish to reallocate a pin in the array below to some other 00649 // use, such as a button input port, simply change the pin name in 00650 // the entry to NC (for Not Connected). This will disable the given 00651 // logical LedWiz port number and free up the physical pin. 00652 // 00653 // If you wish to reallocate a pin currently assigned to the button 00654 // input array, simply change the entry for the pin in the buttonMap[] 00655 // array above to NC (for "not connected"), and plug the pin name into 00656 // a slot of your choice in the array below. 00657 // 00658 // Note: Don't assign PTD1 (pin J2-12) as an LedWiz output. That pin 00659 // is hard-wired on the KL25Z to the on-board indicator LED's blue segment, 00660 // which pretty precludes other uses of the pin. 00661 // 00662 // ACTIVE-LOW PORTS: By default, when a logical port is turned on in 00663 // the software, we set the physical GPIO voltage to "high" (3.3V), and 00664 // set it "low" (0V) when the logical port is off. This is the right 00665 // scheme for the booster circuit described in the build guide. Some 00666 // third-party booster circuits want the opposite voltage scheme, where 00667 // logical "on" is represented by 0V on the port and logical "off" is 00668 // represented by 3.3V. If you're using an "active low" booster like 00669 // that, set the PORT_ACTIVE_LOW flag in the array below for each 00670 // affected port. 00671 // 00672 // TLC5940 PORTS: To assign an LedWiz output port number to a particular 00673 // output on a TLC5940, set the port type to TLC_PORT and set the 'pin' 00674 // value to the index of the output port in the daisy chain. The first 00675 // chip in the daisy chain has ports 1-16, the second has ports 17-32, 00676 // and so on. 00677 // 00678 // 74HC595 PORTS: To assign an LedWiz output port to a 74HC595 port, 00679 // set the port type to HC595_PORT and set 'pin' to the index of the port 00680 // in the daisy chain. The first chip has ports 1-8, the second has 00681 // 9-16, etc. 00682 // 00683 00684 // ledWizPortMap 'typ' values 00685 enum LWPortType { 00686 NO_PORT = -1, // Not connected 00687 DIG_GPIO = 0, // DigitalOut I/O pin (not PWM capable) 00688 PWM_GPIO = 1, // AnalogOut I/O pin (PWM capable) 00689 TLC_PORT = 2, // TLC5940 output port 00690 HC595_PORT = 3 // 74HC595 output port 00691 }; 00692 00693 // flags - combine with '|' 00694 const int PORT_ACTIVE_LOW = 0x0001; // use LOW voltage (0V) when port is ON 00695 00696 struct { 00697 int pin; // Pin name/index - PinName for GPIO, pin index for TLC5940 or 74HC595 00698 LWPortType typ; // type of pin 00699 int flags; // flags - a combination of PORT_xxx flag bits (see above) 00700 } ledWizPortMap[] = { 00701 00702 #if TLC5940_NCHIPS == 0 00703 00704 // *** BASIC MODE - GPIO OUTPUTS ONLY *** 00705 // This is the basic mapping, using entirely GPIO pins, for when you're 00706 // not using external TLC5940 chips. We provide 22 physical outputs, 10 00707 // of which are PWM capable. 00708 // 00709 // Important! Note that the "isPWM" setting isn't just something we get to 00710 // choose. It's a feature of the KL25Z hardware. Some pins are PWM capable 00711 // and some aren't, and there's nothing we can do about that in the software. 00712 // Refer to the KL25Z manual or schematics for the possible connections. Note 00713 // that there are other PWM-capable pins besides the 10 shown below, BUT they 00714 // all share TPM channels with the pins below. For example, TPM 2.0 can be 00715 // connected to PTA1, PTB2, PTB18, PTE22 - but only one at a time. So if you 00716 // want to use PTB2 as a PWM out, it means you CAN'T use PTA1 as a PWM out. 00717 // We commented each PWM pin with its hardware channel number to help you keep 00718 // track of available channels if you do need to rearrange any of these pins. 00719 00720 { PTA1, PWM_GPIO }, // pin J1-2, LW port 1 (PWM capable - TPM 2.0 = channel 9) 00721 { PTA2, PWM_GPIO }, // pin J1-4, LW port 2 (PWM capable - TPM 2.1 = channel 10) 00722 { PTD4, PWM_GPIO }, // pin J1-6, LW port 3 (PWM capable - TPM 0.4 = channel 5) 00723 { PTA12, PWM_GPIO }, // pin J1-8, LW port 4 (PWM capable - TPM 1.0 = channel 7) 00724 { PTA4, PWM_GPIO }, // pin J1-10, LW port 5 (PWM capable - TPM 0.1 = channel 2) 00725 { PTA5, PWM_GPIO }, // pin J1-12, LW port 6 (PWM capable - TPM 0.2 = channel 3) 00726 { PTA13, PWM_GPIO }, // pin J2-2, LW port 7 (PWM capable - TPM 1.1 = channel 13) 00727 { PTD5, PWM_GPIO }, // pin J2-4, LW port 8 (PWM capable - TPM 0.5 = channel 6) 00728 { PTD0, PWM_GPIO }, // pin J2-6, LW port 9 (PWM capable - TPM 0.0 = channel 1) 00729 { PTD3, PWM_GPIO }, // pin J2-10, LW port 10 (PWM capable - TPM 0.3 = channel 4) 00730 { PTD2, DIG_GPIO }, // pin J2-8, LW port 11 00731 { PTC8, DIG_GPIO }, // pin J1-14, LW port 12 00732 { PTC9, DIG_GPIO }, // pin J1-16, LW port 13 00733 { PTC7, DIG_GPIO }, // pin J1-1, LW port 14 00734 { PTC0, DIG_GPIO }, // pin J1-3, LW port 15 00735 { PTC3, DIG_GPIO }, // pin J1-5, LW port 16 00736 { PTC4, DIG_GPIO }, // pin J1-7, LW port 17 00737 { PTC5, DIG_GPIO }, // pin J1-9, LW port 18 00738 { PTC6, DIG_GPIO }, // pin J1-11, LW port 19 00739 { PTC10, DIG_GPIO }, // pin J1-13, LW port 20 00740 { PTC11, DIG_GPIO }, // pin J1-15, LW port 21 00741 { PTE0, DIG_GPIO }, // pin J2-18, LW port 22 00742 { NC, NO_PORT }, // Not connected, LW port 23 00743 { NC, NO_PORT }, // Not connected, LW port 24 00744 { NC, NO_PORT }, // Not connected, LW port 25 00745 { NC, NO_PORT }, // Not connected, LW port 26 00746 { NC, NO_PORT }, // Not connected, LW port 27 00747 { NC, NO_PORT }, // Not connected, LW port 28 00748 { NC, NO_PORT }, // Not connected, LW port 29 00749 { NC, NO_PORT }, // Not connected, LW port 30 00750 { NC, NO_PORT }, // Not connected, LW port 31 00751 { NC, NO_PORT } // Not connected, LW port 32 00752 00753 #elif defined(EXPANSION_BOARD) 00754 00755 // *** EXPANSION BOARD MODE *** 00756 // 00757 // This mapping is for the expansion board, which uses four TLC5940 00758 // chips to provide 64 outputs. The expansion board also uses 00759 // one GPIO pin to provide a digital (non-PWM) output dedicated to 00760 // the knocker circuit. That's on a digital pin because it's used 00761 // to trigger an external timer circuit that limits the amount of 00762 // time that the knocker coil can be continuously energized, to protect 00763 // it against software faults on the PC that leave the port stuck on. 00764 // (The knocker coil is unique among standard virtual cabinet output 00765 // devices in this respect - it's the only device in common use that 00766 // can be damaged if left on for too long. Other devices won't be 00767 // damaged, so they don't require such elaborate precautions.) 00768 // 00769 // The specific device assignments in the last column are just 00770 // recommendations. You can assign any port to any device with 00771 // compatible power needs. The "General Purpose" ports are good to 00772 // at least 5A, so you can use these for virtually anything; put 00773 // your heavy-duty devices, such as solenoids and motors, on these 00774 // outputs. You can also put lighter loads like lamps and LEDs 00775 // on these if you have ports left over after connecting all of 00776 // your high-power devices. The "Flasher" and "Button light" ports 00777 // are good to about 1.5A, so they work for medium loads like lamps, 00778 // flashers, high-power LEDs, etc. The flipper and magnasave ports 00779 // only provide 20mA; use these only for small LEDs. 00780 // 00781 // The TLC5940 outputs on the expansion board are hard-wired to 00782 // specific output drivers - that's what determines the power 00783 // limits described above. You can rearrange the ports in the 00784 // list below to change the LedWiz port numbering to any order 00785 // you prefer, but the association between a TLC5940 port number 00786 // and the output circuit type can't be changed in the software. 00787 // That's a function of how the TLC5940 port is physically wired 00788 // on the board. Likewise, the PTC8 output is hard-wired to the 00789 // knocker time limiter. 00790 // TLC ports 1-20 and 44-47 = Darlington outputs, 1.5A max 00791 // TLC ports 21-44 = MOSFET outputs (limit depends on MOSFET chosen) 00792 // TLC ports 49-64 = direct outputs, limited to 20mA 00793 00794 // The first 32 ports are LedWiz-compatible, so they're universally 00795 // accessible, even to older non-DOF software. Attach the most common 00796 // devices to these ports. 00797 { 1, TLC_PORT }, // TLC port 1, LW output 1 - Flasher 1 R 00798 { 2, TLC_PORT }, // TLC port 2, LW output 2 - Flasher 1 G 00799 { 3, TLC_PORT }, // TLC port 3, LW output 3 - Flasher 1 B 00800 { 4, TLC_PORT }, // TLC port 4, LW output 4 - Flasher 2 R 00801 { 5, TLC_PORT }, // TLC port 5, LW output 5 - Flasher 2 G 00802 { 6, TLC_PORT }, // TLC port 6, LW output 6 - Flasher 2 B 00803 { 7, TLC_PORT }, // TLC port 7, LW output 7 - Flasher 3 R 00804 { 8, TLC_PORT }, // TLC port 8, LW output 8 - Flasher 3 G 00805 { 9, TLC_PORT }, // TLC port 9, LW output 9 - Flasher 3 B 00806 { 10, TLC_PORT }, // TLC port 10, LW output 10 - Flasher 4 R 00807 { 11, TLC_PORT }, // TLC port 11, LW output 11 - Flasher 4 G 00808 { 12, TLC_PORT }, // TLC port 12, LW output 12 - Flasher 4 B 00809 { 13, TLC_PORT }, // TLC port 13, LW output 13 - Flasher 5 R 00810 { 14, TLC_PORT }, // TLC port 14, LW output 14 - Flasher 5 G 00811 { 15, TLC_PORT }, // TLC port 15, LW output 15 - Flasher 5 B 00812 { 16, TLC_PORT }, // TLC port 16, LW output 16 - Strobe/Button light 00813 { 17, TLC_PORT }, // TLC port 17, LW output 17 - Button light 1 00814 { 18, TLC_PORT }, // TLC port 18, LW output 18 - Button light 2 00815 { 19, TLC_PORT }, // TLC port 19, LW output 19 - Button light 3 00816 { 20, TLC_PORT }, // TLC port 20, LW output 20 - Button light 4 00817 { PTC8, DIG_GPIO }, // PTC8, LW output 21 - Replay Knocker 00818 { 21, TLC_PORT }, // TLC port 21, LW output 22 - Contactor 1/General purpose 00819 { 22, TLC_PORT }, // TLC port 22, LW output 23 - Contactor 2/General purpose 00820 { 23, TLC_PORT }, // TLC port 23, LW output 24 - Contactor 3/General purpose 00821 { 24, TLC_PORT }, // TLC port 24, LW output 25 - Contactor 4/General purpose 00822 { 25, TLC_PORT }, // TLC port 25, LW output 26 - Contactor 5/General purpose 00823 { 26, TLC_PORT }, // TLC port 26, LW output 27 - Contactor 6/General purpose 00824 { 27, TLC_PORT }, // TLC port 27, LW output 28 - Contactor 7/General purpose 00825 { 28, TLC_PORT }, // TLC port 28, LW output 29 - Contactor 8/General purpose 00826 { 29, TLC_PORT }, // TLC port 29, LW output 30 - Contactor 9/General purpose 00827 { 30, TLC_PORT }, // TLC port 30, LW output 31 - Contactor 10/General purpose 00828 { 31, TLC_PORT }, // TLC port 31, LW output 32 - Shaker Motor/General purpose 00829 00830 // Ports 33+ are accessible only to DOF-based software. Older LedWiz-only 00831 // software on the can't access these. Attach less common devices to these ports. 00832 { 32, TLC_PORT }, // TLC port 32, LW output 33 - Gear Motor/General purpose 00833 { 33, TLC_PORT }, // TLC port 33, LW output 34 - Fan/General purpose 00834 { 34, TLC_PORT }, // TLC port 34, LW output 35 - Beacon/General purpose 00835 { 35, TLC_PORT }, // TLC port 35, LW output 36 - Undercab RGB R/General purpose 00836 { 36, TLC_PORT }, // TLC port 36, LW output 37 - Undercab RGB G/General purpose 00837 { 37, TLC_PORT }, // TLC port 37, LW output 38 - Undercab RGB B/General purpose 00838 { 38, TLC_PORT }, // TLC port 38, LW output 39 - Bell/General purpose 00839 { 39, TLC_PORT }, // TLC port 39, LW output 40 - Chime 1/General purpose 00840 { 40, TLC_PORT }, // TLC port 40, LW output 41 - Chime 2/General purpose 00841 { 41, TLC_PORT }, // TLC port 41, LW output 42 - Chime 3/General purpose 00842 { 42, TLC_PORT }, // TLC port 42, LW output 43 - General purpose 00843 { 43, TLC_PORT }, // TLC port 43, LW output 44 - General purpose 00844 { 44, TLC_PORT }, // TLC port 44, LW output 45 - Button light 5 00845 { 45, TLC_PORT }, // TLC port 45, LW output 46 - Button light 6 00846 { 46, TLC_PORT }, // TLC port 46, LW output 47 - Button light 7 00847 { 47, TLC_PORT }, // TLC port 47, LW output 48 - Button light 8 00848 { 49, TLC_PORT }, // TLC port 49, LW output 49 - Flipper button RGB left R 00849 { 50, TLC_PORT }, // TLC port 50, LW output 50 - Flipper button RGB left G 00850 { 51, TLC_PORT }, // TLC port 51, LW output 51 - Flipper button RGB left B 00851 { 52, TLC_PORT }, // TLC port 52, LW output 52 - Flipper button RGB right R 00852 { 53, TLC_PORT }, // TLC port 53, LW output 53 - Flipper button RGB right G 00853 { 54, TLC_PORT }, // TLC port 54, LW output 54 - Flipper button RGB right B 00854 { 55, TLC_PORT }, // TLC port 55, LW output 55 - MagnaSave button RGB left R 00855 { 56, TLC_PORT }, // TLC port 56, LW output 56 - MagnaSave button RGB left G 00856 { 57, TLC_PORT }, // TLC port 57, LW output 57 - MagnaSave button RGB left B 00857 { 58, TLC_PORT }, // TLC port 58, LW output 58 - MagnaSave button RGB right R 00858 { 59, TLC_PORT }, // TLC port 59, LW output 59 - MagnaSave button RGB right G 00859 { 60, TLC_PORT }, // TLC port 60, LW output 60 - MagnaSave button RGB right B 00860 { 61, TLC_PORT }, // TLC port 61, LW output 61 - Extra RGB LED R 00861 { 62, TLC_PORT }, // TLC port 62, LW output 62 - Extra RGB LED G 00862 { 63, TLC_PORT }, // TLC port 63, LW output 63 - Extra RGB LED B 00863 { 64, TLC_PORT } // TLC port 64, LW output 64 - Extra single LED 00864 00865 #else 00866 00867 // *** TLC5940 + GPIO OUTPUTS, Without the expansion board *** 00868 // 00869 // This is the mapping for the ehnanced mode, with one or more TLC5940 00870 // chips connected. Each TLC5940 chip provides 16 PWM channels. We 00871 // can supplement the TLC5940 outputs with GPIO pins to get even more 00872 // physical outputs. 00873 // 00874 // Because we've already declared the number of TLC5940 chips earlier 00875 // in this file, we don't actually have to map out all of the TLC5940 00876 // ports here. The software will automatically assign all of the 00877 // TLC5940 ports that aren't explicitly mentioned here to the next 00878 // available LedWiz port numbers after the end of this array, assigning 00879 // them sequentially in TLC5940 port order. 00880 // 00881 // In contrast to the basic mode arrangement, we're putting all of the 00882 // NON PWM ports first in this mapping. The logic is that all of the 00883 // TLC5940 ports are PWM-capable, and they'll all at the end of the list 00884 // here, so by putting the PWM GPIO pins last here, we'll keep all of the 00885 // PWM ports grouped in the final mapping. 00886 // 00887 // Note that the TLC5940 control wiring takes away several GPIO pins 00888 // that we used as output ports in the basic mode. Further, because the 00889 // TLC5940 makes ports so plentiful, we're intentionally omitting several 00890 // more of the pins from the basic set, to make them available for other 00891 // uses. To keep things more neatly grouped, we're only assigning J1 pins 00892 // in this set. This leaves the following ports from the basic mode output 00893 // set available for other users: PTA13, PTD0, PTD2, PTD3, PTD5, PTE0. 00894 00895 { PTC8, DIG_GPIO }, // pin J1-14, LW port 1 00896 { PTC9, DIG_GPIO }, // pin J1-16, LW port 2 00897 { PTC0, DIG_GPIO }, // pin J1-3, LW port 3 00898 { PTC3, DIG_GPIO }, // pin J1-5, LW port 4 00899 { PTC4, DIG_GPIO }, // pin J1-7, LW port 5 00900 { PTC11, DIG_GPIO }, // pin J1-15, LW port 6 00901 { PTA2, PWM_GPIO }, // pin J1-4, LW port 7 (PWM capable - TPM 2.1 = channel 10) 00902 { PTD4, PWM_GPIO }, // pin J1-6, LW port 8 (PWM capable - TPM 0.4 = channel 5) 00903 { PTA12, PWM_GPIO }, // pin J1-8, LW port 9 (PWM capable - TPM 1.0 = channel 7) 00904 { PTA4, PWM_GPIO }, // pin J1-10, LW port 10 (PWM capable - TPM 0.1 = channel 2) 00905 { PTA5, PWM_GPIO } // pin J1-12, LW port 11 (PWM capable - TPM 0.2 = channel 3) 00906 00907 // TLC5940 ports start here! 00908 // First chip port 0 -> LW port 12 00909 // First chip port 1 -> LW port 13 00910 // ... etc, filling out all chip ports sequentially ... 00911 00912 #endif // TLC5940_NCHIPS 00913 }; 00914 00915 00916 #endif // DECL_EXTERNS
Generated on Fri Jul 15 2022 08:43:32 by 1.7.2