PIC 16f877A problem

Discussion in 'Programmer's Corner' started by mirrayhan08, Mar 27, 2012.

  1. mirrayhan08

    Thread Starter New Member

    Mar 24, 2012
    4
    0


    hello every body,
    I need help on my line follower robot based on PIC 16f877A. i download C source code and try to compile this code in MPLAB. but it show missing error in first 6 line. but i can't find any problem those line. i give the code without header file. plz any body find the error or convert it HEX format.
    <><><><><><><><><><><><><><><><><><><><><><><><><<>

    #include <16F877A.H>; //declare a PIC header
    #device adc=8; //set the bit for ADC
    #fuses hs, nowdt, noprotect; //set the PIC protection
    #use delay (clock=20000000); //set the clock frequency
    #byte porta=5; //assign port a
    #byte portd=8; //assign port d

    int val1; //ADC value 1 left sensor
    int val2; //ADC value 2 center sensor
    int val3; //ADC value 3 right sensor
    int vref; //voltage reference
    void lmotor(int gear); //left motor function
    void rmotor(int gear); //right motor function


    void main() //main function
    {
    vref=0x7f; //set voltage reference value
    set_tris_d(0); //declare port d as output
    setup_port_a(all_analog); //enable port a as ADC port
    setup_adc(adc_clock_internal); //set the clock for ADC
    setup_ccp1(ccp_pwm); //set enable ccp1
    setup_ccp2(ccp_pwm); //set enable ccp2
    setup_timer_2(t2_div_by_4,100,1); //set post scaler timer

    while(1) //inifinite loop
    {
    portd=0xaa; //set value for motor
    set_adc_channel(0); //ADC at port A0 channel
    val1=read_adc(); //read and store A0 value
    set_adc_channel(2); //ADC at port A2 channel
    val2=read_adc(); //read and store A2 value
    set_adc_channel(4); //Adc at port A4
    val3=read_adc(); //read and store A4 value

    //start condition
    //if sensor sense dark then value is greater than Vref
    //if sensor sense bright then value is lower than Vref
    if(val2>vref) //if sensor 2 is dark
    {
    if((val1<vref)&&(val3<vref)) //sensor 1&3 is bright
    { //send value to motor ccp
    lmotor(70); //both motor moving at same rate
    rmotor(70);
    }
    else if (val1>vref) //sensor 1 is dark
    {
    lmotor(0); //left motor stop
    rmotor(70); //right motor move
    }
    else if (val3>vref) //sensor 3 is dark
    {
    lmotor(70); //left motor move
    rmotor(0); //right motor stop
    }
    }
    else if ((val1>vref)&&(val3<vref)) //if only sensor 1 is dark
    {
    lmotor(0); //left motor stop
    rmotor(70); //right motor move
    }





    else if ((val3>vref)&&(val1<vref)) //if only sensor 3 is dark
    {
    lmotor(70); //left motor move
    rmotor(0); //right motor stop
    }
    else //other than condition above
    {
    lmotor(60); //left motor move slow
    rmotor(60); //right motor move slow
    }


    }
    }
    //end program
    void lmotor(int gear) //left motor ccp control function
    {
    set_pwm1_duty(gear); //ccp1 duty cycle

    }

    void rmotor(int gear) //right motor ccp control function
    {
    set_pwm2_duty(gear); //ccp2 duty cycle
    }

    <><><><><><><><><><><><><><><><><><><><><><><>

    It is very very emargency in my study.

    Plz help me very queckly.

    Thanks to all

    Mehedi.
     
  2. maxpower097

    Well-Known Member

    Feb 20, 2009
    795
    388
    UserPIN is actually stored in an eeprom and theres another one called TEMPpin or something like that, that is in the code. I'm pretty sure the codes gonna work but for some reason I can't program the circuit. I used to use an ICD2 at work and program the boards before they went to assembly. Now I've got that same old ICD2 with no header or CAT5, and a PK3. For some reason the PK3 is saying target not recognized. But when I program my other boards it works fine when there is external power. Does the Pk3 not have enough power to self power a target for programming?

    I've tried to pin out my pk3 to match the programming header but the way it was designed I have to pull certain jumpers to put it into programming mode which cuts power to the chip. So should I just grab a cat5 with RJ45 and cut off one end and turn it into an ICD header? Or should I try to find a way to power the chip to program? Do you think the external PK3 app will program it with no power? Is there a setting in MPlab X to tell the pk3 to power the target? Damn I'm rusty at this stuff and my boss is breathing down my neck to get this worked out. Not actually like a real boss but a misquito that keeps biting you.
     
  3. Wendy

    Moderator

    Mar 24, 2008
    20,766
    2,536
    Welcome to AAC!

    A thread belongs to the OP (original poster). Trying to take over someone elses thread is called hijacking, which is not allowed at All About Circuits. I have therefore given you a thread of your very own.

    This was split from Pic16LF877a Help with Banks
     
  4. maxpower097

    Well-Known Member

    Feb 20, 2009
    795
    388
    To update my problem MPlab switched settings on the PK3 I forgot or they mixed it up where you gotta go into the PK3 settings, then power tab, tell it to self power target, then actually select the voltage.
     
Loading...