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

16F526

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
aldina



Joined: 09 Oct 2009
Posts: 26

View user's profile Send private message Send e-mail

16F526
PostPosted: Mon Dec 14, 2015 10:16 am     Reply with quote

Hi,

I'm using a 16F526 to make a simple flashing LED. My code:
Code:

#include <16F526.h>
#fuses INTRC, MCLR, NOPROTECT, NOWDT
#use delay(clock=8000000)
//#use fast_io(B)
//#use fast_io(C)

void main()
{

   set_tris_c(0x00);               
   //SETUP_ADC(ADC_OFF);
   //SETUP_ADC_PORTS(NO_ANALOGS);
 
   while(true)
   { 
          output_c(0x00);
          delay_ms(2000); 
          output_c(0x01); // C0 - ON
          delay_ms(2000);   
       }   
    }

My version is 5.049
I have compiled and it has no errors.
I've programmed but LED is not flashing. I have no C0 output variation.
Maybe the fuses are wrong. Please help me.

BR
temtronic



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

View user's profile Send private message

PostPosted: Mon Dec 14, 2015 12:15 pm     Reply with quote

though I don't use that PIC

1) have you a pullup on MCLR pin ?

2) any other peripherals on C0 ? Those MUST be disabled to let it work as a simple I/O port....


Jay
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Dec 14, 2015 5:16 pm     Reply with quote

The comparators in the 16F526 are on by default. In my old version 4.73
of the PCB compiler, it doesn't turn them off at the start of the program.
That old version doesn't even support the setup_comparator() function
correctly. I don't know if your vs. 5.049 has fixed all of this.

You can check the .LST file at the start of main to see if the compiler
inserts code to write 0x00 to the CM1CON0 and CM2CON0 registers.
If not, you should add code to the start of main() to turn off the
comparators.

The following line should work, but I don't have your version of the
compiler to test it:
Code:
setup_comparator(NC_NC_NC_NC);
aldina



Joined: 09 Oct 2009
Posts: 26

View user's profile Send private message Send e-mail

PostPosted: Tue Dec 15, 2015 4:14 am     Reply with quote

Thank you PCM :-)
That's it. It is working now.

Now I have a new doubt about this PIC. I'm trying to save some data on EEPROM memory. I have made it with PIC16F688 and it's working but the same logic isn't working with 16F526. Can you tell me something about?

My code:
Code:

#include <16f526.h>
#fuses INTRC,NOWDT,NOMCLR,PROTECT
#use delay(clock=8000000)

int flag_system = 0;

void System_A(){
   flag_system=0;
   write_eeprom(0,0);
}

void System_B(){
   flag_system=1;
   write_eeprom(0,1);
}

void SelectSystem(){   
   int8 flag=0;
   flag=read_eeprom(0);
   if(flag==0)
      System_A();
   else
   if(flag==1)
     System_B();
 
   delay_ms(10);

   while(true){
         if(input(PIN_B2)){
            delay_ms(20);
               if(input(PIN_B2)){
                   if(flag_system==0){
                      delay_ms(50);
                      Ststem_B();
                      break;
                     }
                     else
                   if(flag_system==1){
                      delay_ms(50);
                      System_A();
                      break;
                     }
               }
          }
            break;
          }
        delay_ms(10);
}


void main() {

   set_tris_c(0x00); 
   
   SETUP_ADC(ADC_OFF);
   SETUP_ADC_PORTS(NO_ANALOGS); 
   setup_comparator(NC_NC_NC_NC);
 
   while(true)
   {
     SelectSystem();
   
    if(flag_system==0){   // Sistema A
   
          output_high(PIN_C0); // Leds on 30ms
          delay_ms(50);  // Ton
          output_low(PIN_C0);
          delay_ms(50);
         
          output_high(PIN_C0); // Leds on
          delay_ms(50);  // Ton
          output_low(PIN_C0);
          delay_ms(50);
         
          output_high(PIN_C0); // Leds on
          delay_ms(150);  // Ton
          output_low(PIN_C0);
          delay_ms(450);
       }
       
    else
    if(flag_system==1){
   
          output_high(PIN_C0); // Leds on 30ms
          delay_ms(50);  // Ton
          output_low(PIN_C0);
          delay_ms(50);
         
          output_high(PIN_C0); // Leds on
          delay_ms(150);  // Ton
          output_low(PIN_C0);
          delay_ms(450);
           }

    }
   
}
Mike Walne



Joined: 19 Feb 2004
Posts: 1785
Location: Boston Spa UK

View user's profile Send private message

PostPosted: Tue Dec 15, 2015 11:33 am     Reply with quote

Work on the KISS principle.

Get rid of most of the code, test reading & writing to EEPROM only.

Mike
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Tue Dec 15, 2015 12:24 pm     Reply with quote

Ask yourself this:
What happens if the value in EEPROM is something other than 1 or 0 ??

When you program , unless otherwise handled by your program fixture - it is likely going to be set to 0xFF or some other integer you are not expecting.

you need to add an ELSE statement to your system_test() to handle that.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
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