TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: epir en 16 de Marzo de 2012, 12:00:47

Título: mTOUCH con pic12f683 y CCSC c
Publicado por: epir en 16 de Marzo de 2012, 12:00:47
Bueno ahora implementado teclado de 3 teclas trabajando con el CVD y empleando PIC12F683 para detección capacitiva, adjunto algunas imágenes y el código para realizar dicha implementación con CCSC compiler.



El objetivo de este metodo es emplear el capictor CHOLD del conversor analoto a digital  lo cual se logra con el siguiente codigo
Código: [Seleccionar]
//----------------------------------------------------------------
// cargar_chold()                                                 //
//----------------------------------------------------------------
/*
*Descripción:
* Codigo encargado de cargar el capacitor CHOLD de conversor A/D
* tarea que se realiza en 4 pasos como se describe a continuación:
*
* 1 -Se debe dejar un pin del conversor A/D  para esta tarea, es recomendable
*    que sea el pin del voltaje de referencia Vref, previamente se debe haber
*    cargado el voltaje de referencia para el conversor analogo digital para
*    nuestro caso VDD y VSS. Ahora este pin se deja como salida digital para
*    aplicar el VDD.
* 2 -Se pone dicho en pin el alto
* 3 -Se selecciona el canal analogico de dicho pin  para poder cargar el capacito CHOLD
*    tarea que se realiza si en este pin se encuenta un voltaje alto.
* 4 -Se da un tiempo para asegurar que el capacitor este plenamente cargado, en este caso      
*    se dio 8TAD.
*/  
void cargar_chold(void)
{
        config_sen_inC(1,out);          //1
        output_high(CARGAR_CAP);        //2          
        set_adc_channel(1);             //3    
        delay_us(16);                   //4

}





Luego se seleccionan los canales o pines a los cuales estan conectados las donas o teclas capacitivas deben ser los pines de conversion A/D, como mostrare en a continuacion:

Código: [Seleccionar]
//----------------------------------------------------------------
// tecla(int n)                                                 //
//----------------------------------------------------------------
/*
*Parametros:
*  n-> tiene el valor de la tecla que se desea verificar
*
* Descripcion:
*  Este codigo quiza es el mas importante del programa ya que en este
*  se implementa el principio del sensado capacitivo empleando CVD.
*  Este se realiza en 7 pasos los cuales describire a continuacion:
*
*  1- Se caraga el capacitos de muestreo del A/D CHOLD
*  2- Se pone el pin del sensor a leer en bajo, el cual inicialmente debe estar configurado en el TRISIO como salida
*  3- Se da un tiempo pequeño de establecimiento "determinado por pruebas"
*  4- Se configura el pin del sensor como entrada analoga tonto en el TRISIO  como en ANSEL
*  5- Se elije el canal analogo al que corresponde dicho pin.
*  6- Se realiza la lectura lo mas rapido posible despues de haber seleccionado el canal se obtine mejor resultado
*     que esperando un poco. Es posible emplear tambien la interrupción de finalización de lectrua A/D.
*  7- Se dejea el otra ves como salida tanto en le TRISIO como en ANSEL.      

*/
void tecla(int n)
{    
     if(n==0)
     {        
        cargar_chold();           //1
        output_low(SENSOR1);  //2            
        delay_us(2);              //3
        config_sen_inC(0,in);     //4                                        
        set_adc_channel(0);       //5                                    
        raw[0]=read_adc();        //6
        config_sen_inC(0,out);    //7            
     }          
     else if(n==1)
     {
        cargar_chold();          
        output_low(SENSOR2);              
        delay_us(2);        
        config_sen_inC(2,in);   //12us                                        
        set_adc_channel(2);                                            
        raw[1]=read_adc();                                  
        config_sen_inC(2,out);              
     }  
     else if(n==2)
     {                
        cargar_chold();  
        output_low(SENSOR3);            
        delay_us(2);        
        config_sen_inC(4,in);                                          
        set_adc_channel(3);                                            
        raw[2]=read_adc();
        config_sen_inC(4,out);            

     }  
        
}        





Luego el algoritmo para indentificar tecla presionada

Código: [Seleccionar]
//----------------------------------------------------------------
// scan_tecla(int t)
//----------------------------------------------------------------
/*
*  Este codigo se encarga de verificar si hay tecla presionada
*  
*/
void scan_tecla(int t)
{
            tecla(t);   //160us              
            //se verifica si hay tecla presionada            
            if (raw[t] < (average[t] - trip[t]) )               //Tecla presionada
                {
                  key=t+'1';
                }    
            else if(raw[t] > (average[t] - (trip[t] - hyst)))  //no hay tecla presionada
                {
                   average[t] = average[t] + (raw[t] - average[t])/16;            
                }                          

}



Este codigo fue el que implemente pero ya queda a cada uno implementar el algoritmo de identificación de tecla como mejor le paresca.

Todo el programa ocupa 34% de la memoria del pic.

Título: Re: mTOUCH con pic12f63 y CCSC c
Publicado por: MGLSOFT en 16 de Marzo de 2012, 15:20:20
Y la imagen ??
Al menos yo no la veo... :lol: :lol: