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