Autor Tema: MPR121 Sensor capacitivo  (Leído 1762 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
MPR121 Sensor capacitivo
« en: 28 de Junio de 2012, 17:43:32 »
Hola amigos, estoy desarrollando una aplicación con dicho sensor, la verdad no comprendo muy bien su configuración, tiene muchos registros, sólo le he configurado el registro 0x5e, configuración de electrodos. El módulo me está funcionando pero no satisfactoriamente, estoy leyendo el módulo cada 0,5s una vez lo lee bien otra aparece un número extraño.

Les agradecería mucho si me dieran una manito para lograr configurar correctamente este módulo.

Muchas gracias.

Código: C
  1. #include <12F1822.h>
  2. #use delay(clock=4000000)
  3. #fuses wdt, put, brownout, nomclr, intrc_io
  4. #use rs232(baud=9600, xmit=pin_a4,rcv=pin_a5)   //configuración del puerto
  5. #use i2c(master,sda=pin_a2,scl=pin_a1)
  6.  
  7. #byte   porta = 0x0c
  8. #byte   wpua = 0x20c
  9. #byte   option_reg = 0x95
  10.  
  11. int const dir_escribir = 0b10110100;
  12. int const dir_leer = 0b10110101;       
  13.  
  14. short ban_500ms;
  15.  
  16. int dato_rec;
  17. int teclas;
  18.  
  19. char cadena[4];
  20.  
  21. void confi_mpr121();
  22. void leer_mpr121();
  23.  
  24. ///////////////////////////////////////////////////////////////////////////////
  25. #int_rda                                //vector de interrupcion de la recepcion de datos
  26. void interrupcion_rx()  //por el usart, el dato es pasado al dac
  27. {
  28.         dato_rec = getc();     
  29. }
  30. ///////////////////////////////////////////////////////////////////////////////
  31. #int_timer1
  32. void interrupcion_tmr1()
  33. {
  34.         set_timer1(3039);
  35.         ban_500ms = 1;
  36. }
  37. ///////////////////////////////////////////////////////////////////////////////
  38. #zero_ram   //Borrado de la memoria ram
  39.  
  40. void main()      //Rutina principal
  41. {
  42.         set_tris_a(0b101111);
  43.         enable_interrupts(global);
  44.         enable_interrupts(int_rda);             //habilitación de todas las interrupciones
  45.         enable_interrupts(int_timer1);  //Habilitación de la interrupción tmr1
  46.         setup_timer_1(t1_internal | t1_div_by_8);
  47.         set_timer1(0);
  48.        
  49.         setup_oscillator(osc_4mhz | osc_normal | osc_pll_off);
  50.         setup_wdt(wdt_1s);
  51.        
  52.         setup_comparator(nc_nc);        //se deshabilita comparador
  53.        
  54.         setup_adc(adc_off);
  55.         setup_dac(dac_off);
  56.        
  57.         porta = 0;
  58.        
  59.         delay_ms(500);
  60.         ban_500ms = 0; 
  61.         confi_mpr121();
  62.        
  63.  //////////////////////////////////////
  64.         while(true)
  65.         {
  66.                 restart_wdt();
  67.                
  68.                 if(ban_500ms)   //tiempo de 0.5seg
  69.                 {
  70.                         ban_500ms = 0;
  71.                        
  72.                         leer_mpr121();
  73.                         sprintf(cadena,"%03u",teclas);
  74.                         printf("Teclas = %\s\r",cadena);                       
  75.                 }
  76.         }
  77. }
  78. ///////////////////////////////////////////////////////////////////////////////
  79. ///////////////////////////////////////////////////////////////////////////////
  80. void leer_mpr121()
  81. {
  82.         i2c_start();                    //Start
  83.         i2c_write(dir_escribir);        //direccion
  84.         i2c_write(0x00);                        //registro de control
  85.         i2c_start();                    //Start
  86.         i2c_write(dir_leer);            //Control para lectura
  87.        
  88.         teclas = i2c_read();            //Se lee la 8 primeras teclas
  89.        
  90.         i2c_stop();                     //Stop 
  91. }///////////////////////////////////////////////////////////////////////////////
  92. void confi_mpr121()
  93. {
  94.         i2c_start();                    //Start
  95.         i2c_write(dir_escribir);        //direccion
  96.         i2c_write(0x5e);                        //habilitar electrodos
  97.         i2c_write(0b00111111);          //dato a escribir
  98.         i2c_stop();                     //Stop
  99. }