Например TDA7294

Форум РадиоКот • Просмотр темы - hd44780(wh1602b) AVR Си, проблема схожу с ума
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 03:36:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Ср май 16, 2012 17:31:37 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Чт апр 01, 2010 14:14:55
Сообщений: 271
Рейтинг сообщения: 0
Просьба к админам, не перенаправляйте на тему viewtopic.php?f=20&t=584&p=1272238&hilit=hd44780#p1272238 там черт ногу сломит, и я там такой проблемы не нашёл.

Программирую AVR не первый год, работал с кучей lcd... Взял wh1602b, перечитал всю документацию и примеры. С 8 битной шиной запустился с первого раза, вывел две строки поигрался все работает отлично!!! потом понадобились ножки хотел переподключить контроллер на 4 битную шину и начались чудеса, дисплей выводит символы но криво и где ему хочется!!!
Второй день схожу с ума, перепробовал кучу вариантов может последний и не самый удачный, пробовал менять задержки и что я только не пробовал все зря... :cry:

один и тот же код на 8 бит работает на 4 с поправками инициализации и подстановки не работает !!!

Помогите схожу с ума!!!


Вложения:
Комментарий к файлу: а вот и код
_Atmega32_hd44780_16_2.c [1.88 KiB]
Скачиваний: 652
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Ср май 16, 2012 18:51:13 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
Скачайте библиотеку с http://jump.to/fleury для лцд и сравните со своей.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Ср май 16, 2012 19:18:03 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср июн 15, 2011 02:22:15
Сообщений: 73
Рейтинг сообщения: 0
Были у самого такие проблемы с этим дисплеем.

Библиотека написана под Микропаскаль, но сложного ничего нету. Пробуй

Код:
//******************************************************************
//**** Functions for LCD WH1602 teste on WH1602A-NGG-CT (hd44780)
//******************************************************************
//Controller:   AVR
//Compiler:     mikroPascal PRO for AVR v.5.6.0
//Author:   Vladimir Bejevetc (Ukraine)
//      www.voov.com.ua
//ver:          1.0
//
//******************************************************************

unit lcd1602;

const

  LCD_FIRST_ROW = 128;
  LCD_SECOND_ROW = 192;
  LCD_CLEAR = 1;
  LCD_RETURN_HOME = 2;
  LCD_CURSOR_OFF = 12;
  LCD_UNDERLINE_ON = 14;
  LCD_BLINK_CURSOR_ON = 15;
  LCD_MOVE_CURSOR_LEFT = 16;
  LCD_MOVE_CURSOR_RIGHT = 20;
  LCD_TURN_ON = 12;
  LCD_TURN_OFF = 8;
  LCD_SHIFT_LEFT = 24;
  LCD_SHIFT_RIGHT = 28;

procedure lcd_init;
procedure lcd_cmd(p: byte);
procedure lcd_dat(p: byte);
procedure lcd_goto_cursor(row, column: byte);
procedure lcd_out(x, y: byte; msg: ^byte; max_len: byte);
procedure lcd_out_current_pos(msg: ^byte; max_len: byte);
procedure lcd_out_const(x, y: byte; const msg: ^byte; max_len: byte);
procedure lcd_out_const_current_pos(const msg: ^byte; max_len: byte);

var
  lcd_port: byte; sfr; external;
  lcd_ddr: byte;  sfr; external;

implementation

const
  RS = 0;
  EN = 1;

procedure lcd_init();
begin
  lcd_ddr := 0xFF; // Порт на выход.
  delay_ms(100);
  lcd_cmd(0x02); // Шина 4 бит. .
  delay_ms(10);
  lcd_cmd(0x28); // Шина 4 бит, 2 строки, 5*8 пикселей.
  delay_ms(10);
  lcd_cmd(LCD_CURSOR_OFF); // Включить отображение, выключить курсор.
  lcd_cmd(LCD_CLEAR); // Очистить дисплей.
end;

procedure lcd_cmd(p: byte);
begin
  lcd_port := (p and 0xF0) or (1 shl EN);
  delay_1ms();
  lcd_port := lcd_port and not (1 shl EN);
  delay_1ms();
  lcd_port := ((p shl 4) and 0xF0) or (1 shl EN);
  delay_1ms();
  lcd_port := lcd_port and not (1 shl EN);
  delay_1ms();
end;

procedure lcd_dat(p: byte);
begin
  lcd_port := ((p and 0xF0) or (1 shl RS)) or (1 shl EN);
  delay_1ms();
  lcd_port := lcd_port and not (1 shl EN);
  delay_1ms();
  lcd_port := ((p shl 4) and 0xF0) or (1 shl RS) or (1 shl EN);
  delay_1ms();
  lcd_port := lcd_port and not (1 shl EN);
  delay_1ms();
end;

procedure lcd_goto_cursor(x, y: byte);
begin
  case y of
    1: y := LCD_FIRST_ROW;
    2: y := LCD_SECOND_ROW
  else
    y := LCD_FIRST_ROW;
  end;
  y := y + x - 1;
  lcd_cmd(y);
end;

procedure lcd_out(x, y: byte; msg: ^byte; max_len: byte);
var
  i: byte;
begin
  lcd_goto_cursor(x, y);
  i := 0;
  while (msg^ <> 0) and (i < max_len) do
  begin
    lcd_dat(msg^);
    inc(msg);
    inc(i);
  end;
end;

procedure lcd_out_current_pos(msg: ^byte; max_len: byte);
var
  i: byte;
begin
  i := 0;
  while (msg^ <> 0) and (i < max_len) do
  begin
    lcd_dat(msg^);
    inc(msg);
    inc(i);
  end;
end;

procedure lcd_out_const(x, y: byte; const msg: ^byte; max_len: byte);
var
  i: byte;
begin
  lcd_goto_cursor(x, y);
  i := 0;
  while (msg^ <> 0) and (i < max_len) do
  begin
    lcd_dat(msg^);
    inc(msg);
    inc(i);
  end;
end;

procedure lcd_out_const_current_pos(const msg: ^byte; max_len: byte);
var
  i: byte;
begin
  i := 0;
  while (msg^ <> 0) and (i < max_len) do
  begin
    lcd_dat(msg^);
    inc(msg);
    inc(i);
  end;
end;

end.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Ср май 16, 2012 22:36:50 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Чт апр 01, 2010 14:14:55
Сообщений: 271
Рейтинг сообщения: 0
спасибо !!!
Если кому то пригодится то ответ таиться в библиотеки вежливо предложной vovksextra

lcd_cmd(0x02); // Шина 4 бит. . --- вот так работает

а я пробовал посылать 0x2C и 0x28 для перевода на 4 битную шину - так советовали во многих примерах, но так не работает!!!

я так понял что после скармливания ему $2, или 0010 в бинаре, контроллер сразу переходит на 4 бит шину и последующие пол байта уже не принимаются должным образом а наоборот сбивают(сдвигает) все последующею команды и данные на эти пол байта, и получается что не получается :))

:music:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 04:45:03 
Встал на лапы

Карма: -1
Рейтинг сообщений: 4
Зарегистрирован: Пн мар 26, 2012 05:25:06
Сообщений: 106
Рейтинг сообщения: 3
Плохо вы читали документацию, как и тот чьими исходниками вы пользуетесь.
Порядок инициализации приведен в DS на HD4480, например тут http://www.adafruit.com/datasheets/HD44780.pdf стр. 46


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 09:24:50 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср июн 15, 2011 02:22:15
Сообщений: 73
Рейтинг сообщения: 0
Совесть писал(а):
Плохо вы читали документацию, как и тот чьими исходниками вы пользуетесь.


Плохо делать глупые комментарии, на то то что работает в железе уже давно. И с чем были проблемы, которые устранены.

Речь шла о конкретном LCD и стандартная процедура инициализации на нем работать не хотела.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 09:45:12 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 8
Зарегистрирован: Пт июн 20, 2008 09:38:05
Сообщений: 127
Откуда: Харьков
Рейтинг сообщения: 0
vovksextra писал(а):
Плохо делать глупые комментарии, на то то что работает в железе уже давно. И с чем были проблемы, которые устранены.

Вы очень зря придераетесь. Человек абсолютно верно подметил, что даташит вы не читали. Там черным по белому написано, что для верной инициализации 4-х битного режима необходимо трижды повторить одну и ту же последовательность. И только после этого уже контроллер экрана будет верно воспринимать посылаемые ему комманды


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 10:41:26 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср июн 15, 2011 02:22:15
Сообщений: 73
Рейтинг сообщения: 0
Всегда удивлялся такого рода постам. К вам человек обратился за помощью - так помогите ему. Читать даташит умеют все, а понять что как делать только некоторые. Как раз таки я его и читал и делал все как положено, но устройство отказывалось работать. Я привел рабочий и проверенный код, а Вы мне говорите что так работать не будет.....Пля....

Купите здесь LCD и запустите его при помощи даташита, на который вы ссылаетесь - вот тогда все сами и поймете.

PS
В данном LCD контроллер используется S6B0066U

Полным аналогом данного контроллера являются следующие контроллеры:
* HD44780
* KS0066

Аналог аналогом , а даташит у него свой:

http://www.picbasic.ru/_fr/3/S6B0066U.pdf

И строка инициализации (стр.27 )отличается от HD44780

По-этому и назвал комментарий глупым.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 11:25:56 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 8
Зарегистрирован: Пт июн 20, 2008 09:38:05
Сообщений: 127
Откуда: Харьков
Рейтинг сообщения: 0
vovksextra писал(а):
Всегда удивлялся такого рода постам. К вам человек обратился за помощью - так помогите ему. Читать даташит умеют все, а понять что как делать только некоторые. Как раз таки я его и читал и делал все как положено, но устройство отказывалось работать. Я привел рабочий и проверенный код, а Вы мне говорите что так работать не будет.....Пля....

ВЫ верно говрите. Но упускаете один момент. Индикатор индикатору рознь. однажды я написал свою первую либу по работе с индикатором Wh1602D и был доволен как слон, решив, что теперь я всегда смогу использовать эти индикаторы аж бегом. Прошло немного времени, в очередном проекте нужно было подключить индикатор и оп ля - Не работает. Инициализация проходит через раз. Психовал я и ломал голову не один день в поисках проблемы. И только в конце концов разглядывая инициализацию, понял, что инциализировать его нужно не 1 раз...
Это я всё к тому, что отлично работающий код на 1 изделии, не гарантирует его 100% исправность на серии, а значит, что работало у одного - не факт, что так же хорошо сработает у другого.
Вы дали полезный совет человеку, я же хотел уточнить 1 момент, из-за которого, может вылезти баг. Мир?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 11:31:55 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср июн 15, 2011 02:22:15
Сообщений: 73
Рейтинг сообщения: 0
Shapa писал(а):

Вы дали полезный совет человеку, я же хотел уточнить 1 момент, из-за которого, может вылезти баг. Мир?


Я за мир во всем мире).

PS.

Предыдущим постом выложил правильный даташит


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт май 17, 2012 12:24:04 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Чт апр 01, 2010 14:14:55
Сообщений: 271
Рейтинг сообщения: 0
Shapa писал(а):
vovksextra писал(а):
Плохо делать глупые комментарии, на то то что работает в железе уже давно. И с чем были проблемы, которые устранены.

Вы очень зря придераетесь. Человек абсолютно верно подметил, что даташит вы не читали. Там черным по белому написано, что для верной инициализации 4-х битного режима необходимо трижды повторить одну и ту же последовательность. И только после этого уже контроллер экрана будет верно воспринимать посылаемые ему комманды


во первых посмотрите код там трижды идет команда инициализации и выдержанными интервалами
во вторых vovksextra огромное спасибо за помощь, а все остальные кто решил блеснуть умом после того ка вопрос уже решился не вызывают много уважения так как для этого много ума не нужно, я читал всё в том числе и даташит, и в 8 битном режиме все заработало за 15 мин, вопрос был в 4 битном режиме, там скользко с тем что по началу шлешь контроллеру 4 бита а он принимает команду как по 8 битной шине пока не схавает каманду $C, а по этому нельзя слать команды 0xC_.......


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Ср авг 29, 2012 21:19:51 
Потрогал лапой паяльник

Карма: 3
Рейтинг сообщений: 18
Зарегистрирован: Вт мар 13, 2012 07:24:30
Сообщений: 300
Рейтинг сообщения: 0
Доброго времени суток всем! Я тоже не сразу запустил 4-х битный режим, пришлось помучаться. Если кому ещё нужно - поделюсь своим вариантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт авг 30, 2012 11:43:49 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср июн 15, 2011 02:22:15
Сообщений: 73
Рейтинг сообщения: 0
lazer писал(а):
Доброго времени суток всем! Я тоже не сразу запустил 4-х битный режим, пришлось помучаться. Если кому ещё нужно - поделюсь своим вариантом.


Что значит нужно? Давайте и свой вариант )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Вс сен 02, 2012 13:44:24 
Потрогал лапой паяльник

Карма: 3
Рейтинг сообщений: 18
Зарегистрирован: Вт мар 13, 2012 07:24:30
Сообщений: 300
Рейтинг сообщения: 0
Выкладываю свой вариант общения контроллера с дисплеем по 4 линиям. Учился по книге Вольфганга Трамперта "AVR-RISC микроконтроллеры", откуда и взяты подпрограммы, которые переделал под 4-х битный режим. Сейчас вот работаю над валкодером...


Вложения:
44780_4.asm [9.57 KiB]
Скачиваний: 554
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Вс сен 02, 2012 14:18:07 
Потрогал лапой паяльник

Карма: 3
Рейтинг сообщений: 18
Зарегистрирован: Вт мар 13, 2012 07:24:30
Сообщений: 300
Рейтинг сообщения: 0
Еще хотелось бы добавить к вышесказанному: в приложенной программе сигналы управления индикатором и данные передаются через разные порты ATMEL. Так удобнее для написания программы, но не рационально в плане использования портов. Поэтому, потом я изменил программу и вывел все сигналы для индикатора через один порт. Надо сказать, пришлось попотеть!!! Все получилось, но скорость работы стала явно ниже, т.е. при тактовой частоте 1МГц индикатор ничего не показывал. И лишь при снижении ее до 400кГц все было нормально. Для сравнения: в 8-битном режиме все работало и при 8МГц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт окт 04, 2012 07:59:26 
Открыл глаза

