|
|
View previous topic :: View next topic |
Author |
Message |
Guest
|
16F677 not running? I'm using an ICD2 |
Posted: Tue Dec 12, 2006 3:43 pm |
|
|
Hello All,
I'm using a PIC 16F677 in circuit.
I'm using CCS version 4.005
I'm using an ICD2 with MPLAB 7.41 to program the chip.
MPLAB claims that I am actually programming the chip and can read the data back and identified the device properly.
However,
All I want to do is turn on an LED or turn it off with just test code.
Here is the code:
This is the .h file:
#include <16F677.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES MCLR //Master Clear pin enabled
#FUSES NOCPD //No EE protection
#FUSES NOPUT //No Power Up Timer
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#use delay(clock=4000000)
//#use i2c(Slave,Slow,sda=PIN_B4,scl=PIN_B6,address=0x)
//#use fixed_io(a_outputs=PIN_A0)
//#use fixed_io(c_outputs=PIN_C0, PIN_C1, PIN_C2, PIN_C7)
This is the .c file:
#include "C:\PSUFIRMW\Decemberrestart\davedec.h"
#include <stdio.h>
#include <string.h>
void main(void) //initialization
{
setup_adc_ports(sAN1|sAN2|sAN8|sAN11|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
//enable_interrupts(INT_AD);
//enable_interrupts(INT_SSP);
//enable_interrupts(GLOBAL);
setup_oscillator(FALSE);
while(1) //main program loop
{
output_low(PIN_C2);
output_low(PIN_C1);
output_low(PIN_C0);
}
}
please note that I have 3x 5V to a 330ohm resistor to an LED anode, then that LED's cathode connected in series to each PIN C1 individually.
In otherwords: the LEDs are active low and should get 15ma through them when turned on.
please note that i have remarked a few lines as I was just trying different things to get this to work properly.
When I put a multimeter on C0, C1 or C2, I read 3.7VDC which I think means the pins are tri-stated or something.
the PIC is getting 5V on the VDD pin.
I have a separate brown out circuit for the MCLR pin: its reading 5V on the MCLR pin when my board is powered on.
Also, MPLAB's own configuration bits:
Address 2007
Value 3CF1
Oscillator XT
Watchdog Timer Off
Powerup Timer Off
Master Clear Enable External
Code Protect Off
Data EE Read Protect Off
Brown Out Detect BOD and SBOREN disabled
Internal External Switch Over Mode enabled
Monitor Clock Fail-safe enabled |
|
|
Guest
|
i posted teh above code |
Posted: Tue Dec 12, 2006 3:44 pm |
|
|
The 2 blank includes are actually:
#include <stdio.h>
#include <string.h>
for some reason the stdio and string didn't paste over, but are actually there. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 12, 2006 4:02 pm |
|
|
You're using an early version of the vs. 4 compiler. So it's possible
that the analog pins that you're using (C0, C1, C2) are not being
properly setup as digital pins.
To test this idea, try moving your LEDs to some pure digitial pins
such as C5, C6, C7.
-------
The reason your #include files didn't show up, is because you had
HTML enabled when you made your post. You have to disable
with a checkbox below the posting window. It looks like this:
Quote: | x Disable HTML in this post |
If you're a registered user (and you log in), the forum software
will remember this setting. |
|
|
Guest
|
Thanks! |
Posted: Tue Dec 12, 2006 4:26 pm |
|
|
Hello,
Thanks for the reply,
I also have an LED on Port C5, a purely digital output connected in the same way and it still doesn't light up.
I have a 4MHz crystal connected very close to pins 2 and 3 and have 22pF capacitors from ground to pin2 and pin3.
If you had to write a quick program to turn on an active LOW LED, what would you write? |
|
|
Ttelmah Guest
|
|
Posted: Tue Dec 12, 2006 5:02 pm |
|
|
You _may_ be running into the RMW PIC problem. When you do an individual pin output, the voltage on the other pins is read, this result is modified with the extra bit you are setting/resetting, and the resulting value is output on the port. Now you output a 'low', and then only one instruction latter, output another 'low'. If the first pin has not actually dropped to the 'low' input voltage by this point, it'll be read as a 'high', and the first low will be lost. This could then repeat for each of the subsequent outputs, and back round the loop, resulting in all the pins ending up high.
Try outputting a whole byte, or adding a short delay after each bit output.
Best Wishes |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 12, 2006 5:04 pm |
|
|
Quote: |
If you had to write a quick program to turn on an active LOW LED,
what would you write ?
|
Try the program shown below, which will blink an LED on Pin C5.
Make sure you have a pull-up resistor on the MCLR pin. If you're using
the CCS ICD-U40, use 47K. If you have the Microchip ICD2, use 10K.
Code: |
#include <16F677.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT
#use delay(clock=4000000)
void main()
{
while(1)
{
output_low(PIN_C5);
delay_ms(500);
output_high(PIN_C5);
delay_ms(500);
}
} |
|
|
|
Guest
|
Hello Guys |
Posted: Fri Dec 15, 2006 8:51 am |
|
|
Thank you both very much for caring enough to help me.
My problem was pilot error: I was using the MPLAB CCS Plugin, compiling with CCS to look for code errors:
HOWEVER I FORGOT TO CLICK COMPILE IN MPLAB!!! Yeah... everything works ok now, but I appreciate your help.
Perhaps a simple walkthrough with screenshot captures for setting up MPLAB + CCS + a demo board would be good to have posted as a Forum Sticky.
Thanks again guys! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
|
|
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
|