TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: zerotkd en 09 de Diciembre de 2007, 18:35:09

Título: tengo un problema con la eeprom ayuda
Publicado por: zerotkd en 09 de Diciembre de 2007, 18:35:09
 como guardo datos en la eeprom para despues compararlos.......
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: BrunoF en 09 de Diciembre de 2007, 19:28:07
Pues parece que realmente es urgente!
Asi que...ya! ya! ponte a trabajar en ello!!!
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: Cryn en 09 de Diciembre de 2007, 19:42:36
 :D :D compadre te recominedo que uses el buscador, para que veas como se maneja la eeprom del pic, ya que bastante hay sobre ello, supongo que tu codigo se ingresa por teclado, asi que tb busca por teclado matricial o teclado analogico si es de tu preferncia

aca no hacemos todo el trabajo por uno, podemos ayudarte en dudas, no hacerte la tarea, porque no es nada etico, asi que te recomiendo que porgrames lo que puedas y de ahi ves si alguien puede aclarar tus dudas o fallas

un saludo, y espero no te molestes, pues aca ya varios se han sentido muy molestos con mensajes como el que tu has dejado
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: aitopes en 09 de Diciembre de 2007, 19:47:56
Hola zerotkd!

Amen de que dificilmente nadie tenga el proyecto listo para pasartelo, estari bueno saber algo mas de como has encarado el proyecto...

¿Tienes algun esquema del circuito?
¿Que codigo has intentado usar?

Saludos!
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: jfh900 en 09 de Diciembre de 2007, 19:50:17
¿Con qué compilador de "C" programas?

Un saludo
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: car5 en 10 de Diciembre de 2007, 16:46:26
 como puedo hacer que la eeprom se incremente.........y luego compararla con datos ingresados
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: zerotkd en 10 de Diciembre de 2007, 17:12:04
el compilador que utilizo es el pic compiler

el codigo fuente que utilizo es el c, lo que he logrado hacer es lo siguiente:
guardo una clave en un registro, mi problema es con la eeprom......
#include <watchdog.h>
#include<lcd4.c>                             //libreria manejo lcd
#include<kbd2.c>
int cont,j;
int k;
void nueva_clave(void);       //funcion que guarda clave
void comprueba_clave(void);   //funcion que comprueba clave

//variables globales

char clave[4],c,limit;
signed char i;
boolean var=0;


///PROGRAMA
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   //setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_counters(RTCC_INTERNAL,WDT_2304MS);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);


   set_tris_a(0xfc);
   lcd_init();                                 //inicializa lcd
   lcd_gotoxy(2,1);                            //posiciona el cursor
         lcd_putc("   Bienvenidos \n");        //muestra el mensaje entre comillas
         lcd_gotoxy(2,2);                      //posiciona el cursor
         lcd_putc("   Al Sistema \n");         //muestra el mensaje entre comillas
         delay_ms(500);                        //temporizacion
lcd_gotoxy(2,1);                               //posiciona el cursor
         lcd_putc("1_guardar clave \n");       //muestra el mensaje entre comillas
         lcd_gotoxy(2,2);                      //posiciona el cursor
         lcd_putc("2_ingrese clave\n");        //muestra el mensaje entre comillas
         delay_ms(1000);                       //temporizacion


         while(1)               //si es verdad hace siempre esto
         {
         cont==0;                   //inicia cont en cero
         lcd_gotoxy(2,1);           //posiciona el cursor
         uno:      if(cont==10)      //si cont=10 inicializa el contador en cero
            {
            cont=0;
            }
         lcd_putc("\f");            //limpia pantalla
         lcd_putc("    contador   \n");//muestra el mensaje entre comillas
         lcd_gotoxy(2,2);              //posiciona el cursor
         printf(lcd_putc,"      %d",cont);//imprime valor de cont
         delay_ms(1000);                  //temporizacion de 1segundo
         cont++;                          //incrementa contador
         c=kbd_getc();                    //guarda en c la tecla pulsada
         if(c=='1')                       //si esta tecla es "1" llama
         {                                //a la rutina nueva clave
          nueva_clave();
          goto dos;                       //finaliza y salta a dos
          }
         if(c=='2')                       //si esta tecla es "2" llama
         {                                //a la rutina comprueba clave
          comprueba_clave();
          }

            }
            while(1)
               {
         lcd_gotoxy(2,1);
         //delay_ms(1000);
         cont++;
dos:      if(cont==10)
            {
            cont=0;
            }
         lcd_putc("\f");
         lcd_putc("    contador   \n");
         lcd_gotoxy(2,2);
         printf(lcd_putc,"      %d",cont);
         delay_ms(1000);
         c=kbd_getc();

         if(c=='2')
         {
          comprueba_clave();
          }

            }
               }

