Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Pic controlled channel change and led & 7 segment display 0-99

Status
Not open for further replies.
HI all, can you tell me what the dimensions of the SPDIP28 are and if there is a socket made for them, I can't find a sensible answer other than the pin pitch is 70 mils. Data sheet says the 16F886 is made in PDIP and SPDIP is not mentioned but the ones that Farnell has are PIC16F886-I/SP which is a shrunk plastic DIP with 70 mil pin spacing but the row can be a a number of different spacings and no one I can find is specific about it , it just mentions them as being a variation of a DIP. If they can be programmed the same as the 16F87x I will order them and wait and see what comes and then make an adapter board to a standard 28 pin dip so as to be able to work with them initially.
Regards, Don....
 
HI all, can you tell me what the dimensions of the SPDIP28 are and if there is a socket made for them, I can't find a sensible answer other than the pin pitch is 70 mils. Data sheet says the 16F886 is made in PDIP and SPDIP is not mentioned but the ones that Farnell has are PIC16F886-I/SP which is a shrunk plastic DIP with 70 mil pin spacing but the row can be a a number of different spacings and no one I can find is specific about it , it just mentions them as being a variation of a DIP. If they can be programmed the same as the 16F87x I will order them and wait and see what comes and then make an adapter board to a standard 28 pin dip so as to be able to work with them initially.
Regards, Don....
Check the "product identification system" page (second last of the datasheet rev F). SP is "skinny plastic" DIP, and not shrunk PDIP. The acronym terminology varies between manufacturers. I would think that SPDIP in this case would be the same old 0.3" wide DIP with 0.1" pin spacing that their other uCs use.
 
Thanks dougy, well they are ordered , should have them tomorrow. When I googled for SP all came up for shrink plastic DIP but after reading your comments I googled skinny dip and another can of worms opened but as you pointed out the Data sheet actually says skinny dip,I'll find out tomorrow.
Many thanks, Don....
 
Hi Don,

Let us know when you're ready to try burning a "test" program into one of those 16F886-I/SP chips? We (forum members) can provide you with a few simple assembler or C source and hex files to try out.

Can I assume you have a regulated 5v power supply and a solderless breadboard or something similar to test circuits? Also, if you have the dual-digit 7-segment display already, what type is it, common cathode or common anode?

Regards, Mike
 
Hi Mike, the chips should arrive tomorrow late morning along with some sockets. The display is common cathode as normally used with 4511 drivers, don't have solderless breadboard but have a new sheet of strip board, p/s no problem and on investigation, my programmer is based on the original COM84 style programmer and only uses ICSP mode and is controlled by the WinPic program on a serial port on this PC. I have downloaded and printed out MPLAB 2009 version and also printed the 16F886 data sheet. So I think I should be ready to try something by tomorrow afternoon about 12 hours from now Hi. Just as a point of interest my switch is listed by ALPS as a pulse switch, it gives 12 pulses per rev in each direction and they are mechanical switches so will need debouncing I would think.

Regards, Don....
 
Hi Don,

I had a little time and threw together a quick C program for your application using the free/lite version of BoostC which I hope the other Forum members might check (for mistakes).

I could also do an assembly language version if you'd like to study that.

More later. Regards...

Code:
/********************************************************************
 *                                                                  *
 *  Project: Channel Selector                                       *
 *   Source: Channel_Selector_v1.c                                  *
 *   Author: Mike McLaren, K8LH                                     *
 *     Date: 16-Feb-10                                              *
 *  Revised: 16-Feb-10                                              *
 *                                                                  *
 *  OEM 16F886 2-Digit 01-99 Channel Selector                       *
 *                                                                  *
 *                                                                  *
 *      IDE: MPLAB 8.14 (tabs = 4)                                  *
 *     Lang: SourceBoost BoostC v6.95, Lite/Free version            *
 *                                                                  *
 *                                                                  *
 ********************************************************************/

#include <system.h>

#pragma DATA _CONFIG1, _LVP_OFF & _MCLRE_OFF & _WDT_OFF & _INTOSCIO
#pragma DATA _CONFIG2, _BOR40V

//--< function prototypes >------------------------------------------
//--< typedef and defines >------------------------------------------

typedef unsigned char u08;
typedef unsigned int u16;

#define r08 const rom unsigned char

#define upswitch flags.7        // debounced "up" switch flag
#define dnswitch flags.6        // debounced "dn" switch flag
#define polarity flags.0        // eprom "polarity" jumper

//--< variables >----------------------------------------------------

u08 swnew = 0;                  // switch sample var'
u08 swold = 0;                  // switch state latch
u08 flags = 0;                  // switch press flags

u08 channel = 1;                // packed BCD channel, 0x01..0x99

r08 segdata[] = { 0b00111111,   // "0"   -|-|F|E|D|C|B|A
                  0b00000110,   // "1"   -|-|-|-|-|C|B|-
                  0b01011011,   // "2"   -|G|-|E|D|-|B|A
                  0b01001111,   // "3"   -|G|-|-|D|C|B|A
                  0b01100110,   // "4"   -|G|F|-|-|C|B|-
                  0b01101101,   // "5"   -|G|F|-|D|C|-|A
                  0b01111101,   // "6"   -|G|F|E|D|C|-|A
                  0b00000111,   // "7"   -|-|-|-|-|C|B|A
                  0b01111111,   // "8"   -|G|F|E|D|C|B|A
                  0b01101111 }; // "9"   -|G|F|-|D|C|B|A


//--< main >---------------------------------------------------------

void main()
{
  ansel = 0;                    // ANS0..ANS7 ADC inputs off
  anselh = 0;                   // ANS8..ANS13 ADC inputs off
  osccon = 0b01110000;          // set INTOSC to 8 MHz
  while(!osccon.HTS);           // wait 'til oscillator stable
  trisc = 0b00000000;           // set all PORTC pins to outputs
  trisb = 0b00000000;           // set all PORTB pins to outputs
  trisa = 0b11000001;           // RA7, RA6, and RA1 = inputs
  porta = 0b00000000;           // set all output latches to '0'
  portb = 0b00000000;           // set all output latches to '0'
  porta = 0b00000000;           // set all output latches to '0'

//  setup Timer 2 for 8 msec interrupts (8 MHz clock)

  tmr2 = 0;                     // clear Timer 2 register
  t2con = 0b00011110;           // '0-------' unimplemented bit
                                // '-0011---' TOUTPS<3:0>, postscale 4
                                // '-----1--' TMR2ON, turn Timer 2 on
                                // '------10' T2CKPS<1:0>, prescale 16
  pr2 = 250-1;                  // 250 x 32-usec 'ticks' = 8 msecs
  pir1 = 0;                     // clear peripheral interrupt flags
  pie1.TMR2IE = 1;              // set Timer 2 interrupt enable bit
  intcon = 0b11000000;          // '1-------' GIE, enable global ints
                                // '-1------' PEIE, enable peripheral ints
                                // '--0-----' T0IE, TMR0 ints disabled
                                // '---0----' INTE, off
                                // '----0---' GPIE, IOC disabled
                                // '-----000' T0IF/INTF/GPIF flags

//  main program loop

  while(1)
  { if(upswitch)                // if "up" switch pulse
    { upswitch = 0;             // clear the switch flag and
      if(channel < 0x99)        //   if less than upper limit 0x99
      { asm                     //     do packed BCD increment
        { movf  _channel,W      ;
          addlw 7               ; bcd increment + bcd adjust
          btfss _status,DC      ; adjust required, yes, skip, else
          addlw 0xFA            ; undo adjust (add -6)
          movwf _channel        ; update "channel" var'
        }                       //
      }                         //
    }
    if(dnswitch)                // if "dn" switch pulse
    { dnswitch = 0;             //   clear the switch flag and
      if(channel > 0x01)        //   if greater than lower limit 0x01
      { asm                     //     do packed BCD decrement
        { movf  _channel,W      ;
          addlw 0xFF            ; bcd decrement
          btfss _status,DC      ; bcd adjust required? no, skip, else
          addlw 0xFA            ; do bcd adjust (add -6)
          movwf _channel        ; update "channel" var'
        }                       //
      }                         //
    }
    if(polarity)                // if polarity jumper off (hi)
      portc = channel;          //   normal eprom address data
    else                        // if polarity jumper on (lo)
      portc = ~channel;         //   invert eprom address data
  }
}

/********************************************************************
 *  ISR - refresh display and switch flags (62.5 Hz refresh rate)   *
 ********************************************************************/

void interrupt()                // 8-msec timer 2 interrupts
{ u08 index;                    // isr work variable
  pir1.TMR2IF = 0;              // clear timer 2 interrupt flag
  portb &= 0x80;                // blank the display
  portb ^= 0x80;                // toggle digit select pin (RB7)
  if(portb.7)                   // if 'tens' digit selected
    index = channel >> 4;       //   use upper nybble as index
  else                          // if 'ones' digit selected
    index = channel & 15;       //   use lower nybble as index
  portb |= segdata[index];      // display new digit

  swnew = ~porta;               // sample active low switches
  swnew &= 0b11000001;          // on RA7, RA6, and RA0 pins
  swnew ^= swold;               // changes, hi or lo
  swold ^= swnew;               // update switch state latch
  swnew &= swold;               // filter out "new lo" bits
  flags |= swnew;               // save "new hi" flag bits
}
 
Last edited:
Hi Mike, chips have arrived and all other bits OK. Need a recommendation for what I should try to learn to program in, I have no programming knowledge and no formal digital training. Everyone is giving me many options but as I know nothing it is an impossibility to make any decision, it needs to be the easiest thing for an old brain! , I realise it wont be a 5 minute exersize but I have to learn something, and with a little help I hope I can do it. Is the circuit you posted the one the program is based on with pullup/downs 4k7 and 470R for segment limiting. What do I do with pin 1? MCLR. How do I print the whole listing out to be able to look at all of it at the same time, or can't I, or is it a limitation of the Forum. I can scroll through it but my eyes go crosseyed trying to do it off the screen. I have MPLAB 8.43 is that compatible with what you use? I have a lot of reading to do, I don't even know where to start.
Enough for now,
Regards, Don....
 
Last edited:
Need a recommendation for what I should try to learn to program in
BASIC is in my opinion one of the easiest languages for a beginner; it is very close to written english. I prefer C/C++, and Mike has supplied you with a complete program in C, so you can use that straight away.

What do I do with pin 1? MCLR.
It requires a pullup to VCC if the _MCLRE_OFF is specified in the config (which it is); alternately you can change _MCLRE_OFF to _MCLRE_ON in the code - then you can leave the pin floating (i.e. you don't connect anything to it).

How do I print the whole listing out to be able to look at all of it at the same time, or can't I, or is it a limitation of the Forum. I can scroll through it but my eyes go crosseyed trying to do it off the screen.
Just copy it and paste it in your favourite editor, or use the file I've attached. View attachment mikes_program..pdf

I have MPLAB 8.43 is that compatible with what you use? I have a lot of reading to do, I don't even know where to start.
You need to download the BoostC compiler from SourceBoost Technologies
 
Hi dougy, many thanks I have just bought the BoostC C compiler (Lite) for AUD5.87 and will download it shortly and have printed out the listing thank you. Now I need to find out what to do with it (I am completely ignorant of all this) from what you say that is the complete program. What comes next?, by the way is MS Word an acceptable editor? or is there a better suggestion.
What do I do with the program now to produce the HEX file for the programmer, by the way dougy do you know the Silicon chip programmer May 2008 version, runs WinPic.
My head hasn't stopped spinning since I posted that first post, I have gone through a ream of paper printing things out. Now it must be getting near to crunch time. Then if it works I want know how and why.
Back a bit later,
Regards Don...
 
Don, that's a complete program for the schematic I posted but it may contain bugs or errors and so I was hoping some of the guys might take a look at it. The MCLR pin doesn't need a pull-up resistor since the fuses are set with the MCLR function (reset function) turned "off".

I will post the hex file when I get home. Wifee and I are currently at the airport (Canton/Plymouth Mettetal, 1D2) opening up the FBO for the days operations (wifee and I are private pilots and wifee is FBO manager).

Not sure what to recommend for learning about programming. Different folks learn different ways. I actually learned a lot by studying other PIC program examples, good and bad (lol). Your particular application is relatively simple and could be done hundreds of different ways. I'd love to see some of the other guys contribute their versions of the same application which I always enjoy studying.

More later. Regards, Mike
 
Last edited:
I have just bought the BoostC C compiler (Lite) for AUD5.87
i.e. you paid money for it? I thought it was a free download. You must be loaded.

Now I need to find out what to do with it (I am completely ignorant of all this) from what you say that is the complete program. What comes next?, by the way is MS Word an acceptable editor? or is there a better suggestion.
I think the package you are about to download contains the compiler as well as the IDE (the editor). I've never used it, but you'll probably have to create a new project and paste the code into a source file that's part of the project. You'll have to set up the processor type (pic16f886) from some menu. Then click on make, or build or compile.. I'd suggest reading the manual. If you have any problems, I can have a quick geeze at the manual or someone who knows what they're talking about will certainly help. And No, word is not a good editor for this.

Don, that's a complete program for the schematic I posted but it may contain bugs or errors and so I was hoping some of the guys might take a look at it.
What, and do your work for you?
I didn't notice anything at first glance. I did think that the use of inline assembler is unnecessary though (esp. re readability for a beginner).

The MCLR pin doesn't need a pull-up resistor since the fuses are set with the MCLR function (reset function) turned "off".
I understood that differently. In the datasheet it states that the pullup is disabled if the pin is not configured as MCLR. So then you'd have to enable MCLR to have an internal pullup and not require the external one.
 
Hi Don,

I use the BoostC compiler from within the MPLAB IDE (just because I like that IDE).

Anyway, here's the "hex" file for that example BoostC program (remove the ".txt" file name extension).

Mike
 

Attachments

  • Channel Selector..txt
    928 bytes · Views: 262
Programming Failed

HI Mike, I tried to program the 16F886 and it came back with an error and failed. I will paste a copy of the programmer output message, I hope this works.

Info: Loading definitions for "PIC16F886" from C:\Program Files\WinPic\devices.ini .
Info: PIC16F886 uses a similar algorithm like 16F81x not 16F87xA!!!
Info: Added 2008-05-01 by Ivan D.
Parsed "C:\Program Files\Microchip\MPLAB IDE\Device\PIC16F886.dev" : found 36 bit combinations in 13 configuration bit groups .
Initialising PIC-Programmer: Success.
Testing: delay(500ms) took 0.50 seconds, timer_freq=3000.0500 MHz ... ok
Initialising PIC-Programmer: Success.
Programming...
Erasing ("bulk" or "chip") ...
EraseAll: Device is not protected, using BULK erase
Programming CODE, 0x000000..0x00009A
Verifying 0x000000..0x00009A
Problem: Buffer contains more CONFIG MEMORY WORDS (9) than exist in device (8) .
Programming CONFIG, 0x002000..0x002007
Verifying 0x002000..0x002007
Verify Error: 002007: read 0023D4, wanted 002FD4
Programming CONFIG-WORD
Verifying 0x002007..0x002007
ERROR: Programming FAILED !

It did , new things all the time, amazing.
I hope its not my fault but you will know what if any thing I have done wrong.
Regards, Don....
 
Hi Don,

Could there be a problem connecting the '886 to your programmer? Or, a programmer and/or software problem?

I just burned the program into an '886 here using my melabs serial programmer and it worked fine.

Regards, Mike
 
Hi Mike, Well I just checked again and it worked, the only thing I did was to make sure it was seated in the socket in the programmer and it gave no indication of moving so I removed it and refitted it and it worked and programmed with no errors. In the programmer messages it still shows the Buffer problem but it comes back with programmed with no errors, so I will get the breadbord setup tomorrow and see what happens. When it failed earlier and I tried a few times and came up with the problem I thought it best to stop there and ask. Is that buffer problem really a problem or what does it mean?
CUL Don....
 
Last edited:
A few of the newer 16F' devices have two config' words where almost all of the previous 16F' devices have just a single config' word. That message makes me think that your programming software is older and doesn't know how to handle the extra config' word. It shouldn't hurt us if the second config' word isn't getting programmed though (the default brown-out-reset voltage fuse setting should be fine).

Now that I have a programmed 16F866 I'm wondering if I can find time to breadboard the circuit here too (lol).

Regards, Mike
 
Last edited:
I did think that the use of inline assembler is unnecessary though (esp. re readability for a beginner).

Doug,

You're absolutely right, especially since I used a high-level language which includes math functions in libraries. Sometimes I get stuck in &quot;assmebler mode&quot; (lol).

Here's a slightly different version that uses a decimal &quot;channel&quot; variable which might make more sense to newcomers.

Regards, Mike

Code:
/********************************************************************
 *                                                                  *
 *  Project: Channel Selector                                       *
 *   Source: Channel_Selector_v2.c                                  *
 *   Author: Mike McLaren, K8LH                                     *
 *     Date: 16-Feb-10                                              *
 *  Revised: 16-Feb-10                                              *
 *                                                                  *
 *  OEM 16F886 2-Digit 01-99 Channel Selector                       *
 *                                                                  *
 *                                                                  *
 *      IDE: MPLAB 8.14 (tabs = 4)                                  *
 *     Lang: SourceBoost BoostC v6.95, Lite/Free version            *
 *                                                                  *
 *                                                                  *
 ********************************************************************/

#include <system.h>

#pragma DATA _CONFIG1, _LVP_OFF & _MCLRE_OFF & _WDT_OFF & _INTOSCIO
#pragma DATA _CONFIG2, _BOR40V

//--< function prototypes >------------------------------------------
//--< typedef and defines >------------------------------------------

typedef unsigned char u08;
typedef unsigned int u16;

#define r08 const rom unsigned char

#define upswitch flags.7        // debounced 'up' switch flag
#define dnswitch flags.6        // debounced 'dn' switch flag
#define polarity flags.0        // eprom 'polarity' jumper

//--< variables >----------------------------------------------------

u08 swnew = 0;                  // switch sample var'
u08 swold = 0;                  // switch state latch
u08 flags = 0;                  // switch press flags

u08 tens;                       // channel 'tens'
u08 ones;                       // channel 'ones'
u08 pbcd;                       // packed bcd eprom address
u08 channel = 1;                // channel, 01..99

r08 segdata[] = { 0b00111111,   // &quot;0&quot;   -|-|F|E|D|C|B|A
                  0b00000110,   // '1'   -|-|-|-|-|C|B|-
                  0b01011011,   // '2'   -|G|-|E|D|-|B|A
                  0b01001111,   // '3'   -|G|-|-|D|C|B|A
                  0b01100110,   // '4'   -|G|F|-|-|C|B|-
                  0b01101101,   // '5'  -|G|F|-|D|C|-|A
                  0b01111101,   // '6'   -|G|F|E|D|C|-|A
                  0b00000111,   // '7'   -|-|-|-|-|C|B|A
                  0b01111111,   // '8'   -|G|F|E|D|C|B|A
                  0b01101111 }; // '9'  -|G|F|-|D|C|B|A


//--< main >---------------------------------------------------------

void main()
{
  ansel = 0;                    // ANS0..ANS7 ADC inputs off
  anselh = 0;                   // ANS8..ANS13 ADC inputs off
  osccon = 0b01110000;          // set INTOSC to 8 MHz
  while(!osccon.HTS);           // wait 'til oscillator stable
  trisc = 0b00000000;           // set all PORTC pins to outputs
  trisb = 0b00000000;           // set all PORTB pins to outputs
  trisa = 0b11000001;           // RA7, RA6, and RA1 = inputs
  porta = 0b00000000;           // set all output latches to '0'
  portb = 0b00000000;           // set all output latches to '0'
  porta = 0b00000000;           // set all output latches to '0'

//  setup Timer 2 for 8 msec interrupts (8 MHz clock)

  tmr2 = 0;                     // clear Timer 2 register
  t2con = 0b00011110;           // '0-------' unimplemented bit
                                // '-0011---' TOUTPS<3:0>, postscale 4
                                // '-----1--' TMR2ON, turn Timer 2 on
                                // '------10' T2CKPS<1:0>, prescale 16
  pr2 = 250-1;                  // 250 x 32-usec 'ticks' = 8 msecs
  pir1 = 0;                     // clear peripheral interrupt flags
  pie1.TMR2IE = 1;              // set Timer 2 interrupt enable bit
  intcon = 0b11000000;          // '1-------' GIE, enable global ints
                                // '-1------' PEIE, enable peripheral ints
                                // '--0-----' T0IE, TMR0 ints disabled
                                // '---0----' INTE, off
                                // '----0---' GPIE, IOC disabled
                                // '-----000' T0IF/INTF/GPIF flags

//  main program loop

  while(1)
  { if(upswitch)                // if 'up' switch pulse
    { upswitch = 0;             //   clear the switch flag and
      if(channel < 99)          //   if less than upper limit 99
        channel++;              //     increment &quot;channel&quot;
    }
    if(dnswitch)                // if 'dn' switch pulse
    { dnswitch = 0;             //   clear the switch flag and
      if(channel > 1)           //   if greater than lower limit 01
        channel--;              //     decrement &quot;channel&quot;
    }

    tens = channel / 10;        // channel 'tens'
    ones = channel % 10);       // channel 'ones'
    pbcd = tens * 16 + ones;    // packed BCD eprom address

    if(polarity)                // if polarity jumper off (hi)
      portc = pbcd;             //   normal eprom address data
    else                        // if polarity jumper on (lo)
      portc = ~pbcd;            //   invert eprom address data
  }
}

