Około 2 miesięcy temu rozpocząłem przygodę z mikrokontrolerem atmega8, przyszedł czas na obsługę wyświetlacza LCD, niestety zaczęły się schody. Zakupiłem wyświetlacz
LCD 2x16
tak się złożyło, że nie zapytałem sprzedawcy o dokumentację ;] a na podstawie nr nie mogę nic znaleźć na internecie. Dlatego proszę jeśli to możliwe o pomoc. Jeśli ktoś miał z tym wyświetlaczem do czynienia to może wie gdzie szukać dokumentacji.
Do jego obsługi posłużyłem się biblioteką ze strony http://radzio.dxp.pl/, po zmianie pinów w define wygląda następująco.
Użyłem trybu 4bitowego, poszczególne piny zostały podpięte w następujący sposób:
Vcc - usb 5V+
Vo - GND
RS - PC0 //PORTC
E - PC1
DB4 - PC2
DB5 - PC3
DB6 - PC4
DB7 - PC5
R/W - PB0 //PORTB
Po skompilowaniu i wgraniu do mikrokontrolera na wyświetlaczu pojawia się ciąg kwadratów na obu wierszach. Nie mam pojęcia co może być tego przyczyną.
Oczywiście jak podpinam wyświetlacz bez załadowanego programu w mikrokontrolerze to wyświetla się ciąg kwadratów tylko w jednej linii czyli z tego co rozumie uruchomił się poprawnie.
biblioteka:
kod źródłowy programu:
LCD 2x16
tak się złożyło, że nie zapytałem sprzedawcy o dokumentację ;] a na podstawie nr nie mogę nic znaleźć na internecie. Dlatego proszę jeśli to możliwe o pomoc. Jeśli ktoś miał z tym wyświetlaczem do czynienia to może wie gdzie szukać dokumentacji.
Do jego obsługi posłużyłem się biblioteką ze strony http://radzio.dxp.pl/, po zmianie pinów w define wygląda następująco.
Użyłem trybu 4bitowego, poszczególne piny zostały podpięte w następujący sposób:
Vcc - usb 5V+
Vo - GND
RS - PC0 //PORTC
E - PC1
DB4 - PC2
DB5 - PC3
DB6 - PC4
DB7 - PC5
R/W - PB0 //PORTB
Po skompilowaniu i wgraniu do mikrokontrolera na wyświetlaczu pojawia się ciąg kwadratów na obu wierszach. Nie mam pojęcia co może być tego przyczyną.
Oczywiście jak podpinam wyświetlacz bez załadowanego programu w mikrokontrolerze to wyświetla się ciąg kwadratów tylko w jednej linii czyli z tego co rozumie uruchomił się poprawnie.
biblioteka:
//-------------------------------------------------------------------------------------------------
// Wyœwietlacz alfanumeryczny ze sterownikiem HD44780
// Sterowanie w trybie 4-bitowym bez odczytu flagi zajętoœci
// z dowolnym przypisaniem sygnałów sterujšcych
// Plik : HD44780.h
// Mikrokontroler : Atmel AVR
// Kompilator : avr-gcc
// Autor : Radosław Kwiecień
// �ródło : http://radzio.dxp.pl/hd44780/
// Data : 24.03.2007
//-------------------------------------------------------------------------------------------------
#include <avr/io.h>
#include <util/delay.h>
//----------------------------------------------------------------------------------------------
//
// Konfiguracja sygnałów sterujšcych wyœwietlaczem.
// Można zmienić stosownie do potrzeb.
//
//----------------------------------------------------------------------------------------------
#define LCD_RS_DIR DDRC
#define LCD_RS_PORT PORTC
#define LCD_RS_PIN PINC
#define LCD_RS (1 << PC0)
#define LCD_RW_DIR DDRB
#define LCD_RW_PORT PORTB
#define LCD_RW_PIN PINB
#define LCD_RW (1 << PB0)
#define LCD_E_DIR DDRC
#define LCD_E_PORT PORTC
#define LCD_E_PIN PINC
#define LCD_E (1 << PC1)
#define LCD_DB4_DIR DDRC
#define LCD_DB4_PORT PORTC
#define LCD_DB4_PIN PINC
#define LCD_DB4 (1 << PC2)
#define LCD_DB5_DIR DDRC
#define LCD_DB5_PORT PORTC
#define LCD_DB5_PIN PINC
#define LCD_DB5 (1 << PC3)
#define LCD_DB6_DIR DDRC
#define LCD_DB6_PORT PORTC
#define LCD_DB6_PIN PINC
#define LCD_DB6 (1 << PC4)
#define LCD_DB7_DIR DDRC
#define LCD_DB7_PORT PORTC
#define LCD_DB7_PIN PINC
#define LCD_DB7 (1 << PC5)
//-------------------------------------------------------------------------------------------------
//
// Instrukcje kontrolera Hitachi HD44780
//
//-------------------------------------------------------------------------------------------------
#define HD44780_CLEAR 0x01
#define HD44780_HOME 0x02
#define HD44780_ENTRY_MODE 0x04
#define HD44780_EM_SHIFT_CURSOR 0
#define HD44780_EM_SHIFT_DISPLAY 1
#define HD44780_EM_DECREMENT 0
#define HD44780_EM_INCREMENT 2
#define HD44780_DISPLAY_ONOFF 0x08
#define HD44780_DISPLAY_OFF 0
#define HD44780_DISPLAY_ON 4
#define HD44780_CURSOR_OFF 0
#define HD44780_CURSOR_ON 2
#define HD44780_CURSOR_NOBLINK 0
#define HD44780_CURSOR_BLINK 1
#define HD44780_DISPLAY_CURSOR_SHIFT 0x10
#define HD44780_SHIFT_CURSOR 0
#define HD44780_SHIFT_DISPLAY 8
#define HD44780_SHIFT_LEFT 0
#define HD44780_SHIFT_RIGHT 4
#define HD44780_FUNCTION_SET 0x20
#define HD44780_FONT5x7 0
#define HD44780_FONT5x10 4
#define HD44780_ONE_LINE 0
#define HD44780_TWO_LINE 8
#define HD44780_4_BIT 0
#define HD44780_8_BIT 16
#define HD44780_CGRAM_SET 0x40
#define HD44780_DDRAM_SET 0x80
//----------------------------------------------------------------------------------------------
//
// Deklaracje funkcji
//
//-------------------------------------------------------------------------------------------------
void LCD_WriteCommand(unsigned char);
unsigned char LCD_ReadStatus(void);
void LCD_WriteData(unsigned char);
unsigned char LCD_ReadData(void);
void LCD_WriteText(char *);
void LCD_GoTo(unsigned char, unsigned char);
void LCD_Clear(void);
void LCD_Home(void);
void LCD_Initalize(void);
void LCD_ProgrammChar(unsigned char nr, unsigned char znak[]);
kod źródłowy programu:
#define F_CPU 1000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "HD44780.c"
int main(void)
{
LCD_Initalize();
LCD_Clear(); //czyszczenie wyswietlacza
LCD_WriteData(1); //wyswietlenie wlasnego znaku numer 1.
}