Need 4 modes with just 3 switches - need all modes to be selectable QUICKLY!


Results 1 to 40 of 68

Threaded View

  1. #14
    Join Date
    Aug 2005
    Location
    Michigan, USA
    Posts
    224


    Did you find this post helpful? Yes | No

    Default

    Oh my! Some pretty nasty self-imposed restrictions there Hank'.

    There are smaller switches (see below, just left of the machined socket). And if you think about it, that tri-color LED actually has four states (off, red, green, and yellow).

    Good luck on your project.

    ** added **

    Someone just wrote to ask about the driver for that mux'd switch & LED drawing so I'll add it here if nobody minds. And sorry for the C code (I don't have PBP)...

    The routine sets the four pins to inputs to read the switches. Standard 'parallel' switch state logic filters out all but a "new press" state while ignoring the other three states (for each switch). 1-of-N logic (only 1 mode on at any time) dictates that we save the "new press" pattern as the new "mode". Since a pressed switch could short out a pin that is set to output '1' we cannot turn off the inactive LEDs by outputting a '1' and so we leave those pins tri-stated (RC3..RC0 output latch bits are maintained at '0').

    Code:
     /*                                                                 *
      *  isr debounce & switch state management (1-of-N switch logic)   *
      *  using 8 to 32 msec interrupt intervals                         *
      *                                                                 *
      *  swnew  ____---____-----___    new switch sample                *
      *  swold  _____---____-----__    switch state latch               *
      *  delta  ____-__-___-____-__    changes, press or release        *
      *  newhi  ____-______-_______    filter out new release bits      *
      *                                                                 */
      trisc |= 0x0F;                // set RC3..RC0 to inputs
      swnew = ~portc;               // sample active lo switches
      swnew &= 0x0F;                // on RC3..RC0 pins
      swnew ^= swold;               // changes, press or release
      swold ^= swnew;               // update switch state latch
      swnew &= swold;               // filter out new release bits
      if(swnew)                     // if "new press"
        mode = swnew;               // save 1000,0100,0010, or 0001
      trisc ^= mode;                // light the correct mode LED
    Attached Images Attached Images  
    Last edited by Mike, K8LH; - 6th August 2010 at 15:29.

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts