#include <12F1822.h>
#use delay(clock=4000000)
#fuses wdt, put, brownout, nomclr, intrc_io
#use rs232(baud=9600, xmit=pin_a4,rcv=pin_a5) //configuración del puerto
#use i2c(master,sda=pin_a2,scl=pin_a1)
#byte porta = 0x0c
#byte wpua = 0x20c
#byte option_reg = 0x95
int const dir_escribir = 0b10110100;
int const dir_leer = 0b10110101;
short ban_500ms;
int dato_rec;
int teclas;
char cadena[4];
void confi_mpr121();
void leer_mpr121();
///////////////////////////////////////////////////////////////////////////////
#int_rda //vector de interrupcion de la recepcion de datos
void interrupcion_rx() //por el usart, el dato es pasado al dac
{
}
///////////////////////////////////////////////////////////////////////////////
#int_timer1
void interrupcion_tmr1()
{
set_timer1(3039);
ban_500ms = 1;
}
///////////////////////////////////////////////////////////////////////////////
#zero_ram //Borrado de la memoria ram
void main() //Rutina principal
{
set_tris_a(0b101111);
enable_interrupts(global);
enable_interrupts(int_rda); //habilitación de todas las interrupciones
enable_interrupts(int_timer1); //Habilitación de la interrupción tmr1
setup_timer_1(t1_internal | t1_div_by_8);
set_timer1(0);
setup_oscillator(osc_4mhz | osc_normal | osc_pll_off);
setup_wdt(wdt_1s);
setup_comparator(nc_nc); //se deshabilita comparador
setup_adc(adc_off);
setup_dac(dac_off);
porta = 0;
delay_ms(500);
ban_500ms = 0;
confi_mpr121();
//////////////////////////////////////
while(true)
{
restart_wdt();
if(ban_500ms) //tiempo de 0.5seg
{
ban_500ms = 0;
leer_mpr121();
printf("Teclas = %\s\r",cadena
); }
}
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void leer_mpr121()
{
i2c_start(); //Start
i2c_write(dir_escribir); //direccion
i2c_write(0x00); //registro de control
i2c_start(); //Start
i2c_write(dir_leer); //Control para lectura
teclas = i2c_read(); //Se lee la 8 primeras teclas
i2c_stop(); //Stop
}///////////////////////////////////////////////////////////////////////////////
void confi_mpr121()
{
i2c_start(); //Start
i2c_write(dir_escribir); //direccion
i2c_write(0x5e); //habilitar electrodos
i2c_write(0b00111111); //dato a escribir
i2c_stop(); //Stop
}