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 13-03-2009, 04:17 PM   #1
Vinh3i
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 25
:
Loay hoay với cái này mất gần 2 ngày trời rồi. Có ai xem giúp tôi với. Chứ thấy cái LCD này lì quá!!!!!
Vinh3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-03-2009, 05:36 PM   #2
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 Vinh3i View Post
Loay hoay với cái này mất gần 2 ngày trời rồi. Có ai xem giúp tôi với. Chứ thấy cái LCD này lì quá!!!!!
Không ít người gặp vấn đề với LCD (đặc biệt là LCD mới), vì họ không dùng quy trình khởi tạo LCD đầy đủ. Tôi đã nhiều lần nói đến quy trình này ở picvietnam, bạn có thể tham khảo ở post #268 của luồng sau chẳng hạn:
http://www.picvietnam.com/forum/showthread.php?t=357

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 19-03-2009, 04:22 PM   #3
Vinh3i
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 25
:
tôi viết code để test lcd như sau:
Code:
#include <16F877A.h>


#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=10000000)

/* LCD STUFF */
#define LCD_D0  PIN_B1
#define LCD_D1  PIN_B2
#define LCD_D2  PIN_B3
#define LCD_D3  PIN_B4

#define LCD_EN  PIN_A1
#define LCD_RS  PIN_A2

#define FIRST_LINE  0x00
#define SECOND_LINE 0x40
#define CLEAR_DISP  0x01

#int_EXT
void  EXT_isr(void) 
{

}

#int_TBE
void  TBE_isr(void) 
{

}

#int_RDA
void  RDA_isr(void) 
{

}


void LCD_Init ( void );
void LCD_SetPosition ( unsigned int cX );
void LCD_PutChar ( unsigned int cX );
void LCD_PutCmd ( unsigned int cX );
void LCD_PulseEnable ( void );
void LCD_SetData ( unsigned int cX );


void main()
{
Output_high(PIN_B5);
Output_high(PIN_B5);
LCD_Init();
LCD_PutChar("O");
LCD_PutChar("K");

}
/******************************************************************************/

void LCD_Init ( void )
    {
    LCD_SetData ( 0x00 );
    delay_ms ( 200 );       /* wait enough time after Vdd rise */
    output_low ( LCD_RS );
    LCD_SetData ( 0x03 );   /* init with specific nibbles to start 4-bit mode */
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_SetData ( 0x02 );   /* set 4-bit interface */
    LCD_PulseEnable();      /* send dual nibbles hereafter, MSN first */
    LCD_PutCmd ( 0x2C );    /* function set (all lines, 5x7 characters) */
    LCD_PutCmd ( 0x0C );    /* display ON, cursor off, no blink */
    LCD_PutCmd ( 0x01 );    /* clear display */
    LCD_PutCmd ( 0x06 );    /* entry mode set, increment */
    }

void LCD_SetPosition ( unsigned int cX )
    {
    /* this subroutine works specifically for 4-bit Port A */
    LCD_SetData ( swap ( cX ) | 0x08 );
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );
    LCD_PulseEnable();
    }

void LCD_PutChar ( unsigned int cX )
    {
    /* this subroutine works specifically for 4-bit Port A */
    output_high ( LCD_RS );
    LCD_SetData ( swap ( cX ) );     /* send high nibble */
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );     /* send low nibble */
    LCD_PulseEnable();
    output_low ( LCD_RS );
    }

void LCD_PutCmd ( unsigned int cX )
    {
    /* this subroutine works specifically for 4-bit Port A */
    LCD_SetData ( swap ( cX ) );     /* send high nibble */
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );     /* send low nibble */
    LCD_PulseEnable();
    }

void LCD_PulseEnable ( void )
    {
    output_high ( LCD_EN );
    delay_us ( 10 );
    output_low ( LCD_EN );
    delay_ms ( 5 );
    }

void LCD_SetData ( unsigned int cX )
    {
    output_bit ( LCD_D0, cX & 0x01 );
    output_bit ( LCD_D1, cX & 0x02 );
    output_bit ( LCD_D2, cX & 0x04 );
    output_bit ( LCD_D3, cX & 0x08 );
    }
dùng CCS để build và nạp vào PIC trên
Tuy nhiên, mô phỏng với proteus thì chạy tốtt, còn nạp lên mạch thì LCD chỉ hiện một dòng đen xì.
(với code trên, tôi đã nối châm RW của LCD với đất)
kiểm tra điện áp trên lcd thì có
Trích:
D0,1,2,3,4,5,7 = 5v
D6 = 0V
rs,e,rw = 0v
chỉnh điện áp chân VEE vẫn thấy thay đổi đậm nhạt của dòng đen xì trên
Help me!!!!

thay đổi nội dung bởi: Vinh3i, 19-03-2009 lúc 04:30 PM.
Vinh3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2009, 05:01 PM   #4
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 Vinh3i View Post
...

Tuy nhiên, mô phỏng với proteus thì chạy tốtt, còn nạp lên mạch thì LCD chỉ hiện một dòng đen xì.
(với code trên, tôi đã nối châm RW của LCD với đất)
kiểm tra điện áp trên lcd thì có

Help me!!!!
LCD trong Proteus là LCD lý tưởng, còn những LCD thực tế thì có đôi chút khác biệt.

Theo thông tin của bạn, phần cứng của bạn đang có vấn đề, vì chân D6 có trạng thái bất thường so với các chân còn lại. Bạn nên đưa sơ đồ mạch đã dùng lên diễn đàn, vì code chỉ có nghĩa khi dùng với một thiết kế phần cứng cụ thể.

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 19-03-2009, 11:01 PM   #5
Vinh3i
Đệ tử 1 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 25
:
Trích:
Nguyên văn bởi namqn View Post
LCD trong Proteus là LCD lý tưởng, còn những LCD thực tế thì có đôi chút khác biệt.

Theo thông tin của bạn, phần cứng của bạn đang có vấn đề, vì chân D6 có trạng thái bất thường so với các chân còn lại. Bạn nên đưa sơ đồ mạch đã dùng lên diễn đàn, vì code chỉ có nghĩa khi dùng với một thiết kế phần cứng cụ thể.

Thân,
Đó là code tôi viết cho mạch ở post #1
Vinh3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2009, 12:44 AM   #6
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 Vinh3i View Post
Đó là code tôi viết cho mạch ở post #1
Ok, sơ đồ của bạn thì không có vấn đề, nhưng code của bạn có vấn đề, dẫn đến LCD chưa được khởi tạo.

Trong post #268 của luồng http://www.picvietnam.com/forum/showthread.php?t=357, tôi đã trình bày quy trình khởi tạo đầy đủ. Đối chiếu với code của bạn thì thấy dữ liệu để khởi tạo của bạn bị sai (0x03 thay vì một trong các giá trị 0x30 - 0x3F).

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
Trả lời

Tags
lcd, nhietdo, pic6f877, realtime-clock


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à 09:40 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