Page 1 of 12

Device configuration

PostPosted: Wed Jul 16, 2014 12:36 pm
by Dimebag
Is it best practice to set all of a devices pins as input/output or, just set the pins needed for the target devices application?

Re: Device configuration

PostPosted: Wed Jul 16, 2014 1:10 pm
by Tom Maier
It's best to set unused pins for output.

Electromagnetic waves fill the environment and when they hit a conductor, it induces a current in the material. An input is high impedance (high resistance). This very tiny current oscillating across the high resistance creates a significant voltage, which can cause the input pin to oscillate. A low impedance (low resistance) output pin experiences the same current flow, but since voltage is equal to current flow times resistance, the resulting voltage is very low, so it causes no problem.

So the same electromagnetic field that can cause a 3 volt oscillation on an input pin would only cause a few millvolts on an output pin.

The oscillation on the input pin might not disturb your program, but can cause large currents to flow in the oscillating logic gates of the pin, resulting in abnormally high current flow for the design. That high current flow could disturb the program if it got too high, or it could burn out the input pin.

Also, if you have an input pin with a high impedance circuit you can get the same effect. A circuit with 1 Megohm input impedance circuit attached to it could oscillate easily under the influences of the ambient electromagnetic exposure. So, high impedance circuits need to be treated as a possible source of trouble.

Re: Device configuration

PostPosted: Thu Jul 17, 2014 12:33 pm
by Tom Maier
Well, speak of the devil...

Microchip just made a new appnote about dealing with electromagnetic interference in analog input circuits...

http://www.microchip.com/stellent/idcpl ... e=en570565

Re: Device configuration

PostPosted: Thu Jul 17, 2014 2:47 pm
by Dimebag
Thank you very much Tom.
I asked the question about device configurations (18F452@ 20osc) due to the application problem I am going to face head on. I plan on creating a code that controls 8 servo motors "Radio Controlled Robotics application" My main concern at this stage is the choice of Pulse Width Modulation timer modules 1,2 operation as a baseline measurement.
I was also thinking of using a 555 timer circuit set to 0.1ms discharge and use interrupt change on pin after period expires. Any helpful hints please.

Re: Device configuration

PostPosted: Thu Jul 17, 2014 3:37 pm
by Tom Maier
The 555's may not be needed...

For slower speed timing requirements you can take one timer and make many independant virtual timers (call them "clocks"). The real timer interrupt ticks up (or down, whatever you like) a bunch of independant variables in every interrupt time.

Code: Select all
-------------------------------------------------
my_timer_interrupt()     //  0.1 msec, 400 instruction cycles @ 20 MHz
{
  // tick up all the clocks...
  clock1++;      // tick up clock 1
  clock2++;     // tick up vlock 2
// make more clocks!

  if (clock1 > 85)
  {
      // do some stuff that is not to long,
     // or set a flag for the main code to trigger off
      clock1 = 0;         // reset the clock
  }  // end clock1


  if(clock2 > 1200)
  {

  }

}  // end timer interrupt
---------------------------------------

Re: Device configuration

PostPosted: Thu Jul 17, 2014 3:49 pm
by Tom Maier
By the way, if you are planning something that will require a lot of intense timing requirements, it would be to your advantage to get off that old chip and go to a more advanced version that can run 32 MHz or more. It will give you a shorter instruction cycle and thus more "ticks" and instructions for you timing routines.

And if you plan on doing anything math intensive, get off the pic18 alltogether and move to the pic24 line of chips. The pic18 sucks at math besides just incrementing and decrementing. It is more of a bit-banger chip. The pic24 has true integer math architecture, so multiplys and divides run 30 times faster or more.

Re: Device configuration

PostPosted: Fri Jul 18, 2014 7:42 am
by Dimebag
At this stage I am going to stay with the 18F452 device until I feel comfortable with programming in C.

Re: Device configuration

PostPosted: Fri Jul 18, 2014 12:08 pm
by Dimebag
I can't see how many instruction cycles the device has carried out with this code. I did have breakpoints set on statement. for (f= 4000, f > 0; f--) and at pivit_2();
Complier: mplabx xc8
I need a little help please. I am just a bit lost at the moment with reading Google code sources. I found that a fair amount of code on Google need header files. I would like to write source code that work without making the situation worse.

Code: Select all
void pivit_2(void) {
    PORTB = 0x55;
}

//Statement covering the start up output and input pins of Device.

void main(void) {
    Initialization();

    while (1) { //running code goes inside this loop
        for (f = 4000; f > 0; f--);  //int f = 0;

        pivit_2();
        {
        }


    }
}

Re: Device configuration

PostPosted: Fri Jul 18, 2014 12:47 pm
by ric
Have you tried single stepping this code in the simulator, or looking at the generated assembly code?
I like to see how my C code is being interpreted. You quickly find things like the loop test "f != 0" is simpler/quicker than "f > 0".

Re: Device configuration

PostPosted: Fri Jul 18, 2014 1:47 pm
by Dimebag
Have you tried single stepping this code in the simulator
Yes
are you talking about the output file format?
project properties/XC8 global options: ELF/DWARF, COFF

I am trying to understand your reply ric. I am not sure what generated assembly code is.