Autor Tema: Ayuda 16f877a y reloj ds1307  (Leído 6684 veces)

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

Desconectado elavismo

  • PIC10
  • *
  • Mensajes: 30
Ayuda 16f877a y reloj ds1307
« en: 12 de Abril de 2007, 19:11:17 »
Buenas, les escribo en esta oportunidad para que me ayuden. Monte un circuito en proteus y en placa. Consta de un 16f877a que usara un teclado, lcd, memoria 24c256 y un relog ds1307. estoy probando modulo a modulo y tanto en la placa como en proteus funciona la lcd y el teclado, pero cuando pasé a probar el ds1307, en el proteus funciona pero en la placa no. Tengo desconectada la memoria, y el error da que el circuito se vuelve loco con solo conectar el relog a su base en la placa. le desabilité las instrucciones de configuracion y llamado al relog y sigue dando ese problema. sin embargo al quitar el relog funciona el circuito y vuelve a mostrar los mensajes en la LCD. en el codigo que les coloco abajo se podrán dar cuenta que le desabilité el relog. En proteus el relog arranca, se configura y logro sacar los datos y mostrarlos en pantalla. En el circuito de placa revisé las pistas y están bien. No se si será un problema de codigo el cual el proteus no  le interesa pero en la realidad si sirve! estoy comenzando a programar en C. estoy usando i2c y la instruccion  #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3,force_hw) esta en el archivo proyecto.h que se esta incluyendo en el programa.

#include "D:\electronica\practicas\c\proyecto martine\otro\proyecto.h"
#include <LCD.C>
#include <_DS1307.C>
#include <24256.C>
#use fast_io(b)
#use standard_io(c)
#byte portb=0x06
#byte portc=0x07
#define FILA1  PIN_B3
#define FILA2  PIN_B4
#define FILA3  PIN_B5
#define FILA4  PIN_B6
#define COLUMNA1  PIN_B0
#define COLUMNA2  PIN_B1
#define COLUMNA3  PIN_B2




int  tecla_pulsada()  ESTA INSTRUCCION ES DELE TECLADO Y COMO ES MUY LARGA LA ELIMINE AQUI EN EL FORO



void main()
{
   int    tecla,hrs,min,sec,day,month,yr,dow,dato;
   int16 dir;
   set_tris_b(0b00000111);
   set_tris_c(0b00000000);
   delay_ms(10);
   //ds1307_init(DS1307_ALL_DISABLED); // inicialización de relog ds1307
   //ds1307_set_date_time(9,8,6,2,18,51,00);
   lcd_init();
   lcd_putc("\f");
   delay_ms(15);
   

   //init_ext_eeprom();
   
   while(true)
   {
   
         lcd_putc("\f");
         delay_ms(10);
         //ds1307_get_time(hrs,min,sec);
         //ds1307_get_date(day,month,yr,dow);
         printf(lcd_putc,"hola");
         delay_ms(1000);
     
     
   
     
   }
 

}

« Última modificación: 26 de Febrero de 2008, 18:45:51 por un Moderador »

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Ayuda 16f877a y relog ds1307
« Respuesta #1 en: 12 de Abril de 2007, 19:37:13 »
El reloj DS1307 no acepta comunicacion I2C en modo FAST debes colocar Slow.

saludos!

Desconectado elavismo

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda 16f877a y relog ds1307
« Respuesta #2 en: 12 de Abril de 2007, 19:43:27 »
Como hago eso amigo? pero porque me da el error que el circuito se vuelve loco y no se que es lo que es! cuando coloco el ds1307 pero tengo las instrucciones del ds1307 desabilitadas, osea que para el 877a no existe el relog en ese momento, salvo que solo está conectado!

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Ayuda 16f877a y relog ds1307
« Respuesta #3 en: 12 de Abril de 2007, 20:40:48 »
Pero si la memoria 24c, coloca en la configuracion de fusibles en lugar de FAST coloca Slow.

Desconectado elavismo

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda 16f877a y relog ds1307
« Respuesta #4 en: 13 de Abril de 2007, 11:04:53 »
desconecté el relog, y conecté la memoria por primera vez en la placa. Le habilité las intrucciones de inicialización y llamdos y fuciona perfecto gracias a dios! pero el relog sigue dando el mismo problema. Hoy compré otro para descartar que estuviera malo y sigue el mismo problema.Con tan solo conectarlo al circuito, se vuelve loco todo y salen un monton de caracteres erróneos en la LCD y el micro se resetea.

