CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

16F690 port problem & simple program
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

16F690 port problem & simple program
PostPosted: Tue Jan 25, 2011 1:50 pm     Reply with quote

I had a program that worked.
Long story short, I methodically stripped it down to where I cant even get the IO ports to work in the PICSIM, let alone in the circuit.
Ultimately, I want to control PIN_C6 high/low, and PIN_C4 tristate/low.
But I've gotten to the point I can't even turn on the IO pins in the sim.
I've re-re-re-read the datasheet and tried everything I could think of trying. (I know I reversed my AND/OR's, just want to see the outputs change.)

I know CCS did something cause I originally had a XMIT_ON_LOW_TO_HIGH in their header for the SPI, my latest upgrade didn't have that.

Can anyone tell me why I can't get the (TRIS-low) outputs to toggle in this simple program. I've tried CCS functions and tried writing directly to the registers as a final act of defiance or frustration (not sure which).

Code:
#include <16f690.h>
#device ADC=10

#fuses XT,BROWNOUT,NOWDT,PUT,MCLR,NOFCMEN,BROWNOUT_SW,NOIESO
#use delay(clock=4000000)

#Byte TRISC = 0x87
#Byte PORTC = 0x07

#define PIN_RESET    PIN_C4
#define PIN_CS       PIN_C6

//*** using FAST IO  instead ***
//#use fixed_io(a_outputs=PIN_A2)
//#use fixed_io(b_outputs=PIN_B4,PIN_B6,PIN_B7)
//#use fixed_io(c_outputs=PIN_C2,PIN_C4,PIN_C5,PIN_C6,PIN_C7)
//#use fast_io(all)
//#use STANDARD_IO(C)


/***************************************************************************/
/****************************** MAIN ***************************************/
void main()
{
   set_tris_c(0);   //0b00001011);
   setup_adc_ports(NO_ANALOGS);

   /**************************** MAIN LOOP *******************************/

   while(TRUE)
   {      

         /*** reset PD ***/
         PORTC |= 0b00010000;
   //      output_low(PIN_RESET);
         delay_uS(2);
   //      output_high(PIN_RESET);
         PORTC &= 0b11101111;
   //      output_float(PIN_RESET);
         
         PORTC = 0xFF;
         PORTC = 0;
         /*** pulse CS ***/
         PORTC |= 0b01000000;
   //      Output_Low(PIN_CS);
         delay_us(4);
         PORTC &= 0b10111111;      
   //      Output_High(PIN_CS);
   
   }
}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jan 25, 2011 2:59 pm     Reply with quote

Try a simple LED blinking program on your desired pins:
http://www.ccsinfo.com/forum/viewtopic.php?t=34785&start=3

If that doesn't work, post your compiler version. And post the simplified
test program (with only a few lines in main, not 10 lines).
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Tue Jan 25, 2011 3:45 pm     Reply with quote

I thought that WAS pretty simple.
Okay, here. I'm using PICSIM to watch the outputs cuz I am tired of loading it in my board and probing. (done it about 100 different ways).

CCS PCM C Compiler, Version 4.118, 93506982 25-Jan-11 16:39
mplab V 8.50

just step thru this and tell me why C6 refuses to go high.
Also, notice that setup_adc_ports(NO_ANALOGS); doesn't clear ANSEL.
Code:


#include <16f690.h>
#device ADC=10

#fuses XT,BROWNOUT,NOWDT,PUT,MCLR,NOFCMEN,BROWNOUT_SW,NOIESO
#use delay(clock=4000000)

#Byte TRISC = 0x87
#Byte PORTC = 0x07
#Byte ANSEL   = 0x11E
#define PIN_RESET    PIN_C4
#define PIN_CS       PIN_C6


/***************************************************************************/
/****************************** MAIN ***************************************/
void main()
{

   setup_adc_ports(NO_ANALOGS);
   ANSEL = 0;
   /**************************** MAIN LOOP *******************************/

   while(TRUE)
   {      
      output_low(PIN_RESET);
      output_high(PIN_RESET);
      output_Low(PIN_CS);
      output_High(PIN_CS);
      output_b(0xFF);
   }
}



