Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/10/2009 #1


Grabar dos variables tipo float(32 bits) en EEPROM interna utilizado CCS
Hola estoy utilizando el compilador CCS C, estaba realizando un programa para mi proyecto de graduacion, y en una parte necesito grabar dos variables tipo Float (tamaño 32 bit), en la EEPROM interna del pic, la cual tiene un tamaño de 256 BYTES. Supongo que lo que hay que hacer es dividir la variable Float en 4 y guardarla en 4 posiciones de la memoria, pero no tengo idea de como hacer, ni de como puedo leer luego esta variable cuando la necesite.

El dato que necesito guardar proviene de una conversion A/D de 10 bits, entonces en caso de que no fuera posible guardarla como tipo Float, quisiera saber como podria guardar el valor de 10bits de la conversion en la EEPROM . No puedo realizar una conversion de 8bits, necesito que esta sea de 10 bits.
23/10/2009 #2

Avatar de Ferny

Respuesta: Grabar dos variables tipo float(32 bits) en EEPROM interna utilizado CCS
Las siguientes funciones escriben variables de 16 bits, que te sirve para guardar los 10 bits de tu AD, o bien puedes modificarlas para que guarden los 32 bits en float.

Código:
// Lee un número de 2 bytes de la EEPROM
unsigned long read_eeprom_16bits(unsigned char add) {
    unsigned long a1, a2, result;

    a1 = read_eeprom(add) & 0x00FF;
    a2 = read_eeprom(add+1) & 0x00FF;
    result = a1 | (a2 << 8);
    return result;
}

// Escribe un número de 2 bytes a la EEPROM
void write_eeprom_16bits(unsigned char add, unsigned long value) {
    write_eeprom(add, (value & 0x00FF));
    write_eeprom(add+1, ((value & 0xFF00) >> 8));
}
26/10/2009 #3


Respuesta: Grabar dos variables tipo float(32 bits) en EEPROM interna utilizado CCS
Gracias por la respuesta, me di cuenta tambien que PIC C trae una libreria con funciones para grabar este tipo de variables se llama "internal_eeprom.c"
05/04/2011 #4


morris888 dijo: Ver Mensaje
Gracias por la respuesta, me di cuenta tambien que PIC C trae una libreria con funciones para grabar este tipo de variables se llama "internal_eeprom.c"
Amigo, veo que conseguiste guardar un dato tipo long32 en la memoria del pic, necesito tu ayuda pues estoy realizando mi tesis y necesito alamacenar en la memoria hasta un valor de 99999, solo he conseguido guardar hasta 64534
Espero alguna ayuda
Gracias

Hola a todos,

Estoy realizando mi tesis y necesito guardar un dato tipo long32 producto de un conteo, este conteo puede llegar hasta 99999 y solo he conseguido almacenar hasta 65434

Espero su ayuda

Saludos
27/01/2012 #5


Hola amigos, tengo una gran duda, en el comando write_eeprom(address, value); address que rango de valores puede tomar(ejem 0-10000), value es el valor que queremos guardar, en ese caso puede ser un valor de una entrada AD del mismo pic, que se guarde directamente, y por ultimo si me pueden dar un sencillo ejemplo de como usar este comando, por ejemplo que guarde los datos, que provienen de un conversor análogo digital, gracias
04/02/2012 #6

Avatar de arrivaellobo

Es muy sencillo darxin, sólo tienes que tener en cuenta el tamaño del dato que quieres guardar. Si tienes configurado en el ADC una resolución de 8 bits, la solución sería:
adc=read_adc();
write_eeprom(0x01, adc);

En la dirección 0x01 de la eeprom tendrías el valor del ADC.

Pero si tienes una resolución de 10 bits, necesitas utilizar alguna función que lo lleve a cabo, como dice morris888, en el archivo <internal_eeprom.c> existe una función que lo realiza.

Un saludo
04/02/2012 #7


muchas gracias arrivaellobo, por tu ejemplo, pero una consulta sobre la resolución de 8bits, se debe declarar esta o ya esta lista en picc, y cuando se lea este dato desde la memoria eeprom este valor saldra en 8 bit tambien o como un entero?, espero sus aportes y muchas gracias!
04/02/2012 #8

Avatar de arrivaellobo

Para la resolución de 8 bits tienes que declararlo al principio del código, con la sentencia
#device adc=8
Al leer el valor de la eeprom, puedes hacerlo así:
int valor=0;
valor=read_eeprom(0x01);


En "valor" tendrás los 8 bits leídos.

Un abrazo
04/02/2012 #9


muchas gracias arrivaellobo por tus respuestas y consejos, mira es que intento hacer correr mi codigo con esta instrucción y no me funciona, lo otro que te queria preguntar es sobre tu ejemplo en la variable "valor" si yo quisiera enviarla a un printf y lo configuro para que salga como un numero entero, podría estar bien?, en verdad gracias pos tus consejos y tu tiempo, saludos!
#include <16f88.h>
#include <stdio.h>
#deviceADC=8 //aqui nose porque esta linea me presenta error?
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B5)//Quiero usar un Circuito Integrado max232 para descargar los datos hasta el computador
04/02/2012 #10

Avatar de arrivaellobo

Ese error te lo muestra porque pones la línea #deviceADC=8 "demasiado lejos". Debes ponerla justo después del #include.
Y para enviar "valor" por RS232 sería como un valor entero normal:

printf("Valor = %d" ,valor);

Un saludo
05/02/2012 #11


muchas gracias arrivaellobo tus consejos siempre son de ayuda, lo unico en lo que me queda duda es sobre las direccion de la memoria eeprom, desde donde comienzan o como se puede utilizar, ya sabes los rangos en los cuales se pueden escribir cosas, muchas gracias por tus consejos, saludos! cuídate
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.