Autor Tema: No me funciona el programa i2c con pcf8583  (Leído 5733 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
No me funciona el programa i2c con pcf8583
« en: 05 de Diciembre de 2006, 13:57:35 »
Bueno, he intentao hacer un programa y su circuiito correspondiente con i2c, haciendo uso de pcf8583. Quiero hacer un reloj.
Tampoco tengo muxa idea, y alomejor m he ekivocado en alguna tonteria. En la simulacion no da fallo, solo q en la lcd no pone nada:

El codigo es el siguiente:

#include <16f648a.h>
#use delay(clock=4000000,RESTART_WDT)
#fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT,NOMCLR
#use I2C(MASTER,SDA=PIN_A1,SCL=PIN_A0,SLOW,RESTART_WDT)
#define use_portb_lcd TRUE         //utilizar el port b para lcd

#use fast_io(A)
#use fast_io(B)
#include <lcd.c>
#include <pcf8583.c>


#define ClockWrite 0xA0
#define ClockRead 0xA1
#define SetupClock 0x08
#define Control 0x00
#define Seconds 0x01

char c,s,m,h,d,nn,mo,y;

void ReadClock()
{
i2c_start();
i2c_write(ClockWrite);
i2c_write(Seconds);
RESTART_WDT();
i2c_start();
i2c_write(ClockRead);
c=i2c_read();
s=i2c_read();
m=i2c_read();
h=i2c_read();
d=i2c_read();
mo=i2c_read(0);
i2c_stop();

                               //lcd

nn = (d & 0x0f);
d >>= 4 & 0x0f;
lcd_gotoxy(1,1);

lcd_putc(d+'0');
lcd_putc(nn+'0');
lcd_putc('/');

nn = (mo & 0x0f);
mo >>= 4 & 0x0f;

lcd_putc(mo+'0');
lcd_putc(nn+'0');
lcd_putc('/');


lcd_gotoxy(1,2);

nn = (h & 0x0f);
h >>= 4 & 0x0f;

lcd_putc(h+'0');
lcd_putc(nn+'0');
lcd_putc(':');

nn = (m & 0x0f);
m >>= 4 & 0x0f;

lcd_putc(m+'0');
lcd_putc(nn+'0');
lcd_putc(':');

nn = (s & 0x0f);
s >>= 4 & 0x0f;

lcd_putc(s+'0');
lcd_putc(nn+'0');

}

main()
{
lcd_init();
while(1)
{
ReadClock();
}
}


La simulacion en proteus es la siguiente esta en el siguiente enlace.

http://jmoralesr.iespana.es/practica 12.DSN   (el enlace es "http://jmoralesr.iespana.es/practica 12.DSN" con practica 12.DSN separado no junto)

Seguro q se puede depurar, pero es un ejemplo q he visto en internet y no funcionaba, lo he cambiado un poco con los datos  q kiero y sigue sin funcionar.ayudadme
« Última modificación: 05 de Diciembre de 2006, 13:59:49 por homfly »

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #1 en: 06 de Diciembre de 2006, 09:27:23 »
uno mas sencillo, kitando la lcd:

#include <16f877.h>
#use delay(clock=4000000,RESTART_WDT)
#use I2C(MASTER,SDA=PIN_A1,SCL=PIN_A2,SLOW,RESTART_WDT)
#use fast_io(A)


#define ClockWrite 0xA0
#define ClockRead 0xA1
#define Seconds 0x01

char c,s,m,h,d,nn,mo,y;

void ReadClock()
{
i2c_start();
i2c_write(ClockWrite);
i2c_write(Seconds);
RESTART_WDT();
i2c_start();
i2c_write(ClockRead);
c=i2c_read();
s=i2c_read();
m=i2c_read();
h=i2c_read();
d=i2c_read();
mo=i2c_read(0); // Do a NAK on the last read.

}

main()

{
ReadClock();
}


luego seruia cuestion de engancharle un display o algo

Donde esta el fallo, xk lo simulo con proteus y no me fuciona

Desconectado andros

  • PIC16
  • ***
  • Mensajes: 111
Re: No me funciona el programa i2c con pcf8583
« Respuesta #2 en: 07 de Diciembre de 2006, 18:17:09 »
Como estás:

Si la simulación está correcta pero el sistema físico no te funciona puede que no sea un problema de la lógica del programa, sino que te esté fallando algo en el circuito. Lo digo porque el Lunes pasé unas 5 horas tratando de ver que fallaba en la comunicación i2c entre un 16F628A y un 16f873A, casi me saco los ojos. Luego de muchas pruebas me percaté que las resistencias de pull-up las tenía de 100k!, probé con unas de 10k y !WALÁ!, asunto solucionado.

No está demás que le heches una revisada al circuito.

Andros.!

Andros!

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #3 en: 07 de Diciembre de 2006, 20:11:17 »
gracias¡¡

lo revisare aver k tal. yo creo q esta mal el programa. si m decis q no, pues ya es del circuito, de las R de pull up o nose.mñn os comento

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: No me funciona el programa i2c con pcf8583
« Respuesta #4 en: 08 de Diciembre de 2006, 04:24:05 »
Amigo homfly:

Un par de reflexiones sobre tu código sin haberlos probado sobre un 16F877 real  :mrgreen:

1º.- El #use fast_io(X) es mas peligroso que una piraña en un bidet :D ya que deshabilita el automatismo del CCS C que coloca correctamente los set_tris_X delante de cada instrucción que implique una entrada o una salida por un pin determinado. Al usar fast_io(X) por el puerto X debes tú poner adecuadamente el set_tris_x() de ese puerto cuando desees leer o escribir en él. En tu código no hay ni un solo set_tris_X() por lo que sospecho que un problema viene de ahí precisamente. Quita el #use fast_io(A) y prueba, dejando que CCS C engorde el programa compilado pero te asegures que las direcciones de entrada/salida están bien colocadas.

2º.- El I2C en el PIC 16F877 usa de un hardware específico que tenemos disponible en los pines RC3 y RC4. Sin embargo en tu código usas A0 y A1, esto en si no debería ser fuente de problemas salvo que su funcionamiento real no va a hacer uso de las posibilidades del PIC sino que va a ser un I2C simulado por software que "incrusta" el CCS C al compilar. Yo siempre he sido partidario de que "si un pic tiene una funcion especifica para algo hay que usarla antes de probar cualquier otra combinacion posible".

3º.- En un programa "real" para un PIC "real" hay que adaptarse a la realidad. Quiero decir con esto que, por ejemplo, según leo en el Datasheet del PIC 16F877 resulta que tras un RESET, o al encenderlo, el PORTA del 16F877 se configura automáticamente como ENTRADA ANALÓGICA y no veo en tu código, al principo antes de empezar a hacer uso de tus funciones, ningún código encaminado a configurar cómo deseas que funcione tu puerto A en el PIC, qué funciones del mismo quieres habilitar y cuales deshabilitar .... Luego tu PIC al inicio empieza a funcionar como los señores de Microchip han decidido que debe funcionar, y eso puede coincidir o no con lo que tu necesitas. Un ejemplo claro es el que te he dado antes sobre el PORTA.

4º.- En los Fuses veo el NOWDT, o sea que deshabilitas el Watch Dog del PIC, pero despues usas los parámetros RESTART_WDT. Esto puede hacer que realmente habilites despues el Watch Dog de forma automática dentro de tus funciones, pero no veo en tu código una completa configuracion o uso del Watch Dog ... Esto puede hacer que el programa no funcione bien al estar el Whact Dog funcionando sin ser atendido correctamente. Si usas como fuse el NOWDT, elimina totalmente cualquier referencia posterior al WDT y asi te aseguras que no te va a molestar al poner en marcha tu programa.

Ea, mi último consejo es que te leas el Datasheet del 16F877 y veas qué estás usando y si de verdad está configurado como tu necesitas. Y tambien el manual del CCS C para ver qué influencia  y que posibilidades tienen las distintas opciones de las funciones que estas usando.

Y si no lo tienes claro, pregunta que aqui estamos.  :mrgreen:

« Última modificación: 08 de Diciembre de 2006, 04:28:45 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #5 en: 08 de Diciembre de 2006, 08:54:40 »
a ver, he apurao otro pokito el programa, ya con lo minimo y no se que me falta, xk la simulacion no tiene nada, El pic y el pcf8583, conectar SCL y SDA, le puesto el i2c debugger y tal, y no pasa nada.el programa se para. A ver si veis que me falta:

#include <16f877.h>
#use delay(clock=4000000)
#use I2C(MASTER,SDA=PIN_C4,SCL=PIN_C3,SLOW,RESTART_WDT)    // se me queda aki parado¡¡


#define ClockWrite 0xA0
#define ClockRead 0xA1

char c,m,h;

void ReadClock()
{
i2c_start();
i2c_write(ClockWrite);
i2c_start();
i2c_write(ClockRead);
c=i2c_read();
m=i2c_read();
h=i2c_read();
i2c_stop();

}
main()
{
ReadClock();
}


Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: No me funciona el programa i2c con pcf8583
« Respuesta #6 en: 08 de Diciembre de 2006, 11:35:47 »
main()
{
   ReadClock();
}

Empieza el programa, ejecuta el ReadClock() y ... se acabó.

Prueba con

main(){

   While(true){
      ReadClock();
      delay_ms(100);
   }
}

que puede leerse como

Empieza el programa, mientras sea verdad repite: ReadClock(); espera 100 milisegundos, repite ...
y asi hasta el infinito.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #7 en: 08 de Diciembre de 2006, 13:18:06 »
he cambiado eso y nada, sigue igual q antes,. Aqui una imagen de la simulacion q se para casi nada mas empezar el programa


Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #8 en: 09 de Diciembre de 2006, 07:53:23 »
una pregunta¡

tengo q cargar en el programa el pcf8583 q stoy usando?sk se m keda la simulacion parada cuando pongo #use i2c (master,...)

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: No me funciona el programa i2c con pcf8583
« Respuesta #9 en: 09 de Diciembre de 2006, 08:53:19 »
¿De dónde has sacado la libreria pcf8583? Puede ser que dicha libreria no funcione correctamente...

Aquí, en el foro oficial del fabricante del compilador CCS está el driver y un ejemplo ilustrativo para dicho componente.


Feliz Navidad!!!  :x)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #10 en: 09 de Diciembre de 2006, 12:51:01 »
en el ejemplo ese, dodne va conectao la lcd al 16f877?sk en el programa no viene nada al respecto

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: No me funciona el programa i2c con pcf8583
« Respuesta #11 en: 09 de Diciembre de 2006, 13:44:45 »
En dicho ejemplo, no se utiliza el lcd, sino el hyperterminal de windos, es decir el serial via RS-232.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado jmartinezg

  • PIC10
  • *
  • Mensajes: 3
