TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: FixxxerMetal en 26 de Marzo de 2006, 21:45:00
-
Como hago una subrutina para escribir en la eeprom de pic? la que hice me escribe el primer dto, ya la segunda vez que la llamo no escribe nada, ni la tercera etc. Como le digo desde C que quiero escribir un valos espesifico en la eeprom, pues me toca cargar el programa en el grabador, luego meterle los datos para la eepron uno a uno y luego grabar el pic, quero que esos valores lo cargue con los valores del programa, los del #fuses, etc.
mis subrutinas de lectura y escritura:
// SubRutinas
// LECTURA de la EEPROM
void leer(int dir)
{
eeadr = dir;
bit_set(eecon1,RD);
dato_leido = eedata;
}
// ESCRITURA de la EEPROM
void escribir(int dir, int date)
{
eeadr = dir;
eedata = date;
bit_set(eecon1,2); // 2
eecon2 = 0x55;
eecon2 = 0xaa;
bit_set(eecon1,1); // 1
while(!bit_test(eecon1,4));
{ // inicio WHILE final de escritura
delay_us(1);
} // fin WHILE final de escritura
bit_clear(eecon1,4); // 4
bit_clear(eecon1,2); // 2
}
Otra cosa, declare por bit los valores del registro y no me funcionan, a la final me toco poner el "registro,bit" en vez de "registro,variable"
#bit RD = eecon1.0
#bit WR = eecon1.1
#bit WREN = eecon1.2
#bit WRERR = eecon1.3
#bit EEIF = eecon1.4
-
En CCS tienes ya instrucciones específicas para eso:
write_eeprom (Direccion,Dato)
y
Dato=read_eeprom(Direccion)
-
Escrito originalmente por nocturno66
En CCS tienes ya instrucciones específicas para eso:
write_eeprom (Direccion,Dato)
y
Dato=read_eeprom(Direccion)
y si la direccion es de 16bits como hago? igual el dato. el 16f84 si es de 8 bits pero el 16f87x es de 16.
Otra cosa, en que se diferencia la memoria flash de la eeprom? el pic 16f87x t da opcion de escribir en la eeprom o en la flash, supongo que son memorias aparte de la de programa.
-
Escrito originalmente por FixxxerMetal
Escrito originalmente por nocturno66
En CCS tienes ya instrucciones específicas para eso:
write_eeprom (Direccion,Dato)
y
Dato=read_eeprom(Direccion)
y si la direccion es de 16bits como hago? igual el dato. el 16f84 si es de 8 bits pero el 16f87x es de 16.
Creo que estas leyendo mal algo, los pic16F87x tienen 256 bytes de EEPROM , que se direccionan de 0 a 255, osea 1 byte.
Escrito originalmente por FixxxerMetal
Otra cosa, en que se diferencia la memoria flash de la eeprom? el pic 16f87x t da opcion de escribir en la eeprom o en la flash, supongo que son memorias aparte de la de programa.
La memoria FLASH es la memoria de programa, la eeprom es la de datos. Si quieres grabar datos en una u otra es lo mismo, solo que sería mas peligroso guardarlos en la memoria de programa si cometes algun error.
Por lo general es mucha cuestion de criterio. La memoria de programa la podrias usar por ejemplo para modificar datos de un mensaje de un display, pero para datos que varien con mayor frecuencia te sugiero lo ubiques en la eeprom.
Ambas son lentas para escribirse (tipico 4mseg) pero muy rapidas para ser leídas.
Dime que es lo que quieres guardar en que contexto y te podré sugerir qué haria yo en tu caso.
-
Ok gracias. Lo q quiero es ller un teclado matricial y comparar la clave que se introduce con la q esta gurdada en la eeprom, mi idea fue usar una localidad de memoria por cada digito. Si la eeprom contiene 255 en dichas localidades el programa debe pedirme que introduzca una clave nueva. Todo esto debe ser visualizado en una pabtalla LCD, preferiblemente a 4 bits. me gustaria ver como utilizar la subrutina que trae el C para LCD ya que por aca me dijeron como ahorrarme la subrutina de lectura y escritura de la eeprom. Todo esto es para automatizar el lab donde estudio, si la clave es de un profesor se debe abrir la puerta, encender energizar el laboratorio, si esta muy caliente encender el aire acondicionado y contar a las personas que entran, de modo que despues de las 5pm cuando salga la ultima persona el sistema debe apagarse. Algo de domotica
-
Escrito originalmente por FixxxerMetal
Ok gracias. Lo q quiero es ller un teclado matricial y comparar la clave que se introduce con la q esta gurdada en la eeprom, mi idea fue usar una localidad de memoria por cada digito. Si la eeprom contiene 255 en dichas localidades el programa debe pedirme que introduzca una clave nueva. Todo esto debe ser visualizado en una pabtalla LCD, preferiblemente a 4 bits. me gustaria ver como utilizar la subrutina que trae el C para LCD ya que por aca me dijeron como ahorrarme la subrutina de lectura y escritura de la eeprom. Todo esto es para automatizar el lab donde estudio, si la clave es de un profesor se debe abrir la puerta, encender energizar el laboratorio, si esta muy caliente encender el aire acondicionado y contar a las personas que entran, de modo que despues de las 5pm cuando salga la ultima persona el sistema debe apagarse. Algo de domotica
Bien, entonces, en que te podemos echar una mano?
Las rutinas de LCD vienen con el ccs , con el hitech pic y con el C18 no debieras reprogramarlas.
Esto si usa el C, claro está.
La lecto/grabacion de EEPROM también ya está resuelta y si navegas un poquito por el foro verás que varios preguntaron lo mismo en otras ocasiones y está bastante resuelto como se hace, no te costará casi nada.
La lectura del teclado matricial te aconsejo que uses el PORTB con los weak pullups habilitados. Eso hace que detectes la presion de las teclas a 0V. Es algo bastante simple, si no entiendes nuevamente pregunta y te respondermos.
Saludos y suerte con tu proyecto.