PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   MPASM (http://www.picvietnam.com/forum/forumdisplay.php?f=34)
-   -   Lcd (http://www.picvietnam.com/forum/showthread.php?t=1055)

friends 14-05-2007 09:21 PM

lcd
 
Trích:

Nguyên văn bởi namqn (Post 8640)
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.

friends 14-05-2007 09:40 PM

rồi em đã thử mạch với led và chạy tốt,thạch anh em dùng là 4meg

namqn 15-05-2007 01:37 AM

1 Attachment(s)
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,

friends 16-05-2007 04:33 PM

lcd
 
Trích:

Nguyên văn bởi namqn (Post 8659)
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 16-05-2007 06:19 PM

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


namqn 16-05-2007 07:49 PM

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,

zero 17-05-2007 09:32 AM

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 17-05-2007 11:30 AM

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

friends 17-05-2007 02:43 PM

lcd
 
Trích:

Nguyên văn bởi namqn (Post 8696)
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.

Jerry 06-08-2007 09:26 AM

Trích:

Nguyên văn bởi namqn (Post 8640)
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.

namqn 06-08-2007 06:01 PM

Trích:

Nguyên văn bởi Jerry (Post 10558)
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,

Jerry 07-08-2007 10:04 AM

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.

trungduc 17-11-2008 02:49 PM

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!!!

ketxanh 23-11-2008 11:12 PM

1 Attachment(s)
Trích:

Nguyên văn bởi trungduc (Post 20505)
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

trungduc 24-11-2008 08:35 AM

Cảm ơn bạn rất nhiều!
Tài liệu này giúp tôi rất nhiều đây


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