Thông báo

Collapse
No announcement yet.

Cách giao tiếp DS1877 và PIC6F877A

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

  • #16
    Nguyên văn bởi tranvanan Xem bài viết
    @008:Bạn có thể giúp đỡ mình làm cái mạch này được không, vì mình mới mày mò học PIC được gần 1 tháng nay thôi, mình cũng dùng 16f877a va ds12c887, cung với lcd11602, nhưng mà chưa biết bắt đầu như thế nào nữa, bạn làm qua rồi thì giúp mình với, cảm ơn bạn nhiều lắm.
    Thế này nhé: nếu bạn mới học pic thì đầu tiên bạn hãy làm từng phần nhỏ, mình nghĩ bạn nên làm một cái mạch test đơn giản với 16f877a để làm xuât port in out đã. Đã làm được điều đó thì bạn đi lên làm hiển thị LCD. Có 2 cách là giao tiếp LCD4 bit và 8bit, viết với asem hay C bằng CCS thì bài mẫu có hết trong diễn đàn rồi đó. Khi đã giao tiếp được LCD rồi thì bạn mới có thể đọc DS12c887 và hiển thị ra LCD được. Mà nếu bạn bắt đầu làm mình nghĩ bạn nên làm IC thời gian DS1307 hơn, nó vừa rẻ vừa tốn ít chân pic nữa. Bạn cứ làm đi nhé khi nào không được thì post lên mình giúp cho.
    ^^ DD3N điên nặng gấp 3 lần người thường ^^

    Comment


    • #17
      @008: ok, theo ý bạn vậy, mình đang viết C với Mikro C. đã làm thử mấy bài cơ bảng với led đơn rồi,
      còn lcd thì mới viết hôm qua nhưng chỉ hiển thị được tên mình lên lcd thôi, chứ chưa có gì đặc biệt hết, mình giao tiếp lcd theo dạng 4 bit, mình sẽ làm thử với ds1307.
      có gì bạn giúp mình với nhé, Nhưng mình sợ để không con ds12c887,,,nó hết pin thì toi, mình không có ở VN nên ,,linh kiện mua khó lắm,,hic, cảm ơn bạn.mình sẽ còn nhờ vả bạn nhiều đó,

      Comment


      • #18
        Nguyên văn bởi tranvanan Xem bài viết
        @008: ok, theo ý bạn vậy, mình đang viết C với Mikro C. đã làm thử mấy bài cơ bảng với led đơn rồi,
        còn lcd thì mới viết hôm qua nhưng chỉ hiển thị được tên mình lên lcd thôi, chứ chưa có gì đặc biệt hết, mình giao tiếp lcd theo dạng 4 bit, mình sẽ làm thử với ds1307.
        có gì bạn giúp mình với nhé, Nhưng mình sợ để không con ds12c887,,,nó hết pin thì toi, mình không có ở VN nên ,,linh kiện mua khó lắm,,hic, cảm ơn bạn.mình sẽ còn nhờ vả bạn nhiều đó,
        ủa bạn không ở vn hả. Ở đâu vậy? nếu bạn mua ds12c887 rồi thì cứ làm với nó đi, không cần chuyển qua ds1307 đâu. Mình tưởng bạn bắt đầu thiết kế nên mới khuyên vậy. Tại vì lúc trước mình dùng ds12c887 rùi sau cũng chuyển qua ds1307 nên mới nói bạn vậy. Hì, bạn giao tiếp LCD rồi thì ok rồi. Bạn làm giao tiếp với DS12c887 đi. nhớ là dùng khác port nhé, chung chân là LCD bị DS làm nhiễu đó. Bạn làm ghi dữ liệu vào thanh ghi trong ds đi, rồi đọc dữ liệu đó ra hiển thị lên lcd. Nếu đúng rồi thi ds đã chạy tốt. Sau đó bạn hãy ghi dữ liệu cần thiết vào thanh ghi A và B theo như tra trong datasheet. Rồi đọc dữ liệu trong thanh ghi thời gian và hiển thị ra LCD. Đến đó là xong rồi
        ^^ DD3N điên nặng gấp 3 lần người thường ^^

        Comment


        • #19
          @008: mình đang ở Nhật Bản, mình thì đi làm suốt nên không có nhiều thời gian để làm mạch, nhưng mà thích quá nên gần đây mới đạt mua ở Vn mang sang để làm,,để mình làm thử, có gì ko biết thì nhờ bạn giúp vậy,
          À ,còn cái này ,,,bạn có thể nói cho mình biết cách thức xử lý nhiệt độ đo được từ ds1820 sau khi dung lệnh 44h(lệnh convert) để hiển thị lên led7 đoạn được không.Cái này ngoài luồng nhưng mong 008 giúp đở.hihi

          Comment


          • #20
            Nguyên văn bởi tranvanan Xem bài viết
            @008: mình đang ở Nhật Bản, mình thì đi làm suốt nên không có nhiều thời gian để làm mạch, nhưng mà thích quá nên gần đây mới đạt mua ở Vn mang sang để làm,,để mình làm thử, có gì ko biết thì nhờ bạn giúp vậy,
            À ,còn cái này ,,,bạn có thể nói cho mình biết cách thức xử lý nhiệt độ đo được từ ds1820 sau khi dung lệnh 44h(lệnh convert) để hiển thị lên led7 đoạn được không.Cái này ngoài luồng nhưng mong 008 giúp đở.hihi
            DS1820 mình chưa dùng qua nên cung ko rành nữa. Bạn nên post 1 bài lên diễn đàn hỏi như thế sẽ có nhiều cao nhân giúp đỡ ^^
            ^^ DD3N điên nặng gấp 3 lần người thường ^^

            Comment


            • #21
              @008: mình chưa biết tạo một bài mới ra sao nữa đây, thôi để mình làm với con ds1307 trước rồi tính sau.cảm ơn bạn 008.

              Comment


              • #22
                Nguyên văn bởi 008 Xem bài viết
                hihi vấn đề mình giải quyết rùi, Thực tế là làm theo turial của bên picvn ghi la thanh ghi A có địa chỉ 10h còn B có địa chỉ 11h. Nhưng coi kĩ lại datasheet phát hiện ra thanh ghi A la 0Ah, thanh ghi B la 0Bh. Bạn coi thử lại coi, chỉ cần set 010 cho đúng là nó chạy rồi không cần làm gì khác hết.
                Chúc may mắn! Tết rùi mà vẫn quyết chiến nhỉ
                Chào 008, mình đã set đúng địa chỉ của thanh ghi A và B nhưng khi mô phỏng trên Proteus thì nó chỉ chạy được đúng duy nhất lần đầu. Vậy bạn có thể cho mình và mọi người biết cách giải quyết của bạn được không. Cảm ơn rất nhiều.

                Comment


                • #23
                  Xin chen ngang chuyện của mấy bạn nha, ai biết về con pic 877a cho mình chương trình ứng dụng của nó được hok, mình mới học về vi xử lý thui ak mà thầy bắt làm về con pic nay mình chẳng biết j hết ak. ai có thể giúp mình được ko? !!!

                  Comment


                  • #24
                    Bác tò mò sớm làm gì, bệnh đó em không giải thích được, nhưng phải làm thế mới chạy, bác cứ tìm hiểu, rùi tự tìm ra mới zui, chứ em nói ngay mất hứng , không ra thì em sửa cho.

                    Bác dùng con PIC nào cũng được, em làm với 877A chạy tốt, không sao cả.

                    chào bạn ! Mình đang làm project sử dụng 2 kit pic16F887 kết nối dùng SPI protocol, chế độ Master- slave để 1 kít Đo nhiệt Độ rôi gửi cho kit còn lại hiện thi lên LCD.
                    pro giúp mình các bước làm với !!!!! nêu có gì gửi cho mình xin liên hệ. mong pro giúp cho.
                    mail của minh là :xuananitiu@gmail.com

                    Comment


                    • #25
                      Nguyên văn bởi phamthaihoa Xem bài viết

                      Giao tiếp giữa DS12887 với PIC bị một bệnh rất mất dạy, mà không bị khi làm với 8051. Bác viết code lên em sửa cho, chứ code nguồn của em thì em không share
                      Mà bác nào dám đập thử con DS12887 ra xem trong đó có gì chưa ?
                      Hỏi ý kiến cao nhân từ post 15 năm trước :v
                      có phải bệnh mất dạy là chuyển port từ output sang input khiến port bị dis phải ko bác?
                      bác chỉ em xử lý giúp ạ, zalo em 0382361069.

                      đây đoạn code của em:

                      int DATA_W,ADDRESS_W,DATA_R ;

                      #define AS RD0_bit
                      #define RW RD1_bit
                      #define DS RD2_bit
                      #define CS RD3_bit
                      #define RE_SET RD4_bit
                      #define DATAPORT PORTB
                      void read_12C887(void);//khai bao chuong trinh con
                      void write_12C887(void);//khai bao chuong trinh con

                      //**********write_12C887***************
                      void write_12C887(unsigned char address_w, unsigned char data_write)
                      {
                      TRISB=0X00;
                      AS=0;
                      DS=1;
                      RW=1;
                      ;
                      AS=1;
                      CS=0;
                      DATAPORT=ADDRESS_W;
                      ;
                      AS=0;
                      ;
                      RW=0;
                      DATAPORT=data_write;
                      ;
                      RW=1;
                      CS=1;
                      AS=1;
                      }
                      void read_12C887(char ADDRESS_R, char DATA_READ)
                      {
                      STATUS.B5=1;
                      TRISB=0X00;
                      STATUS.B5=0;

                      DATAPORT=ADDRESS_R;
                      DS=1;
                      RW=1;
                      ;
                      AS=1;
                      ;
                      AS=0;
                      ;
                      CS=0;
                      ;
                      DS=0;
                      ;
                      STATUS.B5=1;
                      TRISB=0xff;
                      STATUS.B5=0;
                      DATA_READ=DATAPORT;
                      DS=1;
                      CS=1;
                      AS=1;
                      delay_ms(50);
                      }

                      void disTime()
                      {
                      ByteToStrWithZeros(gio,giotxt);
                      ByteToStrWithZeros(phut,phuttxt);
                      ByteToStrWithZeros(giay,giaytxt);

                      Dtime[0] = giotxt[1];
                      Dtime[1] = giotxt[2] ;
                      Dtime[3] = phuttxt[1];
                      Dtime[4] = phuttxt[2];
                      Dtime[6] = giaytxt[1];
                      Dtime[7] = giaytxt[2];
                      }

                      void setTime(char sgio,char sphut,char sgiay)
                      {
                      write_12C887(0x0A,0x2F);
                      write_12C887(0x0B,0xDE);
                      write_12C887(0x04,sgio);
                      gio = sgio;
                      write_12C887(0x02,sphut);
                      phut = sphut;
                      write_12C887(0x00,sgiay);
                      giay = sgiay;
                      write_12C887(0x0B,0x5E);

                      }


                      void main(void)
                      {
                      ANSEL = 0; // Configure AN pins as digital I/O
                      ANSELH = 0;
                      C1ON_bit = 0; // Disable comparators
                      C2ON_bit = 0;
                      RCIE_bit = 1; // enable interrupt on UART1 receive
                      TXIE_bit = 0; // disable interrupt on UART1 transmit
                      PEIE_bit = 1; // enable peripheral interrupts
                      GIE_bit = 1; // cho phep ngat


                      // config timer 0
                      /*PSA_bit = 0;// chon bo chia truoc cho timer 0
                      PS2_bit = 0;
                      PS1_bit = 1;
                      PS0_bit = 0;// chon bo chia truoc 8
                      T0CS_bit = 0;// chon nguon xung clock noi
                      T0IE_bit = 1; // cho phep ngat timer 0
                      T0IF_bit = 0; // ghi gia tri co ngat = 0
                      TMR0 = 56;*/
                      TRISE = 0;
                      PORTE = 0;

                      TRISB=0x00;
                      TRISD = 0X00;

                      ADCON1=0x06;
                      RE_SET=1;
                      CS =1;
                      delay_ms(500);
                      write_12C887(0x0A,0x2F); //b'00101111' dua gia tri vao thanh ghi "register A" BIT 5=1 THOI GIAN THUC BIT 0...3=1 TAO F=2HZ TAI CHAN SQW
                      write_12C887(0x0B, 0x5A); //'01011110' ; dua gia tri vao thanh ghi "register B" //BIT 3=1 CHO PHEP TAO SONG VUONG TAI CHAN SQW // BIT 1=1 dang du lieu 24 gio //BIT 2=1 dang du lieu Binary


                      I2C1_Init(100000); // initialize I2C communication

                      LCD_Begin(0x7E); // initialize LCD module with I2C address = 0x4E
                      LCD_cmd_(LCD_CURSOR_OFF);
                      LCD_Goto(1, 1);
                      LCD_Print("HELLO");
                      delay_ms(1000);
                      LCD_cmd_(LCD_CLEAR);
                      delay_ms(100);

                      setTime(23,59,58);

                      disTime();

                      LCD_Goto(1, 1);
                      LCD_Print(Dtime);
                      delay_ms(1000);
                      LCD_cmd_(LCD_CLEAR);

                      while (1)
                      {

                      read_12C887(0X0A,DATA_R);
                      if (((DATA_R>>7)&0x01)==1)//
                      //while(DATA_R,7==1)
                      {
                      read_12C887(0X0A,DATA_R);
                      }
                      if (((DATA_R>>7)&0x01)==0)
                      {
                      read_12C887(0X00,GIAY);
                      read_12C887(0X02,PHUT);
                      read_12C887(0X04,GIO);

                      }
                      disTime();

                      LCD_Goto(1, 1);
                      LCD_Print(Dtime);
                      delay_ms(50);
                      }
                      }

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X