PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 23-08-2006, 02:54 PM   #1
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Question Tutorial LCD cua Nigel???????

Chào các anh trong diễn đàn PIC VIET NAm.Em có 1 số vấn đề chưa thông trong tut cua Nigel về LCD (Chuong 3_bài 3) mong các anh có ai đã từng đọc hay đã làm qua giúp em với.
Thứ nhất là hàm LCD_busy:_giao tiếp LCD ở mode 4 bit
;------------------------------------------------------
LCD_Busy
bsf STATUS, RP0 ;set bank 1
movlw 0x0f ;set Port for input
movwf LCD_TRIS
bcf STATUS, RP0 ;set bank 0
bcf LCD_PORT, LCD_RS ;set LCD for command mode
bsf LCD_PORT, LCD_RW ;setup to read busy flag
bsf LCD_PORT, LCD_E
swapf LCD_PORT, w ;read upper nibble (busy flag)
bcf LCD_PORT, LCD_E
movwf templcd2
bsf LCD_PORT, LCD_E ;dummy read of lower nibble **********
bcf LCD_PORT, LCD_E
btfsc templcd2, 7 ;check busy flag, high = busy
goto LCD_Busy ;if busy check again
bcf LCD_PORT, LCD_RW
bsf STATUS, RP0 ;set bank 1
movlw 0x00 ;set Port for output
movwf LCD_TRIS
bcf STATUS, RP0 ;set bank 0
return

;end of LCD routines
;------------------------------------------------------
Neu gọi hàm này thì chương trình của Nigel không chạy được bởi vì khi em thay hàm này bằng hàm gọi delay_5ms thì chạy được
Các anh có thể chỉ cho em biết chỗ sai trong hàm này được không a.
À,còn dòng lệnh ở hàng em đánh dấu * nữa,em nghĩ dòng lệnh này là không cần thiết bởi vì ta chỉ quan tam đến bit DB7 mà thôi,
Cám ơn các anh nhiều lắm.
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2006, 08:31 PM   #2
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Hic,không ai giúp mình sao???
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2006, 09:29 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Xin lỗi bạn nhé, tôi xem qua rồi nhưng lại quên trả lời.

Chương trình của Nigel đã thử nghiệm trên phần cứng, và dùng chip PIC16F628, còn bạn dùng chip gì?

Ở chỗ bạn đánh dấu * đúng là chúng ta không cần các bit đó, nhưng module LCD yêu cầu phải đẩy các bit đó ra thì nó mới làm việc tiếp được. Do đó chúng ta phải đẩy một dummy nibble ra.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-08-2006, 05:53 PM   #4
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Trích:
Nguyên văn bởi namqn View Post
Xin lỗi bạn nhé, tôi xem qua rồi nhưng lại quên trả lời.

Chương trình của Nigel đã thử nghiệm trên phần cứng, và dùng chip PIC16F628, còn bạn dùng chip gì?

Ở chỗ bạn đánh dấu * đúng là chúng ta không cần các bit đó, nhưng module LCD yêu cầu phải đẩy các bit đó ra thì nó mới làm việc tiếp được. Do đó chúng ta phải đẩy một dummy nibble ra.

Thân,
Em đang dùng chip p16f877A nhưng em nghĩ hàm LCD_busy thì con Pic nào cũng được chứ anh,
À quên mình có thực hành một số bài của Nigel thì thấy có một số chương trình không chạy được nếu Copy and Paste vì vậy bạn nào có làm mà bị vướng mắc chỗ nào thì post lên,mình sẽ cố gắng trong phạm vi kiến thức của mình
Anh có thể test giùm em chương trình trên được không a.
Cám ơn anh nhiều lắm.
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-08-2006, 06:33 PM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Bạn dùng code của Nigel nguyên gốc hay đã thay đổi?

Nếu đã thay đổi thì bạn post những thay đổi bạn đã thực hiện.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-08-2006, 10:42 AM   #6
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Trích:
Nguyên văn bởi namqn View Post
Bạn dùng code của Nigel nguyên gốc hay đã thay đổi?

Nếu đã thay đổi thì bạn post những thay đổi bạn đã thực hiện.

Thân,
Em thay đổi 1 chút so với code cua Nigel chương LCD nhưng hàm LCD_busy là nguyên gốc

Còn những thay đổi trong các chương trước thì code cua Nigel khá dài nếu em post lên sẽ khó theo dõi luồng này lắm.Hay là em có ý kiến này:em mở 1 thread mới bàn về các vấn đề trong tut của Nigel để mọi người vào thảo luận
vì em thấy code của Nigel viết rất hay và dễ theo dõi mạch chương trình.
Anh thấy thế nào a?
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-09-2006, 02:22 PM   #7
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Để em về thử xem
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-09-2006, 07:31 PM   #8
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Em thử rồi mà vẫn không được anh nam à ,
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-09-2006, 06:39 PM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Thật khó tin là Nigel lại mắc lỗi rất tầm thường như vậy, nhưng sự thật thì code trên trang web của ông ta vẫn đang có lỗi đó.

