BASIC4MCU | 질문게시판 | atmega128 lcd 글자가 안나타납니다.
페이지 정보
작성자 소리에게돈 작성일2020-10-08 02:10 조회4,749회 댓글1건본문
마스터님의 답변으로 프로그래밍 다운로드에서의 에러는 해결했습니다.
하지만, 글자가 나타나지 않는 lcd패널을 보며 좌절하고 있습니다.
결선은 바로 한것같은데 혹여나 전에 잘못 결선하여 회로가 고장이난것인지 의심됩니다.
증상의 사진과 코드를 첨부합니다.
#include <mega128.h>
#include <delay.h>
#define LINE2 0xC0 // 2nd Line Move
#define HOME 0x02 // Cursor Home
#define RSHIFT 0x1C // Display Right Shift
#define LSHIFT 0x18 // Display Left Shift
#define DISPON 0x0c // Display On
#define DISPOFF 0x08 // Display Off
void LCD_init(void);
void LCD_String(char flash str[]);
void Busy(void);
void Command(unsigned char);
void Data(unsigned char);
void main(void)
{
LCD_init();
Command(HOME);
LCD_String("Hello!!");
Command(LINE2);
LCD_String("Atmel Atmega128");
while(1);
}
// LCD 초기화 함수
void LCD_init(void)
{
DDRC = 0xFF; // 포트 C 출력 설정
PORTC &= 0xFB; //E = 0;
// 충분한 지연시간을 통한 안정화 과정
delay_ms(15);
Command(0x20); // D5=1
delay_ms(5);
Command(0x20); // D5=1
delay_us(100);
Command(0x20); // D5=1
// 초기화 과정
Command(0x28); // function set
Command(0x06); // entry mode set
Command(0x01); // all clear
Command(0x0c); // display on
}
// 인스트럭션 쓰기 함수
void Command(unsigned char byte)
{
Busy();
// 인스트럭션 상위 바이트
PORTC = (byte & 0xF0); // 데이터
PORTC &= 0xFE; // RS = 0;
PORTC &= 0xFD; // RW = 0;
delay_us(1);
PORTC |= 0x04; // E = 1;
delay_us(1);
PORTC &= 0xFB; // E = 0;
// 인스트럭션 하위 바이트
PORTC = ((byte<<4) & 0xF0); // 데이터
PORTC &= 0xFE; // RS = 0;
PORTC &= 0xFD; // RW = 0;
delay_us(1);
PORTC |= 0x04; // E = 1;
delay_us(1);
PORTC &= 0xFB; // E = 0;
}
// 문자열 출력 함수
void LCD_String(char flash str[])
{
char flash *pStr=0;
pStr = &str[0];
while(*pStr) Data(*pStr++);
}
// char flash : pointer declaration for program memory
// char eeprom : pointer declaration for EEPROM
//데이터 쓰기 함수
void Data(unsigned char byte)
{
Busy();
// 데이터 상위 바이트
PORTC = (byte & 0xF0); // 데이터
PORTC |= 0x01; //RS = 1;
PORTC &= 0xFD; //RW = 0;
delay_us(1);
PORTC |= 0x04; //E = 1;
delay_us(1);
PORTC &= 0xFB; //E = 0;
// 데이터 하위 바이트
PORTC = ((byte<<4) & 0xF0); // 데이터
PORTC |= 0x01; //RS = 1;
PORTC &= 0xFD; //RW = 0;
delay_us(1);
PORTC |= 0x04; //E = 1;
delay_us(1);
PORTC &= 0xFB; //E = 0;
}
// Busy Flag Check -> 일반적인 BF를 체크하는 것이 아니라
// 일정한 시간 지연을 이용한다.
void Busy(void)
{
delay_ms(2);
}
댓글 1
조회수 4,749master님의 댓글
master 작성일
고장이 날만큼 결선을 잘 못했었는지에 대해서는 본인 외에는 알 길이 없으며
제시된 사진으로는 결선 체크를 할 수가 없습니다.
선 몇가닥 연결 체크하는 정도는 할 수 있지 않나요?
브레드보드는 연결이 헐거워서 접속이 나쁜 구멍이 있으니 잘 체크하세요