PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Analog - Bộ nhớ - Bảo mật - Cảm biến nhiệt độ

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Analog - Bộ nhớ - Bảo mật - Cảm biến nhiệt độ Thảo luận việc sử dụng và thay thế các sản phẩm Analog, Memory, KEELOG và cảm biến nhiệt độ của Microchip cho các thiết kế

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 14-07-2011, 11:30 AM   #1
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
hỏi về pic 16f886 và lm35, 74595

em mới học pic và làm sơ đồ đo nhiệt độ dùng lm35 , pic 16f886 và 2 ic74595
em đã làm mạch thật
nhưng khi đưa code vào nó ko hoạt động
em đã thử code khác thì hoạt đông bình thường
các bác có thể xem hộ em code mà em viết được ko?
em rất mong được các bác chỉ giáo cho
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-07-2011, 11:33 AM   #2
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
đây là code của em viết.các bác xem giúp em nhé

================================================== =================
#include <16F886.h>
#device adc=10

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES PROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOIESO //No Internal External Switch Over mode enabled
#FUSES NOFCMEN //No Fail-safe clock monitor enabled
#FUSES NOLVP //No Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NODEBUG //No Debug mode for ICD
#FUSES WRT //Program memory write protected
#FUSES BORV40 //Brownout reset at 4v

#use delay(clock=4000000)


#byte PORTA = 0x05
#byte TRISA = 0x85

#byte PORTB = 0x06
#byte TRISB = 0x86

#byte PORTC = 0x07
#byte TRISC = 0x87

#byte ANSELL = 0x188
#byte ANSELH = 0x189
#byte ANSELL = 0x188

#byte SSPCON = 0x14
#byte SSPCON2 = 0x91
#byte SSPADD = 0x93
#byte SSPSTAT = 0x94

#byte SSPCON = 0x14
#byte SSPCON2 = 0x91
#byte SSPADD = 0x93
#byte SSPSTAT = 0x94

#byte PORTB = 0x06
#byte TRISB = 0x86
#bit rb5 = portb.5

//===================================
//define
//===================================


#define MASK_LED_0 0b00101000
#define MASK_LED_1 0b10101111
#define MASK_LED_2 0b10011000
#define MASK_LED_3 0b10001010
#define MASK_LED_4 0b00001111
#define MASK_LED_5 0b01001010
#define MASK_LED_6 0b01001000
#define MASK_LED_7 0b10101110
#define MASK_LED_8 0b00001000
#define MASK_LED_9 0b00001010

//#define led_1 0b00001000 //du lieu hien tren 4 led 7 thanh
//#define led_2 0b00000100
//#define led_3 0b00000010
//#define led_4 0b00000001

#define hien_thi_led_1 0b11110111
#define hien_thi_led_2 0b11111011
#define hien_thi_led_3 0b11111101
#define hien_thi_led_4 0b11111110

#define led_1 led[0] //du lieu hien tren 4 led 7 thanh
#define led_2 led[1]
#define led_3 led[2]
#define led_4 led[3]

const unsigned char hien_thi_led[] ={hien_thi_led_1,hien_thi_led_2,hien_thi_led_3,hie n_thi_led_4};
//const unsigned char led[]={led_1,led_2,led_3,led_4};

char value;


//===================================
//KHAI BAO CHUONG TRINH CON
//===================================
void HEX_BCD();
void HIENTHI();
void lat();

//#int_RTCC
//void RTCC_isr(void)
//{void HIENTHI(); }

//===================================
//chuong trinh doc adc
//===================================
void main()
{
int8 value;
set_tris_A(1);
// init_board();
//===================================
//khoi tao che do cho ADC
//===================================

Setup_ADC(ADC_CLOCK_INTERNAL);//khoi tao ADC
setup_ADC_ports(sAN0|VSS_VDD);
Set_ADC_channel(0);
delay_us(10); //ket thuc khoi tao ADC

//===================================
//lay mau nhiet do cho lan dau tien
//===================================
while(true)
{
value=read_ADC();
value=500*value/1024;
//===================================
//chuong trinh hien thi
//===================================

HEX_BCD();
HIENTHI();
}
}

//================================================== ====================
//tach lay so hang tram, hang chuc, hang don vi de hien thi ra led
//================================================== ====================

void HEX_BCD()
{
int16 value;

led_1=value/1000;
value=value%1000;
led_2=value/100;
value=value%100;
led_3=value/10;
led_4=value%10;
}

//================================================== ====================
//chuong trinh latch
//================================================== ====================

void lat()
{
output_high(PIN_B3);
output_low(PIN_B3);

}

//================================================== ====================
//HIEN THI
//================================================== ====================
void HIENTHI()
{
unsigned char mask,i,n,k;
int1 data;
set_tris_B(0);
do
{
for(n=4;n>=0;n--)
{
k=led[n];
for(i=8;i>=0;i--)
{
data = bit_test(k,n-1);
output_bit(pin_b5,data);
output_high(PIN_B4);
output_low(PIN_B4);

}
}


mask = hien_thi_led[n];
for(i=8;i>=0;i--)
{
data = bit_test(mask,i-1);
output_bit(pin_b5,data);
output_high(PIN_B4);
output_low(PIN_B4);
lat();
delay_ms(20);
}
}while(n<4);
}
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-07-2011, 11:37 AM   #3
thanhtb_89
Đệ tử 2 túi
 
Tham gia ngày: Jan 2011
Bài gửi: 37
:
có ai ko?
mọi người vào giúp em với
thanhtb_89 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-07-2011, 09:56 PM   #4
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
mình thấy tự mình tìm hiểu là tốt nhất .trong đây không có ai giúp được đâu.bản thân học điện tử mới thấy được sự ích kỷ.nếu mà không ích kỷ thì khó sống về nghề này lắm.
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-08-2011, 10:14 AM   #5
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
To phatcddt08a:
- Nếu phát biểu như bạn thì có khỏi làm chạnh lòng biết bao người trên diễn đàn đã giúp đỡ tận tình các em, các bạn? Như bác fall chẳng hạn, lan hương...
- Tôi thấy bạn là đệ tự 4 túi mà suy nghĩ như thế này chắc chỉ lên đây kiếm chác thôi. Nên ra đi bạn ạ. "Kỷ sở dục, đạt nhân đạt nhi" - Tặng bạn câu nói này nhé
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-08-2011, 10:35 AM   #6
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
Bạn dùng 74595 cũng được nhưng thử nghiên cứu về phần quét led xem thế nào.
Về chương trình bạn viết còn khá nhiều vấn đề:
Đọc ADC 10bit mà ban đầu bạn chỉ khởi tạo value là int8. Tôi không biết trình dịch có tự sửa không nhưng khi đã lập trình thì mọi thứ phải thật rõ ràng mới dễ dàng quản lý được. "Char value" là như thế nào mình cũng chưa hiểu, hjhj. Nói tóm lại là sao tôi thấy cái "value" của bạn linh tinh quá, chỗ thì char, chỗ thì int8, chỗ thì int16.
- Theo công thức tính nhiệt độ của bạn thì giá trị từ 0~500 độ. LM35 mình mới chỉ thấy loại cao nhất là 150 độ thôi. Nhưng đó chưa quan trọng lắm vì khi hiển thị sai cũng sẽ dễ hiệu chỉnh thôi. Vấn đề là chúng ta sẽ test như thế nào. Để cho chắc ăn tôi sẽ thử riêng với cái hàm hiển thị của bạn trước xem sao. Tức là một chương trình chính sẽ chỉ có hàm hiển thị, sau đó ta đặt vào một tham số xem nó có chạy không đã. Từng bước một, bạn sẽ tối ưu hóa được thuật toán và code.
Một vấn đề nữa là thời gian cập nhật. Bạn nên để ít nhất là nửa giây để người ta còn đọc được. Bởi vì cảm biến loại này đôi khi bị nhiễu hoặc giá trị thay đổi trong phạm vi nhỏ, nếu ta cập nhật nhanh quá led sẽ nhảy lung tung lên, hơi khó đọc đấy.
Tôi đã làm một project khá đơn giản chỉ dùng pic16 với led7 đoạn thôi. Dùng phương pháp quét hiển thị 2 led, bạn có thể mở rộng ra thoải mái, mong bạn tham khảo trong luồng này
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-08-2011, 09:38 AM   #7
phatcddt08a
Đệ tử 5 túi
 
phatcddt08a's Avatar
 
Tham gia ngày: Dec 2010
Bài gửi: 101
:
Xin lổi nhé mình bạn lòng tốt của bạn nhưng chỉ nguoi ta thì chỉ cho đúng nhé .uc =5v và adc 10 bit thì công thức trên hoàn toàn gần đúng nhé vì còn chổ sai số. Value = read_adc()*500/1024 =read_adc()/2.048 kô biết bạn đã dùng công thuc này chưa nhỉ.nếu là 8bit chọn uc=2.56v thi kêt quả đoc về gần đúng kô cần chuyển đổi.khai báo như thế thì có khác gì đâu char value hoăc int8 value cũng là 8 bit thôi.ở các chương trình khác hiểu thằng này là 8 bit,còn trong ct hex_BCD thì là 16 bít vì 4 led số phải lớn hơn 255.

thay đổi nội dung bởi: phatcddt08a, 17-08-2011 lúc 09:52 AM.
phatcddt08a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-08-2011, 10:32 AM   #8
pstin
Đệ tử 7 túi
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
:
Hì, chắc là do bạn xuất dữ liệu ra thanh ghi dịch "gặp trục trặc" thôi!!!!!!!.
Tui mới có "luận" về truyền dữ liệu trên thanh ghi dịch 74hc595 đó!!!!!!!. bạn coi thử có giúp ích gì được ko?.
http://www.picvietnam.com/forum/showthread.php?t=10381
pstin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam