|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
24-04-2008, 07:32 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Jan 2008
Bài gửi: 15
: |
hỏi về thiết kế phần cứng_bài tập dùng adc
em làm 1 ví dụ nhỏ để xem chức năng adc của PIC, mạch chạy trên Proteus ngon lành nhưng khi lắp ra ngoài thì gặp 1 số vấn đề.
Mạch thật của em gồm 1 mạch chạy của PIC riêng, 1 nguồn dùng để đưa ra điện áp tham chiếu và điện áp cần đo ra(1 cái chia thế thôi) ko hiểu sao lắp ra ngoài thì PIC luôn chỉ hiển thị giá trị 255 (thực ra là 25 thôi vì e dùng có 2 led 7segs)là sao? khi động tay hay đưa điện áp cần đo vào chân ra3 thì nó nhấp nháy giữa 2 giá trị 25 và 00????? thứ 2 là khi dùng chế độ Vref ở chân r3(vref+), nối ra3 vào dương nguồn tham chiếu thì có phải nối ra2(vref-) vào đất của nguồn tham chiếu ko và GND của nguồn tham chiếu, GND của PIC, GND của tín hiệu để đo có phải nối chung với nhau ko vì em thấy khi chỉ nối dương nguồn tham chiếu vào ra3 xong và GND của nó nối chung với GND của PIC thì led sáng luôn mặc dù chưa bật công tắc nối VDD của PIC vào nguồn PIC Code:
#include <16f877a.h> #include <def_877a.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #device adc=8 #include <math.h> #use delay(clock=4000000) int8 hundredstens,value,hundreds,tens,units,const a[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; void display(int x,int y){ trisb=11111001;portb=0; trisc=0x00;portc=0; //rb1 controls led tens //rb2 controls led units portc=a[x]; rb1=1;delay_ms(10); rb1=0; portc=a[y]; rb2=1;delay_ms(10); rb2=0; } void main(){ //thiet lap che do cho ports trisa=0xff; trisb=11111001;portb=0; trisc=0x00;portc=0; //adc intiate setup_adc(adc_clock_internal); setup_adc_ports(ANALOG_RA3_REF); delay_us(20); //bat dau doc dien ap o ngo vao adc while (1){ //lap vo tan value=read_adc(); hundredstens=(int)value/10; hundreds=(int)hundredstens/10; tens=(int)hundredstens%10; display(hundreds,tens); } } |
|
|