Autor Tema: Guardar Tecla a tecla en EEprom interna  (Leído 3520 veces)

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

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Guardar Tecla a tecla en EEprom interna
« en: 07 de Junio de 2022, 18:54:55 »
Hola, les comento lo que pretendo con un código en ccs c y no e conseguido realizar.

Lo que pretendo hacer es que a partir del abecedario en un arreglo recorrerlo (con un pulsador1), con otro pulsador2 seleccionar la letra deseada y estarla guardando en la eeprom, asi sucesivamente hasta formar una palabra de no máximo 10 letras. Esta palabra formada deberá guardarse en la eeprom y mostrarse al presionar un tercer pulsador3.

Tengo algo de codigo..

Código: C#
  1. char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};  
  2.          char x=-1;
  3.          
  4.          void main(void)
  5.          {
  6.          lcd_init();
  7.          
  8.          while (true)
  9.          {
  10.          if(!input(pin_A0))                                                            // ESCRIBE ABECEDARIO
  11.          {
  12.          x++; if(x >= 27){ x = 0; }; while(!input(pin_A0)); {}  
  13.          lcd_gotoxy(1,2); printf(lcd_putc," %c ",abecedario[x]);        
  14.                    
  15.          }
  16.          
  17.          if(!input(pin_A1))                                                            // GRABA
  18.          {  
  19.          printf(lcd_putc,"\f" ) ;
  20.          lcd_gotoxy(6,1); printf(lcd_putc,"Grabado");
  21.          
  22.          }; while(!input(pin_A1)); {}
  23.          
  24.          
  25.          if(!input(pin_A2))                                                            // LEE LO GRABADO
  26.          {
  27.          printf(lcd_putc,"\f") ;
  28.        
  29.      
  30.          lcd_gotoxy(2,1); printf(lcd_putc,"valor guardado");      
  31.          
  32.          }; while(!input(pin_A2)); {}
  33.          }  
  34.          }

Alguien me ayuda con algún consejo o avance?..
Gracias...
El señor es mi pastor,  nada me faltará.

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #1 en: 08 de Junio de 2022, 07:34:29 »
Hola, de igual manera como creaste un array que contiene el abecedario.
Deberás crear un array de diez elementos, que contenga  cada letra seleccionada.
Luego mediante un barrido por ese array, vas almacenando caracter por caracter en la EEPROM, hasta completar los diez elementos.
Recuerda que la EEPROM contiene un tamaño de palabra de 8bits.
« Última modificación: 08 de Junio de 2022, 12:59:52 por Robert76 »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #2 en: 08 de Junio de 2022, 10:47:08 »
Hola, les comento lo que pretendo con un código en ccs c y no e conseguido realizar.

Lo que pretendo hacer es que a partir del abecedario en un arreglo recorrerlo (con un pulsador1), con otro pulsador2 seleccionar la letra deseada y estarla guardando en la eeprom, asi sucesivamente hasta formar una palabra de no máximo 10 letras. Esta palabra formada deberá guardarse en la eeprom y mostrarse al presionar un tercer pulsador3.

Tengo algo de codigo..

Código: C#
  1. char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};  
  2.          char x=-1;
  3.          
  4.          void main(void)
  5.          {
  6.          lcd_init();
  7.          
  8.          while (true)
  9.          {
  10.          if(!input(pin_A0))                                                            // ESCRIBE ABECEDARIO
  11.          {
  12.          x++; if(x >= 27){ x = 0; }; while(!input(pin_A0)); {}  
  13.          lcd_gotoxy(1,2); printf(lcd_putc," %c ",abecedario[x]);        
  14.                    
  15.          }
  16.          
  17.          if(!input(pin_A1))                                                            // GRABA
  18.          {  
  19.          printf(lcd_putc,"\f" ) ;
  20.          lcd_gotoxy(6,1); printf(lcd_putc,"Grabado");
  21.          
  22.          }; while(!input(pin_A1)); {}
  23.          
  24.          
  25.          if(!input(pin_A2))                                                            // LEE LO GRABADO
  26.          {
  27.          printf(lcd_putc,"\f") ;
  28.        
  29.      
  30.          lcd_gotoxy(2,1); printf(lcd_putc,"valor guardado");      
  31.          
  32.          }; while(!input(pin_A2)); {}
  33.          }  
  34.          }

