Hola! soy nuevo en este foro! estoy elaborando un reloj propeller con un pic18f4550 y un ds1307 para guardar ahí la hora, he estado probando un programa que hice por medio del manual y la hoja de datos pero no funciona, espero y me puedan ayudar, de antemano gracias!
Código:
#include <p18f4550.h>
#include <i2c.h>
#define RTC_SDA PIN_B0
#define RTC_SCL PIN_B1
#pragma config PLLDIV = 1 // No prescale (4 MHz oscillator input drives PLL directly)
#pragma config CPUDIV = OSC1_PLL2 // [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
#pragma config USBDIV = 1 // USB clock source comes directly from the primary oscillator block with no postscale
#pragma config FOSC = XT_XT // HS oscillator, HS used by USB
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor disabled
#pragma config IESO = OFF // Oscillator Switchover mode disabled
#pragma config PWRT = OFF // PWRT disabled
#pragma config BOR = OFF // Brown-out Reset disabled in hardware and software
#pragma config VREGEN = OFF // USB voltage regulator disabled
#pragma config WDT = OFF // HW Disabled - SW Controlled
#pragma config MCLRE = ON // MCLR pin enabled; RE3 input pin disabled
#pragma config LPT1OSC = OFF // Timer1 configured for higher power operation
#pragma config PBADEN = OFF // PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config CCP2MX = ON // CCP2 input/output is multiplexed with RC1
#pragma config STVREN = ON // Stack full/underflow will cause Reset
#pragma config LVP = OFF // Single-Supply ICSP disabled
#pragma config ICPRT = OFF // ICPORT disabled
#pragma config XINST = OFF // Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
#pragma config DEBUG = OFF // Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
// Data and code memory without protection
unsigned char SEG,MIN,HRS,DAY,DIA,MES,ANO,SEGUNDOS;
int BAN=1;
void main(void)
{
//CONFIGURAR SSPCON1
SSPCON1 = 0X00;
SSPCON1bits.SSPEN = 1;
// CONFIGURAR BRG A velocidad de 100 KHZ con un cristal de 4MHZ
SPBRG = 0x027;
//CONFIGURACION ADCON1 TODOS SALIDAS DIGITALES
ADCON1=0x0f;
//CONFIGURACION TRISB
TRISB= 0x03;
TRISD=0x00;
PORTD=0B00000000;
SEG=0b00000000;
IdleI2C();
StartI2C();
IdleI2C();
WriteI2C(0B11010000);// DIRECCION DEL DS1307 EN ESCLAVO
IdleI2C();
WriteI2C(0B00000000);//INDICA QUE POSICION SE VERA CAMBIADA, EN ESTE CASO LOS SEGUNDOS
IdleI2C();
WriteI2C(SEG);// iNDICA EL SEG. ACTUAL
IdleI2C();
StopI2C();//DEJA DE MANDAR INSTRUCCIONES
do
{
//pROCESO DE lECTURA
IdleI2C();
StartI2C();
IdleI2C();
WriteI2C(0b11010000); // INDICA LA DIRECCION DEL ESCLAVO CON EL BIT 0=0 PARA ESCRIBIR EL APUNTADOR
IdleI2C();
WriteI2C(0b00000000); // PONE EL PUNTERO EN EL REGISTRO 0(SEGUNDOS)
IdleI2C();
RestartI2C(); // REINICIA I2C
IdleI2C();
WriteI2C(0b11010001); // SE COLOCA LA DIRECCION DEL ESCLAVO CON EL BIT 0=1 PARA INDICAR LECTURA
IdleI2C();
SEGUNDOS = ReadI2C(); // GUARDA LA LECTURA DE LOS SEGUNDOS
AckI2C();
IdleI2C();
NotAckI2C();
IdleI2C();
StopI2C();
PORTD=SEGUNDOS;//SE MANDA LA VARIABLE DE SEGUNDOS AL PUERTO D
}while(BAN==0);
}
Última edición por un moderador: