Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ericzon en 18 de Mayo de 2020, 21:19:06
Título: Comparar datos de una memoria eeprom con un datos externo
Publicado por: ericzon en 18 de Mayo de 2020, 21:19:06
Hola a todo les cuento lo que quiero hacer y luego el problema va asi: quiero hacer un lector de tarjetas rfid,ya logre almacenar en la memoria eeprom los datos de mis tarjetas rfid que tiene 12 caracteres que este tiene,por medio de interrupciones capture la cadena me guié de lo pubicado por redpic //Interrupcion:RDA recpecion USART #int_rda void serial_isr(){ char rcvchar=0x00;//ultimo caracter recibido if(kbhit()){//verifico si el dato ya esta disponible rcvchar=getc();//Lo descargo cbuff[xbuff++]=rcvchar;//Lo añado al buffer putc(rcvchar);//L o muestro if(xbuff==12){ cbuff[12]=0x00;//Caracter nulo al final,asi sabe cuando se termina el string. flagcommand=1;
Graba_eeprom(&cbuff);
void Graba_eeprom(char *apuntador){ while(*apuntador!=0x00){ write_eeprom(posi,*apuntador);//lo que esta dentro de la 1ra posicion de cbuff lo paso a posi posi++;//aumento la dirrecion de memoria de la eeprom apuntador=apuntador+1;//aumento la direccion donde se almancena cbuff } write_eeprom(posi,0x00); }
bueno posi al inicio vale 0,luego 13,luego 26...etc hasta hay todo bien...para modo de ejemplo guarde 3 tags(12 caracteres cada uno) hay lo que quiero hacer es que al presentar una tarjeta me lea por la interrupción,y se compare con los que tiene internamente guardado la eeprom pero no se como hacerlo,he intentato hacer esto if(!strcmp(cmd,cbuff) rele=1;..cbuff el el tag externo y cmd debe contener los tag almacenados y quise poner la eeprom asi : unsigned char cmd[2][13]={{read_eeprom(0),....read_eeprom(11)},{read_eeprom(13),....read_eeprom(24)},etc};//sale error espero puedan orientarme o buscar otra manera de comparar la tarjeta con los ya guardados :) :-)
Título: Re:Comparar datos de una memoria eeprom con un datos externo
Publicado por: remi04 en 19 de Mayo de 2020, 19:23:40
¿Que compilador usas??
Si todos los datos en la eeprom están concatenados la tabla la puedes inicializar así:
Código: C
char cmd [2][13];
int a,b,c =0;
for(a=0; a<2; a++)
for(b=0; b<13; b++)
cmd[a][b]= read_eeprom(c++);
Ahora capturas un tag de una tarjeta y lo cargas en tu buffer cbuff[13] con la rutina de interrupción
Para comparar supongo que lo que quieres es comprobar si ese tag está en la base de datos (cmd)
Título: Re:Comparar datos de una memoria eeprom con un datos externo
Publicado por: ericzon en 22 de Mayo de 2020, 02:28:44
Gracias por responder remi04. uso el compiler ccs compiler en la eeprom los datos estan de a suiguiente manera: el primer tag1>>posicion 0 a 11 + 12(null),tags2>>posicion 13 a 24 +25(null) y asi... char cmd [2] [13]; int a,b,c = 0; for (a=0; a<2; a++) for (b= 0; b< 13; b++) cmd[a] = read_eeprom(c++); con esto ya cmd contiene los tag guardados pero al compara solo me compara el primer tag y sale lo siguiente 777777777778..tag de ejemplo procesado...esto esta bien porque el codigo es correcto
no procesado...nose porque sale esto tambien
void activa_rele(void){ output_high(pin_a1);//Rele On delay_ms(2000); output_low(pin_a1);//Rele off init_cbuff(); printf("\r\nprocesado...\r\n"); } void command_process(void){ flagcommand=0; int j; for (j=0; j<2; j++) if(!strcmp(cmd[j],cbuff)) activa_rele(); else{ printf("\r\nno procesado...\r\n"); printf(lcd_putc,"\fACCESO"); init_cbuff();// Borro buffer. } }
Título: Re:Comparar datos de una memoria eeprom con un datos externo
Publicado por: ericzon en 22 de Mayo de 2020, 02:39:31
Bueno solo era cuestión de poner el else dentro del for.Gracias crack
Título: Re:Comparar datos de una memoria eeprom con un datos externo
Publicado por: ericzon en 22 de Mayo de 2020, 02:45:42
Aunque igual me salen 2 veces no procesado si j=2,pero si fueran 100 tag me saldria por cada vez que ejecuta cmd 100 veces no procesado,habra forma ue salga una vez??
Título: Re:Comparar datos de una memoria eeprom con un datos externo
Publicado por: remi04 en 22 de Mayo de 2020, 04:26:58
Aunque igual me salen 2 veces no procesado si j=2,pero si fueran 100 tag me saldria por cada vez que ejecuta cmd 100 veces no procesado,habra forma ue salga una vez??