TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: shasky21 en 06 de Noviembre de 2012, 21:42:17

Título: problemas pic 16f88
Publicado por: shasky21 en 06 de Noviembre de 2012, 21:42:17
hola buenas a todos, tengo un problema con el pic 16f88 lo que pasa es que tengo un proyecto de un punte automatico con sensores, bueno lo que pasa es que ya tengo el codigo en c especificamente lo hice en mikroc for pic el codigo lo prondre mas abajo, probe el codigo ya compilado (el archivo .hex)en el proteus 7.9 y al simularlo todo me resulta bien, tal y como debe de hacer las cosas el pic pero a la hora de pasarlo a pic  no me realiza nada, primeramente pense que eran las configuraciones ya que estoy utilizando el oscilador interno del pic pero ya las modifique varias veces y no pasa nada, el pic no realiza nada y no se que pueda estar mal espero y me puedan ayudar gracias.

unsigned short bandera=0;                                    //variable para comparar y activar el led verde

void giroder()                                                      //funcion para hacer girar el motor hacia la der
{
    do{
    PORTB.F4=1;
    PORTB.F5=0;
    }while(PORTB.F6==0);                               //evalua si el sensor de toque1 se activa en la parte de arriva
    PORTB.F4=0;
}

void giroizq()                                                  //funcion para hacer girar el motor hacia la izq
{
    do{
    PORTB.F4=0;
    PORTB.F5=1;
    }while(PORTB.F7==0);                               //evalua si el sensor de toque2 se activa en la parte de abajo
    PORTB.F5=0;

}

void main() {
    OSCCON=0x60;                                        //oscilador a 4mhz
    while(OSCCON.IOFS==0);                         //espera hasta que el oscilador interno este estable
    ANSEL=0;                                                //etradas y salidas digitales
    PORTA=0;
    TRISA=0x21;
    PORTB=0;
    TRISB=0xC1;                                       //se configuran los puertos
    
    while(1)
    {
        if(Button(&PORTB,0,1,1))                 //espera a que el sensor de proximidad se active
        {
             bandera=1;
             PORTB.F1=0;                            // APAGA LED VERDE                                         }
             PORTB.F2=1;                            //PRENDE LED NARANJA                                    }
             delay_ms(2000);                       //LO DEJA PRENDIDO POR 2 SEGUNDOS             } control de semaforo
             PORTB.F2=0;                           // APAGA LED NARANJA                                      }
             PORTB.F3=1;                          //PRENDE LED ROJO                                            }
             giroder();                                //INICIA EL GIRO DEL MOTOR HACIA LA DERECHA
        }
        
        else if(bandera==0)
        {
            PORTB.F1=1;                       //PRENDE LED VERDE
        }
        
        if(Button(&PORTA,0,100,0))     //espera a que el sensor de paso se active
        {
            giroizq();                             //inicia giro del motor hacia la izquierda
            PORTB.F3=0;                      //APAGA LED ROJO
            bandera=0;                         //PONE A CERO PARA PRENDER LED VERDE
        }
    }

}

(http://)
Título: Re:problemas pic 16f88
Publicado por: PacoP en 09 de Abril de 2018, 07:13:45
Ya se que este tema está pasado y que a su autor no le va a servir, pero igual que yo llegué aquí pueden llegar otros porque esto le pasará a todo el que intente usar el oscilador interno de este PIC.

La solución está en configurar el registro OSCCON, porque por defecto cuando seleccionamos el oscilador interno, nos lo pone en la frecuencia más baja y por eso parece que no funciona, porque todo va más lento.

OSCCON=0b01111010; //8Mhz OSCCON=0b01101010; //4Mhz

Si hay que hacer ajustes a la frecuencia porque no sea demasiado exacta existe un "Tuning" en el registro OSCTUNE, Su valor de calibración sin modificaciones es:
OSCTUNE=0b00000000;