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..
/*
* 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