and list:
Code:

CCS PCM C Compiler, Version 4.118, 93506982               25-Jan-11 16:39

               Filename: G:\JPD\Project Files\ENG051 Hoosier Transmitter Design\16F690\Eng051.lst

               ROM used: 50 words (1%)
                         Largest free fragment is 2048
               RAM used: 5 (2%) at main() level
                         5 (2%) worst case
               Stack:    0 locations

*
0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   004
0003:  NOP
.................... 
.................... 
.................... #include <16f690.h>
.................... //////// Standard Header file for the PIC16F690 device ////////////////
.................... #device PIC16F690
.................... #list
.................... 
.................... #device ADC=10
.................... 
.................... #fuses XT,BROWNOUT,NOWDT,PUT,MCLR,NOFCMEN,BROWNOUT_SW,NOIESO
.................... #use delay(clock=4000000)
.................... 
.................... #Byte TRISC = 0x87
.................... #Byte PORTC = 0x07
.................... #Byte ANSEL   = 0x11E
.................... #define PIN_RESET    PIN_C4
.................... #define PIN_CS       PIN_C6
.................... 
.................... //*** using FAST IO  instead ***
.................... //#use fixed_io(a_outputs=PIN_A2)
.................... //#use fixed_io(b_outputs=PIN_B4,PIN_B6,PIN_B7)
.................... //#use fixed_io(c_outputs=PIN_C2,PIN_C4,PIN_C5,PIN_C6,PIN_C7)
.................... //#use fast_io(all)
.................... //#use STANDARD_IO(C)
.................... 
.................... 
.................... /***************************************************************************/
.................... /****************************** MAIN ***************************************/
.................... void main()
.................... {
0004:  CLRF   04
0005:  BCF    03.7
0006:  MOVLW  1F
0007:  ANDWF  03,F
0008:  BSF    03.6
0009:  MOVF   1E,W
000A:  ANDLW  C0
000B:  MOVWF  1E
000C:  CLRF   19
000D:  CLRF   1A
000E:  BSF    03.5
000F:  CLRF   1E
0010:  BCF    03.5
0011:  CLRF   1B
0012:  BCF    03.6
0013:  BCF    0D.5
.................... 
....................    setup_adc_ports(NO_ANALOGS);
0014:  BSF    03.6
0015:  MOVF   1E,W
0016:  ANDLW  C0
0017:  MOVWF  1E
....................    ANSEL = 0;
0018:  CLRF   1E
....................    /**************************** MAIN LOOP *******************************/
.................... 
....................    while(TRUE)
....................    {      
....................       output_low(PIN_RESET);
0019:  BSF    03.5
001A:  BCF    03.6
001B:  BCF    07.4
001C:  BCF    03.5
001D:  BCF    07.4
....................       output_high(PIN_RESET);
001E:  BSF    03.5
001F:  BCF    07.4
0020:  BCF    03.5
0021:  BSF    07.4
....................       output_Low(PIN_CS);
0022:  BSF    03.5
0023:  BCF    07.6
0024:  BCF    03.5
0025:  BCF    07.6
....................       output_High(PIN_CS);
0026:  BSF    03.5
0027:  BCF    07.6
0028:  BCF    03.5
0029:  BSF    07.6
....................       output_b(0xFF);
002A:  BSF    03.5
002B:  CLRF   06
002C:  MOVLW  FF
002D:  BCF    03.5
002E:  MOVWF  06
....................    }
002F:  BSF    03.6
0030:  GOTO   019
.................... }
0031:  SLEEP

Configuration Fuses:
   Word  1: 31E1   XT NOWDT PUT MCLR NOPROTECT NOCPD BROWNOUT_SW NOIESO NOFCMEN

}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jan 25, 2011 4:03 pm     Reply with quote

I'm using the "low pin count" demo board that comes with the PicKit 2
to test your 16F690 program. That board doesn't have a crystal on it
so I changed the oscillator fuse from XT to INTRC_IO. I compiled it
with vs. 4.118 and it works. It toggles pin C6. On my oscilloscope
it goes high for 12us and then it goes low for 12us, continuously.
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Tue Jan 25, 2011 4:58 pm     Reply with quote

Well, I'm baffled.
I'll try it again in the morning.
If the problem can't be duplicated, maybe it won't be duplicated by me in the morning, either.

Thanks for the effort.
temtronic



Joined: 01 Jul 2010
Posts: 9224
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Jan 25, 2011 5:48 pm     Reply with quote

Pin shorted to ground ????
Ttelmah



Joined: 11 Mar 2010
Posts: 19504

View user's profile Send private message

PostPosted: Wed Jan 26, 2011 2:55 am     Reply with quote

Or oscillator not working, or MCLR not pulled up.
Try INTRC_IO, and if it starts working, you have found the problem.
Check the voltage on the MCLR pin. If it is not up near the 5v, again 'found reason'.

Best Wishes
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Wed Jan 26, 2011 8:10 am     Reply with quote

Hmmm...
I put the old (20MHz) xtal in the new board and read the program off of the old working board and loaded it...and it worked fine.

Then I recompiled the original program (after correcting the now missing define) and it...worked fine (still with the old 20MHz xtal).

I guess it's possible the board just doesn't like the shiney new 4MHz xtal, and that in the process I accidentally found some other bug to chase in PICSIM??

I'll scope out the xtal signals, although I'm not really sure what I'm looking for (overdriving?).
And then review my code again for changes needed for the new xtal. Maybe I missed something?
fuse to XT (also tried HS and INTOSC)
clock = 4000000
PWM registers adjusted
AD clock changed
SPI clock changed (but not really critical, would just run slower)
Timer2 adjusted (interrupt to blink LED)

That's really about all this little program uses.
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 6:39 am     Reply with quote

got a reply from CCS.
They sent me a corrected device & header file.

So I had:
wrong resistor value
bad pic (in 2 units, didn't expect that)
compiler bug

No wonder it was confusing.
temtronic



Joined: 01 Jul 2010
Posts: 9224
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 6:49 am     Reply with quote

It's nice to actually figure out WHAT was wrong! Far better than, 'mysteriously' it started to work right !!!
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 7:04 am     Reply with quote

roger that.

Now the next mystery:
It APPEARS that changing the xtal to 4mhz (and associated code) killed the PIC. I am going to switch back to the 20mhz and see if it comes back to life or not. I'm guessing not. I know that doesn't make sense.
will know this morning.

Like Sherlock Holmes once said:
When you rule out the logical explanations, whatever is left, no matter how illogical, must be the truth! (or something like that)
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 7:51 am     Reply with quote

using the new device & header files from CCS has caused my "simple" program that wasn't working in PICSIM to WORK in PICSIM!

PCMProgrammer, why did it work for you? Maybe you had the updated support files already?
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 12:25 pm     Reply with quote

No pic problems.
It was an illusion caused by the compiler bugs.
It had somehow caused my SPI data to update on the opposite clk edge,
and caused one of my IO lines to behave strangely.

Add to that the unexpected change of crystal and the wrong resistor in the feedback circuit...

works fine now.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 1:36 pm     Reply with quote

Quote:
PCMProgrammer, why did it work for you

I have the PCM command line compiler, vs. 4.118, downloaded on Jan 22, 2011.
I did a fresh install just now. I took your source code from this post
http://www.ccsinfo.com/forum/viewtopic.php?t=44550&start=2
and pasted it into a MPLAB 16F690 project. I changed only one thing.
I changed the oscillator fuse to INTRC_IO. I compiled it and programmed
it into the 16F690 on my Microchip "Low pin count demo board" that comes
with the Pickit 2. I looked at pin C6 with my scope and it's toggling at
about 40 KHz. It works.
pmuldoon



Joined: 26 Sep 2003
Posts: 218
Location: Northern Indiana

View user's profile Send private message

PostPosted: Thu Jan 27, 2011 2:11 pm     Reply with quote

Thanks for looking at it, PCM.
There are 2 registers for configuring ports to analog/digital.
C6-7 are actually in ANSELH, which CCS wasn't setting up properly. (Something I also missed when I configured them directly.)
So they were never set up as IO lines.

Don't know why it worked for you but not for me.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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