PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cảm biến (http://www.picvietnam.com/forum/forumdisplay.php?f=18)
-   -   bài tập cảm biến đo khoảng cách sử dụng siêu âm (http://www.picvietnam.com/forum/showthread.php?t=3832)

vanentine 02-04-2009 08:37 PM

bài tập cảm biến đo khoảng cách sử dụng siêu âm
 
em có một bài tập lớn thiết kế mạch đo khoảng cách sử dụng siêu âm dùng cảm biến,dải đo 2-15m,sai số 0.5%,các bước như sau:
-chọn cảm biến
-mạch đo
-chọn bộ đếm thời gian và tần số chuẩn với độ phân giải 5cm
Em chưa làm cái này bao giờ trên lớp thầy cũng ko gợi ý nhiều,em hi vọng có bác nào có kinh nghiệm thử nói qua qua hộ em xem em phải làm những gì (nếu nói được cụ thể hơn càng tốt :D).em xin chân thành cảm ơn.

thaithien 03-04-2009 01:02 AM

Đề tài hay đó,nhưng vấn đề là giải quyết phần cảm biến trước đã,có lẽ cần tìm hiểu thêm về đo đạc dùng siêu âm,sonar...

dhbk3i 26-09-2009 07:40 PM

bạn có thể dùng cảm biến hồng ngoại GP2D12 thử xem. chúc thành công!

dhbk3i 26-09-2009 07:41 PM

mình đang làm một đề tài vệ hiệu chỉnh sai số của các thiết bị đo bằng FBAA. Bác nào dành về FBAA thì chỉ giáo cho mình với.

anh_gioi 29-09-2009 05:09 PM

t đã làm về cảm biến siêu âm, đo khoảng cách dùng PIC.
nhưng chỉ được dao động 1m.(t dùng SRF05)
dùng để tránh vật cản cho robot, dùng thêm 2 chân điều xung cho điều khiển động cơ.
ko bít có phải bạn cần không ??

vanentine 04-10-2009 10:44 PM

Trích:

Nguyên văn bởi anh_gioi (Post 29890)
t đã làm về cảm biến siêu âm, đo khoảng cách dùng PIC.
nhưng chỉ được dao động 1m.(t dùng SRF05)
dùng để tránh vật cản cho robot, dùng thêm 2 chân điều xung cho điều khiển động cơ.
ko bít có phải bạn cần không ??

đúng rồi,anh có thể chỉ rõ hơn cho em dc ko,email của em là duy_tung_bk88@yahoo.com
Cảm ơn anh.

foresvn 05-10-2009 11:35 AM

đề tài này hay nè .... mình cũng đang tìm hiểu anh gửi cho em một bản với . mail em alone991@yahoo.com

anh_gioi 05-10-2009 12:07 PM

Pic16f877 + srf05
 
1 Attachment(s)
Mình vứt lên đây cho mọi người cùng tham khảo.
đây là mã code của nó.
Nó hơi sơ sài, mọi người chịu khó đọc tí nha :P

mong mọi người chỉ giáo thêm !

hoc_picpicpic 05-10-2009 01:00 PM

cảm biến siêu âm mua ở đâu thế các bác ơi, ở miền bắc có chỗ nào bán ko nhỉ ???

vanentine 05-10-2009 10:48 PM

Trích:

Nguyên văn bởi anh_gioi (Post 29985)
Mình vứt lên đây cho mọi người cùng tham khảo.
đây là mã code của nó.
Nó hơi sơ sài, mọi người chịu khó đọc tí nha :P

mong mọi người chỉ giáo thêm !

cám ơn anh,nhưng anh có thể cho em biết thêm về mạch nguyên lý gồm cảm biến và pic hay tài liệu gì về 1 con cảm biến đo khoảng cách đc ko,mà nếu kết nối với PIC thì kết nối kiểu gì,có cần qua linh kiện trung gian nào ko anh.Em đang làm một cái kiểu như gậy dò đường,nó sẽ báo động khi có vật cản trong một khoảng nào đó tùy vào cảm biến nhưng em chưa hình dung đc nhiều về mạch đo của nó.Mong anh chỉ giáo thêm giup.Cám ơn anh.

anh_gioi 09-10-2009 05:55 PM

Trích:

Nguyên văn bởi hoc_picpicpic (Post 29986)
cảm biến siêu âm mua ở đâu thế các bác ơi, ở miền bắc có chỗ nào bán ko nhỉ ???

ở Hà Nội thì b liên lạc với anh chí linh (linhnc308) ý. anh ấy là đại lý miền bắc về sản phẩm của RP.
Trích:

anh có thể cho em biết thêm về mạch nguyên lý gồm cảm biến và pic hay tài liệu gì về 1 con cảm biến đo khoảng cách đc ko.
kết nối với PIC thì kết nối kiểu gì,có cần qua linh kiện trung gian nào ko anh
cái này b nên tìm kiếm trên diễn đàn hoặc nhờ google tìm kiếm cho, b muốn tìm tài liệu về linh kiện nào thì đánh tên đó vào.
kết nối với PIC thì b nên đọc tài liệu siêm âm trước đã, nó hướng dẫn đầy đủ đấy. khi kết nối PIC với SRF t nối trực tiếp nó luôn, ko qua linh kiện nào cả.

tiendaiphat 28-01-2010 07:09 PM

em đang làm mô hình thu nhỏ về cảm biến siêu âm đo mức nước / bác nào biết về cái đó không chỉ giáo em với /
em cảm ơn trước nha /

hoangha8630 13-03-2010 12:55 PM

cam bien sieu am
 
Trích:

Nguyên văn bởi anh_gioi (Post 30081)
ở Hà Nội thì b liên lạc với anh chí linh (linhnc308) ý. anh ấy là đại lý miền bắc về sản phẩm của RP.

cái này b nên tìm kiếm trên diễn đàn hoặc nhờ google tìm kiếm cho, b muốn tìm tài liệu về linh kiện nào thì đánh tên đó vào.
kết nối với PIC thì b nên đọc tài liệu siêm âm trước đã, nó hướng dẫn đầy đủ đấy. khi kết nối PIC với SRF t nối trực tiếp nó luôn, ko qua linh kiện nào cả.

anh ah.anh có tài liệu nào về cảm biến siêu âm a share cho e với,với lai, liên làc với anh CHÍ LINH bằng cách nào vậy àh. e đang ở Hà Nội,a co thể cho e số điện thoại của a Linh ko ah?

jindomiko 24-03-2010 08:23 PM

anh nao lam roi chi giao cho em voi!!!!!!! em dang rat can!thank you!

phamdinh 26-04-2010 11:02 PM

Trích:

Nguyên văn bởi dhbk3i (Post 29806)
bạn có thể dùng cảm biến hồng ngoại GP2D12 thử xem. chúc thành công!

GD2P12 là cảm biến hồng ngoại mà bạn. Chủ đề đang dùng cảm biến siêu âm. Một loại cảm biến siêu âm hiện nay có bán ở chợ nhật tảo mà mình biết đó là GH-311RT có tầm đó từ 2 - 3m. Giá 200k. Rất nhạy với sự thay đổi của vật cản.

longdv 09-11-2010 10:46 PM

mọi ngừoi cho em hỏi với.
em có mua 1 con cảm biến siêu âm loai GH 311RT như anh phamdinh vừa nói trên nhưng chưa biết cách sài
em đưa tín hiệu trả về vào chân ADC của AVR thì thấy
khi di chuyển vật cản thì gtri ADC nhãy lung tung hết, con khi vật cản đứng im thì ADC về o
em ko biết dùng như thế nào hết

mọi người giúpp em với

fidel 20-11-2010 07:27 PM

bạn longdv đưa sơ đồ nối hay code lên thì mọi người mới giúp được chứ.

khanhdat 08-05-2011 08:22 AM

Em đang có 1 đồ án đo dung tích bể nước sử dụng sensor siêu âm SRF05. bác nào biết thì chỉ dùm em với
Em có tìm hiểu code và mạch nguyên lý ở đây, em copy về mà nó không chạy gì cả. bác nào biết thì chỉ cho em nha.
http://www.mediafire.com/?fwwkyqsc68clbpb
http://www.mediafire.com/?aobhrdjhw2l4kod
cám ơn nhiều!

hanguyenhuy 30-06-2011 11:24 PM

Trích:

Nguyên văn bởi khanhdat (Post 44816)
Em đang có 1 đồ án đo dung tích bể nước sử dụng sensor siêu âm SRF05. bác nào biết thì chỉ dùm em với
Em có tìm hiểu code và mạch nguyên lý ở đây, em copy về mà nó không chạy gì cả. bác nào biết thì chỉ cho em nha.
http://www.mediafire.com/?fwwkyqsc68clbpb
http://www.mediafire.com/?aobhrdjhw2l4kod
cám ơn nhiều!

Mình cũng đang làm đề tài dùng cảm biến siêu âm. Lúc trước mình lập trình mỗi con siêu âm dùng 1 chân ccp nên bị giới hạn cảm biến vì pic chỉ có 2 chân ccp thôi. Sai số vào khoảng ~0.5cm. Hiện giờ mình đã lập trình được dùng tới 5 con cho 1 chân CCP. Chạy ok hết roài.

phatcddt08a 09-08-2011 01:08 PM

ban lam nhu the nao ma rong ccp ra vay .goi y ty di ban

hocavr 29-09-2011 09:45 PM

Bạn thử dùng SRF05 xem, cái này mình đã rồi, nhưng mình dùng AVR, chuyển sang PIC cũng dễ thôi. Bạn đặt 2 mốc thời gian : t1 ( bắt đầu phát ), t2 ( khi thu được ), trong datasheet của SRF05 có hướng dẫn đầy đủ cách tính quãng đường của sóng siêu âm đi và về. Mình thấy SRF05 có bán tại đại lý của Microchip miền bắc. Bạn thử tham khảo xem. Chúc vui vẻ

nghiavp07 06-10-2011 09:43 PM

Mình có mua ở Nhật Tảo cảm biến siêu âm GH-311RT nhưng con này chỉ có 3 chân (nên không phát tín hiệu bằng tay được).Mình lên mạng tìm cách phát và thu tín hiệu con này nhưng không thấy.Bạn nào đã từng làm việc với con này có thể giúp mình về nguyên lý hoạt động của nó được không.

ngochoicd112 06-10-2011 09:49 PM

Trích:

Nguyên văn bởi hanguyenhuy (Post 46511)
Mình cũng đang làm đề tài dùng cảm biến siêu âm. Lúc trước mình lập trình mỗi con siêu âm dùng 1 chân ccp nên bị giới hạn cảm biến vì pic chỉ có 2 chân ccp thôi. Sai số vào khoảng ~0.5cm. Hiện giờ mình đã lập trình được dùng tới 5 con cho 1 chân CCP. Chạy ok hết roài.

Ban cố thể post code cho mọi người tham khảo được không? mình cũng đang quan tâm tới cái này. THANKS bạn trước

hocavr 11-10-2011 06:13 PM

Bạn có thể dùng cảm biến SRF05 là được, 15m thì mình chưa đo đến nhưng 14 m thì ok. Sai số đúng ý bạn đấy. con này có thể mua được tại Hà Nội. mình tìm thấy trang này http:\\techpal.vn hơi đắt một tý, nhưng giải quyết được bài toán của bạn. ở đấy mình thấy cũng có cả các Kit xài được cho SRF05 đấy. Thử ngó qua xem.

lhhsach 21-10-2011 03:56 PM

hi mọi người, mình đang cần làm 1 thiết bị đo khoảng cách dùng cảm biến siêu âm. Xin mọi người hướng dẫn giúp 1 vài điều vướng mắc:
1. để xác định độ phân giải, sai số của cb thì dựa theo số liệu nào trong Datasheet của nó.
2. dùng VDK có thể đạt được sai số khoảng dưới 1cm không.
Rất cần sự giúp đỡ của mọi người. Thanks!!!

kimvothan 18-11-2012 08:00 PM

huynh nào giúp mình sữa lỗi đoạn code này được không? mình lập trình dở lắm, giờ đụng phải lỗi này, em không biết sửa lỗi sao cho xuất giá trị đo được ra lcd hết. cảm ơn các huynh nhiều nhé!
#include <16F877A.h>
#include <math.h>

// Dinh nghia cac thong so.

// Cau hinh su dung dao dong noi 4MHz
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)

// Khai bao ham.
void lcd_init(void); // Ham dung de khoi dong C.LCD.
byte lcd_read_byte(void); // Ham xu ly doc thong tin (dang 8 bit) tu thong tin dang 4 bit tu C.LCD.
byte lcd_read_nibble(void); // Ham doc thong tin (dang 4 bit / nibble) tu C.LCD.
void lcd_send_byte(byte address, byte n); // Ham gui thong tin (byte) toi C.LCD tai dia chi (address).
void lcd_send_nibble(byte n); // Ham gui thong tin (dang 4 bit / nibble) sang C.LCD.
void lcd_gotoxy(byte x, byte y); // Ham thiet lap vi tri ghi tren C.LCD.
char lcd_getc(byte x, byte y); // Ham tra ve ky tu tai vi tri (x,y) tren C.LCD.
void lcd_putc(char c); // Ham se hien thi ky tu c tai vi tri ke tiep tren C.LCD.
void convert_bcd(int8 v);
// Khai bao bien.

// Khai bao du lieu hien thi.
// Khai bao du lieu hien thi.
CONST char dat_line1[] = "KHOANG CACH DO :"; // Noi dung can hien thi - Hang 1.
//CONST char dat_line2[] = "Designed by: PQT"; // Noi dung can hien thi - Hang 2.
// Chuong trinh chinh.
void main (void)
{
// Khai bao bien.
int8 x,v,s;
int16 t;
unsigned int8 i;
// Chuong trinh.
lcd_init(); // Khoi dong C.LCD 2x16.
for(i=1;i<=16;i++)
{
lcd_gotoxy(i,1); // Xac dinh toa do hien thi cho hang 1.
lcd_putc(dat_line1[i-1]); // Lay ky tu hien thi tu chuoi 1 dua len C.LCD.
// lcd_gotoxy(i,2); // Xac dinh toa do hien thi cho hang 2.
//lcd_putc(dat_line2[i-1]); // Lay ky tu hien thi tu chuoi 2 dua len C.LCD.
}
//convert_bcd(v);
//-- khai bao timer-capture ----
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
setup_ccp1(CCP_CAPTURE_RE);
enable_interrupts(INT_CCP1);
// Setup interrupt on falling edgeenable_interrupts(GLOBAL);
set_tris_b(0);
set_tris_c(0);
while(true)
{
//---- 10uS cho trgger ----
output_high(pin_c1);
delay_us(10);
output_low(pin_c1);
//-- Wait for senser output to go high ----
}
if(input(pin_c2)==0)
{
t = 0;
set_timer1(0);
lcd_gotoxy(2,7);
lcd_putc("KHONG");
}
else
{
t = CCP_1;
//doc thoi gian khi co xung cao
v = t/58;
convert_bcd(v);
//time = get_timer1();
lcd_gotoxy(2,8);
lcd_putc("CO");
//time = time/CONVERT_TO_MICROSECONDS;
//chuyen doi ra mcrogiay
}
///// hien thi len gia tri LCD//////

lcd_gotoxy(2,7);
lcd_getc(nghin);
lcd_gotoxy(2,8);
lcd_getc(tram);
lcd_gotoxy(2,9);
lcd_getc(chuc);
lcd_gotoxy(2,10);
lcd_getc(donvi);
}

// Dinh nghia cac thong so.
typedef struct
{ // Cau truc nay duoc ap dung len cho mot cong I/O de ho tro viec
boolean rs; // truy xuat den cac chan cua C.LCD.
boolean rw; //
boolean enable; // Cac bit nay duoc xac dinh vi tri tu thap den cao.
boolean unused; // RS se dong vai tro la chan LSB cua cong I/O do.
int data:4; //
} LCD_PIN_MAP; // Cong I/O duoc su dung o day se la LCD_DATA_PORT.

#define LCD_DATA_PORT getenv("SFR:PORTD") // Port D duoc su dung de giao tiep C.LCD.
//#define LCD_DATA_PORT 0x08
#define set_tris_lcd(x) set_tris_D(x) // Lenh dieu khien trang thai port giao tiep.

#define lcd_output_enable(x) lcdlat.enable=x // Lenh dieu khien chan LCD_ENABLE_PIN.
#define lcd_enable_tris() lcdtris.enable=0

#define lcd_output_rs(x) lcdlat.rs=x // Lenh dieu khien chan LCD_RS_PIN.
#define lcd_rs_tris() lcdtris.rs=0

#define lcd_output_rw(x) lcdlat.rw=x // Lenh dieu khien chan LCD_RW_PIN
#define lcd_rw_tris() lcdtris.rw=0

#define lcd_line_one 0x00 // Dia chi RAM C.LCD cho hang thu 1.
#define lcd_line_two 0x40 // Dia chi RAM C.LCD cho hang thu 2.

#define LCD_TYPE 0x02 // Thong tin cau hinh C.LCD: 0x00=5x7, 0x01=5x10, 0x02=2 lines

// Dinh nghia cac hang so.
byte const LCD_INIT_STRING[4] = {0x20 | (LCD_TYPE << 2), 0x0C, 0x01, 0x06};
// Cac byte nay can thiet de gui toi C.LCD, dung de khoi dong cau hinh hoat dong cho C.LCD.
// Byte 1: 0x20 | (LCD_TYPE << 2) - So bit du lieu giao tiep (DL), so dong hien thi (N), kieu ky tu (F).
// 0 0 1 DL N F x x (DL: Data Length, N: Number Line, F: Font).
// Truong hop 1: 0x20 - 4 bit / 1 dong / 5 x 7.
// Truong hop 2: 0x24 - 4 bit / 1 dong / 5 x 10.
// Truong hop 3: 0x28 - 4 bit / 2 dong / 5 x 7.
// Byte 2: 0x0C - Dieu khien hien thi (Bat hien thi, tat con tro, tat nhap nhay con tro).
// 0 0 0 0 1 D C B (D: Display, C: Cursor, B: Blink).
// Byte 3: 0x01 - Xoa hien thi va tra con tro ve dau dong.
// Byte 4: 0x06 - Dat che do dau vao (Che do tang dia chi, tat dich chuyen hien thi).
// 0 0 0 0 0 1 I/D S (I/D: Increment/Decrement, S: Shift).
// Byte 5: .... - Doi con tro / hien thi.
// 0 0 0 1 S/C R/L x x (S/C: Screen/Cursor, R/L: Right/Left).

LCD_PIN_MAP lcd, lcdlat;
#byte lcd = LCD_DATA_PORT
#byte lcdlat = LCD_DATA_PORT

// RS, RW, EN, UNUSED, DATA.
const LCD_PIN_MAP LCD_OUTPUT_MAP = {0, 0, 0, 0, 0};
const LCD_PIN_MAP LCD_INPUT_MAP = {0, 0, 0, 0, 0xF};
// Cac dinh nghia nay chi can de dieu chinh cho cac dong PIC PCB (baseline PICs).
// tat ca cac dong PIC khac su dung LCD_PIN_MAP hoac cac dinh nghia chan LCD_xxx rieng biet.

// ************************************************** *
void lcd_init(void) // Ham dung de khoi dong C.LCD.
{
// Khai bao bien.
byte i;
// Dinh nghia ham.
set_tris_lcd(LCD_OUTPUT_MAP); // Thiet lap chan port (Data) o che do ngo ra.
// Thiet lap chan port (Control: EN, RS, RW) o che do ngo ra.
lcd_output_rs(0); // RS = 0 - Databus = Bus lenh.
lcd_output_rw(0); // RW = 0 - Ghi thong tin vao C.LCD.
lcd_output_enable(0); // EN = 0 - Cam truy xuat C.LCD.

delay_ms(15); // Tao thoi gian tre 15ms (Thoi gian de LCD tu reset khi moi duoc cap nguon).

for(i=1;i<=3;i++) // Doan lenh khoi dong C.LCD o che do 8 bit duoc thuc hien 3 lan lien tiep
{ // tai thoi diem ban dau (de dam bao cho C.LCD hoat dong on dinh trong
lcd_send_nibble(0x03); // truong hop khi cung cap nguon cho C.LCD ma dien ap nguon tang len cham).
delay_ms(5); // RS = 0, RW = 0, D7 - D4 = 0011 (0x03) -> DL = 1 (8 bit).
} // Do co BF (Busy Flag) chua kiem tra duoc trong thoi diem nay, nen phai
// thuc hien 3 lan (xem luu do khoi dong C.LCD cua nha san xuat).

lcd_send_nibble(0x02); // Doan lenh khoi dong C.LCD o che do 4 bit. Tu luc nay thi 4 bit cao duoc ghi
// ra truoc tien, sau do la 4 bit thap.
// RS = 0, RW = 0, D7 - D4 = 0010 (0x02) -> DL = 0 (4 bit).
// Co BF (Busy Flag) co the bat dau kiem tra duoc tu luc nay.

for(i=0;i<=3;i++)
lcd_send_byte(0,LCD_INIT_STRING[i]); // Goi ham truyen thong tin (lenh) sang C.LCD.
} // Lenh: Thiet lap cau hinh hoat dong cho C.LCD.

// ************************************************** *
byte lcd_read_byte(void) // Ham xu ly doc thong tin (dang 8 bit) tu thong tin dang 4 bit tu C.LCD.
{
// Khai bao bien.
byte low,high;
// Dinh nghia ham.
set_tris_lcd(LCD_INPUT_MAP); // Thiet lap chan port o che do ngo vao.

lcd_output_rw(1); // RW = 1 - Doc thong tin tu C.LCD.
// Tien hanh doc 4 bit cao cua thong tin tu C.LCD.
delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
lcd_output_enable(1); // EN = 1 - Cho phep truy xuat C.LCD.
delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
high = lcd_read_nibble(); // Cat tam 4 bit du lieu (4 bit cao).
lcd_output_enable(0); // EN = 0 - Cam truy xuat C.LCD.
// Tien hanh doc 4 bit thap cua thong tin tu C.LCD.
delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
lcd_output_enable(1); // EN = 1 - Cho phep truy xuat C.LCD.
delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
low = lcd_read_nibble(); // Cat tam 4 bit du lieu (4 bit thap).
lcd_output_enable(0); // EN = 0 - Cam truy xuat C.LCD.

set_tris_lcd(LCD_OUTPUT_MAP);; // Thiet lap chan port o che do ngo ra.

return((high<<4) | low); // Tra ve ket qua du lieu (dang 8 bit).
}

// ************************************************** *
byte lcd_read_nibble(void) // Ham doc thong tin (dang 4 bit / nibble) tu C.LCD.
{
// Khai bao bien.

// Dinh nghia ham.
return(lcd.data); // Doc thong tin tu bus du lieu.
} // Tra ve ket qua doc duoc (data = 0000 xxxx).

// ************************************************** *
void lcd_send_byte(byte address, byte n) // Ham gui thong tin (byte) toi C.LCD tai dia chi (address).
{ // address = 0: Lenh / 1: Du lieu.
// byte = Thong tin can gui (8 bit).
// Khai bao bien.

// Dinh nghia ham.
lcd_output_rs(0); // RS = 0 - Databus = Bus lenh.
while(bit_test(lcd_read_byte(),7)); // Cho Busy Flag = 0 (C.LCD da xu ly xong).
lcd_output_rs(address); // RS = address - Databus = Bus lenh/du lieu.
delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
lcd_output_rw(0); // RW = 0 - Ghi thong tin vao C.LCD.
delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
lcd_output_enable(0); // EN = 0 - Cam truy xuat C.LCD.
lcd_send_nibble(n >> 4); // Goi ham truyen 4 bit cao sang C.LCD.
lcd_send_nibble(n & 0x0F); // Goi ham truyen 4 bit thap sang C.LCD.
}

// ************************************************** *
void lcd_send_nibble(byte n) // Ham gui thong tin (dang 4 bit / nibble) sang C.LCD.
{ // n = Thong tin can gui. 4 bit can gui phai nam vi tri 4 bit thap.
// Khai bao bien.

// Dinh nghia ham.
lcdlat.data = n; // Xuat thong tin len bus du lieu.

delay_cycles(1); // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
lcd_output_enable(1); // Tao xung ghi thong tin vao C.LCD.
delay_us(2); // Tao tre 2 chu ky (t=2us voi fosc=4MHz).
lcd_output_enable(0); // Tao xung ghi thong tin vao LCD - EN = 1->0 (High to Low).
}

// ************************************************** *
void lcd_gotoxy(byte x, byte y) // Ham thiet lap vi tri ghi tren C.LCD (Goc tren ben trai co toa do la 1,1).
{
// Khai bao bien.
byte address;
// Dinh nghia ham.
if(y!=1) // Kiem tra vi tri truy xuat thuoc hang 2.
address=lcd_line_two; // Nap dia chi RAM cua hang 2.
else // Neu vi tri truy xuat thuoc hang 1.
address=lcd_line_one; // Nap dia chi RAM cua hang 1.

address+=x-1; // Ghep dia chi cot vao dia chi tong quat (address). address = address + (x-1).
// Ta qui uoc: Goc tren ben trai co toa do la 1,1 -> Cot dau tien la Cot 1
// (x-1) vi C.LCD qui uoc cot dau tien co dia chi la 0.
lcd_send_byte(0,0x80|address); // Goi ham truyen thong tin (lenh) sang C.LCD.
} // Lenh: Thiet lap dia chi DDRAM cua C.LCD (addresss).

// ************************************************** *
char lcd_getc(byte x, byte y) // Ham tra ve ky tu tai vi tri (x,y) tren C.LCD.
{
// Khai bao bien.
char value;
// Dinh nghia ham.
lcd_gotoxy(x,y); // Xac dinh toa do C.LCD can truy xuat.
while(bit_test(lcd_read_byte(),7)); // Cho Busy Flag = 0 (C.LCD da xu ly xong).
lcd_output_rs(1); // RS = 1 - Databus = Bus du lieu.
value = lcd_read_byte(); // Doc ve tu C.LCD.
lcd_output_rs(0); // RS = 0 - Databus = Bus lenh.

return(value); // Tra ve ma ky tu tai toa do yeu cau.
}

// ************************************************** *
void lcd_putc(char c) // Ham se hien thi ky tu c tai vi tri ke tiep tren C.LCD.
{
// Khai bao bien.

// Dinh nghia ham.
switch (c)
{
case '\f': // Chuc nang xoa hien thi.
lcd_send_byte(0,0x01); // Goi ham truyen thong tin (lenh) sang C.LCD.
delay_ms(2); // Lenh: Xoa hien thi tren man hinh C.LCD (0x01).
break;
case '\n': // Chuc nang bat dau hang thu 2.
lcd_gotoxy(1,0x02); // Goi ham truyen thong tin (du lieu) sang C.LCD.
break;
case '\b': // Chuc nang lui ve 1 vi tri.
lcd_send_byte(0,0x10); // Goi ham truyen thong tin (lenh) sang C.LCD.
break; // Lenh: Doi con tro sang trai (0x10).
default: // Chuc nang hien thi ky tu c tai vi tri ke tiep tren C.LCD.
lcd_send_byte(1,c); // Goi ham truyen thong tin (du lieu) sang C.LCD.
break;
}
}
// ************************************************** *
void convert_bcd(int8 v)
{
int8 tram,chuc,donvi,nghin;
donvi=v%10;
//chia lay phan du, so hang don vi
tram=v/100;
//tach hang tram va hang chuc
chuc=v/10%10;
nghin = v/1000;
tram = tram + 0x30;
chuc = chuc + 0x30;
donvi = donvi + 0x30;
nghin = nghin +0x30;
}
/////////

nó báo lỗi ngay chổ này này máy huynh:

///// hien thi len gia tri LCD//////

lcd_gotoxy(2,7);
lcd_getc(nghin);
lcd_gotoxy(2,8);
lcd_getc(tram);
lcd_gotoxy(2,9);
lcd_getc(chuc);
lcd_gotoxy(2,10);
lcd_getc(donvi);

kimvothan 19-11-2012 05:30 PM

mình dùng trình dịch CCS C đó, con pic 16f877a lcd 16x2 điều khiển 4bit

chocolet_90 05-01-2013 10:29 PM

anh_gioi ơi ,pạn có thể gui cho mình phần mạch luôn dc không mình đọc phần code không có mạch thì cũng chả hiểu lắm.


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