PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Cần tìm hiểu về đo nhiệt độ dùng pic (http://www.picvietnam.com/forum/showthread.php?t=962)

ThaiVu 19-04-2007 07:55 AM

PicBasic Pro rat pho bien trong gioi binh dan,ho khong duoc di hoc nhung lai thich tay may . PBP rat de viet , de hieu va co nhieu commands thuc dung cho viec sang che may moc. so di no khong duoc pho bien o VN vi no phat xuat tu Basic Stamp trong gioi hobby dien tu (khong phai nhu C tu cac truong dai hoc VN) o My va Au chau. Hy vong sinh vien cac nghanh khac (khong can phai hoc C) cung co the lam quen de dang de sang kien cua ho de thuc hien trong thuc te. Day la thu vui cho moi gioi.
Chao ban va chuc ban thanh cong.
TV

hatuan296 26-04-2007 05:06 AM

Sẵn tiện chủ đề này . mình cũng co một câu hỏi mong các bạn giúp mình nha .

mình dùng cảm biến nhiệt là Lm35 , pic là 18f4520 , Vref- nối mass , vref+ nối biến trở , cân chỉnh được 2,7v . Mình lập trình cho hiển thị nhiệt độ trên LCD . code được viết bằng Picbasic Pro .
khai báo các thanh ghi ADC như sau :

ADCON1 = %00011111 ' CHUYEN PORTA , PORTE SANG DIGITAL
ADCON0 = %00010011 ' Set PORTA analog CHON ADC KENH 4

Kết quả , Lcd vẫn hiện thị được nhiệt độ . nhưng khi tăng nhiệt độ tại cảm biến , thì giá trị của LCD lại giảm đi . :confused: .

đây là câu hỏi mình mong các bạn giúp mình nha . Cảm ơn rất nhiều .

ThaiVu 26-04-2007 09:40 AM

Chao ban Hatuan296,
Minh khong biet nhieu ve 18F4520, nhung dua theo data sheet thi thay ban can coi lai:
1. ADCON0 = %00010011 cho thay ban chon AN4 la analog input cho cam bien, nhu vay ADCON1 = %00011111 cho thay khong co port A nao cho AN4.
theo thien y cua minh thi nen viet ACDCON0 = %00000011, ADCCON1 = %00011110, TRISA = %11111111 .(minh chon AN0 cho cam bien, AN0 la analog input, con lai la digital input).
2. Khong thay ban nhac den ADCON2( noi ve right, left justify, accquisition time, A/D conversion clock ) minh khong ro DEFINE ADC_CLOCK 3 va DEFINE ADC_SAMPLESUS 50 co the dung cho 18F4520 duoc khong. Neu thu chay duoc, cho minh biet voi.
Day cung la dip de minh hoc ve PIC 18FXXXX.
Chuc ban thanh cong.
Thai Vu

hatuan296 26-04-2007 03:41 PM

Chào bạn THAIVU . chương trình của mình không thể sửa như bạn được , vì yêu cầu phần cứng là thiết kế cho AN4 nhận tín hiệu từ LM35 rồi . Còn các các chân PORTA.0 , PORTA.1 kết nối I2C .

Còn thanh ghi ADCON2 thì mình chưa đụng tới , vì thật sự cũng chưa biết nó là gì . Nếu được mong bạn chia sẽ nha . thanks

hatuan296 26-04-2007 04:21 PM

mình đã thử sửa chương trình lại như sau :

ADCON1 = %00011010 ' CHUYEN PORTA , PORTE SANG DIGITAL trừ từ AN0 đến AN4

ADCON0 = %00010011 ' Set PORTA analog CHON ADC KENH 4
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 4 ' Set clock source (4 : 4 TOSC)
DEFINE ADC_SAMPLEUS 50 'ADC sampling time in microseconds

thì vẫn bị tình trạng là nhiệt độ tại cảm biến tăng lên . nhưng nhiệt độ hiển thị trên lại bị giảm xuống . Mình cũng thật không biết lài tại sao nữa .
Mặc dù câu lệnh hết sức đơn giản :

MAIN :

ADCIN 4 , TEMP ' đọc giá trị adc kênh 4 , đưa vào biến TEMP

PAUSE 200 ' chờ 200 mili giây

LCDOUT DEC2 TEMP ' xuất biến temp ra lcd dưới dạng số thập phân

PAUSE 500 ' chờ 500 mili giây

GOTO MAIN ' làm lại từ đầu .


Mong bác náo rành cái này thì giúp với . mình đang bí quá . thanks

namqn 26-04-2007 06:26 PM

Theo cấu hình của bạn, nguồn áp chuẩn cho +VREF sẽ được nối vào AN3, bạn có nối như vậy chứ?

Chương trình của bạn chỉ dùng AN4, vậy các AN2 đến AN0 có được dùng không? Nếu có thì dùng như thế nào? Nếu không thì tại sao lại chọn cấu hình analog từ AN0 đến AN4.

Cái bất lợi của ngôn ngữ cấp cao là chúng ta khó kiểm soát được cách thức các module phần cứng được sử dụng và thiết lập. Ví dụ câu lệnh ADCIN 4 , TEMP của bạn, thực sự là nó đang thực hiện những gì?

Tôi không dùng LM35, nhưng đã từng dùng AD22100 (tương tự LM35) để đo nhiệt độ và hiển thị lên LCD. Tôi đã hiển thị nhiệt độ ở dạng xx.x độ C. Không hề có chuyện nhiệt độ tăng mà giá trị hiển thị giảm.

Thân,

meishun 26-04-2007 06:34 PM

2 Attachment(s)
Chào các bạn, mình đã làm mạch đo nhiệt độ dùng PIC16F877A và cảm biến nhiệt độ LM35DZ, đo nhiệt độ môi trường và hiển thị lên LED 7 đoạn. Nay mình post lên cho mọi người cùng tham khảo.( đề tài này mình viết bằng Hợp Ngữ)

hatuan296 27-04-2007 03:57 AM

Vậy là mình đã giãi quyết xong rắc rối . sau khi bỏ cả ngày hôm nay để kiểm tra , chỉnh sữa :

. kiểm tra mạch in , thấy không sai . chân vref+ được cân chỉnh ở 2,73 v
. kiểm tra chương trình ( viết lại nhiều chương trình cho nhiều loại 18F như 4520 , 4525 , 458 , 4610 , 4620 , 4680 ) . con nào cũng không chịu chạy . :confused:

rốt cuộc đành chạy ra chợ Nhật Tảo kiếm 2 con LM35 mới nguyên về . thì lại chạy được . , tăng nhiệt độ tại cảm biến thì số trên LCD sẽ tăng chứ không giảm như trước . :D

Sau đây là chương trình mình đã dùng :

Code:

ADCON1 = %00011111    ' CHUYEN PORTA , PORTE SANG DIGITAL
 ADCON0 = %00010011    ' Set PORTA analog CHON ADC KENH 4     
 Define        ADC_BITS        8        chỉ dùng ADC 8 bit
 Define ADC_CLOCK  4    ' Set clock source (4 : 4 TOSC)
 DEFINE ADC_SAMPLEUS 50 'ADC sampling time in microseconds


MAIN :

ADCIN 4 , TEMP ' đọc giá trị adc kênh 4 , đưa vào biến TEMP

PAUSE 200 ' chờ 200 mili giây

LCDOUT DEC3 TEMP ' xuất biến temp ra lcd dưới dạng số thập phân 3 chữ số

PAUSE 500 ' chờ 500 mili giây

GOTO MAIN ' làm lại từ đầu .

Chương trình vẫn vậy , không có gì thay đổi cả . và là chương trình rất cơ bản .
To THAIVU : hy vong sẽ có dịp trao đổi thêm về kinh nghiệm lập trình Pic dùng Picbasic Pro với bạn . thân chào !

à , các bạn cho mình hỏi thêm . với Vref+ trong ADC 8 bit thì mình cân chỉnh bao nhiêu , 10 bit thì bao nhiêu là chính xác ? Đề tài trên mình đã cân chỉnh là 2,73 v cho ADC 8 bit như vậy có đúng không ?

boys3509_2006 05-05-2007 02:45 PM

trời ạ mới có 2 tuần ko đăng nhập mà cái luồng này đã loạn xì ngầu lên cả rùi, vùa có 16F877A vừa có 16F4520, LM35DZ, lại còn sài cả BASIC nữa chứ, rối quá. giao trước là chỉ dùng LM335, 16F877A và CCS thui mừ.

huybo02 06-05-2007 09:37 PM

Code:

#include <16F877.h>
#device 16F877*=16 ADC=10
#include <math.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=1000000)
#define use_portd_lcd TRUE
#include<lcd.c>
long adc,nhietdo;
int8 a,b,c,d;
void tachhang(int&a,int&b,int&c,int&d);
char so[11] ="0123456789";
void main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(100);

while(true)
{
adc=read_adc();
nhietdo = (adc-559)/0.2024;
tachhang(a,b,c,d);
lcd_init();
delay_ms(100);
lcd_putc(so[a]);
lcd_putc(so[b]);
lcd_putc(so[c]);
lcd_putc('.');
lcd_putc(so[d]);
delay_ms(900);
}
}

