Autor Tema: Libreria DS1307.h  (Leído 4728 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Libreria DS1307.h
« en: 27 de Junio de 2011, 18:35:46 »
Hola a todos.
Bueno, por estos días he estado preparando un poco las futuras clases de HCS08, del otro post, también aprovechando para eserar a que todos tengan un OSBDM...El asunto es que he querido trastear con un DS1307 y un JM16 que tengo por acá..arme una placa base como para entrenamiento, muy básica...tengo un problema con el módulo interno I2C, simplemente no obtengo información del DS1307..si alguien me puede decir que hjago mal en la librería, a ver si empezamos a llenar este foro de librerias para Freescale que tanta falta hace..

Código: [Seleccionar]
/*
 * DS1307.c
 *
 *  Created on: 22/06/2011
 *      Author: Marvicdigital
 */
/*
 * Direcciones en memoria para el DS1307, cada dirección 8 bits
 * (00)= Segundos en BCD formato, primeros 4 bits de 0-9, 3 bits más peso 0-5
 * Bit 7 siempre en 0  para habilitar el chip
 * (01)= Minutos, igual que en segundos BCD
 * (02)= Horas, en formato 12/24, el bit 6 selecciona el formato, si se selecciona
 * 24H el bit 5 sería el década de horas, si se selecciona 12 horas el bit
 * 5 sería la indicación de AM/PM
 * (03)= solo primeros 3 bits,BCD de 1-7 donde 1= domingo y 7=Sabado
 * (04)= Dias calendario de 1 - 31 (BCD)
 * (05)= Meses en BCD de 1-12
 * (06)= año en BCD de 00-99
 * (07)= Registro de control sobre la señal SQW/OUT
 */


#include "mc9s08jm16.h"
unsigned char decsegundos,segundos,minutos,horas,dia,fecha,mes,anio; // Son solo registros que puse para futura ampliación del código
unsigned char val,resultado,unidades,decenas;


void ds1307_on()
{
unsigned char temp;
IICF=0x0B; //configurado a bus 4MHZ I2C a 100Khz
IICC1_IICEN=1; //habilito el modulo I2C
while(IICS_BUSY);
IICS_ARBL=1;
IICC1=0b10110000; //Master,TX,Enable
IICD=0b11010000; //Dirección del DS1307 y lectura
for (temp=40;temp;temp--);
while(!IICS_TCF);
IICD=0x00; //Dirección del registro 0 que es segundos
while(!IICS_TCF);
IICC1_RSTA=1;
for (temp=40;temp;temp--);
while(!IICS_TCF);
IICD=0xD1;
for (temp=40;temp;temp--);
while(!IICS_TCF);
IICC1_TX=0;
resultado=IICD;
for (temp=40;temp;temp--);
while(!IICS_TCF);
IICC1_TXAK=1;
while (!IICS_TCF);
IICC1_IICEN=1;
IICS=0;


}

void convertir(unsigned char dataDS) //Convertir BCD a ASCII para LCD
{
unidades=(dataDS&15)+48;
decenas=((dataDS>>4)&15)+48;
}

Otra pregunta, no tengo configurado el OSCilador, lo tengo como viene por defecto el JM16...si lo dejo tal cual, el bus estaría a 4MHZ? o este es parte dle problema..? es que tengo la cabeza cuadrada de darle vueltas a este asunto..

Gracias por la respuesta ó guía que me puedan dar.

Saludos

« Última modificación: 27 de Junio de 2011, 18:39:48 por marvicdigital »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Libreria DS1307.h
« Respuesta #1 en: 27 de Junio de 2011, 18:45:49 »
Te recomiendo el siguiente post: http://www.todopic.com.ar/foros/index.php?topic=32915.msg274923#msg274923
Como para establecer funciones de "bajo nivel" que trabajen con el módulo I2C, y estés seguro que funcionen (i2c_start, i2c_stop, ....)... Luego implementar las funciones de "alto nivel" que corresponde al ds1307 ya es más fácil, y además así podemos entenderla, porque así  :shock:  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Libreria DS1307.h
« Respuesta #2 en: 27 de Junio de 2011, 19:39:08 »
Gracias Suky por responder tan rápido....y es verdad, lo ideal es organizar a bajo nivel el módulo, luego la librería; pero quería solo probar una lectura para saber si estaba bien encaminado..ya había leído el AN3291 y hasta con el libro que tengo acá con el ejemplo pero leyendo una EEProm...la verdad que ya con este dolor de cabeza que tengo no coordino nada  :D ..como información adicional, estoy con el CW10.1 en _Linux, no puedo usar el Device Initialitation.. :D , el JM está a 16MHz..

Bueno, gracias de nuevo por otra manito, a ver donde tengo el error

Saludos


 

anything