Thông báo

Collapse
No announcement yet.

Giao tiếp AVR i2c TC74 sensor nhiệt độ

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

  • Giao tiếp AVR i2c TC74 sensor nhiệt độ

    Hôm nay vừa kiếm được con TC74 về thử thấy hay hay nên viết lên cho bác nào cần thì tham khảo.
    Đây là con cảm biến nhiệt độ của Microchip sử dụng chuẩn giao tiếp I2C
    Chương trình để viết là Codevision, mặc dù nó hỗ trợ giao tiếp I2C bằng phần mềm có trong thư viện nhưng ở đây em sẽ viết I2C bằng phần cứng của con ATmega16, vì dùng sẵn thư viện của CodeVision có vẻ hơi xxx, mà lại lãng phí phần cứng từ ATmega16
    để kết nối 2 con này các bác nối đúng chân SDA và SCK của chúng với nhau, và nhớ là phải nối thêm 2 chân đó qua 2 điện trở Pullup khoảng 4,7k lên nguồn.
    Chương trình sẽ đọc nhiệt độ từ TC74 và xuất ra màn hình LCD
    Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V1.25.9 Standard
    Automatic Program Generator
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 9/17/2008
    Author  : Nam                             
    Company : Automobile                      
    Comments: 
    
    
    Chip type           : ATmega16
    Program type        : Application
    Clock frequency     : 4.000000 MHz
    Memory model        : Small
    External SRAM size  : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega16.h>
    
    // Alphanumeric LCD Module functions
    #asm
       .equ __lcd_port=0x1B ;PORTA
    #endasm
    #include <lcd.h> 
    #include <delay.h>
    #include <stdio.h>
    //*****************************************************************************
    #define TWINT 7 
    #define TWEA 6 
    #define TWSTA 5 
    #define TWSTO 4 
    #define TWEN 2 
    char lcd_buffer[40];
    char tmp1;
    //*****************************************************************************
    
    void read_temp(void)
    {
      TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);                       // Start I2C
      while (!(TWCR & (1<<TWINT)));                                 // Cho cho den khi Flag duoc Set  
      TWDR = 0x9A;                                                  // Ghi dia chi cua Slave + bit 0
      TWCR = (1<<TWINT) | (1<<TWEN);                                // Clear Flag & bat dau truyen
      while (!(TWCR & (1<<TWINT)));                                 // Cho cho den khi Flag duoc Set  
      TWDR = 0x00;                                                  // Gui lenh doc nhiet do toi TC74 
      TWCR = (1<<TWINT) | (1<<TWEN);                                // Clear Flag & bat dau truyen
      while (!(TWCR & (1<<TWINT)));                                 // Cho cho den khi Flag duoc Set 
      TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);                       // re_Start I2C
      while (!(TWCR & (1<<TWINT)));                                 // Cho cho den khi Flag duoc Set  
      TWDR = 0x9B;                                                  // Ghi dia chi cua Slave + bit 1
      TWCR = (1<<TWINT) | (1<<TWEN);                                // Clear Flag & bat dau truyen
      while (!(TWCR & (1<<TWINT)));                                 // Cho cho den khi Flag duoc Set 
      TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);                       // Enabe Ack -> truyen di se la NACK 
      while (!(TWCR & (1<<TWINT)));                                 // Cho cho den khi Flag duoc Set 
      tmp1=TWDR;                                                    // lay gia tri nhan duoc
      TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);                       // Ket thuc qua trinh truyen 
    }
    //*****************************************************************************************************
    
    void main(void)
    {
    
    // 2 Wire Bus initialization
    // Generate Acknowledge Pulse: On
    // 2 Wire Bus Slave Address: 4dh
    // General Call Recognition: Off
    // Bit Rate: 200.000 kHz
    TWSR=0x00;
    TWBR=0x02;
    TWAR=0x9A;
    TWCR=0x44;
    
    // LCD module initialization
    lcd_init(20);
    
    while (1)
          {
          //  hien thi ket qua do ra man hinh lcd
            
              read_temp();      
              sprintf(lcd_buffer,"TEMP: %d\xdfC",tmp1);          
              lcd_puts(lcd_buffer);
              delay_ms(300);   
             
    
          };
    }
    Last edited by AVR_VN; 17-09-2008, 14:42.
    *** Thành viên không biết gì về điện ***

  • #2
    các bác có thể tham khảo thêm về thanh ghi I2C đặc biệt là TWCR của mega16 để hiểu rõ hơn,
    Attached Files
    *** Thành viên không biết gì về điện ***

    Comment


    • #3
      và cách đọc dữ liệu từ TC74 củng từ datasheet của nó
      Attached Files
      *** Thành viên không biết gì về điện ***

      Comment


      • #4
        Dòng mega tích hợp sẵn I2C từ phần cứng nhưng tại sao Codevision lại hỗ trợ thêm I2C bằng phần mềm các bác nhỉ? có ai biết không?

        Comment


        • #5
          Nguyên văn bởi bk_exp Xem bài viết
          Dòng mega tích hợp sẵn I2C từ phần cứng nhưng tại sao Codevision lại hỗ trợ thêm I2C bằng phần mềm các bác nhỉ? có ai biết không?
          Tôi chưa thử chính xác nhưng đoán rằng Mega hỗ trợ phần cứng I2C trên hai chân SDA và SCL dùng cho giao tiếp nhiều AVR, còn với CV có thể chọn chân bất kì để giao tiếp với ngoại vi.
          Chỉ là phỏng đoán thôi-sẽ test trong thời gian sớm nhất! kekeke
          Nỏ biết chữ mần răng ký được??!! Thôi nhé.

          Comment


          • #6
            Nguyên văn bởi thangktvta Xem bài viết
            Tôi chưa thử chính xác nhưng đoán rằng Mega hỗ trợ phần cứng I2C trên hai chân SDA và SCL dùng cho giao tiếp nhiều AVR, còn với CV có thể chọn chân bất kì để giao tiếp với ngoại vi.
            Chỉ là phỏng đoán thôi-sẽ test trong thời gian sớm nhất! kekeke
            đúng rồi đấy bác! không phải đoán nữa đâu! keke

            Comment


            • #7
              Các bác có biết con cảm biến nhiệt độ nào đo được tới 200C mà dùng I2C ko?
              Bác nào biết chỉ giúp e với!

              Comment


              • #8
                Nguyên văn bởi thangcftd Xem bài viết
                Các bác có biết con cảm biến nhiệt độ nào đo được tới 200C mà dùng I2C ko?
                Bác nào biết chỉ giúp e với!
                ơ hơ hơ!....
                em cứ dùng cái nhiệt điện trở thêm 3 con nữa mắc hình cầu gắn vào ADC thế là đo được luôn 255 độ vừa rẻ lại vừa nhanh
                Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                Comment


                • #9
                  Nguyên văn bởi bk_exp Xem bài viết
                  Dòng mega tích hợp sẵn I2C từ phần cứng nhưng tại sao Codevision lại hỗ trợ thêm I2C bằng phần mềm các bác nhỉ? có ai biết không?
                  Nó hỗ trợ nhiều cái chứ đâu chỉ có I2C , ADC , Timer - Counter - PWM ...... USART .... hỗ trợ cả phần cứng đấy thôi .

                  Nó hỗ trợ hàm C cho cả như vậy để cho nhưng ai không có thời gian tìm hiểu về con AVR vẫn có thể dùng nó dễ dàng và nhanh chóng .......

                  Comment


                  • #10
                    Nguyên văn bởi embsys Xem bài viết
                    Nó hỗ trợ nhiều cái chứ đâu chỉ có I2C , ADC , Timer - Counter - PWM ...... USART .... hỗ trợ cả phần cứng đấy thôi .

                    Nó hỗ trợ hàm C cho cả như vậy để cho nhưng ai không có thời gian tìm hiểu về con AVR vẫn có thể dùng nó dễ dàng và nhanh chóng .......
                    nhầm nhọt rồi bác ơi?! I2C phần mềm ở đây có thể sử dụng với bất kỳ cặp chân nào của VDK, không nhất thiết dùng SDA, SCK của vi điều khiển, và nó củng không dùng đến các thanh ghi của I2C từ vi điều khiển luôn,...
                    Nó không giống như mấy cái như ADC, hay USART ... viết hàm sẵn cho mình
                    *** Thành viên không biết gì về điện ***

                    Comment


                    • #11
                      Nguyên văn bởi AVR_VN Xem bài viết
                      nhầm nhọt rồi bác ơi?! I2C phần mềm ở đây có thể sử dụng với bất kỳ cặp chân nào của VDK, không nhất thiết dùng SDA, SCK của vi điều khiển, và nó củng không dùng đến các thanh ghi của I2C từ vi điều khiển luôn,...
                      Nó không giống như mấy cái như ADC, hay USART ... viết hàm sẵn cho mình
                      Có 2 vấn đề thế này :

                      1. Bạn không hiểu ý mình trả lời cho bk_exp. Mình biết như bạn nói vì đã đọc bài lập trình giao tiếp I2C bằng 8051 ở đâu đó trên diễn đàn ( lâu rồi không nhớ nữa ). tuy rằng chưa làm thử ...... he he .....

                      2. Thứ 2 là có thể mình không hiểu ý bạn bk_exp hỏi ........

                      Comment


                      • #12
                        @: embsys: thì đúng là em cảm thấy bác hiểu nhầm câu hỏi nên mới trả lời vậy, hehe...
                        trong CodeVision phần tạo code : codewizard cho mình 2 lựa chọn, I2C dùng phần cứng sử dụng các chân SDA, SCK hoặc I2C phần mềm dùng chân nào tùy theo mình định nghĩa ...
                        *** Thành viên không biết gì về điện ***

                        Comment


                        • #13
                          Nguyên văn bởi AVR_VN Xem bài viết
                          Chương trình sẽ đọc nhiệt độ từ TC74 và xuất ra màn hình LCD
                          Code:
                          /*****************************************************
                          This program was produced by the
                          CodeWizardAVR V1.25.9 Standard
                          Automatic Program Generator
                          © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
                          http://www.hpinfotech.com
                          hi AVR_VN !
                          mình đã Project theo hướng dẫn của bạn. Nhưng sao khi thay đổi nhiệt độ thì LCD vẫn ko thay đổi theo ???
                          Mong bạn cho 1 lời khuyên.
                          Thanks.
                          Last edited by pavo_lusa; 09-11-2008, 04:40.
                          :-)

                          Comment


                          • #14
                            sao mình ko đính kèm file được thế này ???

                            Làm sao post hình lên ấy nhỉ ?
                            Last edited by pavo_lusa; 10-11-2008, 16:26.
                            :-)

                            Comment


                            • #15
                              làm sao để post hình lên ấy nhỉ ?
                              :-)

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X