Отговори на тема  [ 13 мнения ] 
ATmega16 и LCD дисплей- какво бъркам? 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Яну 16, 2015 12:34 pm
Мнения: 4
Мнение 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 и са чисто нови. Вече нямам идеи, моля помагайте!


Пет Яну 16, 2015 1:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Яну 16, 2015 2:09 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

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

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


Пет Яну 16, 2015 2:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Има стандарт но всеки си го тълкува както си знае. Инициализацията на новите LCD-та се различава малко от на Hitachi и не са съвместими.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Яну 16, 2015 2:58 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Погледни инициализацията от Ардуино библиотеките за HD44780
ако дисплея е такъв де.
Реда и таймингите на командите за 8-бит режим.

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


Пет Яну 16, 2015 3:07 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Няма смисъл от 8 битов режим. Да скача направо на 4 битов.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Яну 16, 2015 3:23 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Яну 16, 2015 12:34 pm
Мнения: 4
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Ще купя дисплей, който да съм сигурен че е с този HD44780 драйвер. Силно се надявам причината да е в него. До няколко дена ще пиша за резултата.


Пет Яну 16, 2015 8:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Инициализацията нещо не ми харесва, вижда ми се малко постна. Първоначално имаше няколко команди дето искаха по 5 милисекунди пауза. Това по спомен де, нямам пред мен таблицата да погледна.


Пет Яну 16, 2015 9:37 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 06, 2013 10:25 am
Мнения: 197
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
цък


Пет Яну 16, 2015 10:36 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Окт 30, 2004 5:18 am
Мнения: 691
Мнение 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);
}

_________________
Не мога да знам всичко,а и не искам.Тогава би било прекалено лесно и скучно!


Пет Яну 16, 2015 11:06 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Яну 16, 2015 12:34 pm
Мнения: 4
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Най после успях. Използвах линка на колегата vgeorgiev. Благодаря на всички които се опитахте да помогнете. Форума е интересен, надявам се и аз скоро да успея да помагам със съвети :)


Нед Яну 18, 2015 11:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
ike написа:
Има стандарт но всеки си го тълкува както си знае. Инициализацията на новите LCD-та се различава малко от на Hitachi и не са съвместими.


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


Пон Яну 19, 2015 9:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Фев 13, 2013 3:35 pm
Мнения: 1803
Мнение Re: ATmega16 и LCD дисплей- какво бъркам?
Аз си ги писах процедурите, но за х52 (АТ8052)


Сря Яну 21, 2015 6:14 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 11 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни