Thông báo

Collapse
No announcement yet.

Thư viện DS1307.h

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Thư viện DS1307.h

    Tình hình là em đa sử dụng WINAVR để nạp cho AVR. Và em cũng đa nghiên cứu con DS1307. Search google thì thấy có thư viện DS1307.h có sẵn các hàm thao tác với Chip này. Nhưng mà tìm hoài trong thư mục chứa thư viện của WINAVR ko thấy có. Hình như là phải dùng trình nạp Codevision AVR mới có thư viện này đúng ko ạ. Cho em hỏi là em nếu em chép thư viện này qua WINAVR có chạy dc ko ạ. Nếu được thì bác nào cho em xin thư viện này nhá

  • #2
    WinAVR là phần mền soạn thảo rùi dùng makefli ,cái này dành cho cao thủ thì đúng hơn nếu muốn có sẵn dễ sử dụng sao ko dùng codevisionavr,và các phần mền khác như avrstudi,mikro C.

    Comment


    • #3
      có thể viết một thư viện co nó rồi add vào mục cài đặt đo, sau này code thì add vào và thao tác thôi, có thể tham khảo thư viện ds1307 của codevision rồi viết theo đúng cú pháp của winavr

      đây là lib của nó trong cv
      bạn dùng cv thì bản 2.5 trở lên phải ***** mới có hỗ trợ ds1307
      chúc thành công
      Code:
      /*
        CodeVisionAVR C Compiler
        (C) 1998-2010 Pavel Haiduc, HP InfoTech S.R.L.
      
        Dallas Semiconductors DS1307 I2C Bus Real Time Clock functions
      */
      
      #include <bcd.h>
      
      #ifdef _ATXMEGA_DEVICE_
      
      #include <twix.h>
      
      static TWI_MASTER_INFO_t *ptwi_master;
      
      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,0xd0>>1,&address,1,&r,1);
      return r;
      }
      
      void rtc_write(unsigned char address,unsigned char data)
      {
      unsigned char w[2];
      w[0]=address;
      w[1]=data;
      twi_master_trans(ptwi_master,0xd0>>1,w,2,NULL,0);
      }
      
      void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
      {
      unsigned char w[2];
      rs&=3;
      if (sqwe) rs|=0x10;
      if (out) rs|=0x80;
      w[0]=7;
      w[1]=rs;
      twi_master_trans(ptwi_master,0xd0>>1,w,2,NULL,0);
      }
      
      void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
      {
      unsigned char w=0,r[3];
      twi_master_trans(ptwi_master,0xd0>>1,&w,1,r,3);
      *sec=bcd2bin(r[0]);
      *min=bcd2bin(r[1]);
      *hour=bcd2bin(r[2]);
      }
      
      void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
      {
      unsigned char w[4];
      w[0]=0;
      w[1]=bin2bcd(sec);
      w[2]=bin2bcd(min);
      w[3]=bin2bcd(hour);
      twi_master_trans(ptwi_master,0xd0>>1,w,4,NULL,0);
      }
      
      void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year)
      {
      unsigned char w=4,r[3];
      twi_master_trans(ptwi_master,0xd0>>1,&w,1,r,3);
      *date=bcd2bin(r[0]);
      *month=bcd2bin(r[1]);
      *year=bcd2bin(r[2]);
      }
      
      void rtc_set_date(unsigned char date,unsigned char month,unsigned char year)
      {
      unsigned char w[4];
      w[0]=4;
      w[1]=bin2bcd(date);
      w[2]=bin2bcd(month);
      w[3]=bin2bcd(year);
      twi_master_trans(ptwi_master,0xd0>>1,w,4,NULL,0);
      }
      #else
      
      #include <i2c.h>
      
      unsigned char rtc_read(unsigned char address)
      {
      unsigned char data;
      i2c_start();
      i2c_write(0xd0);
      i2c_write(address);
      i2c_start();
      i2c_write(0xd1);
      data=i2c_read(0);
      i2c_stop();
      return data;
      }
      
      void rtc_write(unsigned char address,unsigned char data)
      {
      i2c_start();
      i2c_write(0xd0);
      i2c_write(address);
      i2c_write(data);
      i2c_stop();
      }
      
      void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)
      {
      rs&=3;
      if (sqwe) rs|=0x10;
      if (out) rs|=0x80;
      i2c_start();
      i2c_write(0xd0);
      i2c_write(7);
      i2c_write(rs);
      i2c_stop();
      }
      
      void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
      {
      i2c_start();
      i2c_write(0xd0);
      i2c_write(0);
      i2c_start();
      i2c_write(0xd1);
      *sec=bcd2bin(i2c_read(1));
      *min=bcd2bin(i2c_read(1));
      *hour=bcd2bin(i2c_read(0));
      i2c_stop();
      }
      
      void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
      {
      i2c_start();
      i2c_write(0xd0);
      i2c_write(0);
      i2c_write(bin2bcd(sec));
      i2c_write(bin2bcd(min));
      i2c_write(bin2bcd(hour));
      i2c_stop();
      }
      
      void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year)
      {
      i2c_start();
      i2c_write(0xd0);
      i2c_write(4);
      i2c_start();
      i2c_write(0xd1);
      *date=bcd2bin(i2c_read(1));
      *month=bcd2bin(i2c_read(1));
      *year=bcd2bin(i2c_read(0));
      i2c_stop();
      }
      
      void rtc_set_date(unsigned char date,unsigned char month,unsigned char year)
      {
      i2c_start();
      i2c_write(0xd0);
      i2c_write(4);
      i2c_write(bin2bcd(date));
      i2c_write(bin2bcd(month));
      i2c_write(bin2bcd(year));
      i2c_stop();
      }
      
      #endif

      Comment


      • #4
        Cảm ơn 2 bác. Mình chuyển qua sài CV rồi. Cái WinAVR code lại hết hơi mệt. Tại bên nghiên cứu hocavr.com thấy người ta dạy bằng WinAVR nên học theo

        Comment

        Về tác giả

        Collapse

        ankinalim Tìm hiểu thêm về ankinalim

        Bài viết mới nhất

        Collapse

        Đang tải...
        X