اطلاعیه

Collapse
No announcement yet.

راه اندازی آی سی DS1307 با TWI

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

    #16
    پاسخ : راه اندازی آی سی DS1307 با TWI

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

    دیدگاه


      #17
      پاسخ : راه اندازی آی سی DS1307 با TWI

      نوشته اصلی توسط pooyan-shafiei
      نه عزیز شما از هر کتابخانه ای دارید استفاده کنید.پایه ها را هم مشترک بگیرید.اون کسی که کتابخونه را نوشته خودش آدرس قطعه را میدونسته و تنظیم کرده.پس شما اصلا ذهنت را درگیر جزئیات نکن.هر چی کتابخونه داری پشت سر هم ردیف کن.هیچی با هیچی قاطی نمیشه.
      من خودم 4 تا سنسور را با کتابخونشون روی یه خط راه انداختم.
      یعنی هر دو تا رو با پایه های SCL و SDA میکرو وصل کنم؟
      خب بعدش چجوری بین DS1307 و EEPROM تغییر وضعیت بدم؟ یعنی آدرس های هر کدوم رو کجا بدم؟
      http://www.eca.ir/forum2/index.php?topic=108455.msg777842#msg777842

      دیدگاه


        #18
        پاسخ : راه اندازی آی سی DS1307 با TWI

        لطفا پاسخ شماره 10 همین تاپیک رو هم ببینین. اینم یکی از مشکلاته :cry2:
        http://www.eca.ir/forum2/index.php?topic=108455.msg777842#msg777842

        دیدگاه


          #19
          پاسخ : راه اندازی آی سی DS1307 با TWI

          نوشته اصلی توسط سامان تقی پور
          یعنی هر دو تا رو با پایه های SCL و SDA میکرو وصل کنم؟
          خب بعدش چجوری بین DS1307 و EEPROM تغییر وضعیت بدم؟ یعنی آدرس های هر کدوم رو کجا بدم؟
          تو ارتباط I2C شما دو تا خط داری برای تبادل دیتا: SDA و SCL . اینارو همونطور که گفتم می تونی به 127 تا وسیله همزمان وصل کنی. تو ارتباط I2C اول از همه مستر بایت آدرس وسیله موردنظر رو میفرسته. بعد اون وسیله ای که موردنظر هست جواب میده و ادادمه ارتباط مستر با همون وسیله هستش. تا زمانی که مستر stop بده به slave. یعنی اگر قطعه ای آدرسش فرستاده نشه، به دستورات بعدی جواب نخواهد داد.

          مثلا برای EEPROM نویسنده کتابخونه توی یک قسمت از کدش یک هدر گزاشته که شما می تونی اونو با آدرس EEPROM خودت عوض کنی.
          ---------
          .
          .
          ...........

          دیدگاه


            #20
            پاسخ : راه اندازی آی سی DS1307 با TWI

            سلام دوست عزیز،
            چیپ ds1307 یه چیپRTC هستش که با I2C کار میکنه و این پایه هارو داره.
            x1 و x2 ===> به یک کریستال 32.768 کیلوهرتز وصل میشه
            bat ====> به یک باتری 3 ولت وصل میشه یادت نره که GND این باGND مدارت مشترک باشه
            vcc , gnd به ولتاژای منطقی یا همون 0-5 وصل میشه
            SCL,SDA دو پینه که برا همون اتصال I2C هستش
            اگ از کدویژن استفاده کنی چند تا تابع داره:
            void ds1307_twi_init(TWI_MASTER_INFO_t *ptwim)
            {
            ptwi_master=ptwim;
            }

            unsigned char rtc_read(unsigned char address)
            {
            unsigned char r;
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,& address,1,0,0);
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,0,0,& amp;r,1);
            return r;
            }

            void rtc_write(unsigned char address,unsigned char data)
            {
            unsigned char buf[2];
            buf[0]=address;
            buf[1]=data;
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,buf,2 ,0,0);
            }

            void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
            {
            unsigned char buf[2];
            rs&=3;
            if (sqwe) rs|=0x10;
            if (out) rs|=0x80;
            buf[0]=7;
            buf[1]=rs;
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,buf,2 ,0,0);
            }

            void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
            {
            unsigned char buf[3];
            buf[0]=0;
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,buf,1 ,0,0);
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,0,0,b uf,3);
            *sec=bcd2bin(buf[0]);
            *min=bcd2bin(buf[1]);
            *hour=bcd2bin(buf[2]);
            }

            void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
            {
            unsigned char buf[4];
            buf[0]=0;
            buf[1]=bin2bcd(sec);
            buf[2]=bin2bcd(min);
            buf[3]=bin2bcd(hour);
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,buf,4 ,0,0);
            }

            void rtc_get_date(unsigned char *week_day,unsigned char *day,unsigned char *month,unsigned char *year)
            {
            unsigned char buf[4];
            buf[0]=3;
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,buf,1 ,0,0);
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,0,0,b uf,4);
            *week_day=buf[0];
            *day=bcd2bin(buf[1]);
            *month=bcd2bin(buf[2]);
            *year=bcd2bin(buf[3]);
            }

            void rtc_set_date(unsigned char week_day,unsigned char day,unsigned char month,unsigned char year)
            {
            unsigned char buf[5];
            buf[0]=3;
            buf[1]=week_day;
            buf[2]=bin2bcd(day);
            buf[3]=bin2bcd(month);
            buf[4]=bin2bcd(year);
            twi_master_trans(ptwi_master,DS1307_I2C_ADDR,buf,5 ,0,0);
            }
            #else
            // non-ATxmega devices
            #include <twi.h>

            unsigned char rtc_read(unsigned char address)
            {
            unsigned char r;
            twi_master_trans(DS1307_I2C_ADDR,&address,1,0, 0);
            twi_master_trans(DS1307_I2C_ADDR,0,0,&r,1);
            return r;
            }

            void rtc_write(unsigned char address,unsigned char data)
            {
            unsigned char buf[2];
            buf[0]=address;
            buf[1]=data;
            twi_master_trans(DS1307_I2C_ADDR,buf,2,0,0);
            }

            void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
            {
            unsigned char buf[2];
            rs&=3;
            if (sqwe) rs|=0x10;
            if (out) rs|=0x80;
            buf[0]=7;
            buf[1]=rs;
            twi_master_trans(DS1307_I2C_ADDR,buf,2,0,0);
            }

            void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
            {
            unsigned char buf[3];
            buf[0]=0;
            twi_master_trans(DS1307_I2C_ADDR,buf,1,0,0);
            twi_master_trans(DS1307_I2C_ADDR,0,0,buf,3);
            *sec=bcd2bin(buf[0]);
            *min=bcd2bin(buf[1]);
            *hour=bcd2bin(buf[2]);
            }

            void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
            {
            unsigned char buf[4];
            buf[0]=0;
            buf[1]=bin2bcd(sec);
            buf[2]=bin2bcd(min);
            buf[3]=bin2bcd(hour);
            twi_master_trans(DS1307_I2C_ADDR,buf,4,0,0);
            }

            void rtc_get_date(unsigned char *week_day,unsigned char *day,unsigned char *month,unsigned char *year)
            {
            unsigned char buf[4];
            buf[0]=3;
            twi_master_trans(DS1307_I2C_ADDR,buf,1,0,0);
            twi_master_trans(DS1307_I2C_ADDR,0,0,buf,4);
            *week_day=buf[0];
            *day=bcd2bin(buf[1]);
            *month=bcd2bin(buf[2]);
            *year=bcd2bin(buf[3]);
            }

            void rtc_set_date(unsigned char week_day,unsigned char day,unsigned char month,unsigned char year)
            {
            unsigned char buf[5];
            buf[0]=3;
            buf[1]=week_day;
            buf[2]=bin2bcd(day);
            buf[3]=bin2bcd(month);
            buf[4]=bin2bcd(year);
            twi_master_trans(DS1307_I2C_ADDR,buf,5,0,0);
            }
            که کاربردشون از اسمش پیداس
            امضا
            dr.Ehsan SH

            دیدگاه


              #21
              پاسخ : راه اندازی آی سی DS1307 با TWI

              شما اصلا بی خیال آدرس شو.فقط از توابع کتابخونت استفاده کن.فقط باید کتابخونه مخصوص قطعه باشه.دیگه خودشون همه آدرس ها و ریزه کاری ها را انجام دادند.
              برای یاد گرفتن twi پیشنهاد میکنم دیتاشیت مگا 8 را بخونید.
              آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

              دیدگاه


                #22
                پاسخ : راه اندازی آی سی DS1307 با TWI

                با سلام
                آقا من میخواستم twi سخت افزاری میکرو رو راه اندازی کنم
                هدفم ارتباط دو میکرو به هم از این طریق هست
                فقط یکم مشکل دارم.
                اول اینکه تو حالت slave میکرو،وقتی دیتا رو master میفرسته اطلاعات رو با وقفه دریافت میکنه ؟؟؟؟
                یعنی هرکجای برنامه که باشیم هر وقت که دیتا اومد slave متوجه میشه ؟؟؟؟
                اگه دوستان نمونه برنامه ایی هم داشته باشن میتونه کمک حالم باشه

                دیدگاه

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