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
Đâ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); }; }
Comment