PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

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

MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 14-05-2007, 09:21 PM   #16
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
Thumbs up lcd

Trích:
Nguyên văn bởi namqn View Post
Bạn phải tự đặt N và F theo yêu cầu của bạn chứ. Tôi chỉ ghi format của nó ra thôi (nếu bạn vẫn không biết phải đặt N và F bằng bao nhiêu thì đây: N=1: hiển thị 2 dòng, N=0: hiển thị 1 dòng, F=1: dùng font 5x10, F=0: dùng font 5x8).

Bạn định nghĩa 'không chạy' như thế nào? Nếu bạn chưa thực hiện đặt font và số dòng thì liệu LCD có hiển thị đúng những gì bạn muốn không?

Tôi thấy bạn hỏi lung tung mọi chỗ, nhưng không biết bạn đã thử tutorial về LCD của Nigel Goodwin chưa?

Thân,
à thì ra là cái đó , em đã đặt nó rồi ,đó là bắt buộc khi giao tiếp với lcd, bài gửi trên đã thiết lập đầy đủ: giao tiếp 8 đường (0x38),hiển thị 2 dòng ,xóa màn hinh (0x01),hiển thị,dịch...chỉ thiếu thiết lập thêm 3 lệnh như anh đã trình bày (0x30) lệnh này thì em không hiểu nó để làm gì,em đã đoc datasheet của nó nhưng nó không nói về việc khởi tạo lệnh này để làm gì,
tutorial đó em chưa thử (những bài viết đó chỉ giao tiếp 4 đường),em có thử một số file.hex dịch từ c nhưng nó vẫn không chạy (mà các chương trình này mô phỏng thì chạy).
nó không chạy vì em thấy khi cấp nguồn chỉ xuất hiện ở các địa chỉ ở hàng dưới những ma trận điểm 5x8.còn hàng trên trắng xóa không có hiển thị gì hết.

thay đổi nội dung bởi: namqn, 15-05-2007 lúc 01:18 AM.
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2007, 09:40 PM   #17
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
rồi em đã thử mạch với led và chạy tốt,thạch anh em dùng là 4meg
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2007, 01:37 AM   #18
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
Chuỗi 3 lệnh 0x3x là dùng để thực hiện reset bộ điều khiển của LCD. Khi bật nguồn lên mà LCD không tự thực hiện reset thì cần dùng chuỗi lệnh đó để kích hoạt quá trình reset của LCD.

Dựa vào mô tả cấu hình phần cứng của bạn trong các mã nguồn đã post lên, tôi đã dịch một chương trình nhỏ để bạn thử module LCD của bạn. PortB dùng cho D0..D7, các chân RE0..RE2 dùng cho RS, RW, và E như bạn đã mô tả. PIC dùng cấu hình XT với thạch anh 4 MHz. Mã .hex được gửi kèm (chương trình đã được thử nghiệm với cấu hình phần cứng trên).

Thân,
File Kèm Theo
File Type: zip LCD_8bit.zip (735 Bytes, 204 lần tải)
__________________
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

thay đổi nội dung bởi: namqn, 15-05-2007 lúc 08:19 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2007, 04:33 PM   #19
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
Thumbs up lcd

Trích:
Nguyên văn bởi namqn View Post
Chuỗi 3 lệnh 0x3x là dùng để thực hiện reset bộ điều khiển của LCD. Khi bật nguồn lên mà LCD không tự thực hiện reset thì cần dùng chuỗi lệnh đó để kích hoạt quá trình reset của LCD.

Dựa vào mô tả cấu hình phần cứng của bạn trong các mã nguồn đã post lên, tôi đã dịch một chương trình nhỏ để bạn thử module LCD của bạn. PortB dùng cho D0..D7, các chân RE0..RE2 dùng cho RS, RW, và E như bạn đã mô tả. PIC dùng cấu hình XT với thạch anh 4 MHz. Mã .hex được gửi kèm (chương trình đã được thử nghiệm với cấu hình phần cứng trên).

Thân,
cảm ơn anh nhiều nha ,em thử về kiểm tra mạch xem sao ,em báo cáo lại sau.
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2007, 06:19 PM   #20
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
Thumbs up lcd