Зарегистрирован: Чт мар 22, 2012 09:14:18
Сообщений: 51
Откуда: Липецк
Рейтинг сообщения: 0
Здравствуйте. Осваиваю WH1602B-YYH-CTK на HD44780, нашел на мой взгляд хороший драйвер, для работы с ним http://we.easyelectronics.ru/AVR/hd44780-biblioteka-dlya-avr-gcc.html.
Но мне стало интересно, а можно сделать, чтобы одна строка прокручивалась, а на второй оставалось статичное сообщение. В инете погуглив почти не встретил чтобы кто-то задавался
этим вопросом, а строки если прокручиваются, то обе одновременно, если статичное сообщение, то на обе строки тоже. Если кто видел, или делал подобное - напишите. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт окт 04, 2012 09:16:02 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср июн 15, 2011 02:22:15
Сообщений: 73
Рейтинг сообщения: 0
EmDmAl писал(а):
.....а можно сделать, чтобы одна строка прокручивалась, а на второй оставалось статичное сообщение. В инете погуглив почти не встретил чтобы кто-то задавался
этим вопросом, а строки если прокручиваются, то обе одновременно, если статичное сообщение, то на обе строки тоже. Если кто видел, или делал подобное - напишите. :)......


Аппаратно это сделать нельзя. Программно - очень просто. Выводим верхнюю строчку, а нижнюю выводим в цикле.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Чт окт 04, 2012 09:34:24 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 3
Ничего сложного. Т.к. контроллер дисплея не содержит таких встроенных функций, то нужно объявить текстовую строку/массив над которой мы будем издеваться. Данный массив должен с определенной переодичностью(например по таймеру) передаваться в дисплей чтобы обновить информацию. Примерно так:
char text[16*2]="наша строка";
lcd_puts(text);
while(1){
//здесь смещаете напр. первые 16 индексов
text[15]=text[0];
for(i=0; i<15; i++)
{
text[i]=text[i+1];
}
lcd_puts(text);//обновить картинку дисплея
delay_ms(1000);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Пт окт 12, 2012 10:17:23 
Открыл глаза

Зарегистрирован: Чт мар 22, 2012 09:14:18
Сообщений: 51
Откуда: Липецк
Рейтинг сообщения: 0
С прокруткой разобрался, спасибо за помощь. А не поможите как вывести длинное сообщение в одной строке(скажем строку в 100 символов). Я накидал код в котором сначало разбиваю строки на двухмерный массив, в котором 1ый индекс - номер массива состоящего из 40 символов.Но в него заносятся непонятно почему пробелы и только где-то в конце первая буква Д
Код:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <string.h>
#include "lcd-library.h"

   
int main(void)
{
   lcdInit();//ОБЯЗАТЕЛЬНО
   lcdClear();//ОБЯЗАТЕЛЬНО
   unsigned char myString[] = "Длина этого сообщение 100 символов, для тестирования вывода большой строки более 40 символов!!!!!!!";   
   unsigned int myArray1[5][40];//Объявляю 2мерный массив из 5 массивов по 40 символов
   unsigned char b = 0;
   unsigned char i = 0;
   lcdGotoXY(0, 0);//Переходим на начало верхней строки
   for (unsigned char k = 0; k < 99; k++){
      myArray1[b][i] = myString[k];//Заполняем массив значениями
      i++;
      if (i == 40){//Если конец массива, то переходим к следующему
         i = 0;
         b++;
      }
   }
   lcdPuts(myArray1[0]);//Загружаем в lcd первый массив из 40ка символов
   //Теперь в myArray1 двумерный массив, с разбитой строкой, по 40 символов
   while(1)
    {
      lcdDisplayScroll(1, LCD_SCROLL_LEFT);//Прокручиваем на позицию влево
       _delay_ms(600);
   }
}


В итоге поидеи должно получится:
myArray1 = {"Длина этого сообщение 100 символов", "тестирования вывода большой строки более" , " 40 символов!!!!!!!"}
Или подскажите как можно подругому разбить массив на 40 символов каждый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hd44780(wh1602b) AVR Си, проблема схожу с ума
СообщениеДобавлено: Пт окт 12, 2012 19:15:48 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
Может я чего не понял, но зачем строку разбивать на двухмерный массив?
myString[0] - начало первого сообщения
myString[0+40] - второе сообщение и т.д.
Обращайтесь сразу к исходной строке и ничего не мудрите.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y