gracias chicos,vuestra ayuda me ha servido bastante,y una mas a ver si puede ser...
yo ahora tengo el sensor de temp y otro de humedad,y necesito guardar los datos de temperatura de la dirección 0 a la 16000 y la humedad de la 16000 a la 32000.No sé como hacer que escriba temp y a continuación escriba humedad. porque según lo que hice,tiene que guardar 1o las 16000 primeras y después el resto,y no de forma alternativa..no se si me expliqué jeje. Hasta aquí he podido hacer..
#include <18f4550.h>//Definimos la librería del Pic.
#device adc=10 //Establecemos la conversión analógica digital a 9bits.
#FUSES INTHS,MCLR // Definimos los Fuses
#use delay(INTERNAL=8MHZ) //El reloj interno empleado es de 4hz
#use I2C(Master, sda=PIN_B0, scl=PIN_B1)
#use rs232 (BAUD =9600 , XMIT=PIN_C6 , RCV=PIN_C7 ) //RC6= Tx
//////////////////////////////////////////////////////////////////////////////
int direccion_alta=(0b00000000);
int direccion_baja=(0b00000000);
int8 decimales_cero=(0);
int enteros;
int htemp;
int ltemp;
int16 direccion=(0b00000000);
float vout;
float humedad;
float voltaje;
int8 sin_decimal;
#int_rda //La interrupción RDA se habilita cuando recibe un dato via rs-232
void lectura_humedad()
{
for(direccion=0;direccion<=0X7ffe;direccion=direccion+2)
{
i2c_stop();
delay_ms(50);
i2c_start();
delay_ms(50);
i2c_write(0b10100000);//direccion dispositivo
delay_ms(50);
i2c_write(direccion_alta);// preparas direccion a leer
delay_ms(50);
i2c_write(direccion_baja);
delay_ms(50);
i2c_start();
delay_ms(50);
i2c_write(0b10100001);// preparo para leer dispositivo
delay_ms(50);
printf("HUMEDAD:\r\n");
sin_decimal=i2c_read(); //dato de la humedad
printf("%i\r\n",sin_decimal);
//}
//i2c_stop();
///////////////////////////////////////////////////////////////////////////////////////////
i2c_stop();
i2c_start();
delay_ms(50);
i2c_write(0b10100000);//direccion dispositivo eeprom
delay_ms(50);
i2c_write(direccion_alta);
delay_ms(50);
i2c_write(direccion_baja);
delay_ms(50);
i2c_start(); //condicion de inicio repetida
delay_ms(50);
i2c_write(0b10100001);// preparo para leer dispositivo eeprom
delay_ms(50);
printf("temperatura:\r\n");
// for(direccion=4000;direccion<=0X7ffe;direccion=direccion+2)
// {
enteros=i2c_read(); //dato de la temperatura
printf("%i\r\n",enteros);
}
i2c_stop();
printf("Fin del Informe... presione RESET \n");
for(;
{}
}
void main()
{
enable_interrupts(INT_RDA); //Habilita la interrupción RDA cuando recibe un dato via rs-232
enable_interrupts(GLOBAL); //Habilita la interrupción global para que sea posible escribir
printf(" La humedad y la temperatura se estan almacenando ¿quieres leer los datos?\r \n");
setup_adc(ADC_CLOCK_INTERNAL); //activas el reloj inteno del conversor analogico digital
setup_adc_ports(AN0); //activas el puerto analogico AN0
set_adc_channel(0); //activas el canal 0 analogico-digital
delay_us(20); //un retardo de 20us para establecer los puertos
////////////////////////////////Escribe humedad eeprom//////////////////////////
vout=read_adc();
voltaje=(5*vout/1024);// ya que estamos trabajando con 10 bits
humedad=(voltaje-0.
/0.031;
int sin_decimal=humedad; //Convierto numero decimal en numero entero
delay_ms(50);
// printf("humedad:%i %%\r\n",sin_decimal);
for(direccion=0;direccion<=0X7ffe;direccion=direccion+2)
{
i2c_start();
delay_ms(50); //Se inicia la comunicación I2C.
i2c_write(0b10100000); //dirección del dispositivo y último bit 0 de escritura.
delay_ms(50);
i2c_write(direccion>>
; //escribe el valor alto en ésta dirección.
delay_ms(50);
i2c_write(direccion); //escribe el valor alto en ésta dirección.
delay_ms(50);
i2c_write(sin_decimal); // escribimos el dato que queremos almacenar.
delay_ms(50);
i2c_write(decimales_cero); //escribimos un 0 para evitar un error(humedad=-1)
delay_ms(1000);//--->1seg
i2c_stop(); // Finalizamos la comunicación I2C.
/////////////////////////////////////////////////////////////////////////////////////
int enteros=htemp;//valor alto = temperatura
int ltemp=decimales_cero; //valor bajo = 0
i2c_start(); // Inicio la comunicación I2C
i2c_write(0b10011110); // escribe Dirección I2C del TCN75A.
delay_ms(50);
i2c_write(0b00000001); // Envío Configuración del TCN75A para ir al registro de configuración
i2c_write(0b00000000); // Envío Configuración del TCN75A para ir al registro de temperatura
delay_ms(10); //////////////////////////////////////////////////////////////////
i2c_stop();
i2c_start(); // Inicio la comunicación I2C
i2c_write(0b10011110); // escribe Dirección I2C del TCN75A.
delay_ms(350);
i2c_write(0b00000000); // Envío Configuración del TCN75A para ir al registro de temperatura
i2c_start(); // Condición de inicio repetida I2C
i2c_write(0b10011111); // lee la dirección I2C del TCN75A.
delay_ms(350);
htemp=i2c_read(); //valor alto
delay_ms(350);
ltemp=i2c_read(); // valor bajo
delay_ms(350);
i2c_stop(); //Condición de parada
//printf("temperatura:%iº\r\n",enteros);
///////////////////////escribir tem en eeprom/////////////////////////////////
// for(direccion=4000;direccion<=0X7ffe;direccion=direccion+2)
// {
i2c_start();
delay_ms(50); //Se inicia la comunicación I2C.
i2c_write(0b10100000); //dirección del dispositivo y último bit 0 de escritura.
delay_ms(50);
i2c_write(direccion>>
; //escribe el valor alto en ésta dirección.
i2c_write(direccion); //escribe el valor alto en ésta dirección.
i2c_write(enteros); // escribimos el dato que queremos almacenar.
i2c_write(decimales_cero); //escribimos un 0 para evitar un error(humedad=-1)
delay_ms(500);//--->1seg
i2c_stop(); // Finalizamos la comunicación I2C.
}
printf("La memoria esta llena.. \n");
for(;
{}
}