![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
![]() Xin chào mọi người. Mình đặng gặp rắc rối với mấy chú thạch anh cần mọi người chỉ giúp. Số là thế này. Lúc đầu mình viết chương trình cho pic hiện thị lcd (trên cả 2 dòng luôn) với thạch anh 4Mhz thì nó chạy tốt. Vì mình muốn tăng tốc cho Pic nên đã đổi thành thạch anh 20Mhz (tụ vẫn để là 22p vì mình thấy trong datasheet vẫn cho phép giá trị này) nhưng khi lắp vào chạy thì nó lại không hiện thị được dòng thứ 2. Hic. Thà rằng nó không hiện gì cả thì mình còn biết lối, đàng này nó vẫn hiện thị dược dòng trên còn dòng dưới thì không. Xin mọi người chỉ giáo!
|
![]() |
![]() |
![]() |
#2 |
Làm quen với PIC
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
: |
Bạn có config lại chương trình phần OSC là HS chưa ?
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
![]() |
![]() |
![]() |
![]() |
#4 |
Làm quen với PIC
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
: |
Vấn đề có thể do lỗi của LCD đó bạn , mình từng bị một cái 20X4 , lúc mới bật nguồn thì hiển thị lung tung , nhưng bấm reset thì hiển thị lại bình thường .
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
|
![]() |
![]() |
![]() |
#6 |
Làm quen với PIC
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
: |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 7 túi
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
: |
Trong file lcd có sử dụng #use delay(clock=4000000)
Bạn thay đổi tần số "chậm hơn" thì thạch anh 16M, 20M cũng không ảnh hưởng đến tốc độ giao tiếp với lcd. Khi mạch cắm với lcd qua bus thì lâu lâu hay bị nhiễu, kiểm tra cắm lại là được. |
![]() |
![]() |
![]() |
#8 |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
Mình không dùng thư viện lcd nên không anh hưởng bởi dòng đó. Chắc là bị nhiễu ở đâu đó thôi. Nhổ ra cắm lại vẫn thế à. Chỉ nhấn reset thôi là được.
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 7 túi
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: TP HCM
Bài gửi: 190
: |
Không phải vậy đâu, chẳng qua là do lập trình thôi, khi mà con pic chạy ''chập chờn'' tức là lập trình bị sai!.
Lúc trước cái lcd tui có bị rồi, lấy tay rờ vào chân con pic thì nó mới hiển thị,... Bạn ko tin thì bạn post sơ đồ lên,...bạn nạp file lập trình khác vô là chạy ngon lành. |
![]() |
![]() |
![]() |
#10 | |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
Trích:
|
|
![]() |
![]() |
![]() |
#11 |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
ah. Cái đó là do mình đang dùng bộ kittest pic nên không tháo được. Hi. Làm mạch thật thì dùng chân rào cắm ic tha hồ thử.
|
![]() |
![]() |
![]() |
#12 |
Đệ tử 1 túi
Tham gia ngày: Mar 2012
Bài gửi: 22
: |
Tình hình là không biết do đâu rồi. Mình đã làm mạch thật dùng thạch anh 20M, tụ 33p nhưng nó vẫn không hiện thị hết hai dòng mà phải nhấn nút reset thì nó mới hiện thị hết. hưchức. Gửi đoạn code trên ccsc cho các bác xem giúp nhé.
#include <16F877A.h> #include <def_877a.h> #device *=16 ADC=10 #use delay(clock=20000000) #FUSES HS #USE FAST_IO(D) #USE FAST_IO(b) #USE FAST_IO(c) #bit rs = portb.5 #bit rw = portb.4 #bit en = portb.3 int8 i,j; int16 x,y,f1,f2,df; //-------------------------------------------------------- void lenh_lcd(int8 malenh) { portd=malenh; rs=0; rw=0; en=1; delay_us(5); en=0; delay_ms(3); } //-------------------------------------------------------- void data_lcd(unsigned char dulieu) { portd=dulieu; rs=1; rw=0; en=1; delay_us(5); en=0; delay_ms(3); } //--------------------------------------------------- void main() { set_tris_a(0xff); set_tris_b(0x00); set_tris_d(0); set_tris_c(0xff); df=0; f1=0; f2=0; //-------------------thiet lap adc setup_ADC(ADC_clock_internal); setup_ADC_ports(RA0_RA1_RA3_ANALOG); //------------------- lenh khoi tao lcd lenh_lcd(0x38); lenh_lcd(0x0e); lenh_lcd(0x01); lenh_lcd(0x06); //--------------- lenh hien thi lcd lenh_lcd(0x80); data_lcd("U1:"); lenh_lcd(0x88); data_lcd("U2:"); delay_ms(1); lenh_lcd(0xC0); data_lcd("F1:"); delay_ms(1); lenh_lcd(0xC8); data_lcd("F2:"); delay_ms(1); |
![]() |
![]() |
![]() |
|
|