PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   hỏi về thiết kế phần cứng_bài tập dùng adc (http://www.picvietnam.com/forum/showthread.php?t=2298)

nhong 24-04-2008 07:32 PM

hỏi về thiết kế phần cứng_bài tập dùng adc
 
1 Attachment(s)
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);

    }
}


falleaf 25-04-2008 01:04 PM

Thiếu cái set_adc_channels(x);

Chúc vui


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

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