Copy/paste your whole code and inc file so we can see everything.
Copy/paste your whole code and inc file so we can see everything.
Dave
Always wear safety glasses while programming.
Hi mackrackit
Here it is.
To be clear I have removed the PIC from it's PCB and stuck it on a breadboard and just programmed it with these 10 lines of code. I have programmed it both with MPASM and PM with line in inc file restored.
None of the pins are connected apart from LED on PORTA.0 which flashes. Do that on RA4 or RA% and nothing. I get a nice square wave at 1Mhz on RA4 and a sawtooth on RA5. Logic tells me I am not programming an I/O on RA4/RA5 but can't see why. Maybe there is something obvious that I keep overlooking - just too tired or too stupid. Hope you find it!!
Code cut & pasted
INC FileCode:@__CONFIG _INTOSCIO & _WDT_ON & _MCLRE_OFF & _CP_OFF ANSEL = $00 CMCON0 = 7 OSCCON = $60 TRISA = $00 TRISC = $00 Start: TOGGLE PORTA.0 PAUSE 250 goto start
regardsCode:NOLIST ifdef PM_USED LIST include 'M16F684.INC' ; PM header device pic16F684, intrc_osc_noclkout, wdt_on, mclr_on, protect_off XALL NOLIST else LIST LIST p = 16F684, r = dec, w = -302 INCLUDE "P16F684.INC" ; MPASM Header ;__config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF NOLIST endif LIST
Adrian
Wow that is strange. I don't have a 16F684, but this works as expected on a 16F688.
Try the attached .hex file. It's the same code - but compiled for your 684.Code:@ __CONFIG _INTOSCIO & _WDT_ON & _MCLRE_OFF & _CP_OFF ANSEL = $00 OSCCON = %01100000 CMCON0 = 7 TRISA = 0 TRISC = 0 Main: PORTA = %00010000 PAUSE 500 PORTA = %00100000 PAUSE 500 GOTO Main END
If it doesn't work, try reading it back from the chip and verifying the config settings.
Sounds to me like your programmer isn't using the config settings embedded in the .hex.
Note: If your device programmer isn't programming the config regs, then that would explain
what you're seeing. The default clock would be external RC with clock out on OSC2.
The funky signal you're seeing on OSC1 is the internal clock drive assuming an RC oscillator
circuit is on OSC1.
The 1MHz signal on OSC2 is the internal oscillator output. It defaults to internal osc since
your external RC oscillator circuit isn't there. Controller thinks it has failed, defaults to
internal 4MHz, and still outputs clock/4 on OSC2.
Last edited by Bruce; - 8th November 2008 at 19:20.
Thanks Bruce
I'll try that tomorrow morning. Just jumping into a bath for a night on the town..!! Well not quite on the town.... at my age its more sedate but I'll have a go tomorrow and let you know. Thanks to you all
Adrian
Hi Bruce
Problem solved!
Your download produced the same symptoms as my programme, but when I read it back it certainly didn't show INTOSCIO - from memory it might have been INTRC also MCLR was ON. Obviously not picking up the correct config settings as you suspected.
I had a lucky flash of inspiration and in Microcode went to Options||More Options and pressed Set Options to Defaults.
Immediately all came good and the PIC programmed perfectly.
So thank you (and thanks to the others) for your help and I can get back to my PCB testing.
I have no idea why my Microcode would not be locked solid onto its defaults. Maybe I hit something by mistake. Also would you know what parameter stopped this from programming correctly?
Useful to remember to check in future and would save 24 hours of hair tearing......
Regards
Adrian
I think you may be confusing MicroCode Studio editor with your programmers software.
I'm sure you selected something like meProg software Options, More Options, then
Set Options to Defaults..., which reset programmer options. It most likely was not
loading & using config settings embedded in your .HEX file.
If you comment out all config options in your code, compile, then program, you'll see that
all config options are at the default unprogrammed settings. This leaves /MCLR ON, sets
the oscillator to external RC with clock out on OSC2, and produces exactly the same
scenario you were seeing.
I duplicated it exactly by doing the same thing here. Somewhere along the line you had
changed your programmer settings to not use config settings in your .HEX file - or not
program them.
Check the attached graphic. I commented out the config statement in the example above,
compiled, and launched the programmer. Check the config settings.
The PIC is still going to run because there is no external RC clock, it assumes the external
osc has failed, and switches over to the default internal 4MHz osc, and keeps going.
But now you have Fosc/4 out on OSC2, and a ping signal on OSC1, which is the internal
driver ping to tickle the external RC osc, which you don't have...;o}
Check the diagram in the datasheet under RC OSCILLATOR MODE for a drawing of what's
going on with these two pins when this osc mode is selected.
Last edited by Bruce; - 9th November 2008 at 15:21.
Yes thanks Bruce. Slip of the tongue between Editor & Programmer. It was the Programmer I set back to default options. I guess I must have jiggered one of the default settings which as you say stopped it loading and using the embedded settings.
Thanks for explanation of clock settings on the 16F684. I have looked up the datasheet and see exactly what you mean.
It's a long and slippery road but a great learning curve..........
Regards
Adrian
Bookmarks