Trong phiên bản có kiểm tra cờ BF, ở chương trình con LCD_Init có lệnh gọi LCD_Busy ở ngay phần đầu. Vấn đề ở đây là LCD_Busy dùng chế độ giao tiếp 4-bit, mà chế độ này lại chưa được thiết lập khi chúng ta bắt đầu thực hiện LCD_Init.

Nếu chương trình vượt qua được lỗi này và chạy đến lệnh LCD_Cmd với W = 0x20 (để thiết lập giao tiếp 4-bit) thì vẫn có vấn đề, vì LCD_Cmd có gọi LCD_Busy trước khi trở về. Và một lần nữa, LCD_Busy lại dùng chế độ giao tiếp 4-bit, là chế độ đang được thiết lập.

Do đó, có 2 điểm cần chỉnh lại trong chương trình của Nigel:

1. Thay lệnh gọi LCD_Busy ở đầu LCD_Init bằng LCD_Delay100
2. Thay lệnh gọi LCD_Busy ở cuối LCD_Cmd bằng LCD_Delay5

Các chương trình con này chỉ để khởi tạo, hay xuất các lệnh điều khiển ít khi được dùng, do đó vẫn không ảnh hưởng đến mục tiêu chính là dùng cờ BF để giảm thời gian chết khi xuất dữ liệu ra LCD (các lệnh xuất dữ liệu ra LCD như LCD_Char, và LCD_CharD vẫn dùng cờ BF).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-09-2006, 10:15 PM   #10
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Smile

Trích:
Nguyên văn bởi namqn View Post
Thật khó tin là Nigel lại mắc lỗi rất tầm thường như vậy, nhưng sự thật thì code trên trang web của ông ta vẫn đang có lỗi đó.

Trong phiên bản có kiểm tra cờ BF, ở chương trình con LCD_Init có lệnh gọi LCD_Busy ở ngay phần đầu. Vấn đề ở đây là LCD_Busy dùng chế độ giao tiếp 4-bit, mà chế độ này lại chưa được thiết lập khi chúng ta bắt đầu thực hiện LCD_Init.

Nếu chương trình vượt qua được lỗi này và chạy đến lệnh LCD_Cmd với W = 0x20 (để thiết lập giao tiếp 4-bit) thì vẫn có vấn đề, vì LCD_Cmd có gọi LCD_Busy trước khi trở về. Và một lần nữa, LCD_Busy lại dùng chế độ giao tiếp 4-bit, là chế độ đang được thiết lập.

Do đó, có 2 điểm cần chỉnh lại trong chương trình của Nigel:

1. Thay lệnh gọi LCD_Busy ở đầu LCD_Init bằng LCD_Delay100
2. Thay lệnh gọi LCD_Busy ở cuối LCD_Cmd bằng LCD_Delay5

Các chương trình con này chỉ để khởi tạo, hay xuất các lệnh điều khiển ít khi được dùng, do đó vẫn không ảnh hưởng đến mục tiêu chính là dùng cờ BF để giảm thời gian chết khi xuất dữ liệu ra LCD (các lệnh xuất dữ liệu ra LCD như LCD_Char, và LCD_CharD vẫn dùng cờ BF).

Thân,
Em đã chỉnh như ý 1 ở trên trong tut em gởi rồi còn ý 2 thì quả thật em có sai sót thật không chịu đọc kĩ cứ tưởng LCD_cmd là không vấn đề gì.
Cám ơn anh rất nhiều ,em sẽ mail cho Nigel biết lỗi này.
Có 1 điều em thắc mắc là theo Nigel viết thì ông ta đã kiểm tra trên mạch thật rồi nhưng mắc lỗi vậy sao mà chạy được.Theo em nghĩ có lẽ ông ta muốn người đọc phải tự tìm lỗi sai trong tut ( bởi vì em cũng tìm ra 1 số lỗi nữa trong các chương trước ).Nếu vậy thì đây quả là ý tường rất hay của Nigel.
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2009, 05:32 PM   #11
mienvan
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 4
:
mình có đọc chương trinh hiển thị LCD cua Nigel copy và dán và mô phỏng của proteous vẫn không chạy,ai viết chương trình chạy roi gửi cho mình với.cam ơn nhiều. email: Vanmien1@gmail.com
mienvan 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Học CCS thông qua Tutorial PICVIETNAM FFGmember Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 105 08-09-2017 04:12 PM
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 92 19-02-2017 11:15 PM
dsPIC Tutorial 2-Các kỹ thuật cơ bản namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 33 17-10-2013 11:09 PM
Tuts của Nigel bigtitan MPASM 2 21-08-2006 12:53 PM
tutorial hay cho newbie FUD84 Cơ bản về vi điều khiển và PIC 2 04-12-2005 02:29 AM


Múi giờ GMT. Hiện tại là 05:05 AM.


Đượ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