uControl
Marzo 25, 2017, 02:46:03 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Problema con 16F887 y RT DS1307 no se comunican  (Leído 101 veces)
0 Usuarios y 1 Visitante están viendo este tema.
LucasBols
PIC10F
*
Desconectado Desconectado

Mensajes: 12


« : Febrero 03, 2017, 03:37:23 »

hola, buenas tardes,

estoy programando con XC8 en el MPLAB X IDE, el pic es un 16F887 conectado a un DS1307,

el PIC con el DS1307 en el proteus andan, me tira un par de errores pero funciona,

el cristal interno está a 8Mhz
Código:
    /************** FRECUENCIA DEL OSCILADOR **************
     *
     * IRCF<2:0>: Internal Oscillator Frequency Select bits
     *      111 = 8 MHz
     *      110 = 4 MHz (default)
     *      101 = 2 MHz
     *      100 = 1 MHz
     *      011 = 500 kHz
     *      010 = 250 kHz
     *      001 = 125 kHz
     *      000 = 31 kHz (LFINTOSC)
     */
    OSCCONbits.IRCF0 = 1;
    OSCCONbits.IRCF1 = 1;
    OSCCONbits.IRCF2 = 1;
en el main, inicializo el 1307 así
Código:
    TRISCbits.TRISC3 = 1; /* SDA and SCL as input pin */
    TRISCbits.TRISC4 = 1; /* these pins can be configured either i/p or o/p */
    SSPSTATbits.SMP = 1; /* Slew rate disabled */
    SSPCONbits.SSPEN = 1; /* Enables the serial port and configures the SDA and
                           * SCL pins as the source of the serial port pins */
    SSPCON = 0x28; /* SSPEN = 1, I2C Master mode, clock = FOSC/(4 * (SSPADD + 1)) */
    /*
     * Velocidad=Fosc/(4*(SSPADD+1))
     * SSPADD=(Fosc/(4*Velocidad))-1
     * SSPADD=(8000000/(4*100000))-1
     */
    SSPADD = 0x13; /* 100Khz @ 8Mhz Fosc */
y más adelante, inicio el pulso de 1Hz desde el 1307 así
Código:
    for ( unsigned char i=0; i<10; i++ )
        __delay_ms(100);
   
    SEN = 1; /* Start condition enabled */
    while (SEN); /* automatically cleared by hardware */
    /* wait for start condition to finish */
 
    SSPBUF = 0xD0; /* Move data to SSPBUF */
    while (BF); /* wait till complete data is sent from buffer */
 
    SSPBUF = 0x07; /* Move data to SSPBUF */
    while (BF); /* wait till complete data is sent from buffer */
 
    SSPBUF = 0b00010000; /* Move data to SSPBUF */
    while (BF); /* wait till complete data is sent from buffer */
 
    PEN = 1; /* Stop condition enabled */
    while (PEN); /* Wait for stop condition to finish */
    /* PEN automatically cleared by hardware */
los errores del proteus creo que son por las resistencias de 10k que deben ser reemplazadas por unas pullup, pero funciona, el tema es que en el proto no,

el pulso del 1307 lo mando a un RB y cuando salta la int de flanco asc o desc enciendo o apago un led de acuerdo al flanco del pulso de 1 seg generado por el 1307,

en el proto el cristal de 32768 es un smd, pero eso no creo que afecte,

adjunto el dtsh del cristal, es el MC-306, le soldé un par de cables desde los pines 1 y 4 a x1 y x2 del 1307

también adjunto el circuito del proto, en el circuito me olvidé de dibujar las resistencias de 10k a 5v de SCL, SDA y SQW/OUT, pero el proto las tiene,

¿alguna recomendación?

Muchas gracias,

Saludos,

* Simulation_Log.png (13.55 KB - descargado 8 veces.)
* I2C_Debug.png (81.73 KB - descargado 8 veces.)
* 32.768KHZ MC306-327680K-A0-1.png (141.24 KB - descargado 10 veces.)
* circuito_proto.png (25.01 KB - descargado 14 veces.)
« Última modificación: Febrero 03, 2017, 03:49:25 por LucasBols » En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.078 segundos con 24 consultas. (Pretty URLs adds 0.04s, 2q)