anh nampn oi ,em đã về thử module lcd rồi ,nó vẩn thế không có chạy .em đã cắm vào board khác thạch anh mới ,tụ mới 33pf và nạp cho 2 con pic file.hex của anh đưa để thay đổi kiểm tra mà vẩn không chạy .em có thử kiểm tra chương trình chớp tắt ở chân RB0 100ms hay 800ms cho 2 con pic của em thì cũng không thấy nó chớp tắt mà cứ sáng liên tục.
những nguyên nhân đó là do đâu gây ra anh nhỉ ,mà con LCD của em mới mua được 1 tuần nên không thể cháy được (nguồn cấp 5v1) em có mượn lcd của đứa bạn loại gì đó cũng có mã số 1602 và có 16 chân để thử mà vẩn không thấy chạy ,hay là do mạch nạp nạp sai giá trị ,hay do 2 con pic16f877a bị hỏng ở bộ dao động (mà bị hỏng sao lại vẫn nạp chương trình được).

dưới đây là chương trình đơn giản chớp tắt 100ms hay 800ms (thạch anh 4 mhz ,em có thay đổi cấu hình bit ở các tần số dao động RS,_XT_OSC,_HS_OSC để kiểm tra )và kết quả thu được như em đã nói ở trên.
anh xem và có thể kết luận được nguyên nhân do đâu không.

Code:
#include<p16f877a.inc>  ;chen thu vien lien ket cho chuong trinh  
          __CONFIG        3F71H
         ERRORLEVEL	  -302
         ;su duing thach anh 4mhz,led nhap nhay tren chan RB0
  cblock
       delay
       x_delay
  endc
org 00h  
goto START
START
  
  clrf     PORTB
  bcf     STATUS,RP1
  bsf     STATUS,RP0  ;chon bank1
  movlw       D'0'
  movwf      TRISB 

  bcf     STATUS,RP0

SS
  bsf     PORTB,0
  call     dl100ms
 
  bcf     PORTB,0 
  call     dl100ms
 
  goto     SS
;******************************************delay 0.5ms = 500uS
dl05ms
   	       movlw       D'165'              ; +1        1 cycle
   	       movwf       delay               ; +2        1 cycle
delay500_loop
   	       decfsz      delay, F            ; step1     1 cycle
   	       goto        delay500_loop       ; step2     2 cycles
                    delay500_end
   	       return                          ; +3        2 cycles

;***********************************  delay 100ms
dl100ms
                    movlw       D'200'              ; +1        1 cycle
   	       movwf       x_delay            ; +1        1 cycle
x_delay500_loop
   	       call        dl05ms            ; step1     wait 500uSec
   	       decfsz      x_delay, F          ; step2     1 cycle
   	       goto        x_delay500_loop     ; step3     2 cycles
                    x_delay500_end
   	       return                          ; +2        2 cycles

end

thay đổi nội dung bởi: namqn, 16-05-2007 lúc 07:22 PM.
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2007, 07:49 PM   #21
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
Phía sau cblock phải có một hằng số, đó là hằng số đầu tiên được gán cho chuỗi hằng số nằm giữa cblock ... endc. Một ví dụ cho việc dùng cblock:
Code:
	cblock 0x20
	cnt1
	cnt2
	tmp
	endc
Theo những gì bạn mô tả, tôi cho là mạch ứng dụng của bạn không làm việc. Nhận định bộ dao động của PIC không hỏng vì vẫn nạp được chương trình là không đúng. Khi nạp chương trình, PIC lấy clock từ chân PGC cho các phần mạch dịch và đồng bộ dữ liệu, còn khi chạy chương trình thì bộ dao động cung cấp xung clock cho lõi xử lý và các ngoại vi. Tôi đã gặp trường hợp chip vẫn có thể nhận dạng, và nạp chương trình, nhưng nó hoàn toàn không thể chạy chương trình đã được nạp.

Tôi cũng có dùng một module LCD mã hiệu TC1602A, và nó dùng bộ điều khiển tương thích với HD44780.

Bạn kiểm tra lại mạch ứng dụng của bạn đi, nếu bạn không rõ mạch ứng dụng có yêu cầu tối thiểu ra sao thì cứ vẽ mạch nguyên lý mà bạn đang dùng, và post lên đây để được góp ý.

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-05-2007, 09:32 AM   #22
zero
Đệ tử 4 túi
 
Tham gia ngày: Feb 2007
Bài gửi: 87
:
Send a message via Yahoo to zero
có ai đã thử điều khiển LCD ở chế độ 4BIT chưa?
Nếu ai đã thử rồi thì có thể cho tôi thuật toán được ko?
VD: Cách out DATA,Contro
Nếu có Soucre thì càng tốt (C nhé vì tôi rất ghét Assembly)
zero vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2007, 11:30 AM   #23
zero
Đệ tử 4 túi
 
