Giao tiếp I2C

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • nvquyvn
    Đệ tử 1 túi
    • Mar 2011
    • 15

    #1

    Giao tiếp I2C

    Mình đanh học giao tiếp i2c , mình đo nhiệt độ sử dụng IC số TC74 nhưng mô phỏng ko chạy được. Bác nào biết chỉ em với .
    Attached Files
  • nvquyvn
    Đệ tử 1 túi
    • Mar 2011
    • 15

    #2
    Ah file mp mình nối sai dây phải là sclk=pin_c3, sda=pin_c4 . mình ko hiểu sao nó chạy sai ra kêt quả 255 nhỉ ???
    Last edited by nvquyvn; 12-08-2011, 10:43 AM.

    Comment

    • nvquyvn
      Đệ tử 1 túi
      • Mar 2011
      • 15

      #3
      Chan qua , cha ai them qtam den , toan la .....

      Comment

      • DINH THANH SANG
        Đệ tử 3 túi
        • Jul 2011
        • 55

        #4
        Nguyên văn bởi nvquyvn View Post
        Mình đanh học giao tiếp i2c , mình đo nhiệt độ sử dụng IC số TC74 nhưng mô phỏng ko chạy được. Bác nào biết chỉ em với .
        bạn tham khảo bài này nhé.
        [code=
        #include <htc.h>
        #include <stdio.h>
        #include "lcd.h"
        #include "i2c.h"

        //__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);

        char khoi_dong_sensor();
        char doc_nhiet_do_sesor();


        char t;

        void main()
        {
        unsigned int i;

        lcd_init();
        i2c_init();

        if(khoi_dong_sensor())
        {
        printf("\fI2C Sensor fails");
        while(1);
        }

        printf("\f----- Lab5 -----\n***I2C Sensor***");

        // delay 3s
        for(i=0;i<30;i++)
        __delay_ms(100);

        while(1)
        {
        t = doc_nhiet_do_sesor();
        printf("\fNhiet do phong:\n %d", t);
        __delay_ms(100);
        __delay_ms(100);
        __delay_ms(100);
        }

        }

        void putch(char c)
        {
        lcd_putc(c);
        }

        char khoi_dong_sensor()
        {
        i2c_start();
        if(i2c_write(0x90)) return -1;
        if(i2c_write(0x00)) return -1;
        i2c_stop();
        return 0;
        }

        char doc_nhiet_do_sesor()
        {
        char nhiet;
        i2c_start();
        if(i2c_write(0x90)) return -1;
        if(i2c_write(0x00)) return -1;
        i2c_start();
        if(i2c_write(0x91)) return -1;

        nhiet = i2c_read(1);
        i2c_stop();
        //return nhiet;
        }[\code]
        ĐINH THANH SANG 1990
        AN MỸ - CẨM CHÂU - HỘI AN - QUẢNG NAM
        DĐ: 01684222047
        Yahoo ID: thanh_sang_mua_he_mai_xanh@yahoo.com.vn

        Comment

        • nvquyvn
          Đệ tử 1 túi
          • Mar 2011
          • 15

          #5
          e thu rui ko duoc !
          co ai giup minh vs .
          #include "16f877a.h"
          #device *=16
          #use delay(clock=20M)
          #fuses nowdt, hs, noput, nodebug,noprotect, nobrownout, nolvp, nocpd, nowrt
          #use i2c(master,sda=pin_c4,scl=pin_c3)
          #include "lcd.c"


          void main()
          {

          int i,temp;
          lcd_init();
          lcd_putc("STARTING");
          for(i=0;i<=10;i++)
          {
          lcd_putc(".");
          delay_ms(5);
          }
          lcd_putc("\f");
          while(1)
          {
          // khoi dong sensor
          i2c_start();
          i2c_write(0x9B);
          i2c_write(0x00) ;
          i2c_stop();
          // doc nhiet do
          i2c_start();
          i2c_write(0x9B);
          i2c_write(0x00);
          i2c_start();
          //if(i2c_write(0x91))
          temp=i2c_read(1);
          i2c_stop();

          lcd_putc(" Nhiet do phong ");
          lcd_putc("\n");
          printf(lcd_putc,"\r %u",temp);
          delay_ms(100);
          }
          }

          Comment

          Working...