TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Miquel_S en 16 de Enero de 2010, 19:45:53

Título: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 16 de Enero de 2010, 19:45:53
Hola compañeros siento molestar pero estoy perdido, simulo dicho codigo sin resultado y francamente no veo el fallo, no se si no lo simulo bien o es que no funciona. Agradeceria que alguno de ustedes lo simulara para asi salir de dudas  :?  Y de paso mirad el codigo  :mrgreen:

Saludos
Miquel_S
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: MLO__ en 16 de Enero de 2010, 19:53:04
Hola.

Define si vas a usar el terminal virtual o el COMPIM, ya que al usar los dos al tiempo genera unos warm que puden afectar la simulacion.

Saludos
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 16 de Enero de 2010, 20:05:19
Hola MLO lo siento pero me pillas en bragas   :oops: por favor mira el esquema
Gracias
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: alexysar en 16 de Enero de 2010, 20:46:20
No se si sea tu caso, pero cuando lo trate de simular en proteus no pude porque no tengo los modelos vsm. Me fije y la mayoria de los componentes tienen el modelo esquematico, pero no el de simulación.
 
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 16 de Enero de 2010, 20:50:11
Lo siento pero no entiendo lo que quieres decir
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: alexysar en 16 de Enero de 2010, 20:54:18
Disculpa me explique mal, quise decir que hay componentes que proteus no puede simularlos porque no estan en su libreria.
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: jhozate en 16 de Enero de 2010, 20:58:36
a mi me simula bien,  lo q hay q hacer el quitar los COMPIM y dejar solo el hyperterminal. creo q la fallita esta en el soft
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: ASTROCAR en 16 de Enero de 2010, 21:32:05
Hola buenas tardes, yo estoy haciendo algo parecido con un ds1307 y un sensor de temperatura lm35 para sensar temperatura ambiente el caso es que tuve revisando tu codigo y no tengo muchas de las librerias que usas en tu proyecto. Lo otro es que adiferencia de tu proyecto elo mio es para mostrar tanto hora,fecha y temperatura en un cartel de led pero lo lo demas es el mismo principio.

Saludos y no pude ver tu simulacion porque primero quise revisar el codigo y no me compilo ya que no dispongo de las libreria que tu usar son diferente a las que tengo.

Observacion: Pienso tomar tu idea de usar sensor de temperatura con comunicacion i2c ya que estoy usando ese bus ya con el ds1307.

Atten.
Alexander Santana.
barcelona-Venezuela
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 16 de Enero de 2010, 21:42:33
Perdona por el fallo ASTROCAR te las paso:
EEPROM
Código: CSS
  1. void write_ext_eeprom(long int address, BYTE data)
  2. {
  3.    short int status;
  4.    i2c_start();
  5.    i2c_write(0xa0);
  6.    i2c_write(address>>8);
  7.    i2c_write(address);
  8.    i2c_write(data);
  9.    i2c_stop();
  10.    i2c_start();
  11.    status=i2c_write(0xa0);
  12.    while(status==1)
  13.    {
  14.       i2c_start();
  15.       status=i2c_write(0xa0);
  16.    }
  17. }
  18. BYTE read_ext_eeprom(long int address)
  19. {
  20.    BYTE data;
  21.    i2c_start();
  22.    i2c_write(0xa0);
  23.    i2c_write(address>>8);
  24.    i2c_write(address);
  25.    i2c_start();
  26.    i2c_write(0xa1);
  27.    data=i2c_read(0);
  28.    i2c_stop();
  29.    return(data);
  30. }

