اطلاعیه

Collapse
No announcement yet.

حل مشکل ساعت دقیق با DS1307 و ارتباط با I2C

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    حل مشکل ساعت دقیق با DS1307 و ارتباط با I2C

    سلام مهندسین عزیز
    آقا من با DS1307 میخواستم ساعت دقیق بسازم بعد با ارتباط I2C میخواستم به میکرو متصل کنم.
    کد نویسی اون رو انجام دادم چندین مرتبه که روی سون سگمنت نشون بده و بعدش هم روی LCD توی شبیه سازی کار میکنه و درسته و همه چیز اوکیه ولی تو عملی وقتی مدار رو مبندم و استارت رو میزنم مدار هیچ کار نمیکنه و چیز های الکی روی نمایشگر نشون میده
    کسی میتونه کمک کنه در این مورد؟؟
    مشکل از پروگرم کردن میکرو هستش که باید فیوز بیتی چیزی فعال کنم یا چی؟؟؟؟؟ چون سیم بندیم رو ندین بار چک کردم با شبیه سازی و درسته
    ممنون میشم کمکی کنید.​

    #2
    کد با سون سگمنت:
    include <mega16.h>
    include <delay.h>

    // I2C Bus functions
    include <i2c.h>

    // DS1307 Real Time Clock functions
    include <ds1307.h>

    //show in 7Seg
    char numbers[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 F};

    void segment_display(char number, char segment)
    {
    PORTD=numbers[number];
    PORTC=~(1<<(segment-1));
    delay_ms(5);
    PORTC=0b00001111;
    delay_us(20);
    }

    // Declare your global variables here
    unsigned char Hour, Min,Sec,Flag;
    unsigned char Hour1,Hour2, Min1,Min2,Sec;

    void main(void)
    {
    // Declare your local variables here

    DDRD=0x00;
    PORTD=0xFF;

    DDRC=0b00001111;
    PORTC=0b00111111;

    DDRA=0b00001111;


    // Bit-Banged I2C Bus initialization
    // I2C Port: PORTB
    // I2C SDA bit: 6
    // I2C SCL bit: 5
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    i2c_init();

    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: Off
    // SQW/OUT pin state: 0

    rtc_init(0,0,0);
    rtc_set_time(8,59,55);

    while (1)
    {
    rtc_get_time(&Hour,&Min,&Sec);

    Min1=Min/10;
    Min2=Min%10;
    segment_display(Min1,3);
    segment_display(Min2,4);
    Hour1=Hour/10;
    Hour2=Hour%10;
    segment_display(Hour1,1);
    segment_display(Hour2,2);
    if(PINC.5==0 && Flag==0)
    {
    Hour++;
    Flag=1;
    if(Hour>23)
    {
    Hour=0;
    }
    rtc_set_time(Hour,Min,Sec);
    }

    if(PINC.4==0 && Flag==0)
    {
    Min++;
    Flag=1;
    if(Min>59)
    {
    Min=0;
    }
    rtc_set_time(Hour,Min,Sec);
    }

    if(PINC.4==1 && PINC.5==1)
    {
    Flag=0;
    }

    if(Hour/10==0 && Hour%10==9 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.0=1;
    delay_ms(10);
    PORTA.0=0;
    }

    //Alarm
    //....
    if(Hour/10==1 && Hour%10==3 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.1=1;
    delay_ms(10);
    PORTA.1=0;
    }

    if(Hour/10==1 && Hour%10==7 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.2=1;
    delay_ms(10);
    PORTA.2=0;
    }

    if(Hour/10==2 && Hour%10==0 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.3=1;
    delay_ms(10);
    PORTA.3=0;
    }

    if(Hour/10==2 && Hour%10==2 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.4=1;
    delay_ms(10);
    PORTA.4=0;
    }

    //....

    }




    کد با LCD:
    include <mega16.h>
    include <delay.h>
    include <alcd.h>
    include <stdio.h>
    // I2C Bus functions
    include <i2c.h>

    // DS1307 Real Time Clock functions
    include <ds1307.h>


    // Declare your global variables here
    unsigned char Hour, Min,Sec,Flag;
    char buffer[16];
    void main(void)
    {
    // Declare your local variables here

    DDRC.4=0;
    DDRC.5=0;
    PORTC.4=1;
    PORTC.5=1;

    DDRA=0b00001111;


    // Bit-Banged I2C Bus initialization
    // I2C Port: PORTB
    // I2C SDA bit: 6
    // I2C SCL bit: 5
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    i2c_init();

    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: Off
    // SQW/OUT pin state: 0

    rtc_init(0,0,0);
    rtc_set_time(8,59,55);
    lcd_init(16);
    while (1)
    {
    rtc_get_time(&Hour,&Min,&Sec);
    lcd_gotoxy(0,0);
    sprintf(buffer,"%02d:%02d:%02d",Hour,Min,Sec);
    lcd_puts(buffer);

    if(PINC.5==0 && Flag==0)
    {
    Hour++;
    Flag=1;
    if(Hour>23)
    {
    Hour=0;
    }
    rtc_set_time(Hour,Min,Sec);
    }

    if(PINC.4==0 && Flag==0)
    {
    Min++;
    Flag=1;
    if(Min>59)
    {
    Min=0;
    }
    rtc_set_time(Hour,Min,Sec);
    }

    if(PINC.4==1 && PINC.5==1)
    {
    Flag=0;
    }

    if(Hour/10==0 && Hour%10==9 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.0=1;
    delay_ms(10);
    PORTA.0=0;
    }

    //Alarm
    //....
    if(Hour/10==1 && Hour%10==3 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.1=1;
    delay_ms(10);
    PORTA.1=0;
    }

    if(Hour/10==1 && Hour%10==7 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.2=1;
    delay_ms(10);
    PORTA.2=0;
    }

    if(Hour/10==2 && Hour%10==0 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.3=1;
    delay_ms(10);
    PORTA.3=0;
    }

    if(Hour/10==2 && Hour%10==2 && Min/10==0 && Min%10==0 && Sec/10==0 && Sec%10==0)
    {
    PORTA.4=1;
    delay_ms(10);
    PORTA.4=0;
    }

    //....

    }
    }

    دیدگاه


      #3


      دیدگاه


        #4
        نوشته اصلی توسط Ezaxx نمایش پست ها
        سلام مهندسین عزیز
        آقا من با DS1307 میخواستم ساعت دقیق بسازم بعد با ارتباط I2C میخواستم به میکرو متصل کنم.
        کد نویسی اون رو انجام دادم چندین مرتبه که روی سون سگمنت نشون بده و بعدش هم روی LCD توی شبیه سازی کار میکنه و درسته و همه چیز اوکیه ولی تو عملی وقتی مدار رو مبندم و استارت رو میزنم مدار هیچ کار نمیکنه و چیز های الکی روی نمایشگر نشون میده
        کسی میتونه کمک کنه در این مورد؟؟
        مشکل از پروگرم کردن میکرو هستش که باید فیوز بیتی چیزی فعال کنم یا چی؟؟؟؟؟ چون سیم بندیم رو ندین بار چک کردم با شبیه سازی و درسته
        ممنون میشم کمکی کنید.​
        با سلام و خسته نباشید ،
        فیوزبیت ها رو دقیقا مطابق شبیه سازی که انجام دادید تنظیم کنید.
        اگر از کریستال خارجی استفاده میکنید ، احتمال خرابی کریستال وجود داره.

        دیدگاه

        لطفا صبر کنید...
        X