Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

ATmega16 и LCD дисплей- какво бъркам?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13518
Страница 1 от 1

Автор:  Gioshev [ Пет Яну 16, 2015 1:09 pm ]
Заглавие:  ATmega16 и LCD дисплей- какво бъркам?

Здравейте,
от 1 седмица се мъча да "подкарам" LCD дисплей с един ATmega16, но без успех. Все още съм начинаещ и за това използвам готова програма от нета. Ето я:

// Program to display a single alphabet ‘A’ on LCD
/*
LCD data transfer through 8 bit mode
Writing a single letter A on LCD

LCD DATA port----PORT A
ctrl port------PORT B
rs-------PB0
rw-------PB1
en-------PB2
*/
#define F_CPU 4000000UL
#include<avr/io.h>
#include<util/delay.h>


#define LCD_DATA PORTA // LCD data port
#define ctrl PORTB
#define en PB2 // enable signal
#define rw PB1 // read/write signal
#define rs PB0 // register select signal

void LCD_cmd(unsigned char cmd);
void init_LCD(void);
void LCD_write(unsigned char data);

int main()
{
DDRA=0xff; // making LCD_DATA port as output port
DDRB=0x07; // making signal as out put
DDRC=0xFF;
PORTC=0xFF; // индикация, че микроконтролера работи
_delay_ms(500);
PORTC=0x00;
_delay_ms(500);
PORTC=0xFF;
_delay_ms(500);
PORTC=0x00;
_delay_ms(500);
init_LCD(); // initialization of LCD
_delay_ms(50); // delay of 50 milli seconds
LCD_write('A'); // call a function to write A on LCD
PORTC=0xFF; // индикация, че микроконтролера работи
_delay_ms(500);
PORTC=0x00;
_delay_ms(500);
PORTC=0xFF;
_delay_ms(500);
PORTC=0x00;
_delay_ms(500);
return 0;
}

void init_LCD(void)
{
LCD_cmd(0x38); // initialization of 16X2 LCD in 8bit mode
_delay_ms(1);

LCD_cmd(0x01); // clear LCD
_delay_ms(1);

LCD_cmd(0x0E); // cursor ON
_delay_ms(1);

LCD_cmd(0x80); // ---8 go to first line and --0 is for 0th position
_delay_ms(1);
return;
}

void LCD_cmd(unsigned char cmd)
{
LCD_DATA=cmd;
ctrl =(0<<rs)|(0<<rw)|(1<<en); // RS and RW as LOW and EN as HIGH
_delay_ms(1);
ctrl =(0<<rs)|(0<<rw)|(0<<en); // RS, RW , LOW and EN as LOW
_delay_ms(50);
return;
}

void LCD_write(unsigned char data)
{
LCD_DATA= data;
ctrl = (1<<rs)|(0<<rw)|(1<<en); // RW as LOW and RS, EN as HIGH
_delay_ms(1);
ctrl = (1<<rs)|(0<<rw)|(0<<en); // EN and RW as LOW and RS HIGH
_delay_ms(50); // delay to get things executed
return ;
}

Явно бъркам нещо с фусовете, но как ли не ги въртях (използвах и калкулатора). На порт "C" съм сложил светодиод, който индикира, че все пак контролера работи. Програмата е взета от тук: http://www.engineersgarage.com/embedded/avr-microcontroller-projects/interface-lcd-circuit Увеличавах и времената между различните команди, пробвах и с други готови кодове, но пак без успех. Дисплеите са 2бр. C16217A и са чисто нови. Вече нямам идеи, моля помагайте!

Автор:  ike [ Пет Яну 16, 2015 2:09 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Купи си това: http://www.ebay.com/itm/1P-HOT-USB-Nano ... 3f41c2b5ef
И пробвай с него.
Иначе проблема може да е в:
1. фусовете
2. самата програма
3. свързването на ATmega16 (кондензатори, ресет, кварц ...)
4. свързването на LCD-то.
5. Контраста на LCD-то.
6. инициализацията на LCD-то.
7. нито едно от изброените.

Автор:  Gioshev [ Пет Яну 16, 2015 2:41 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Иначе проблема може да е в:
1. фусовете
2. самата програма // Пробвал съм с различни готови програми
3. свързването на ATmega16 (кондензатори, ресет, кварц ...) // Използвам вътрешния RC осцилатор, но съм пробвал и с различни кварцове.
4. свързването на LCD-то. // Със сигурност проблема не е тук
5. Контраста на LCD-то. // Използвам тример 10k ohm м/у +5v и GND
6. инициализацията на LCD-то.
7. нито едно от изброените.

Захранването е стабилизирано, но както казах използвам светодиод, който индикира, че контролера работи.
Възможно ли е LCD драйвера да е различен? Доколкото знам има стандарт въведен от Hitachi

Автор:  ike [ Пет Яну 16, 2015 2:58 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Има стандарт но всеки си го тълкува както си знае. Инициализацията на новите LCD-та се различава малко от на Hitachi и не са съвместими.

Автор:  Cino [ Пет Яну 16, 2015 3:07 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Погледни инициализацията от Ардуино библиотеките за HD44780
ако дисплея е такъв де.
Реда и таймингите на командите за 8-бит режим.

https://code.google.com/p/arduino/sourc ... rystal.cpp

Автор:  ike [ Пет Яну 16, 2015 3:23 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Няма смисъл от 8 битов режим. Да скача направо на 4 битов.

Автор:  Gioshev [ Пет Яну 16, 2015 8:31 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Ще купя дисплей, който да съм сигурен че е с този HD44780 драйвер. Силно се надявам причината да е в него. До няколко дена ще пиша за резултата.

Автор:  CarBeta [ Пет Яну 16, 2015 9:37 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Инициализацията нещо не ми харесва, вижда ми се малко постна. Първоначално имаше няколко команди дето искаха по 5 милисекунди пауза. Това по спомен де, нямам пред мен таблицата да погледна.

Автор:  vgeorgiev [ Пет Яну 16, 2015 10:36 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

цък

Автор:  nobodyshadow [ Пет Яну 16, 2015 11:06 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Я пробвай да замениш твоята функция с тази.
Код:
void init_LCD(void)
{
LCD_cmd(0x38);
_delay_ms(50);
LCD_cmd(0x38);
_delay_ms(10);
LCD_cmd(0x38);
_delay_ms(10);
LCD_cmd(0x6);
_delay_ms(10);
LCD_cmd(0x14);
_delay_ms(10);
LCD_cmd(0xf);
_delay_ms(10);
LCD_cmd(0x1);
_delay_ms(10);
}

Автор:  Gioshev [ Нед Яну 18, 2015 11:32 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Най после успях. Използвах линка на колегата vgeorgiev. Благодаря на всички които се опитахте да помогнете. Форума е интересен, надявам се и аз скоро да успея да помагам със съвети :)

Автор:  Реконструктор [ Пон Яну 19, 2015 9:41 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

ike написа:
Има стандарт но всеки си го тълкува както си знае. Инициализацията на новите LCD-та се различава малко от на Hitachi и не са съвместими.


Да, и аз съм забелязал, че има девиации. Фактически всеки производител си има некви особености. Като цяло съм на принципа - слагам стандартния драйвер и купувам LCD-та докато не попадна на такова, дето върви с драйвера. :)

Автор:  bobihot [ Сря Яну 21, 2015 6:14 pm ]
Заглавие:  Re: ATmega16 и LCD дисплей- какво бъркам?

Аз си ги писах процедурите, но за х52 (АТ8052)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/