TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: jeremylf en 10 de Enero de 2008, 20:29:27
-
Hola a todos, soy nuevo en este programa y seguro ess es la causa de mi problema :D
Resulta q tengo un simple codigo echo en CCS con el PIC18F2550 para conectar, via I2C, con el RTC DS1307 y pues en el proteus todo funciona.. segundos, hora y eso. Pero mi problema esq yo le digo (por codgio) q active su pin SQW a 1Mhz y no me vota nada :?
Les dejo aqui todo en el adjuntado.
Espero puedan ayudarme.
Gracias.
salu2 8)
PD: En la vida real si funciona perfectamente x)
-
en el diagrama debes conectar a SQW a Vcc con una resistencia Pullup igual que SDA y SCL.
y la salida solo podra ser a 1Hz, 4Khz, 8Khz o 32Khz.
saludos :-)
-
Hola Rulo.
Esta conectado por medio de un led. Tambien lo probe como simplemente es:
(http://img132.imageshack.us/img132/6210/dibujocr8.th.jpg)
Pero tampoco funciona.
Lo q configurado a 1 Mhz esa salida desde mi programa en c.
Aun asi no funciona, no hay cambio cada 1 segundo en esa salida SQW del DS1307 :?
Gracias.
-
Ya se q fue!!
Donde inicializo el DS1307, exactamente aqui:
//DS1307//
//Habilito el enable del oscilador.
i2c_start();
i2c_write(0b11010000); //Direcion del DS1307, e indico q voy a escribir (ultimo bit [0]).
i2c_write(0); //Direcion 0 de la NVRAM para configurar el bit 7 (CH) para habilitar el oscilador.
i2c_write(0); //Habilito con un 0 la entrada del oscilador.
//Habilito su SQW/OUT.
i2c_start();
i2c_write(0b11010000); //Direcion del DS1307, e indico q voy a escribir (ultimo bit [0]).
i2c_write(7); //Direcion 7 de la NVRAM para configurar el Registro de control y activar el SQW/OUT.
i2c_write(0b00010000); //Lo configuro para que bote en su salida SQW una frecuencia de 1 Hz.
i2c_stop();
/////////
Donde pongo el enable del oscilador a 0 para q todo funcione, no pongo despues el i2c_stop, almenos poniendo esto ahora si funciona en el proteus. PERO! esto no deberia influir yaq poner un i2c_start (como lo pongo arriba) enves de un i2c_stop es algo comun en los dispositivos i2c, sirve para seguir con otro procedimiento, tal y como yo lo hago (en el mismo datasheet q tienn los de proteus sobre el DS1307 se demuestra bien claro, exactamente en la pagina 7 en la figura: DATA TRANSFER ON 2-WIRE SERIAL BUS Figure 5).
Asiq el error fue de proteus y no mio cmo lo estoy demostrado :-) yaq, como dije al principio de mi post, todo funciona perfectamente en la vida real :mrgreen:
Bien, espero q pueda servirle a alguien esto q me a pasado a mi.
Finalmente el codigo en C quedaria asi (solo la parte de incio del DS1307):
//DS1307//
//Habilito el enable del oscilador.
i2c_start();
i2c_write(0b11010000); //Direcion del DS1307, e indico q voy a escribir (ultimo bit [0]).
i2c_write(0); //Direcion 0 de la NVRAM para configurar el bit 7 (CH) para habilitar el oscilador.
i2c_write(0); //Habilito con un 0 la entrada del oscilador.
i2c_stop(); //Por no poner esto en el proteus no funcionaba!!! u.u'
//Habilito su SQW/OUT.
i2c_start();
i2c_write(0b11010000); //Direcion del DS1307, e indico q voy a escribir (ultimo bit [0]).
i2c_write(7); //Direcion 7 de la NVRAM para configurar el Registro de control y activar el SQW/OUT.
i2c_write(0b00010000); //Lo configuro para que bote en su salida SQW una frecuencia de 1 Hz.
i2c_stop();
/////////
Gracias igualmente Rulo por la atencion :)
salu2 8)