/********************************************************************
 *  ISR - refresh display and switch flags (62.5 Hz refresh rate)   *
 ********************************************************************/

void interrupt()                // 8-msec timer 2 interrupts
{ u08 index;                    // isr work variable
  pir1.TMR2IF = 0;              // clear timer 2 interrupt flag
  portb &= 0x80;                // blank the display
  portb ^= 0x80;                // toggle digit select pin (RB7)
  if(portb.7)                   // if 'tens' digit selected
    index = tens;               //   use &quot;tens&quot; index
  else                          // if 'ones' digit selected
    index = ones;               //   use &quot;ones&quot; index
  portb |= segdata[index];      // display new digit

  swnew = ~porta;               // sample active low switches
  swnew &= 0b11000001;          // on RA7, RA6, and RA0 pins
  swnew ^= swold;               // changes, hi or lo
  swold ^= swnew;               // update switch state latch
  swnew &= swold;               // filter out 'new lo' bits
  flags |= swnew;               // save 'new hi' flag bits
}
 
Last edited:
"it works"

Hi Mike, It works like a dream after I fixed a couple of blunders in my construction. I hate using wire wrap wire as hookup wire as it is hard to strip and breaks easily if its nicked, but all is well. I have hung a couple of TIL308's on the BCD outputs and it follows fine. I got tied up 70k from home yesterday and didn't get anything done except before I left I ordered a PICkit 2 from Farnell (Newark in the US) as I have built 2 PIC programmers now, and the same problem crops up after a couple of years or less that they become unsupported and you waste so much time. So now I will have a fighting chance that it will last as long as MICROLAB and will always be updated by the people who make the chips, there were a lot of clones available but the pricing to get them here was more than the Microlab one. I am commited now to learn more and have accumulated about a 1000 pages of info about programming in asmb and C for base and mid level PIC's. I have a couple of things extra that I would like the channel change to do and there are enough inputs left to do it.
Well its 2AM here at the moment and its 31 Degrees c in the house so I best try and get some sleep, it wont be easy with this heat.
My greatest thanks to you for all your help it wouldn't have happened without it, talk again soon.
Regards,
Don....... VK3YV
 
