اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی ds1307

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

    مشکل در راه اندازی ds1307

    سلام
    دوستان من فقط برای یادگیری می خوام بدون استفاده از کتابخونه ی ds1307 کدویژن این ic رو راه بندازم
    در ابتدا قصدم اینه ثانیه رو از ای سی بخونم ولی وقتی این کارو می کنم فقط عدد 255 روی ال سی دی نمایش داده می شه.
    لطفا راهنمایی کنید
    کد پروژه:
    کد:
    #include <io.h>
    #include <delay.h>
    #include <stdio.h>
    #include <mega32a.h>
    #include <lcd.h>
    #include <string.h>
    #include <stdlib.h>
    #include <i2c.h>
    #asm
    .equ __lcd_port=0x1B;PORTA
    #endasm
    #asm
    .equ __i2c_port=0x15;PORTC
    .equ __scl_bit=0
    .equ __sda_bit=1
    #endasm
    void main(void)
    {
    int data;
    char lcd_show[10];
    i2c_init();
    lcd_init(16);
    while(1)
    {
    i2c_start();
    i2c_write(0x00);
    i2c_start();
    i2c_write(0x07|1);
    data=i2c_read(0);
    i2c_stop();
    sprintf(lcd_show,"%d",data);
    lcd_clear();
    lcd_puts(lcd_show);
    delay_ms(100);
    }
    }
    اینم شماتیک

    با تشکر

    #2
    پاسخ : مشکل در راه اندازی ds1307

    دفعه ی اول برای راه اندازیش باید روی یه ساعتی تنظیمش کنی (یعنی هر دقیقه و ثانیه و ساعتی رو که دوست داشتی برای بار اول که روشنش میکنی باید بهش بدی و مدار رو ریست کنی و همون مقدار رو که دادی بخونی از آیسی)..مقاومت های پول پ هم 4.7 کیلو بزار

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی ds1307

      نوشته اصلی توسط 6759
      دفعه ی اول برای راه اندازیش باید روی یه ساعتی تنظیمش کنی (یعنی هر دقیقه و ثانیه و ساعتی رو که دوست داشتی برای بار اول که روشنش میکنی باید بهش بدی و مدار رو ریست کنی و همون مقدار رو که دادی بخونی از آیسی)..مقاومت های پول پ هم 4.7 کیلو بزار
      سلام.مرسی
      ولی فک کنم کدم مشکل داشته باشه.....
      دوستان اشکال کد از کجاس چون هیچ جوابی نمی گیرم! :cry2: :cry2:

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی ds1307

        سلام دوستان؛خسته نباشید،من برنامه رو نوشتم و توی شبیه ساز درست کار میکنه،و وقتی میبرم توی میکرو توی ال سی دی زمان ثابت میمونه حرکت نمیکنه،مشکل از چی میتونه باشه؟

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی ds1307

          نوشته اصلی توسط mohammadgh1370 نمایش پست ها
          سلام دوستان؛خسته نباشید،من برنامه رو نوشتم و توی شبیه ساز درست کار میکنه،و وقتی میبرم توی میکرو توی ال سی دی زمان ثابت میمونه حرکت نمیکنه،مشکل از چی میتونه باشه؟
          سلام
          اول از همه کد برنامه رو قرار بدید تا بشه بررسی کرد؛ همینجوری که نمیشه چیزی گفت! دوما مطمئن بشید مدار از نظر الکتریکی مشکلی نداشته باشه؛ یعنی یه وقت آی سی خراب نباشه. از کدهای آماده برای تست مدار استفاده کنید

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی ds1307

            نوشته اصلی توسط hossein.m98 نمایش پست ها
            سلام
            اول از همه کد برنامه رو قرار بدید تا بشه بررسی کرد؛ همینجوری که نمیشه چیزی گفت! دوما مطمئن بشید مدار از نظر الکتریکی مشکلی نداشته باشه؛ یعنی یه وقت آی سی خراب نباشه. از کدهای آماده برای تست مدار استفاده کنید

            از کد اماده استفاده کردم؛از یه سایت خارجی اموزششو دیدم رو اون کار کردم
            DS1307 is a two-wire (I2C) serial interface RTC (Real Time Clock) with 56 bytes of nonvolatile RAM. This provides clock and calendar with a second, minute, hour, day, date, month and year.

            ،واسه پول اپ شدن پایه های دیتا و کلاک هم از مقاومت 4.7 استفاده کردم.

            اینم کد:
            /* * eggs.c
            *
            * Created: 4/4/2019 12:11:04 PM
            * Author : Mgh
            */


            #ifndef F_CPU
            #define F_CPU 1000000UL
            #endif


            #include <avr/io.h>
            #include <stdio.h>
            #include <string.h>
            #include <stdbool.h>
            #include "I2C_Master_H_file.h"
            #include "LCD_16x2_H_file.h"


            #define Device_Write_address 0xD0 /* Define RTC DS1307 slave write address */
            #define Device_Read_address 0xD1 /* Make LSB bit high of slave address for read */
            #define TimeFormat12 0x40 /* Define 12 hour format */
            #define AMPM 0x20




            int second,minute,hour,day,date,month,year;


            bool IsItPM(char hour_)
            {
            if(hour_ & (AMPM))
            return 1;
            else
            return 0;
            }


            void RTC_Read_Clock(char read_clock_address)
            {
            I2C_Start(Device_Write_address);/* Start I2C communication with RTC */
            I2C_Write(read_clock_address); /* Write address to read */
            I2C_Repeated_Start(Device_Read_address);/* Repeated start with device read address */


            second = I2C_Read_Ack(); /* Read second */
            minute = I2C_Read_Ack(); /* Read minute */
            hour = I2C_Read_Nack(); /* Read hour with Nack */
            I2C_Stop(); /* Stop i2C communication */
            }


            void RTC_Read_Calendar(char read_calendar_address)
            {
            I2C_Start(Device_Write_address);
            I2C_Write(read_calendar_address);
            I2C_Repeated_Start(Device_Read_address);


            day = I2C_Read_Ack(); /* Read day */
            date = I2C_Read_Ack(); /* Read date */
            month = I2C_Read_Ack(); /* Read month */
            year = I2C_Read_Nack(); /* Read the year with Nack */
            I2C_Stop(); /* Stop i2C communication */
            }


            int main(void)
            {
            char buffer[20];
            char* days[7]= {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};


            I2C_Init(); /* Initialize I2C */
            LCD_Init(); /* Initialize LCD16x2 */


            while(1)
            {
            RTC_Read_Clock(0); /* Read clock with second add. i.e location is 0 */
            if (hour & TimeFormat12)
            {
            sprintf(buffer, "%02x:%02x:%02x ", (hour & 0b00011111), minute, second);
            if(IsItPM(hour))
            strcat(buffer, "PM");
            else
            strcat(buffer, "AM");
            LCD_String_xy(0,0,buffer);
            }

            else
            {
            sprintf(buffer, "%02x:%02x:%02x ", (hour & 0b00011111), minute, second);
            LCD_String_xy(0,0,buffer);
            }
            RTC_Read_Calendar(3); /* Read calendar with day address i.e location is 3 */
            sprintf(buffer, "%02x/%02x/%02x %3s ", date, month, year,days[day-1]);
            LCD_String_xy(1,0,buffer);
            }
            }
            جدیدترین ویرایش توسط mohammadgh1370; ۱۶:۲۵ ۱۳۹۸/۰۱/۱۸.

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی ds1307

              نوشته اصلی توسط mohammadgh1370 نمایش پست ها
              از کد اماده استفاده کردم؛از یه سایت خارجی اموزششو دیدم رو اون کار کردم
              DS1307 is a two-wire (I2C) serial interface RTC (Real Time Clock) with 56 bytes of nonvolatile RAM. This provides clock and calendar with a second, minute, hour, day, date, month and year.

              ،واسه پول اپ شدن پایه های دیتا و کلاک هم از مقاومت 4.7 استفاده کردم.
              اول از همه باید آی سی رو تست کنید. یه کاربر دیگه مثل شما همچین مشکلی داشت و من براش یه فایل hex و شماتیک قرار دادم تا ds1307 ای که داره رو تست کنه. برید به این لینک و تو پست شماره 6 فایل hex دانلود کنید و ds1307 رو تست کنید. اگر جواب نداد معلوم میشه مدار مشکل داره؛ اگر جواب داد بگید تا من و دوستان دیگه بتونیم بیشتر در مورد کد کمکتون کنیم.

              دیدگاه


                #8
                پاسخ : مشکل در راه اندازی ds1307

                نوشته اصلی توسط hossein.m98 نمایش پست ها
                اول از همه باید آی سی رو تست کنید. یه کاربر دیگه مثل شما همچین مشکلی داشت و من براش یه فایل hex و شماتیک قرار دادم تا ds1307 ای که داره رو تست کنه. برید به این لینک و تو پست شماره 6 فایل hex دانلود کنید و ds1307 رو تست کنید. اگر جواب نداد معلوم میشه مدار مشکل داره؛ اگر جواب داد بگید تا من و دوستان دیگه بتونیم بیشتر در مورد کد کمکتون کنیم.
                ممنون دوست عزیز
                این کدی که قرار دادین واسه مگا 32 هست،من با مگا 16 کار میکنم
                جواب ندادن ینی چیزی رو ال سی دی نشون نده؟یا اعداد رو نشون بده؟
                جدیدترین ویرایش توسط mohammadgh1370; ۱۹:۳۸ ۱۳۹۸/۰۱/۱۸.

                دیدگاه


                  #9
                  پاسخ : مشکل در راه اندازی ds1307

                  نوشته اصلی توسط mohammadgh1370 نمایش پست ها
                  ممنون دوست عزیز
                  این کدی که قرار دادین واسه مگا 32 هست،من با مگا 16 کار میکنم
                  جواب ندادن ینی چیزی رو ال سی دی نشون نده؟یا اعداد رو نشون بده؟
                  جواب بده یعنی اینکه درست کار کنه. زمان حرکت کنه و مشکلی از این بابت نباشه

                  دیدگاه


                    #10
                    پاسخ : مشکل در راه اندازی ds1307

                    نوشته اصلی توسط hossein.m98 نمایش پست ها
                    جواب بده یعنی اینکه درست کار کنه. زمان حرکت کنه و مشکلی از این بابت نباشه
                    اینکه وقتی روشن هست،شمارش انجام نمیشه،ولی خاموش روشن میکنم،زمان بالاتر رفته،ینی اس سی داره کار میکنه درسته؟
                    اینکه وقتی روشن هست شمارش نمیشه رو نمیفهمم واسه چیه

                    دیدگاه


                      #11
                      پاسخ : مشکل در راه اندازی ds1307

                      نوشته اصلی توسط mohammadgh1370 نمایش پست ها
                      اینکه وقتی روشن هست،شمارش انجام نمیشه،ولی خاموش روشن میکنم،زمان بالاتر رفته،ینی اس سی داره کار میکنه درسته؟
                      اینکه وقتی روشن هست شمارش نمیشه رو نمیفهمم واسه چیه
                      نمیدونم والا!

                      دلیل: ادغام دو پست برای جلوگیری از اسپم

                      نوشته اصلی توسط mohammadgh1370 نمایش پست ها
                      اینکه وقتی روشن هست،شمارش انجام نمیشه،ولی خاموش روشن میکنم،زمان بالاتر رفته،ینی اس سی داره کار میکنه درسته؟
                      اینکه وقتی روشن هست شمارش نمیشه رو نمیفهمم واسه چیه
                      راستی به اینجا توجه کنید:
                      #define Device_Write_address    0xD0    /* Define RTC DS1307 slave write address */
                      #define Device_Read_address 0xD1 /* Make LSB bit high of slave address for read */

                      چرا دو تا آدرس متفاوت برای ds1307 در نظر گرفته؟ آدرس ds1307 به صورت پیش فرض مقدار 0xD0 هستش! مقدار 0xD1 رو تبدیل کنید به 0xD0. احتمالا مشکل همینه!

                      دیدگاه


                        #12
                        پاسخ : مشکل در راه اندازی ds1307

                        درست شد،مشکل از اتصالات بود،انگار یه قسمتی به هم وصل میشد،باز کردم بستم اوکی شد


                        دوستان یه سوال دیگه،واسه خوندن ds1307 توی اینتراپت تایمر کسی کار کرده؟توی شبیه ساز درست کار میکنه،ولی توی عمل انگار که میکرو هنگ کنه یه چی رو ال سی دی نشون میده و میره،مشکل از چی میتونه باشه؟
                        جدیدترین ویرایش توسط mohammadgh1370; ۱۹:۳۵ ۱۳۹۸/۰۱/۱۹.

                        دیدگاه

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