Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

programming DS1307 and PIC18f452 with C18

Status
Not open for further replies.

baby_1

Advanced Member level 1
Joined
Dec 3, 2010
Messages
415
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,298
Activity points
4,277
Hello
here is my program

PHP:
#include <p18f452.h>
#include <delays.h>
#include<stdio.h>
#include <usart.h>
#include<sw_i2c.h>
#include "LCD.h"


#pragma config OSC=HS
#pragma config WDT=OFF
#pragma config PWRT=ON
#pragma config LVP=OFF

unsigned char x;

void babys(){
SWStartI2C();
SWPutcI2C(0xd0);
SWPutcI2C(0);
SWPutcI2C(0);
SWStopI2C();
}

void babyx(){
SWStartI2C();
SWPutcI2C(0xd0);
SWPutcI2C(0);
SWRestartI2C();
SWPutcI2C(0xd1);
x=SWReadI2C();
SWStopI2C();
}


unsigned char BCD2UpperCh(unsigned char bcd)
{
return ((bcd >> 4) + '0');
}

unsigned char BCD2LowerCh(unsigned char bcd)
{
return ((bcd & 0x0F) + '0');
}


void main(void){
unsigned char msg[17];

SSPSTATbits.SMP=1;
SSPSTATbits.CKE = 0;

SSPCON1bits.SSPEN=1;
SSPCON1bits.SSPM3=1;
SSPCON1bits.SSPM2=0;
SSPCON1bits.SSPM1=0;
SSPCON1bits.SSPM0=0;

SSPCON2bits.RCEN=1;
SSPCON2bits.SEN=1;
SSPCON2bits.GCEN=1;



TXSTA=0x22;
TRISCbits.RC3=0;
TRISCbits.RC4=0;
RCSTAbits.SPEN=1;
SPBRG=12;

TRISDbits.RD2=0x0;
lcdinit();
cls();

babys();

    while(1)
    {
    babyx();
    locate(1,1);
    sprintf(msg,"Second(BCD):%d   ",x);
    lcdprint(msg);
    Delay100TCYx(10);
    if(x<200)
    {
    locate(2,1);
    sprintf(msg,"Second(BCD):%d   ",x);
    lcdprint(msg);
    Delay100TCYx(10);  
    }

    Delay10KTCYx(10);
    }
}

in this program when is reset the SSPCON1bits.SSPEN or set it SSPCON1bits.SSPEN=0; it i see some puls in PORTC.3 but when i changed it into SSPCON1bits.SSPEN=1; it doesn't show me any puls but in the datasheet it shows me that (SSPEN=1;Enables the serial port and configures the SDA and SCL pins as the serial port pins)? !!!!

could you tell me what is my problem to use ds1307 and PIC18f452, because i see only 254 or 255 in bcd mode!!! i pulled up the scl and sda with 10kohm resistor
 

Hello
I changed my program again

PHP:
 #include <p18f452.h> 
 #include <delays.h> 
 #include<stdio.h> 
 #include <usart.h> 
 #include<i2c.h> 
 #include "LCD.h" 
 
 
 #pragma config OSC=HS 
 #pragma config WDT=OFF 
 #pragma config PWRT=ON 
 #pragma config LVP=OFF 
 
 unsigned char x; 
 unsigned char x3; 
 unsigned char x4; 
 
 void babys(){ 
 StartI2C(); 
 putcI2C(0xd0); 
 IdleI2C(); 
 putcI2C(0); 
 IdleI2C(); 
 putcI2C(0x00);IdleI2C();IdleI2C(); 
 putcI2C(0b01000110);IdleI2C();IdleI2C(); 
 putcI2C(0x00);IdleI2C();IdleI2C(); 
 IdleI2C(); 
 StopI2C(); 
 } 
 
 void babyx1(){ 
 StartI2C(); 
 putcI2C(0xd0); 
 IdleI2C(); 
 putcI2C(0); 
 IdleI2C(); 
 RestartI2C(); 
 putcI2C(0xd1); 
 IdleI2C(); 
 x=ReadI2C();IdleI2C();AckI2C();IdleI2C(); 
 x3=ReadI2C();IdleI2C();AckI2C();IdleI2C(); 
 x4=ReadI2C();IdleI2C();AckI2C();IdleI2C(); 
 IdleI2C(); 
 StopI2C(); 
 } 
 
 
 unsigned char hey(unsigned char n) 
 { 
     unsigned char x1; 
         unsigned char x2; 
         x1=((n>>4) & 0x7) *10; 
         x2=n<<4; 
         x2=x2>>4; 
         x1=x1+x2; 
 
 return x1; 
 } 
 
 void main(void){ 
 unsigned char msg[17]; 
 
 
 
 SSPADD = 0x09;               // SSPADD = 09 for 100K; 
 OpenI2C(MASTER, SLEW_OFF);   // 19 for 50K 
 SSPSTATbits.CKE=0;           //SMB Bus off  
 
 TXSTA=0x22; 
 TRISCbits.RC3=0; 
 TRISCbits.RC4=0; 
 RCSTAbits.SPEN=1; 
 SPBRG=12; 
 
 TRISDbits.RD2=0x0; 
 lcdinit(); 
 cls(); 
 
 babys(); 
 
     while(1) 
     { 
     babyx1(); 
     locate(1,1); 
     if(x3<100 && x4<100){ 
     sprintf(msg,"%d:%d:%d   ",hey(x4),hey(x3),hey(x)); 
     lcdprint(msg); 
     } 
     Delay10KTCYx(10); 
     } 
 }
it works but not fine :sad:

PHP:
  if(x3<100 && x4<100){

because it shows me something wrong and high number and i prevent to show the?why this happend?how can solve the problem?

setting time function is

PHP:
void babys(){ 
 StartI2C(); 
 putcI2C(0xd0); 
 IdleI2C(); 
 putcI2C(0); 
 IdleI2C(); 
 putcI2C(0x00);IdleI2C();IdleI2C(); 
 putcI2C(0b01000110);IdleI2C();IdleI2C(); 
 putcI2C(0x00);IdleI2C();IdleI2C(); 
 IdleI2C(); 
 StopI2C(); 
 }


but it set timer after 5-6 reset the circuit,why?

what is my fault?
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top