TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: zerotkd en 09 de Diciembre de 2007, 18:35:09
-
como guardo datos en la eeprom para despues compararlos.......
-
Pues parece que realmente es urgente!
Asi que...ya! ya! ponte a trabajar en ello!!!
-
: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
-
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!
-
¿Con qué compilador de "C" programas?
Un saludo
-
como puedo hacer que la eeprom se incremente.........y luego compararla con datos ingresados
-
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.......
-
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
-
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
-
Gracias maestro por un momento senti un desequilibrio en la fuerza..............
-
: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
-
:-/
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
-
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