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

  • #16
    Nguyên văn bởi AVR_VN Xem bài viế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);   
             
    
          };
    }
    TC74 và TCN75 có dùng thay thế được cho nhau k vậy bạn. (cùng 1 code 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