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)
-   -   ADC12bit giao tiếp với máy tính qua cổng COM (http://www.picvietnam.com/forum/showthread.php?t=153)

hphong23 30-09-2005 10:20 AM

ADC12bit giao tiếp với máy tính qua cổng COM
 
Mình mới học PIC và thử làm một mạch biến đổi ADC giao tiếp với máy tính qua cổng Com. Vì vậy còn nhiều thứ mình làm rất củ chuối :D. Mong mọi người đọc và nhận xét giúp mình để có thể hoàn thiện hơn nhé. Con ADC mình dùng là ICL7107 (độ phân giải tương đương 12bit), còn PIC 16F877A thì dùng để giao tiếp nối tiếp.
Nguyên tắc hoạt động của mạch là PIC sẽ nhận giá trị từ máy tính sau đó xuất ra cổng D để thực hiện việc chọn kênh vào (trên 4051) và chọn 74LS245 (dùng để mở rộng cổng). Giá trị vào sẽ được đọc vào từ cổng B và chuyển lại vào máy tính để giải mã và xuất kết quả ra.
Mạch nguyên lý mình post lên có khác so với mạch thực tế nên cách lập trình hơi khác. Mình chỉ nêu cách hoạt động của mạch thôi. Cám ơn mọi người đã đọc nhé. Chúc vui vẻ!

Đây là đoạn code cho PIC (viet bang C):
Code:

  while(1)
      {
        while (!kbhit()&&(++timeout<50000)) delay_us(10);
        if (kbhit()) i=getc();
        output_D(i);
        delay_us(10);
        o=input_B();
        delay_us(10);
        putc(o);
        delay_us(10);


      }

Còn đây là đoạn code viet bang Delphi để chọn kênh vào, điều khiển 74ls245 và giải mã giá trị nhận được

Code:

function read(k:byte):integer;
var x,ra,d0,d1,d2,vao,tam:byte;
    Input,sign,n:Integer;


function dv(data:byte):byte;  { giai ma hang don vi}
begin
      case data of
          8: dv:=0;
          94:dv:=1;
          36:dv:=2;
          20:dv:=3;
          82:dv:=4;
          17:dv:=5;
          1: dv:=6;
          92:dv:=7;
          0: dv:=8;
          16:dv:=9;

    end;

end;


function ch(data:byte):byte;  { giai ma hang chuc}
begin
      case data of
          4:  ch:=0;
          79:ch:=1;
          33: ch:=2;
          3:  ch:=3;
          74: ch:=4;
          18: ch:=5;
          16: ch:=6;
          71: ch:=7;
          0:  ch:=8;
          2:  ch:=9;

    end;

end;

function tr(data:byte):byte;    { giai ma hang tram}
begin
      case data of
          2:  tr:=0;
          151:tr:=1;
          65: tr:=2;
          5:  tr:=3;
          148:tr:=4;
          36: tr:=5;
          32: tr:=6;
          135:tr:=7;
          0:  tr:=8;
          4:  tr:=9;

    end;

end;

begin

case k of    {chon gia tri de phan kenh cho 4051}
1: x:=226;
2: x:=227;
3: x:=234;
4: x:=235;
5: x:=242;
6: x:=243;
7: x:=250;
8: x:=251;
9: x:=228 ;
10:x:=229 ;
11:x:=236;
12:x:=237;
13:x:=244;
14:x:=245;
15:x:=252;
16:x:=253;
end;

ra:=(223 and x); {ket hop gia tri chon kenh voi gia tri de dieu khien 74ls245}
sendbyte(ra);
vao:=readbyte();
d0:=dv(vao);

ra:=(191 and x); {ket hop gia tri chon kenh voi gia tri de dieu khien 74ls245}
sendbyte(ra);
vao:=readbyte();
tam:=(vao and $7f); {che bit dau cua ICL7107}
d1:=ch(tam);
if (vao and $80)= $80 then sign:=1  else sign:=-1;

ra:=(127 and x);  {ket hop gia tri chon kenh voi gia tri de dieu khien 74ls245}
sendbyte(ra);
vao:=readbyte();
tam:=(vao and $f7); {che bit hang nghin cua ICL7107}
d2:=tr(tam);
if (vao and $8)=$8 then n:=0 else n:=1;

read:=sign*(n*1000+d2*100+d1*10+d0);  {gia tri dien ap tinh bang mV}


end;


nguoimientrung 16-11-2005 11:07 AM

Bạn có thể đua lên sơ đồ nguyên lý được không

hphong23 21-11-2005 11:03 AM

1 Attachment(s)
Xin lỗi các bạn vì mình bận quá nên quên mất là chưa đưa sơ đồ nguyên lý. Mong các bạn đóng góp ý kiến cho mình với

cthang 15-06-2017 04:50 PM

cảm ơn ạ


Múi giờ GMT. Hiện tại là 06:48 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