void nueva_clave(void){
com:
   lcd_putc("\fGuardar Clave:\n");   //presentacion
   for(i=0;i<4;i++){
      do{               //espera hasta...
         c=kbd_getc();

         }while(c==0);   //...pulsar una tecla

      if(c=='A' || c=='B'){      //si se pulsa ENTER se sale de la funcion
         if(i==0){            //no se sale...
            lcd_putc("\fEscriba Una!!!");
            delay_ms(500);
            lcd_putc("\n             ");
            lcd_gotoxy(1,2);
            i=-1;

            continue;         //...hasta poner una clave valida
            }
            if(i!=5){         //no se sale...
         lcd_putc("\fNo Es Valida!!!");
         delay_ms(1000);
           }
                  goto com;   //vuelve a pedirse ingresar la clave

                  break;               //salir de funcion nueva_clave
         }
      lcd_putc("*");
      limit=i+1;               //longitud de la clave
      clave=c;               //almacena clave(maximo 4 caracteres)
      }
}



void comprueba_clave(void){
   lcd_putc("\fcomprueba clave:\n");
      for(i=0;;i++){
      do{
         c=kbd_getc();
         }while(c==0);
            lcd_putc("*");
            if(c=='A' || c=='B'){
         if(i==0){
            lcd_putc("\nEscribe una!!!");
            delay_ms(1000);
            lcd_putc("\n              ");
            lcd_gotoxy(1,2);
            i=-1;
            continue;
            }if(i!=limit)
            var=1;
         break;}
               if(c!=clave)
                  var=1;
      }   if(var>0){
      lcd_putc("\fClave\nIncorrecta!");
      cont=0;
      delay_ms(1000);
            }
   else{
      lcd_putc("\fClave\nCorrecta!");
      delay_ms(1000);
   var=0;
   while(1);
   }
}
mi problema es como guardarla en la eeprom::::::::::::::::::::::::::::::::::mi intencion no es molestar a nadie solo necesito ayuda con la eeprom.......
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: Cryn en 11 de Diciembre de 2007, 15:42:26
me parece que estas usando el C de CCS, aunque esa libreria del watchdog nunca la vi, y te estarian faltando los fuses talvez

si es que usas el ccs, el compilador presenta dos funciones para el manejo de la eeprom:

write_eeprom(0x0,0x12);     //writes 0x12 to  data eeprom location 0  (escribe el dato 12 en la posicion 0)
value=read_eeprom(0x0);   //reads data eeprom location 0x0 returns 0x12 (lee la posicion 0 de la eeprom y lo guarda en value)

esas son funciones incorporadas del compilador y las usas en cualqeuir momento, cuando lo necesites

eso lo saque del manual del compilador, disponible en su pagina web (la descarga del manual es libre)

tb existe una directiva en el compilador con la que se graba cualquier dato directamente en la eeprom sin necesidad de cargarlo en el main, la directiva es:

#rom 0x2101={0x05} // significa que en la posicion 01 se guarda el dato 05
tb puedes hacer:
#rom 0x2101={0x05,0x09,0xab} // se guardan en posiciones contiguas a partir de la pos 01
o independientemente:
#rom 0x2101={0x05}
#rom 0x2109={0xf5}  // en la posicion 09 se guarda el dato f5

No creo que nadie se moleste simepre y cuando hagas una pregunta clara, y no la que pusiste inicialmente, que parecia que querias que alguien te haga la tarea, bueno debes ser mas claro, pues hablando se entiende la gente, ya que hay bastante espacio para que puedas expresar bien tus ideas y no como un telegrama :mrgreen:

espero haberte te sirva, y pues comentanos algun detalle mas... de ser necesario
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: Cryn en 11 de Diciembre de 2007, 15:49:20
me parece que el c qeu usas el el hitech, asi que todo lo que te dije es para ccs, y talvez tenga algunas variaciones, nsoe, fijate en el manual que seguremnte distribuye el fabricante del software que usas y talvez se maneje la eeprom del PIC de manera similar
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: zerotkd en 11 de Diciembre de 2007, 15:51:51
Gracias maestro por un momento senti un desequilibrio en la fuerza..............
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: Cryn en 11 de Diciembre de 2007, 16:11:36
 :D :D
vamos que se puede, y pues nos dices como es la cosa en el hitech, ya que yo solo uso ccs, jajaja, que mal no? :D
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: zerotkd en 11 de Diciembre de 2007, 16:19:01
 :-/

yo tambien uso el ccs lo que aparece de watchdog.h es porque se utiliza el compilador ccs con mplab para grabar la pic ........y el watchdog la pic los fuses etc...estan configurados en ese archivo
Título: Re: tengo un problema con la eeprom ayuda
Publicado por: Cryn en 11 de Diciembre de 2007, 20:15:53
bueno si, vi muchas cosas similares, pero esto :shock::

setup_counters(RTCC_INTERNAL,WDT_2304MS)

nunca lo habia visto en ccs, separado con comas, jeeje, poruqe que yo sepa todos usan le OR | osea:

setup_counters(RTCC_INTERNAL | WDT_2304MS)

pero bueno espero ya hayas logrado la escritura y lectura en la eeprom del pic