Re: No me funciona el programa i2c con pcf8583
« Respuesta #12 en: 09 de Diciembre de 2006, 22:13:50 »
Hola homfly

Por que no pruebas generando un nuevo proyecto, es decir comienza desde cero, alguna vez me paso algo parecido, todo en orden pero no arrancaba, inicie de nuevo y lo logre  :-/

Saludos

JMartinez

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: No me funciona el programa i2c con pcf8583
« Respuesta #13 en: 09 de Diciembre de 2006, 23:34:08 »
ya m funciona, aunk en pantalla hace unas cosas muy raras al sacarlas por la lcd, kiero q lo saco ordenador y m saca dia hora mes se sale de la pantalla, en la 2º linea nada.

PCF8583_read_datetime(&dt);

   strcpy(weekday, weekday_names[dt.weekday]);


   printf(lcd_putc,"%s, %u/%u/%02u, %u:%02u:%02u\n\r",
           weekday, dt.day, dt.month, dt.year,
           dt.hours, dt.minutes, dt.seconds);
 en este prinft, nose k pone en pantalla. con tanos %...me lio.alguien m lo explica? sk no e dao nunca nada de esto, solo prinft("hola mundo"), jajaja

y otra cosa, al simularlo, q coge la hora q le metio o lo actualiza a cuando lo compile?sK Si se lo enseño al profesor y ve q es la misma hora siempre...
« Última modificación: 09 de Diciembre de 2006, 23:37:11 por homfly »

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: No me funciona el programa i2c con pcf8583
« Respuesta #14 en: 10 de Diciembre de 2006, 02:50:20 »
Holas homfly.
Se ve que has llegado hace poquito a este foro así que bienvenido.
Estaría bien que procurases no usar lenguaje sms a la hora de postear ya que resulta incómodo de leer y entender.
Dedícale un par de minutitos a leer las normas del foro http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1
Suerte con ese reloj.