View previous topic :: View next topic |
Author |
Message |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Apr 13, 2006 11:03 am |
|
|
Before you do anything else, disable the Low Voltage Programming mode.
Add the parameter shown in bold below.
Quote: | #fuses HS,NOWDT,NOPROTECT, NOLVP |
There are three very important "essentials" that you should do
in every CCS program.
1. Add NOLVP to the #fuses statement.
This prevents the PIC from locking up if you take the PGM pin high.
The PGM pin is typically pin B3 or B5. This assumes that your PIC
supports LVP mode and has a PGM pin - not all of them do.
2. Add ERRORS to your #uses rs232() statement.
This prevents the UART from locking up if you get a receive
overrun error. This parameter only works with a hardware UART.
3. Add a while(1) statement at the end of main().
This prevents the program from executing a hidden SLEEP instruction
that the compiler inserts at the end of main(). If that instruction
is executed, the PIC will stop running. Any characters that were
hardware UART's transmit buffer will not be sent. |
|
|
JimB
Joined: 25 Aug 2005 Posts: 65 Location: Huntington Beach, CA
|
|
Posted: Thu Apr 13, 2006 11:30 am |
|
|
Since I am running this project from 3V, don't I need to exclude that fuse?
Pin B3 is devoted only to programming and the MCLR pin is isolated with a resistor and a Schotky diode.
I have had some problems with the computer's USB port going to the ICD and have had to remove the cable and let it re-initialize.
Jim |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Apr 13, 2006 11:36 am |
|
|
1. Are you using a Low Voltage Programmer ?
If not, then you need the NOLVP fuse.
2. Are you using the "LF" version of the 16F877A ?
You need to use that version if you're running at 3 volts.
3. Is the diode in series with the MCLR resistor ?
You don't need a diode, provided that you use a 10K resistor
on MCLR. (Use 47K with CCS ICD). |
|
|
JimB
Joined: 25 Aug 2005 Posts: 65 Location: Huntington Beach, CA
|
|
Posted: Thu Apr 13, 2006 12:49 pm |
|
|
I am using the CCS ICD-U40. The chip is the "LF" version. The diode is connected in series with the 47K resistor going to the MCLR* pin. I thought the diode would protect all of the other LV devices on the board.
I was assured by CCS that this programmer would interface with the 3V logic OK.
I have had some peculiar issues with the ICD. It always erases the EEPROM on the 3V board, even though the setting is for no erase but it works OK on the 5V development board. Depending on whether or not I run ICD from within the CCS compiler, under the "tools" menu and when I run it from the ICD shortcut in the Start, Programs" menus in WinXP. I sometimes get different results. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Apr 13, 2006 1:17 pm |
|
|
Quote: | I am using the CCS ICD-U40 |
The ICDU40 is a high voltage programmer. Therefore, you should
use the NOLVP fuse setting.
Quote: |
The diode is connected in series with the 47K resistor going to the MCLR*
pin. I thought the diode would protect all of the other LV devices on the
board. |
Assuming that the circuit has Vdd (+3v in your case) applied to it
while the Vpp is applied, the diode shouldn't be necessary.
With a 47K resistor, you'll have +13v on one side, and +3v on the other.
That's a 10v drop across the resistor. The current through it is 10v/47K
which is 0.2 ma. The voltage regulator on the Vdd side will easily be
able to maintain regulation of the +3v, even though 0.2ma is being
sourced into the Vdd supply through the resistor.
The only way there would be a problem is if Vpp were turned on
without the target board being powered. But I don't think that
ever happens.
Go to this CCS page and scroll down to the circuit diagram.
They don't show a diode.
http://www.ccsinfo.com/faq.php?page=icd_connection
If you use a diode, you block the path for any positive ESD voltage
to bleed off into the Vdd power supply. If you use a silicon diode
(instead of a Schottky), then you reduce the margin of the MCLR
voltage above the spec'ed minimum Vih value. |
|
|
JimB
Joined: 25 Aug 2005 Posts: 65 Location: Huntington Beach, CA
|
Up and running except for.......... |
Posted: Sat Apr 15, 2006 1:54 pm |
|
|
Questions?
First of all thanks again for the help.
1. Could you expand on your comment about using "error" in the #use RS232(debugger) line. Could not find any reference to this.
2. Should one be able to interchange the SHIFT_LEFT and ROTATE_LEFT, i.e.
output_bit(maxdat, shift_left(&vref,2,0));
output_bit(maxdat, rotate_left(&vref,2));
I am not having success with rotate_left function.
3. If vref, in 2 above, is only an int8, would one use a 1 or a 2 if there are 16 shifts and vref needs to be the MSB? The compiler manual implies that a 1 is the correct answer. I changed vref to int16 for it to work properly but would like to keep it at int8. Less code required when reading from the eeprom.
4. When running from the development board (+5V) the debugger monitor works pretty good. (Just little glitches now and then.) But when operating with the real hardware (+3V) there is no response on the monitor nor does the "No erase the eeprom" work correctly. Have searched for help with this on this board and the CCSC website with no results. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Apr 16, 2006 3:58 pm |
|
|
Quote: | 1. Could you expand on your comment about using "error" in the #use RS232(debugger) line. Could not find any reference to this. | It doesn't apply to the debugger output.
Quote: | I am not having success with rotate_left function.
If vref, in 2 above, is only an int8, would one use a 1 or a 2 if there
are 16 shifts and vref needs to be the MSB? The compiler manual
implies that a 1 is the correct answer.
|
An int8 only has 8 bits. If you do more than 7 shift-left operations,
you will shift all bits out of the int8 variable. The variable would then
become 0 (Assuming the "shift in" value is specified as 0).
If this answer doesn't help, then post a very small but complete test
program that shows the problem. Post all variable declarations.
Quote: | When running from the development board (+5V) the debugger monitor works pretty good. (Just little glitches now and then.) But when operating with the real hardware (+3V) there is no response on the monitor |
I don't have the CCS ICD so I can't really help. My advice is to search
the Programmer/Debugger forum for hints. If that doesn't work, then
call CCS support on the telephone (instead of emailing them). |
|
|
|