Alguien me ayuda con algún consejo o avance?..
Gracias...

Suponiendo que no tienes problemas con los rebotes de los pulsadores y/o los has eliminado de alguna manera, yo creo que lo haría así: (Imagen adjunta. Por alguna razón no me deja copiar y pegar el código como texto)


Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #3 en: 08 de Junio de 2022, 20:40:38 »
Creo que no se como se guarda y se escribe sobre la eeprom lo que cometas.

Intente de la siguiente manera pero no me resulto..

Código: C#
  1. char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  2.          char x=0;
  3.          char y=0;
  4.          char i;
  5.                  
  6.          void main(void)
  7.          {
  8.  
  9.          lcd_init();
  10.          
  11.          read_eeprom(0); delay_ms(200);              // Para leer la Eeprom
  12.          
  13.          while (true)
  14.          {
  15.  
  16.          if(!input(pin_A0))                                       // Pulsador para seleccionar la tecla
  17.          {
  18.          lcd_gotoxy(1,2); printf(lcd_putc," %c ",abecedario[x]);
  19.          x++;
  20.          if(x >= 26)
  21.          {
  22.          x = 0;
  23.          }
  24.          while(!input(pin_A0));
  25.          }
  26.  
  27.  
  28.  
  29.          if(!input(pin_A1))                              // Pulsador paraalmacenar las techas elegidas                                    
  30.          {
  31.          if(y<10)
  32.          {
  33.         // FuncionParaGrabarUnCharEnEprom(abecedario[y]);
  34.        
  35.          [b]write_eeprom(0, abecedario[y]);[/b]                // Para escricir la Eeprom
  36.  
  37.          y++;
  38.          printf(lcd_putc,"\f");
  39.          lcd_gotoxy(6,1); printf(lcd_putc," Grabando ");
  40.          }
  41.          else
  42.          {
  43.          lcd_gotoxy(6,1); printf(lcd_putc," Maximo 10 Letras ");
  44.          }
  45.          }; while(!input(pin_A1));
  46.  
  47.  
  48.  
  49.          if(!input(pin_A2))                              // Pulsador paraalmacenar las techas elegidas                                    
  50.          {
  51.          // char i;
  52.          for(i=0; i < y; i++)
  53.          {
  54.          //lcd_gotoxy(i,2); printf(lcd_putc," %c ",FuncinParaLeerUnCharDesdeEeprom);
  55.          
  56.          [b]abecedario[i] = read_eeprom(0);  [/b]            // Para leer la Eeprom
  57.  
  58.          lcd_gotoxy(i,2); printf(lcd_putc," %c ",abecedario[i]);
  59.          }
  60.          printf(lcd_putc,"\f");
  61.          lcd_gotoxy(2,1); printf(lcd_putc," Valor Guardado ");
  62.          }; while(!input(pin_A2)); {}
  63.          }
  64.          }

No me resulta bien, AYUUDAAAA. Please...
« Última modificación: 08 de Junio de 2022, 20:42:43 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #4 en: 12 de Junio de 2022, 02:36:35 »
Aquí aferrado e intentado, Ahora por otra camino un poquito diferente jeje. Creo que ahora solo falta leer lo que se a grabado en la Eeprom. E logrado escribir pero como lo leo lo grabado en nombreEstacion ????

Código: C++
  1. signed char letra = 0;
  2.          char contador = 0;
  3.          const char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  4.          char nombreEstacion[],leerEEPROM[];
  5.  
  6.          
  7.          void main(void)
  8.          {
  9.          lcd_init();
  10.  
  11.          lcd_gotoxy(1,2); printf(lcd_putc,"Letra: %c",abecedario[letra]);
  12.          
  13.          while (true)
  14.          {        
  15.          
  16.          if(!input(pin_a0))                                                      // Aumenta Letra
  17.          {
  18.          letra++;
  19.          if(letra > 25) letra=0;  
  20.          lcd_gotoxy(1,2); printf(lcd_putc,"Letra: %c",abecedario[letra]);
  21.          delay_ms(400);
  22.          }
  23.          
  24.          else if(!input(pin_a1))                                                 // Disminuye Letra
  25.          {
  26.          letra--;
  27.          if(letra < 0) letra=25;  
  28.          lcd_gotoxy(1,2); printf(lcd_putc,"Letra: %c ",abecedario[letra]);
  29.          delay_ms(400);
  30.          }
  31.          
  32.          else if(!input(pin_a2))                                                 // Graba letra en Eeprom
  33.          {
  34.          nombreEstacion = abecedario[letra];
  35.          write_eeprom(0 + contador, nombreEstacion);
  36.          contador++;
  37.          lcd_gotoxy(contador,3); printf(lcd_putc,"%c",nombreEstacion);
  38.          delay_ms(400);
  39.          }
  40.          
  41.          else if(!input(pin_a3))                                                 // Leer letra de Eeprom ??????????????
  42.          {
  43.          leerEEPROM = read_eeprom(nombreEstacion);
  44.          lcd_gotoxy(1,4); printf(lcd_putc,"%c",leerEEPROM );
  45.          delay_ms(1000);
  46.          }        
  47.          }
  48.          }
El señor es mi pastor,  nada me faltará.

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #5 en: 12 de Junio de 2022, 10:23:54 »
Pues para leer usa los mismos pasos que con la acción de guardar.

Desconectado Ruco

  • PIC12
  • **
  • Mensajes: 62
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #6 en: 12 de Junio de 2022, 11:47:03 »
Pusiera se como string

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #7 en: 12 de Junio de 2022, 11:50:23 »
Robert76

Intente los mismos pasos para leer la Eeprom pero no me resultó. No imprime sobre la LCD.
El señor es mi pastor,  nada me faltará.

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 577
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #8 en: 13 de Junio de 2022, 23:16:07 »
Bueno, puede que estés leyendo bien la EEPROM, pero estás implementando mal la impresión al LCD.
La verdad no me he puesto a ver tu programa, pero la estructura básica sería.
Alojar cada caracter en un byte de memoria RAM.
Luego mediante un bucle definido que cuente diez elementos, los guardas de a uno en la EEPROM. No olvidar esperar 20ms entre escrituras, salvo que la librería que estás usando tenga eso contemplado.
Luego para leer,.el proceso es inverso, lees cada posición de memoria EEPROM  y alojas cada byte en un buffer o array de 10 elementos.
Luego lees el array de a uno y lo imprimes en pantalla.
« Última modificación: 13 de Junio de 2022, 23:18:39 por Robert76 »

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #9 en: 14 de Junio de 2022, 01:03:02 »
Robert76

La secuencia creo que me a quedado clara. Lo que no me a resultado es ponerlo en código. Me falta mucho por aprender de código c.   :-)
El señor es mi pastor,  nada me faltará.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #10 en: 17 de Junio de 2022, 10:01:19 »
Ya lo escribe, ya lo guarda en eeprom  creo   :lol: ahora lo único es que lo imprime carácter a carácter y no como string.


Código: C#
  1. else if(!input(pin_a2))                                                 // Graba letra en Eeprom
  2.  59
  3.  
  4.          {
  5.  60
  6.  
  7.          write_eeprom(0 + contador, abecedario[letra]);
  8.  61
  9.  
  10.          contador++;
  11.  62
  12.  
  13.          lcd_gotoxy(contador,3); printf(lcd_putc,"%c",abecedario[letra]);
  14.  63
  15.  
  16.          delay_ms(400);
  17.  64
  18.  
  19.          }
  20.  65
  21.  
  22.          
  23.  66
  24.  
  25.          else if(!input(pin_a3))                                                 // Leer letra de Eepro ??????????????
  26.  67
  27.  
  28.          {
  29.  68
  30.  
  31.          for(contador=0; contador < 4; contador++){
  32.  69
  33.  
  34.          nombreEstacion = read_eeprom(contador);
  35.  70
  36.  
  37.          lcd_gotoxy(contador,4); printf(lcd_putc," %c", nombreEstacion);
  38.  71
  39.  
  40.          delay_ms(1000);
  41.  72
  42.  
  43.          }        
  44.  73
  45.  
  46.          }
