TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jonathanmedina en 20 de Octubre de 2005, 03:12:00
-
Wenas amigos estoy intentando que funcionen un reloj de dallas y una memoria EEPROM los dispositivos son 24FC512 y DS1307, ambos funcionan correctamente por separados, pero a la hora de colocarlos en el mismo bus el reloj no funciona bueno la memoria tampoco, respecto al direccionemiento quien tan solo la requieren es la memoria, el reloj no requiere direccion hardware, creo que lo que hago esta bien , aqui os dejo el código haber si me podeis exar un cable con esto pq me esta volviendo loco , gracias por vuestra atencion:
///////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//
#include <18F452.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(master, sda=PIN_C4, scl=PIN_C3)
#include "eeprom.c"
#include "reloj.c"
void main(void)
{
int i;
char vector[]={"A","B","C","D","E","F","G","H"};
output_high(CTR);
input(PIN_B5);
// init_ext_eeprom();
ini_reloj();
printf("Real Time Clock
"
;
printf(" ds1307
"
;
delay_ms(3000);
while(1)
{
leer_reloj();
i2c_start();
i2c_write(0x01);//direccon de la memoria, con A0 a 5volts. A1 y A2 a Vss
for(i=0;i<=8;i++)write_ext_eeprom(i,vector);
printf("
%2x-%2x-20%2x",date,month,year);
printf("
%2x:%2x:%2x",hours,minutes,seconds);
i2c_start();
i2c_write(0x01);
for(i=0;i<=8;i++)printf("leyendo:%X
",read_ext_eeprom(i));
}
}
-
Dices que el reloj no reguiere direccion hardware?? A ver, cualquier dispositivo que va conectado al bus I2c tiene una direccion, esta direccion biene dada por el fabricante, y los tres bits de mas peso(creo) son los que puedes escoger poniendo a 0 o a 1 unas patillas determinadas en el integrado. Pueden ser las patillas A0, A1, A2 en algunos casos, en otros tienen una numeracion distinta. Lo que quieres decir es que no tiene las patillas A0, A1,A2 con lo que no tendras que completar la direccion, sino que el fabricante la da entera.Y ahora mi pregunta
Si en un mismo bus quieres conectar 2 RTC como lo harias si tienen exactamente la misma direccion??
Salu2
-
![Llorica Llorica]()
No tengo ni idea de lo que puede ser, la verdad es que todo esta direccionado, por que las direcciones del reloj las da el fabricante, estoy modificando las direcciones de escritura y lectura a ver si hay suerte y esto tira para adelante, la verdad es que esta montado en una proto-board, ahora voy a hacer una PCB a ver si se trata del bus, no me fio de los cables, gracias por responder y espero que esto furrule
.
-
hola jonathan, como te fue con tu problema? espero que vaya bien, recien entro al foro depues de tiempo asi que no se si aun te sirva de algo mi aporte:
Que valor de resistencia le estas poniendo a la linea SDA y SCL? (las que van a 5v)estuve trabajando con el ds1307 y tenia el mismo problema estaba usando menos de 1k, le puse 2k y todo ok! consultando un poco mas averigue que los valores optimos son entre 1k y 2k
Bueno espero haberte ayudado en algo
Saludos
-
Tambien valores optimos de resistencias push-pull son 4k5, aunque todo depende de los dispositivos a conectar en el bus.
Suerte!!!
-
Hola, tarde pero bueno, como me paso lo mismo te dejo la solucion, el problema es que el DS1307 solo opera a 100 KHZ y por defecto el I2C se configura automaticamente en 400 KHZ, entonces lo que hay que hacer es agregar esto:
#use I2C(master, sda=PIN_C4,scl=PIN_C3,FORCE_HW,slow)
saludos
ARIEL
-
amigo pikman, yo ya trabaje con el ds1307 y no me dio ningun problema y no use el FORCE_HW, sinceramente pienso que hay un error en el direccionamiento o sino en el hardware, nos ayudaria saber todo el programa incluyendo tu libreria reloj() y si pudieras tu hardware, asi te podriamos ayudar de una mejor manera
-
Ombaya, si es posible que no hayas tenido problemas porque en la version que has usado no pone por defecto 400KHZ, no recuerdo desde cuando el compialdor empezo a poner esto solo y no andubo mas, de cualquier manera seria conveniente ver el driver,
saludos
ARIEL