void tachhang(int&a,int&b,int&c,int&d)
{
  a=nhietdo/1000;
  b=(nhietdo%1000)/100;
  c=(nhietdo%100)/10;
  d=nhietdo%10;
}


/* 5V = 1024 muc =>1 muc ADC ung voi ap =4.88 => 10mV tuong ung voi 2.048 muc ADC
0oC = 273oK => 0oC ung voi muc dien the 2.73V ung voi 559 muc ADC
Nhiet do = dien the Analog/10 - 273
Tuong ung
Nhiet do = (adc -559)/2.024
Xuat gia tri nhiet do ra LED 7 doan hay LCD*/

Làm được rồi hi`. Dùng ADC 10bit Vref =5V Xuất ra LCD 4bit

boys3509_2006 31-05-2007 09:14 AM

Bạn ko dùng ngắt ngoài àh, nếu vậy thì khi truyền dữ liệu qua PC bằng RS232 nó sẽ liên tục thông báo nhiệt độ đo được. chẳng hạn khi bạn viết câu thông báo ('nhiệt độ đo được là',temp) thì nó sẽ liên tục viết ra câu thông báo trên. Ko biết có pác nào biết cách khắc phục ko ? :confused:

dientudong 21-01-2009 02:03 AM

đề tài này sao không thấy ai tích cực viết tiếp nhỉ !

vuvulinh_8x 21-01-2009 11:42 AM

Đo nhiệt độ 2 kênnh
 
1 Attachment(s)
Trích:

Nguyên văn bởi dientudong (Post 22277)
đề tài này sao không thấy ai tích cực viết tiếp nhỉ !

:D. Mình cũng muốn thảo luận một tý. Mình tham khảo code của bác Linh, công nhận Tutorial bác ấy viết hay, mình viết code để PIC đọc 2 kênh ADC. Vấn để ở đây là mình muốn truyền kết quả đo được lên mobile( việc truyền lên mobile khó quá) hoặc máy tính.Mình đang làm nhưng chưa được, mình post code đo 2 kênh lên trước nhé. Mong các bác cho ý kiến, để truyền kết quả cho mobile hoặc PC.

dientudong 21-01-2009 04:12 PM

bạn có thể cho mình biết sao cách kết nối LCD có vẻ khác so với cách kết nối mà mình hay dùng để hiển thị.

vuvulinh_8x 29-01-2009 03:47 PM

Lcd
 
Trích:

Nguyên văn bởi dientudong (Post 22285)
bạn có thể cho mình biết sao cách kết nối LCD có vẻ khác so với cách kết nối mà mình hay dùng để hiển thị.

Không biết bác kết nối LCD như thế nào, và khác ở điểm nào? Mình tham khảo sơ đồ trên forum thôi, theo mình hiểu thì kết nối như vậy với LCD 4bit là đủ : các chân được nối đất mặc định mức logic 0 để chúng làm việc ở một chế độ thôi nếu muốn bác có thể nối vào chân vdk để thay đổi, và ở chế độ 4 bit chỉ cần nối 4 chân. Mình có một tài liệu ở bên vagam rất hay, bạn có thể tham khảo!.............:(( ủa up mãi không được nè! Tại server lỗi khi khác mình up nhé! :D


Múi giờ GMT. Hiện tại là 04:42 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam