|
|
View previous topic :: View next topic |
Author |
Message |
jamesjl
Joined: 22 Sep 2003 Posts: 52 Location: UK
|
my PIC18F4525 won't work!!! |
Posted: Fri Apr 08, 2005 5:13 am |
|
|
Hi all,
PIC 18F4525 and PIC16F874A
PCWH 3.222
I have replaced a PIC16F874A with a PIC18F4525, but I can't program it.
I notice that the PGM pin has moved from pin 11 on the 874A to pin 15 on the 4525. I have move this on my development PCB but still the chip won't program. When I program the PIC the programmer pops up the verification results box with all addresses as FF, and not what was expected.
I even created a demo app from scratch to make sure that the fuses were set up correctly.
Code: |
#include <18F4525.h>
#device adc=8
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, PUT, CPD, STVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, NOPBADEN, LPT1OSC, MCLR
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=RS485,enable=PIN_C5,errors)
|
and
Code: |
#include "Demo.h"
#int_TIMER0
TIMER0_isr()
{
}
#int_TIMER1
TIMER1_isr()
{
}
#int_TIMER2
TIMER2_isr()
{
}
#int_TIMER3
TIMER3_isr()
{
}
#int_RDA
RDA_isr()
{
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_4,16,1);
setup_timer_3(T3_INTERNAL|T3_DIV_BY_4);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
/*
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER2);
enable_interrupts(INT_TIMER3);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
*/
while(TRUE)
{
output_high(PIN_D0);
delay_ms(100);
output_low(PIN_D0);
delay_ms(100);
}
}
|
I disabled the interrupts so that they won't fire as I have no ISR code for this demo.
Does anyone have and ideas what could be going wrong?
Thanks,
Jason. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Apr 08, 2005 6:25 am |
|
|
Well, you have NOLVP specified in your fuses so most likely you are not using the PGM pin. It is for low programming mode. The fact that you said it is on pin 15 makes me wonder though. It is on pin 15 of the QFN and TQFP packages and not on the 40 dip. That being said, if you soldered this chip yourself, I would check all those connections. |
|
|
jamesjl
Joined: 22 Sep 2003 Posts: 52 Location: UK
|
|
Posted: Fri Apr 08, 2005 6:34 am |
|
|
Mark,
I've built three units with the 18F4525 now and none of them work. I have tried numerous configuration settings and each time I get nothing. As you can see I have dropped the OSC down to 4MHz to see if that made a difference. I have even tried the internal OSC. Still nothing. The oscillator is not running once the programming has been completed.
I've checked the soldering and device orientation and they all seem to be OK. I am using the TQFP device and have moved the PGM from my 16F874A pin 11 to pin 15 of my 18F4525.
Any other thoughts? I thought that this would be an easier route than developing a new PCB for an 18F6620!!
Thanks,
Jason. |
|
|
jamesjl
Joined: 22 Sep 2003 Posts: 52 Location: UK
|
|
Posted: Fri Apr 08, 2005 6:36 am |
|
|
When dropping to the 4MHz crystal I changed to the XT option in #fuses, not HS.
Code: | #include <18F4525.h>
#device adc=8
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, PUT, CPD, STVREN, NODEBUG, LVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, NOPBADEN, LPT1OSC, MCLR
#use delay(clock=4000000)
|
Thanks,
Jason. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Apr 08, 2005 6:57 am |
|
|
The OSC doesn't matter for programming. It doesn't even matter what you are really even programming in there if the verification fails. Yeah, the code might not run but it should verify. All you need to successfully program the chip are the following connections: Vpp, PGD,PGC,Both of the VDD's and VSS's. |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Fri Apr 08, 2005 7:23 am |
|
|
I do agree with Mark. Your problem is not in the software you are trying to program but is hardware or programmer related.
Which programmer do you use?
If using the ICD2, which version of MPLAB are you using?
If using the ICD2, are you trying to program with the ICD2 in debugger or in programmer mode? ICD2 debugger support for the 18F4525 is still Beta in MPLAB v7.00, so try if it works in programmer mode. |
|
|
jamesjl
Joined: 22 Sep 2003 Posts: 52 Location: UK
|
|
Posted: Fri Apr 08, 2005 7:38 am |
|
|
Gents,
Got it working but don't really understand why. Please can you help.
Code: | #include <18F4525.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128, XT, NOPROTECT, PUT, NOLVP ,MCLR, IESO, BROWNOUT, BORV21, DEBUG, NOCPD
|
works great
Code: | #include <18F4525.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128, XT, NOPROTECT, PUT, LVP ,MCLR, IESO, BROWNOUT, BORV21, DEBUG, NOCPD
|
does work at all. And my main program is only:
Code: | #include "Demo.h"
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(TRUE)
{
output_D(0xFF);
delay_ms(100);
output_D(0x00);
delay_ms(100);
}
while(TRUE);
}
|
The only difference seems to be between LVP and NOLVP. Why can't I use the low voltage programming option. I don't need to, but what is the difference?
Kind regards,
Jason.
P.S. Where can I find exactly what the other fuses do? |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Apr 08, 2005 7:40 am |
|
|
Depends on what you are doing with the LVP pin. If it is unused for anything else, it should be okay. If there is a signal on it, this will put the device into programming mode and your code will not work.
What was the problem keeping the device from programming correctly? |
|
|
jamesjl
Joined: 22 Sep 2003 Posts: 52 Location: UK
|
|
Posted: Fri Apr 08, 2005 8:13 am |
|
|
Mark,
that was the only porblem. Pin RB5 is not being used for anything else. I am using the ICD-U40 with the latest firmware installed. When I changed the #fuses line everything worked OK. When I changed it back to LVP it failed.
It's a mystery.
Many thanks,
Jason. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Apr 08, 2005 8:17 am |
|
|
Your orginal post stated you were using NOLVP and got verification errors?? So are you now saying that this is incorrect? Are you saying that you don't get any verification errors now but the code works with NOLVP but not with LVP? |
|
|
jamesjl
Joined: 22 Sep 2003 Posts: 52 Location: UK
|
|
Posted: Fri Apr 08, 2005 8:46 am |
|
|
Mark,
actually yes, you are correct. It's amazing how quickly you forget stuff when things start working right . I also upgraded my ICD to the latest version. That may have stopped the verification errors.
I created a new project using the wizard and didn't get any verification errors when I programmed the device, and I haven't modified my hardware at all. Only a firmware upgrade on the programmer.
However, with the fuses set as
Code: | #fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, STVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, NOPBADEN, LPT1OSC, MCLR
|
I get a period of 32.8us with a 4MHz clock, not 200 ms as set by
Code: | while(true)
{
output_d(0xff);
delay_ms(100);
output_d(0x00);
delay_ms(100);
}
|
which works correctly get when I use
Code: | #fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, STVREN, NODEBUG, NOLVP |
Any thoughts?
Many thanks,
Jason. |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Fri Apr 08, 2005 9:58 am |
|
|
Quote: | P.S. Where can I find exactly what the other fuses do? | Check the file fuses.txt in your compiler directory. More details on the fuses can be found in your processor manual, most options in the chapter "Special Functions of the CPU". |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|