FLOATEE
Código: CSS
  1. ///////////////////////////////////////////////////////////////////////////
  2. ////        (C) Copyright 1996,2003 Custom Computer Services           ////
  3. //// This source code may only be used by licensed users of the CCS C  ////
  4. //// compiler.  This source code may only be distributed to other      ////
  5. //// licensed users of the CCS C compiler.  No other use, reproduction ////
  6. //// or distribution is permitted without written permission.          ////
  7. //// Derivative programs created using this software in object code    ////
  8. //// form are not restricted in any way.                               ////
  9. ///////////////////////////////////////////////////////////////////////////
  10.  
  11. // n is an offset into the eeprom.  For floats
  12. // you must increment it by 4.  For example if
  13. // the first float is at 0 the second one should
  14. // be at 4 and the third at 8.
  15.  
  16. WRITE_FLOAT_EXT_EEPROM(long int n, float data) {
  17.    int i;
  18.  
  19.    for (i = 0; i < 4; i++)
  20.      write_ext_eeprom(i + n, *(&data + i) ) ;
  21. }
  22.  
  23. float READ_FLOAT_EXT_EEPROM(long int n) {
  24.    int i;
  25.    float data;
  26.  
  27.    for (i = 0; i < 4; i++)
  28.      *(&data + i) = read_ext_eeprom(i + n);
  29.  
  30.    return(data);
  31. }

RTC
Código: CSS
  1. int BCDaBIN(int bcd){            //Conversion de BCD a Binario.
  2.    int varia;
  3.    varia = bcd;
  4.    varia >>= 1;
  5.    varia &=0x78;
  6.    return(varia + (varia >> 2) + (bcd & 0x0f));
  7. }
  8. void tiempo(byte &hour, byte &min, byte &sec){
  9.    i2c_start();         //Escritura
  10.    i2c_write(0xD0);     //Codigo de escritura
  11.    i2c_write(0x00);     //Puntero a la primera direccion
  12.    i2c_start();         //Lectura
  13.    i2c_write(0xD1);     //Codigo de lectura
  14.    sec = BCDaBIN(i2c_read()&0x7f);        //Lectura de los 7 bits de los segundos
  15.    min = BCDaBIN(i2c_read()&0x7f);        //Lectura de los 7 bits de los minutos
  16.    hour = BCDaBIN(i2c_read(0)&0x3f);      //Lectura de los 6 bits de las horas
  17.    i2c_stop();
  18. }

TEMP
Código: CSS
  1. void init_temp(int address){
  2.    i2c_start();
  3.    i2c_write(0x90 | (address<<1));      //Genera primer byte (1001A2A1A0W)
  4.    i2c_write(0xee);     //Inicia conversion
  5.    i2c_stop();
  6. }
  7. float read_full_temp(int address){
  8.    signed int datah;
  9.    int datal;
  10.    float dato;
  11.    i2c_start();
  12.    i2c_write(0x90 | (address<<1));     //Genera primer byte (1001A2A1A0-W)
  13.    i2c_write(0xaa);        //Leer temperatura
  14.    i2c_start();
  15.    i2c_write(0x91 | (address<<1));     //Genera primer byte (1001A2A1A0-R)
  16.    datah=i2c_read();       //Lectura parte alta
  17.    datal=i2c_read(0);      //Lectura parte baja y NACK
  18.    i2c_stop();
  19.       dato=datah;       //Conversion a flotante
  20.       if (datal==128) dato=dato+0.5;
  21.       return(dato);
  22. }

Saludos y que sirvan para algo
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: MLO__ en 17 de Enero de 2010, 02:30:38
Hola MLO lo siento pero me pillas en bragas   :oops: por favor mira el esquema
Gracias

Lo revise  ;-)  y por eso te digo que no mezcles el terminal virtual y el compim, usa solo uno, si usas los dos se genera un warm de logic contention y eso hace que no funcione...

saludos
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 17 de Enero de 2010, 05:45:51
Gracias MLO lo probare y digo cosas...

Saludos
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 17 de Enero de 2010, 13:10:26
Bueno, vamos por partes, he simulado el codigo con el virtual terminal sin el compim, como aconseja MLO de no usar las dos cosas a la vez y el resultado es que puedo leer los dos mensajes que serian del menu pero nada mas:

Pulsar 1 para leer datos
Pulsar 2 para visualizar datos

El  Lcd no visualiza nada, y se pulso 1 o 2 se me escriben en el terminal virtual pero sin resultado alguno.

La otra cosa que he probado es lo siguiente, leo textualmente:

El ISIS de PROTEUS proporciona un potente componente (COMPIM) que permite la simulacion a traves del puerto serie. Utilizando este componente no es necesario añadir al esquema del PIC un MAX232, ya que el propio componente gestiona la comunicacion con el puerto del PC. Utilizando este componente podemos comunicarnos con el propio PC (si tiene dos puertos serie o 1 puerto serie y un puerto USB -utilizando el convertidor-.

Para probar el ejemplo se pueden utilizar dos PC o un PC con dos puertos serie. Para observar los datos que envia el PIC se utiliza un COMPIM y tambien se puede utilizar un COMPIM para leer los datos que entran por el PC.
Por en el Virtual Terminal se pueden comprobar los datos de salida y entrada. En este caso se han conectado los dos puertos serie del PC(COM1 y COM2 con un cable).

Pero despues de esto sigo con el LCD en blanco y sin lectura de la eeprom ni lectura del sensor de temperatura.
PD: No sera que en la simulacion yo quiero ver lo que no se puede ver al ser una simulacion.

Miquel_S
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 17 de Enero de 2010, 13:36:20
 :-/ :-/ :-/ :-/ :-/
Ahora funciona no se el porque pero la simulacion funciona.
 :-/ :-/ :-/ :-/ :-/
Gracias compañeros
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: ramirez en 17 de Enero de 2010, 16:07:05
Hola Miguel_S, ¿Has modificado algo?, ya que yo no consigo ver nada por el LCD.¿Que versión de ISIS tienes?

Saludos y gracias
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 17 de Enero de 2010, 16:30:31
Hola ramirez la unica modificacion que he hecho a sido el terminal virtual te paso el archivo para que lo veas, la version del proteus es la 7.2 Profesional
Saludos
Miquel_S
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: ramirez en 17 de Enero de 2010, 17:00:25
Gracias Miguel_S por tu respuesta, en el LCD siempre veo el valor de: -1ºC ¿a ti te ocurre lo mismo?

Saludos
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Miquel_S en 17 de Enero de 2010, 17:43:58
Si, pero no le doy mucha importancia ya que creo que es problema de la simulacion.
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: caucau en 13 de Octubre de 2010, 17:06:11
hola, a ver si alguien me puede ayudar, yo estoy haciendo lo mismo que miguel,pero en mikroc y aún no logro guardar la temperatura en la memoria 24lc256,estoy simulando en proteus y al momento de compilar mi programa y simularlo en proteus la memoria me muestra otro valor no el que está mostrando el sensor de temperatura,nosé cual será el error,si alguien sabe por favor que me ayude,gracias.

Otra duda en el programa que está mas arrica sale:
i2c_write(adress>>8); que significa el adress>>8??

Gracias!
Título: Re: Leer temperatura y hora lectura y guardar en la eeprom
Publicado por: Suky en 13 de Octubre de 2010, 18:20:06
hola, a ver si alguien me puede ayudar, yo estoy haciendo lo mismo que miguel,pero en mikroc y aún no logro guardar la temperatura en la memoria 24lc256,estoy simulando en proteus y al momento de compilar mi programa y simularlo en proteus la memoria me muestra otro valor no el que está mostrando el sensor de temperatura,nosé cual será el error,si alguien sabe por favor que me ayude,gracias.

Otra duda en el programa que está mas arrica sale:
i2c_write(adress>> 8 ); que significa el adress>>8??

Gracias!

Muestra como lo implementas, sino difícil adivinar donde puede estar el problema.

y... i2c_write(adress>> 8 )  -> Address es de 16-bits, por lo tanto lo rota 8 veces a la derecha y entrega a la función los 8-bits mas significativos.


Saludos!