Desconectado elavismo

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda 16f877a y relog ds1307
« Respuesta #5 en: 17 de Abril de 2007, 19:25:01 »
ya vi cual era el error que estaba causando. una resistencia de la pata 7 que conecté a vcc. Sin embargo no levanta el reloj. No logro accesar a el desde el microcontrolador.. cargo los segundos y siempre obtengo el mismo valor, no se incrementan.. No se que hacer!!

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Ayuda 16f877a y relog ds1307
« Respuesta #6 en: 23 de Abril de 2007, 17:03:47 »
 :? No entiendo el problema que tenias antes!! El pin 7 del DS1307, no aecta su funcionamiento. a no ser que lo colocaras en corto con VCC pero bueno dices que tenia resistencia.

Ahora bien dices que no incrementa el DS1307 verifica esto:

1.) Que no le tienes bien conectado el cristal de 32768Hz

2.) la fuente de alimentacion no esta bien, coloca un capacitor de 0.1uF de tantalio entre VCC y GND cerca al DS1307.

3.) Coloca resistencias pull-up de 4.7K en el bus I2C y luego subelas a 10K para ver cuall de las 2 te da mejor resultado.

4.) Mira bien que esten bien conectados SDA y SCL. Lo digo porque paso a otro forero que despues de 5 dias peleando con esto tambien, resulto que tenia invertidos los hilos del I2C.

5.) Debes comunicarte I2C en modo slow de nos er asi no te funcionara.

6.) puedes hacer esta prueba para verificar que si te estas comunicando.

Escribe el el registro interno del Ds1307 llamado control, el numero 0x10 y conecta en el pin SQW un led de la siguiente forma:



Si hay comunicacion, el led debera parpadear con una frecuencia de 1Hz.
« Última modificación: 23 de Abril de 2007, 17:09:25 por PICmouse »

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Ayuda 16f877a y relog ds1307
« Respuesta #7 en: 23 de Abril de 2007, 17:10:26 »
La resistencia debe ser de 1K, no de 10K. esta mal en el dibujo que te pase anteriormente.  8)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Ayuda 16f877a y relog ds1307
« Respuesta #8 en: 23 de Abril de 2007, 17:11:04 »
Esto lo publiqué en Picmania hace tiempo ...



... En esta tabla tener en cuenta que el Bit 7 de la dirección 0x00 hay que colocarla a 0 para que todo funcione. Es el Enable general del dispositivo que pone en marcha el oscilador interno.  ...

No se si por ahí irá algo ...
« Última modificación: 23 de Abril de 2007, 17:15:45 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado elavismo

  • PIC10
  • *
  • Mensajes: 30
Re: Ayuda 16f877a y relog ds1307
« Respuesta #9 en: 24 de Abril de 2007, 07:30:35 »
Alguien me pasa alguna libreria que funcione? que hayan probado y que cumpla con las modificaciones? Porque me sigue sin funcionar el Ds1307 en el protoboard, pero en el proteus si. Ya probé las pistas, y varié las resistencias pull up.. cambie el cristal y revicé su contacto, su voltaje..

Lo probé en ASM con mis viejos códigos y funciona..

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: Ayuda 16f877a y relog ds1307
« Respuesta #10 en: 03 de Agosto de 2011, 18:40:33 »
:? No entiendo el problema que tenias antes!! El pin 7 del DS1307, no aecta su funcionamiento. a no ser que lo colocaras en corto con VCC pero bueno dices que tenia resistencia.

Ahora bien dices que no incrementa el DS1307 verifica esto:

1.) Que no le tienes bien conectado el cristal de 32768Hz

2.) la fuente de alimentacion no esta bien, coloca un capacitor de 0.1uF de tantalio entre VCC y GND cerca al DS1307.

3.) Coloca resistencias pull-up de 4.7K en el bus I2C y luego subelas a 10K para ver cuall de las 2 te da mejor resultado.

4.) Mira bien que esten bien conectados SDA y SCL. Lo digo porque paso a otro forero que despues de 5 dias peleando con esto tambien, resulto que tenia invertidos los hilos del I2C.

5.) Debes comunicarte I2C en modo slow de nos er asi no te funcionara.

6.) puedes hacer esta prueba para verificar que si te estas comunicando.

Escribe el el registro interno del Ds1307 llamado control, el numero 0x10 y conecta en el pin SQW un led de la siguiente forma:



Si hay comunicacion, el led debera parpadear con una frecuencia de 1Hz.


No se a que te refieres con el modo fast, por lo que veo en el codigo, el fast_io es para trabajar con los puertos, para no tener que declarar si los puertos son in o out, nada que ver con la velocidad del rtc.
Por lo que he visto de circuitos, siempre las pullup son de 4,7 o 10 k, a ti te funciono con 1k?
Saludos


 

anything