Witam,
wiem że dużo już w tym temacie, ale nie moge znaleźć rozwiązania swojego problemu...
Chyba nawet nie wychodzi mi poprawna inicjalizacja, ponieważ po niej na lcd mam wciąż tylko 2 wypełnione pixelami linie..
Sterowanie ma być 4-bitowe, wyswietlacz 16x2
Mikrokontroler to atmega162
wie ktoś co jest nie tak? ja już nie wiem.....
pozdrawiam
Poprawiłem tytuł:
https://www.elektroda.pl/rtvforum/topic1015361.html
[c_p]
wiem że dużo już w tym temacie, ale nie moge znaleźć rozwiązania swojego problemu...
Chyba nawet nie wychodzi mi poprawna inicjalizacja, ponieważ po niej na lcd mam wciąż tylko 2 wypełnione pixelami linie..
#include <avr/io.h>
#include <util/delay.h>
#include <my_defs.h>
#define LCD_E 3
#define LCD_RS 2
//#define LCD_RW
#define LCD_4 4
#define LCD_5 5
#define LCD_6 6
#define LCD_7 7
#define LCD PORTA
#define LCD_DIR DDRA
// dec 128 64 32 16 8 4 2 1
//
// PORTA: 7 6 5 4 3 2 1 0
// | | | | | | | |
// LCD: 7 6 5 4 RS E - -
void del_us(uint32_t t_us) // Lekko ponad mikro sec
{
uint32_t t;
// dla 10 MHz cykl = 0,1 us
// dla 4 MHz cykl = 0,25 us
for(t = 0; t < t_us; t++); // 13 cykli
}
void send_instr(uint8_t data, uint32_t time_us)
{
//data = data << 2; // Wyjścia LCD zaczynają się od pinu PB2
LCD = data;
del_us(1); // minimalny czas 140 ns do ustalenia stanów
set_bit(LCD, LCD_E); // włącz zbocze strobujące
del_us(1); // czas trwania sygnału E min 450 ns oraz
clr_bit(LCD, LCD_E); // zapis danych
del_us(1); // min 20 ns na podtrzymanie po opadnięciu zbocza E
del_us(time_us); // czas na wykonanie instrukcji
}
void lcd_init()
{
del_us(1); // min 15ns na inicjalizacje LCD
LCD_DIR = 255;
for(uint8_t i = 0; i < 3; i++)
send_instr(48, 4100);
send_instr(32, 40); // interfejs 4-bitowy
send_instr(32, 1); // set function
send_instr(128,40); // 2 linie, matryca 5x7
send_instr(0, 1);
send_instr(128,40); // tryb: wyłącz wyśw., kursor, miganie
send_instr(0, 1); // clear
send_instr(16, 1640);
send_instr(0, 1); // tryb wprowadzania
send_instr(96, 40);
send_instr(0, 1); // włącz z mryganiem
send_instr(240, 40);
}
int main()
{
lcd_init();
}
Sterowanie ma być 4-bitowe, wyswietlacz 16x2
Mikrokontroler to atmega162
wie ktoś co jest nie tak? ja już nie wiem.....
pozdrawiam
Poprawiłem tytuł:
https://www.elektroda.pl/rtvforum/topic1015361.html
[c_p]