이전글인 LCD1602 - ADC 출력을 응용하여 스테레오 오디오의 출력 세기를 바 그래프 형태로 표시하는 것을 구현해 보도록 하겠다.실제로 오디오 출력을 ADC로 읽어 온 값을 출력하는것이 아니고 단순히 시뮬레이션 하는 정도의 수준으로만 구현하는것으로 하겠다.사용하는 회로는 LCD1602 드라이버 코드 - 4비트 모드(2)를 참고하기 바란다.ADC 출력 프로젝트에서는 하나의 ADC 입력에 대해서만 출력했지만 이번 프로젝트에서는 두개의 오디오 출력을 표시하여야 하므로 update_bar_graph() 함수를 조금 수정하였다. #define CHAN_INDENT 2 static void update_bar_graph(uint8_t r, uint8_t line) { uint8_t full = line / L..
이번에는 LCD1602를 실제 어떻게 활용할 수 있는지 간단한 프로젝트를 만들어 알아보기로 하겠다.먼저 다음과 같은 회로를 구성한다.LCD1602를 4비트 모드로 AVR과 연결시키고, AVR의 ADC0핀에 10K옴 가변 저항기를 연결하였다. ADC 값을 읽어 오는 방법은 입문 과정중 ADC(Analog to Digital Converter)에서 다루어 보았으므로 참고하면 된다.ADC 블럭을 통해서 읽어온 값을 LCD에 출력하는 코드를 만들어, ADC와 LCD가 정상적으로 동작되는지 확인해 본다. static char lcd_buf[2][16]; uint8_t row, col; static void clear_buf(void) { for (row=0; row
이번 글에서는 LCD 내부에서 제공하는 글자를 사용하지 않고 프로그래머가 직접 글자 패턴을 만들어서 LCD에 출력해보는 기능에 대해서 알아보도록 하겠다.먼저 다음과 같은 코드를 만들어 본다. static uint8_t count; static char buf[16]; static char spinner[] = {'|','/','-','\\'}; static void loop(void) { sprintf(buf, "Cnt = %3d", count++); lcd_pos_putc(1,0,spinner[count&3]); lcd_pos_puts(1,3,buf); _delay_ms(500); } 위의 코드는 500msec 마다 count 변수값을 LCD의 두번째 줄에 출력하는 코드이다. 이미 앞의 글들에서 계속 ..
이번 글에서는 앞에서 만들었던 4비트 모드 LCD 연결에서 R/W 신호를 GND에 고정 시켜 AVR과 LCD의 신호를 6개만 연결하는 회로를 이용하는 방법에 대해서 설명하도록 한다. 회로를 다음과 같이 만든다.LCD의 R/W 신호를 GND에 연결한 것과, 이로 인하여 AVR과 LCD는 모두 6개의 신호로 연결된 것을 볼 수 있다. 8비트 모드에서 사용하였던 11개의 신호선에 비하면 거의 절반이나 줄어든 효과를 가지고 온다고 볼수 있겠다. 물론 8비트 모드에서도 R/W 신호선을 사용하지 않게 할 수도 있다. 그럼 위의 회로 구성에 따라 수정하여야 하는 LCD 드라이버 코드가 어떤 것들이 있는지 하나씩 확인해 보도록 한다.먼저 E신호가 앞에서는 PD2에 연결되었는데 이번에는 PD1에 연결되었으므로 이 부분에..
HD44780 호환 칩들은 데이터라인을 8비트로 연결하여 동작할 수도 있지만, 4비트 데이터만 가지고도 동작할 수 있는 구조를 가진다. 그 이유는 AVR과 같이 외부로 나오는 핀의 개수가 많지 않은 마이크로 컨트롤러를 사용하는데 부담을 덜어주기 위해서이다. 이전 글처럼 8비트 모드로 동작 시키게 되면 모두 11개의 신호선이 필요하다. ATmega328의 경우 모두 28개의 핀이 있는데 전원과 외부 클럭을 연결하는데 필요한 핀을 제외하면 21개의 핀을 사용할 수 있게 된다. 그 중에서 11개의 핀을 LCD를 구동하는데 사용하게 되면 실제로 남는 핀의 개수는 그 절반밖에 되지 않는 10개만 사용할 수 있다는 얘기가 된다.이러한 문제를 해결하기 위하여 4비트 모드로 동작시킬수 있는 구조를 제공하는 것이다. L..
이번 프로젝트에서 사용하는 LCD 모듈은 WaveShare사에서 만든 3.3V용 파란색 LCD모듈이다. 제조사 홈페이지에서 해당 모듈을 검색하면 LCD모듈에 사용된 드라이버 칩이 SUNPLUS사의 SPLC780D을 사용하였다고 나온다.1602 LCD는 히타치사에서 만든 HD44780 드라이버 칩을 사용하는것이 거의 표준처럼 되어 있다. 따라서 SPLC780D도 HD44780과 호환 제품이다.인터넷에서 HD44780 데이터쉬트 문서를 검색하면 다운 받을수 있다.문서를 다운 받았으면 서너번 정도 대충 읽어본다. SPLC780D 문서는 48페이지로 되어 있는데 이것 저것 빼고 나면 실제로 드라이버 코드를 만드는데 필요한 정보는 몇페이지 되지 않으므로 크게 부담없이 읽어 볼 수 있다. 문서 분석이 어느정도 되었..
LCD1602 프로젝트는 한줄에 16개의 글자를 표시할 수 있는 두줄짜리 LCD 표시장치를 이용하여 프로그래머가 원하는 글자를 표시해보는 것이다. LCD 모듈에서 제공하는 기본적인 글자뿐 아니라 사용자가 직접 글자를 만들어 쓸수 있는 기능을 이용하여 약간의 그래픽 데이터를 표시해보는 기능도 직접 구현해 볼것이다. 실제 모습은 위의 그림과 같다. 자세히 보면 16개의 핀이 연결되는것을 알 수 있다. 각각의 핀에 대한 설명은 다음과 같다. LCD1602는 MCU와 8비트 데이터로 연결 할 수도 있고, 4비트 데이터로도 연결할 수 있다. 첫번째 프로젝트에서는 8비트 데이터 버스를 이용한 방법을 적용해 보고, 다음 프로젝트에서는 4비트 버스를 이용하여 원하는 데이터를 출력해 보도록 하겠다. AVR과 1602 L..