Hi Don, VK3YV,

That's great news! I'm happy to hear you've got it up-n'-runnin' and the PICkit2 should be a good investment for you.

That #30 AWG Kynar wire-wrap wire works extremely well for point-to-point prototype board wiring but you absolutely must have the little stripping tool. I've been using the little stripper that comes inside of the $10 (USD) Radio Shack Wire-Wrap tool for years now and it still strips the wires flawlessly with no nicks.

What other features are you thinking of for those transceivers?

Regards (--... ...--), Mike, K8LH
 
Dreaming

Hi Mike, the additional things will be the addition of a switch to select repeater or reverse on channels 1 - 8.
The way the EPROM is programmed is simplex channels 1 through 40, duplex (repeater) 51 through 58 and reverse repeater 61 through 68.
My thinking is to use a SPDT center off switch to select, Simplex =off, duplex one way and the other way for reverse, and to be active low. This to add 50 or 60 Decimal to the BCD output. The 7 segment display to not change from 1 - 8 just the addition of the appropriate Decimal number to the BCD output.
Also show MSD decimal point for Duplex and LSD decimal point for reverse.
This facility only to work on channels 1 - 8 outside this range to remain simplex the switch to be ignored.
At the moment I just change to 51 - 58 or 61 - 68.
Dreams---
Leading "0" to be blanked.
Next - if possible to roll around from 99 to zero and zero to 99.
I am possibly dreaming here but I have been just so impressed with what can be done! Its fine for some one else to dream something up and you build it , but to be able to do the dreaming yourself and produce it, is amazing, I have not looked at it this way before it just looked too hard.
Now to look at laying the board out, I will have to sweep a few cobwebs out, I haven't used AUTOTRAX for a while.
I bought a copy of the boostC lite, for $6 it was worth it not worry about time expiry etc. and it helps keep people producing affordable software for hobby use. More to learn!!!
Again many thanks,
73's Don... VK3YV
 
Status
Not open for further replies.

New Articles From Microcontroller Tips

Back
Top