Microcontroller › PIC › RTC
- This topic has 2 replies, 3 voices, and was last updated 5 years, 8 months ago by Ashutosh Bhatt.
Viewing 3 posts - 1 through 3 (of 3 total)
-
AuthorPosts
-
August 17, 2018 at 5:33 am #4959RianParticipant
controller:PIC16F690
RTC:DS1307
It is working fine for Proteus but it dose not work for my actual hardware please advice
please check my code////////////////////////////////////////////////////////////////////////////
#include <xc.h>#include "lcd.h"// #pragma config statements should precede project file includes.// Use project enums instead of #define for ON and OFF.// CONFIG#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)#pragma config BOREN = ON // Brown-out Reset Selection bits (BOR enabled)#pragma config IESO = ON // Internal External Switchover bit (Internal External Switchover mode is enabled)#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)#define _XTAL_FREQ 8000000#define LED PORTAbits.RA0#define SDA PORTBbits.RB4#define SCL PORTBbits.RB6#define SADDR TRISBbits.TRISB4char SEC,MIN,HOUR,DATE,MONTH,YEAR,DAY;int a,b,c,d,e,f,g,h;char DAYS[8][4]={"SUN","MUN","TUE","WED","THU","FRI","SAT"};char arr[7];char time[8];void START_I2C(){SDA=1;SCL=1;__delay_ms(20);SDA=0;__delay_ms(20);SCL=0;// LCD_POS(2,0×01);// LCD_STRING("S");}void STOP_I2C(){SDA=0;SCL=1;SCL=1;__delay_ms(20);SDA=1;// LCD_POS(1,0×08);// LCD_STRING("p");}void WRITE_I2C_DATA(char d){char i;SDA=0;SCL=0;__delay_ms(20);for(i=0;i<=7;i++){if((d & 0x80) ==0x80){SDA=1;}else{SDA=0;}d=d<<1;__delay_us(20);// SCL=1;SCL=1;__delay_us(20);SCL=0;__delay_us(20);}i=SDA;SCL=1;__delay_us(20);SCL=0;__delay_us(20);/* for(i=0;i<=7;i++){SDA=((d&0x80)?1:0);d=d<<1;__delay_us(20);SCL=1;SCL=1;__delay_us(20);SCL=0;__delay_us(20);}i=SDA;SCL=1;__delay_us(20);SCL=0;__delay_us(20);*/}void WRITE_I2C(char data,char caddr){START_I2C();WRITE_I2C_DATA(0xD0);WRITE_I2C_DATA(data);WRITE_I2C_DATA(caddr);STOP_I2C();}void SET_CLOCK(){WRITE_I2C(0x00,0x00); //SEC__delay_ms(2);WRITE_I2C(0x01,0x58); //MIN__delay_ms(2);WRITE_I2C(0x02,0x16);//HOUR__delay_ms(2);WRITE_I2C(0x03,0x6);//DAY__delay_ms(2);WRITE_I2C(0x04,0x18);//DATE__delay_ms(2);WRITE_I2C(0x05,0x09);//MONTH__delay_ms(2);WRITE_I2C(0x06,0x15);//YEAR__delay_ms(2);}char READ_I2C_DATA(){char i;char j;SADDR=1;SCL=0;j=0x00;for(i=0;i<=7;i++){j=j<<1;SCL=1;j |=SDA;SCL=0;}SADDR=0;SDA=1;//SCL=1;SCL=1;SCL=0;return j;}char READ_I2C(char daddr){char s1;START_I2C();WRITE_I2C_DATA(0xd0);WRITE_I2C_DATA(daddr);START_I2C();WRITE_I2C_DATA(0xd1);s1= READ_I2C_DATA();STOP_I2C();return s1;}/*char CONVERT(int fdata){fdata=(fdata>>4) + '0';return fdata;}char CONVERT1(int gdata){gdata=(gdata>>4) + '0';return gdata;}*/int main(void){long int s=0;OSCCONbits.IRCF=0x7;ANSEL=0X00;ANSELH=0X00;TRISB=0x00;TRISAbits.TRISA0=0x00;TRISAbits.TRISA1=0x00;TRISAbits.TRISA2=0x00;TRISCbits.TRISC0=0x00;TRISCbits.TRISC1=0x00;TRISCbits.TRISC2=0x00;TRISCbits.TRISC3=0x00;// INTCONbits.INTF=0;//__delay_us(20);LCD_PRE_INIT();__delay_us(200);LCD_INIT();__delay_us(10);LCD_INIT();__delay_us(10);LCD_INIT();__delay_us(10);__delay_ms(200);SET_CLOCK();__delay_ms(10);LCD_POS(1,0×01);__delay_us(20);LCD_CMD(0x80);LCD_STRING("SAGAR");LCD_CMD(0xE0);while(1){s++;SEC=READ_I2C(0x00);MIN=READ_I2C(0x01);HOUR=READ_I2C(0x02);DAY=READ_I2C(0x03);/* DATE=READ_I2C(0x04);MONTH=READ_I2C(0x05);YEAR=READ_I2C(0x06);*/LCD_CLEAR();LCD_POS(1,0×01);/* SEC=arr[0];MIN=arr[1];HOUR=arr[1];time[6]=CONVERT(SEC);time[7]=CONVERT1(SEC);time[5]=':';time[3]=CONVERT(MIN);time[4]=CONVERT1(MIN);time[2]=':';time[1]=CONVERT(HOUR);time[0]=CONVERT1(HOUR);int i;for(i=0;i<=7;i++){LCD_DATA(time);}*/// HOUR=0x05;// LCD_DATA(0x05);LCD_DATA(HOUR/0x10+0x30);LCD_DATA(HOUR%0x10+0x30);// __delay_ms(1);LCD_DATA(':');LCD_DATA(MIN/0x10+0x30);LCD_DATA(MIN%0x10+0x30);// __delay_ms(1);LCD_DATA(':');LCD_DATA(SEC/0x10+0x30);LCD_DATA(SEC%0x10+0x30);LCD_DATA(' ');LCD_DATA(' ');// __delay_ms(1);// LCD_STRING(DAY[DAYS-1]);// __delay_ms(1);/* LCD_POS(2,0×01);LCD_DATA(DATE/0x10+0x30);LCD_DATA(DATE%0x10+0x30);// LCD_STRING('');LCD_DATA(' ');LCD_STRING("/");LCD_DATA(' ');// __delay_ms(1);LCD_DATA(MONTH/0x10+0x30);LCD_DATA(MONTH%0x10+0x30);LCD_DATA(' ');LCD_STRING("/");LCD_DATA(' ');// __delay_ms(1);LCD_DATA(YEAR/0x10+0x30);LCD_DATA(YEAR%0x10+0x30);*/// __delay_ms(1);if(s>=20){s=0;}}LCD_TIME(40);LCD_CLEAR();}December 26, 2018 at 6:20 am #14984selvaParticipantcheck out this –
#include
//Define PIC Registers #include
__CONFIG(0x3f72);
//Select HS oscillator, Enable (PWRTE,BOREN),
//Disable (CPD,CP,WDTEN,In-circuit Debugger)
#define LC01CTRLIN 0xd0
#define LC01CTRLOUT 0xd1
#define I2C_FREG 100
#define FOSC 10000
#define BAUD_RATE 9.6
// 9600 Baud rate #define BAUD_VAL (char)(FOSC/ (16 * BAUD_RATE )) - 1;
//Calculation For 9600 Baudrate @10Mhz unsigned char sec,min,hour,day,date,month,year; unsigned char data[7]={0x45,0x59,0x71,0x04,0x05,0x10,0x06};
int i;
void DS1307Write(unsigned char,unsigned char);
void WaitMSSP();
unsigned char DS1307Read(unsigned char);
void i2c_init(void);
void ds1307_init(void);
void serial_init(void);
void DelayMs(unsigned int);
void main()
{
int count=0;
DelayMs(20);
ds1307_init();
serial_init();
for(i=0;i<7;i++) DS1307Write(i,data);
printf("