Tham gia ngày: Feb 2007
Bài gửi: 87
:
Send a message via Yahoo to zero
LCD 4Bit

Hiện tôi đã có thể điều khiển được LCD ở chế độ 4BIT
Tôi sẽ hoàn thành CODE hoàn chỉnh và gửi lên sau
Nói nôm na là: thay vì Out 8Bit ra ta Out lần lượt 4Bit cao trước sau đó là 4Bit thấp
VD: để out chữ A ra ta làm như sau
Vì A=&H41
Code:
E 1
RS 1
DB &H4 '4Bit cao
E 0
Pause

E 1
RS 1
DB &H1 '4Bit thap
E 0
Pause
Với lệnh điều khiển ta cũng làm tương tự tôi lấy ví dụ về hàm khởi tạo
Code:
Function Init_LCD()
RS 0
E 1
DB &H0
E 0
Pause
E 1
DB &HF
E 0
Pause

E 1
DB &H2
E 0
Pause
E 1
DB &HC
E 0
Pause

Clrscr
End Function
Trên đây là đoạn chương trình tôi viết trên VB kết nối qua LPT
Rất mong mọi người cho ý kiến

thay đổi nội dung bởi: zero, 17-05-2007 lúc 11:34 AM. Lý do: Sửa lại cho dễ nhìn
zero vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2007, 02:43 PM   #24
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
Thumbs up lcd

Trích:
Nguyên văn bởi namqn View Post
Phía sau cblock phải có một hằng số, đó là hằng số đầu tiên được gán cho chuỗi hằng số nằm giữa cblock ... endc. Một ví dụ cho việc dùng cblock:
Code:
	cblock 0x20
	cnt1
	cnt2
	tmp
	endc
Theo những gì bạn mô tả, tôi cho là mạch ứng dụng của bạn không làm việc. Nhận định bộ dao động của PIC không hỏng vì vẫn nạp được chương trình là không đúng. Khi nạp chương trình, PIC lấy clock từ chân PGC cho các phần mạch dịch và đồng bộ dữ liệu, còn khi chạy chương trình thì bộ dao động cung cấp xung clock cho lõi xử lý và các ngoại vi. Tôi đã gặp trường hợp chip vẫn có thể nhận dạng, và nạp chương trình, nhưng nó hoàn toàn không thể chạy chương trình đã được nạp.

Tôi cũng có dùng một module LCD mã hiệu TC1602A, và nó dùng bộ điều khiển tương thích với HD44780.

Bạn kiểm tra lại mạch ứng dụng của bạn đi, nếu bạn không rõ mạch ứng dụng có yêu cầu tối thiểu ra sao thì cứ vẽ mạch nguyên lý mà bạn đang dùng, và post lên đây để được góp ý.

Thân,
anh nampn ơi,đã test file.hex của anh đưa và test nhiều lần cuối cùng cũng đã chạy ,chương trình em viết cũng đã chạy rồi ,nguyên nhân không chạy là do nút reset gắn trên chân 1 bị hỏng rồi nên mới đầu cấp nguồn bấm nút reset và do cái này không tác động nên chương trình mới vào chạy ở một địa chỉ bất kì ,do đó nó không hiển thị ,em vừa kiểm tra thấy nó chạy là em liền lên net báo cho anh biết ngay để khỏi phải làm mất thời gian của anh nữa.
cho em cám ơn an nhiều nha.
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-08-2007, 09:26 AM   #25
Jerry
Đệ tử 5 túi
 
Jerry's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 100
:
Trích:
Nguyên văn bởi namqn View Post
Bạn phải tự đặt N và F theo yêu cầu của bạn chứ. Tôi chỉ ghi format của nó ra thôi (nếu bạn vẫn không biết phải đặt N và F bằng bao nhiêu thì đây: N=1: hiển thị 2 dòng, N=0: hiển thị 1 dòng, F=1: dùng font 5x10, F=0: dùng font 5x8).

Bạn định nghĩa 'không chạy' như thế nào? Nếu bạn chưa thực hiện đặt font và số dòng thì liệu LCD có hiển thị đúng những gì bạn muốn không?

Tôi thấy bạn hỏi lung tung mọi chỗ, nhưng không biết bạn đã thử tutorial về LCD của Nigel Goodwin chưa?

Thân,
Gửi bạn Nam
Như bạn nói ở trên thì N=1: hiển thị 2 dòng, N=0: hiển thị 1 dòng, F=1: dùng font 5x10, F=0: dùng font 5x8). Vậy tôi muốn hỏi nếu hiển thị 4 dòng thì N = bao nhiêu? Tôi đọc trong tài liệu chỉ thấy nói đến hiển thị 1 dòng và 2 dòng thôi, còn số dòng lớn hơn thì không thấy đề cập đến. Tôi đang viết chương trình điều khiển LCD 4 dòng, 16 ký tự, font 5x8, điều khiển 4 bit. Vậy con số cụ thể để khởi tạo cho LCD sẽ là bao nhiêu? Rất mong bạn trả lời sớm.
Jerry vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-08-2007, 06:01 PM   #26
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
Trích:
Nguyên văn bởi Jerry View Post
Gửi bạn Nam
Như bạn nói ở trên thì N=1: hiển thị 2 dòng, N=0: hiển thị 1 dòng, F=1: dùng font 5x10, F=0: dùng font 5x8). Vậy tôi muốn hỏi nếu hiển thị 4 dòng thì N = bao nhiêu? Tôi đọc trong tài liệu chỉ thấy nói đến hiển thị 1 dòng và 2 dòng thôi, còn số dòng lớn hơn thì không thấy đề cập đến. Tôi đang viết chương trình điều khiển LCD 4 dòng, 16 ký tự, font 5x8, điều khiển 4 bit. Vậy con số cụ thể để khởi tạo cho LCD sẽ là bao nhiêu? Rất mong bạn trả lời sớm.
Đó là thông tin cấu hình dành cho module có 2 dòng, với module 4 dòng thì ý nghĩa của N tất nhiên sẽ khác đi. Bạn nên tìm datasheet của module đang dùng để có thông tin chính xác hơn. Một link tham khảo để bạn thấy HD44780 có thể dùng cho các module 1-dòng, 2-dòng, và 4-dòng.

http://home.iae.nl/users/pouweha/lcd/lcd0.shtml

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 07-08-2007, 10:04 AM   #27
Jerry
Đệ tử 5 túi
 
Jerry's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 100
:
Mình đã tìm datasheet và đọc rất kỹ. Tiếc là trong datasheet thường không đề cập rõ đến các vấn đề về trình tự điều khiển mà chỉ nói chung chung về chân cẳng và các thông số kỹ thuật. Tuy nhiên mình cũng đã tìm ra con số khởi tạo LCD loại 4 hàng 16 ký tự, điều khiển 4bit là 0x28, giống y như loại 2 hàng 16 ký tự. Và có 1 tài liệu giải thích là loại 4 hàng được hiểu là 2 hàng nhưng số ký tự nhiều hơn (gấp đôi), cho nên byte để khởi tạo cho 2 loại này là giống nhau.
Jerry vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-11-2008, 02:49 PM   #28
trungduc
Đệ tử 2 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 44
:
HELP ME! HELP ME! HELP ME!

Xin chào các anh chị em PICVN.
Em đang loai hoai voi con PIC16f877A và LCD16*2 (TC1602A-01T). Lượm lặt tài liệu và code trên mạng, đến giờ đã hiểu láng máng nhưng vẫn không làm sao hiển thị được tí gì. Anh chị em nào có code đơn giản đã chạy rồi cho mình TEST thử nhé.
Thanks!!!
trungduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-11-2008, 11:12 PM   #29
ketxanh
Đệ tử 3 túi
 
ketxanh's Avatar
 
Tham gia ngày: Aug 2008
Bài gửi: 53
:
Smile

Trích:
Nguyên văn bởi trungduc View Post
HELP ME! HELP ME! HELP ME!

Xin chào các anh chị em PICVN.
Em đang loai hoai voi con PIC16f877A và LCD16*2 (TC1602A-01T). Lượm lặt tài liệu và code trên mạng, đến giờ đã hiểu láng máng nhưng vẫn không làm sao hiển thị được tí gì. Anh chị em nào có code đơn giản đã chạy rồi cho mình TEST thử nhé.
Thanks!!!
Bạn có thể tham khảo tài liệu này.Mình đã làm thực tế và chạy tốt. Chúc bạn thành công
File Kèm Theo
File Type: rar tai lieu lcd.rar (175.1 KB, 451 lần tải)
ketxanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-11-2008, 08:35 AM   #30
trungduc
Đệ tử 2 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 44
:
Cảm ơn bạn rất nhiều!
Tài liệu này giúp tôi rất nhiều đây
trungduc 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


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


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