Autor Tema: Comparar datos de una memoria eeprom con un datos externo  (Leído 300 veces)

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

Desconectado ericzon

  • PIC10
  • *
  • Mensajes: 6
Comparar datos de una memoria eeprom con un datos externo
« 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 :) :-)


Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 405
Re:Comparar datos de una memoria eeprom con un datos externo
« Respuesta #1 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
  1. char  cmd [2] [13];
  2. int a,b,c = 0;
  3. for (a=0; a<2; a++)
  4.   for (b= 0; b< 13; b++)
  5.     cmd[a][b] = read_eeprom(c++);
  6.  
 

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)

Lo puedes hacer así:

Código: C
  1. int i
  2. for (i=0; i<2; i++)
  3. if (!strcmp(cmd[i],cbuff) rele = 1;
  4.  

Saludos.


Desconectado ericzon

  • PIC10
  • *
  • Mensajes: 6
Re:Comparar datos de una memoria eeprom con un datos externo
« Respuesta #2 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.
}
}

Desconectado ericzon

  • PIC10
  • *
  • Mensajes: 6
Re:Comparar datos de una memoria eeprom con un datos externo
« Respuesta #3 en: 22 de Mayo de 2020, 02:39:31 »
Bueno solo era cuestión de poner el else dentro del for.Gracias crack

Desconectado ericzon

  • PIC10
  • *
  • Mensajes: 6
Re:Comparar datos de una memoria eeprom con un datos externo
« Respuesta #4 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??

Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 405
Re:Comparar datos de una memoria eeprom con un datos externo
« Respuesta #5 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??


  Pruébalo así:

Código: C
  1. void command_process(void){
  2.  flagcommand=0;
  3.  int j;
  4.    for (j=0; j<2; j++)
  5.      if(!strcmp(cmd[j],cbuff)) {
  6.        activa_rele();
  7.        return;
  8.     }
  9. printf("\r\nno procesado...\r\n");
  10. printf(lcd_putc,"\fACCESO");
  11. init_cbuff();// Borro buffer.
  12. }
  13.  
  14.  
  15.  

Desconectado ericzon

  • PIC10
  • *
  • Mensajes: 6
Re:Comparar datos de una memoria eeprom con un datos externo
« Respuesta #6 en: 22 de Mayo de 2020, 15:47:15 »
Vaya no habia usado return desde asm,no sabia que aqui tambien se podia.Gracias


 

anything