Tôi muốn đo nhiệt độ dùng LM35 giao tiếp với bộ ADC của ATmega16L.Tuy nhiên tôi đang gặp khó khăn về lắp mạch và lập trình.Xin mọi người giúp đỡ.Cám ơn nhiều.
Thông báo
Collapse
No announcement yet.
LM35 và AVR
Collapse
X
-
Tôi đưa chân OUT của LM35 vào kênh 0 (chân AD0) của ADC.
Chương trình như sau:
//real_time_hut@yahoo.com
//khai bao thu vien
#include<mega16.h>
#include<stdio.h>
#include <delay.h>
//khai bao bien toan cuc
unsigned int temp;
//mau ham
void khoi_tao_serial(void);
void khoi_tao_ports(void);
void khoi_tao_ADC(void);
unsigned int doc_ADC(void);
void main(void)
{
khoi_tao_ports();
khoi_tao_serial();
khoi_tao_ADC();
while(1) //vong lap chinh
{
temp=~doc_ADC();
temp=380*(temp/1024); //Vref=3.8V
//10mV ung voi 1 do C
printf("%i\n\r",temp);
delay_ms(100); //cap nhat du lieu sau 100ms
}
}
unsigned int doc_ADC(void)
{
unsigned int value;
ADCSRA = ADCSRA | 0x40; // bat dau chuyen doi
while( (ADCSRA & 0x10) == 0 ); // cho cho den khi chuyen doi //thanh cong
value = ADCW; //lay gia tri ADC
ADCSRA = ADCSRA | 0x10; // xoa co
return value;
}
void khoi_tao_serial(void) //9600/8/N/1
{
UCSRA=0x02;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
}
void khoi_tao_ports(void)
{
DDRC = 0xFF; // PortC lam cong ra
PORTC = 0x00;
}
void khoi_tao_ADC(void)
{
ADMUX = 0x00; // chon kenh 0
ADMUX = ADMUX | 0x40; // chon dien ap nguong
ADMUX = ADMUX | 0x20;
ADCSRA = 0x07; // chon tan so thach anh
ADCSRA = ADCSRA | 0x80; // cho phep ADC hoat dong
}Last edited by digi_pow; 13-10-2006, 22:07.
Comment
-
tôi gửi bạn đoạn code
;=====================
;last edition 28/9/06;
;=====================
.include "m16def.inc"
.org 0x000
rjmp main
.org 0x01C
rjmp ADC_Complete
main:
;Dat con tro ngan xep
ldi temp,HIGH(RAMEND)
out SPH,temp
ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,0xFF
out DDRB,temp ;ra led 7 thanh
out DDRC,temp ;dk nhiet do
out DDRD,temp ;ra led 7 thanh
ldi temp,0b11111100 ;chi dung 2 bit 0,1 de lam dau vao co`n lai la` da^`u ra
out DDRA,temp
;Dat clk cho ADC
ldi temp,0b11011110 ;tan so 125 KHz 110
out ADCSRA,temp
;===================
;Chon MUX va Vref
;AREF Internal Vref turn of; Mux 0:00000
ldi temp,0b01100000 ;
out ADMUX,temp
sei ;Cho phep ngat
;wait interrupt
loop:
rjmp loop
;============
; ISR ;
;============
ADC_Complete:
;dk nhiet do
;Calling: convert; display, control
clr rdivL
clr rdivH
in rdivL,ADCL
in rdivH,ADCH
rcall Convert
rcall Display
rcall Control
reti
còn lại bạn làm tiếp nhé
Bạn phải viết chương trình đổi số 10bit sang BCD để hiển thị|
Comment
-
sao mình dùng terminal của protues lại không thấy gì nhỉ??? mình nối 2chân RXD và TXD tương ứng với 2 chân RXD và TXD của vi diều khiển. mình copy code của bạn vào mà vẫn không được. ai biết chỉ giúp mình cái.Nguyên văn bởi digi_pow Xem bài viếtTôi đưa chân OUT của LM35 vào kênh 0 (chân AD0) của ADC.
Chương trình như sau:
//real_time_hut@yahoo.com
//khai bao thu vien
#include<mega16.h>
#include<stdio.h>
#include <delay.h>
//khai bao bien toan cuc
unsigned int temp;
//mau ham
void khoi_tao_serial(void);
void khoi_tao_ports(void);
void khoi_tao_ADC(void);
unsigned int doc_ADC(void);
void main(void)
{
khoi_tao_ports();
khoi_tao_serial();
khoi_tao_ADC();
while(1) //vong lap chinh
{
temp=~doc_ADC();
temp=380*(temp/1024); //Vref=3.8V
//10mV ung voi 1 do C
printf("%i\n\r",temp);
delay_ms(100); //cap nhat du lieu sau 100ms
}
}
unsigned int doc_ADC(void)
{
unsigned int value;
ADCSRA = ADCSRA | 0x40; // bat dau chuyen doi
while( (ADCSRA & 0x10) == 0 ); // cho cho den khi chuyen doi //thanh cong
value = ADCW; //lay gia tri ADC
ADCSRA = ADCSRA | 0x10; // xoa co
return value;
}
void khoi_tao_serial(void) //9600/8/N/1
{
UCSRA=0x02;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
}
void khoi_tao_ports(void)
{
DDRC = 0xFF; // PortC lam cong ra
PORTC = 0x00;
}
void khoi_tao_ADC(void)
{
ADMUX = 0x00; // chon kenh 0
ADMUX = ADMUX | 0x40; // chon dien ap nguong
ADMUX = ADMUX | 0x20;
ADCSRA = 0x07; // chon tan so thach anh
ADCSRA = ADCSRA | 0x80; // cho phep ADC hoat dong
}
cảm ơn nhiều.Never forget who you are!
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phamCa sĩ AI cũng có vài loại, có ca sĩ chuyên và không chuyên.Ca sỉ chuyên thì là Synthesizer V, còn không chuyên thì là Suno. Ca sĩ chuyên thì mệt với nó lắm, phải biết nhạc và biết cả ngôn ngữ của nó để điều khiển, còn ca sĩ không chuyên thì...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 21:33 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Chúc mừng bác có ca khúc hay tặng bà xã nhé! Nếu muốn hát đúng ý mình thì bác chịu khó... thuê ca sĩ nha!!!!😁😁😁...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 15:43 -
-
bởi dinhthuong92Trong các công thức không có mặt L bạn. Trước mình nghĩ cứ phải có L cơ....
-
Channel: Nguồn!
Hôm qua, 15:35 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phamCháu nghe thử trên youtube xem sao? : https://www.youtube.com/watch?v=Opm0BszTmFQ...
-
Channel: Tâm tình dân kỹ thuật
02-05-2026, 21:23 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Cháu không vào được để nghe thử. Mời bác nghe thử bản phối điệu Techno này xem thế nào nhé! Chúc bác vui.
( Cháu nhìn lyrics và cứ thế một mmạch hát demo rồi đưa vào suno. nó hát đạt 80% melody!)...-
Channel: Tâm tình dân kỹ thuật
27-04-2026, 17:00 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Bài này cháu phải "Creat" trên 30 lần rồi cắt ghép mới tạm có hồn tí đó bác. Quá nản luôn!!!
HẸN ƯỚC XUÂN SANG
Sáng tác: Hoàng Đình Thường
Hòa âm & hát: Suno AI
---25/04/2026----
[Verse 1]
Gió...-
Channel: Tâm tình dân kỹ thuật
25-04-2026, 11:05 -

Comment