El señor es mi pastor,  nada me faltará.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #11 en: 17 de Junio de 2022, 13:08:32 »
Para imprimir un string debe ser:
Código: [Seleccionar]
   printf(lcd_putc,"%s",abecedario);

Pero ojo, no estoy seguro que definiendo
Código: [Seleccionar]
char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};   siempre te vaya a guardar un 0 en la posición [26],  fundamental para saber que termina el string.
Mejor definila como:
Código: [Seleccionar]
char abecedario[] = {"abcdefghijklmnopqrstuvwxyz"};que de paso es mas breve.
« Última modificación: 17 de Junio de 2022, 13:16:08 por Eduardo2 »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #12 en: 17 de Junio de 2022, 13:19:50 »
Para imprimir un string debe ser:
Código: [Seleccionar]
   printf(lcd_putc,"%s",abecedario);

Pero ojo, no estoy seguro que definiendo
Código: [Seleccionar]
char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};   

Lo que le falta ahí es un cero o final de carácter para que el printf sepa hasta donde imprimir el texto. (Imagen adjunta)

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #13 en: 17 de Junio de 2022, 13:36:08 »
Según un tema de este mismo foro dice así.

Código: C
  1. char arreglo[5];
  2.  
  3. se tendrá un arreglo de 5 elementos de tipo char. El contenido de cada char es aleatorio al arrancar el pic y usando el compilador de CCS para el ejemplo anterior. Se deberá inicializar el valor de cada elemento según el uso que se le vaya a dar.
  4.  
  5. Para convertir el arreglo de chars anterior en una cadena formal, el arreglo deberá contar con lo siguiente:
  6.  
  7. - Debe tener de 0 a 4 elementos (caracteres ascii) en las primeras 4 posiciones
  8. - El último elemento deberá ser un NULL char que equivale a 0x00
  9.  
  10. El elemento NULL marca el fin de los caracteres útiles de la cadena. Armemos una cadena sencilla con las características que se mencionaron:
  11.  
  12. arreglo[0]='c';
  13. arreglo[1]='a';
  14. arreglo[2]='s';
  15. arreglo[3]='a';
  16. arreglo[4]=0x00;
  17.  
  18. La cadena claramente contiene 'casa'. El quinto elemento dice: 'aquí terminó el texto'.
  19.  
  20. Al usar la declaración char arreglo[5]; en realidad se está declarando un apuntador a una secuencia de chars. El apuntador se llamará arreglo y será capaz de conocer la dirección ram de un char.
El señor es mi pastor,  nada me faltará.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Guardar Tecla a tecla en EEprom interna
« Respuesta #14 en: 17 de Junio de 2022, 13:46:30 »
Según un tema de este mismo foro dice así.

Código: C
  1. char arreglo[5];
  2.  
  3. se tendrá un arreglo de 5 elementos de tipo char. El contenido de cada char es aleatorio al arrancar el pic y usando el compilador de CCS para el ejemplo anterior. Se deberá inicializar el valor de cada elemento según el uso que se le vaya a dar.
  4.  
  5. Para convertir el arreglo de chars anterior en una cadena formal, el arreglo deberá contar con lo siguiente:
  6.  
  7. - Debe tener de 0 a 4 elementos (caracteres ascii) en las primeras 4 posiciones
  8. - El último elemento deberá ser un NULL char que equivale a 0x00
  9.  
  10. El elemento NULL marca el fin de los caracteres útiles de la cadena. Armemos una cadena sencilla con las características que se mencionaron:
  11.  
  12. arreglo[0]='c';
  13. arreglo[1]='a';
  14. arreglo[2]='s';
  15. arreglo[3]='a';
  16. arreglo[4]=0x00;
  17.  
  18. La cadena claramente contiene 'casa'. El quinto elemento dice: 'aquí terminó el texto'.
  19.  
  20. Al usar la declaración char arreglo[5]; en realidad se está declarando un apuntador a una secuencia de chars. El apuntador se llamará arreglo y será capaz de conocer la dirección ram de un char.

Si es lo mismo que puse en la imagen de arriba, es decir debe ser así tu arreglo:

Código: C
  1. char abecedario[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 0x00};
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything