0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 2
1

Pinboard2 & LCD

23.12.2010, 00:18. Показов 88642. Ответов 133
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
опщем хз, проблема это или чтото другое, но..
воткнул всё верно
PB0 - E (6)
PB1 - RW (5)
PB2 - RS (4)
PB4 - DB4 (11)
PB5 - DB5 (12)
PB6 - DB6 (13)
PB7 - DB7 (14)
от дисплэя ожыдал приветствия, а он прям так сразу "Нажата кнопка C - Номер кнопки"%
када кручу потенциометр, дисплей показывает значения, но както уж.. "долесекундно"
ну не исключено канешно что у меня руки кривые.. но тада бы вашпе ничего не работало, верно?)
диагностируйте поведение платы пожалуйста)
прошыв разумецца Dimo16-RTOS.hex
БЗЫЖ: и вот кстате в документации пишецца што один потенциометр со свободным ходом, у мя оба с упором..%
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2010, 00:18
Ответы с готовыми решениями:

Pinboard2 и JTAG
Уже порядка часа не могу подрубить JTAG, а точнее заставить его работать. Пытаюсь подключить...

PinBoard2 + Linux
Добрый день, подскажите почему не получается прошить первый файл MainDimo16-RTOS.hex? ОС Ubuntu...

Pinboard2 и ЖК WG12864
Здравствуйте достался мне дисплейчик WG12864K-YYH-VN захотелось поиграться, посмотрел статью Ди....

Pinboard2 Тускло горит диод на 2nd_pwr
И это при отключенной кнопке 2nd_pwr. Бывает помигивает, бывает не горит. При нажатии на кнопку...

133
butshirboy3000
16.03.2014, 17:34 121
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от OtyxPM
Цитата Сообщение от butshirboy3000
то есть с уровнями нормально? от STM работать должно? я был уверен, что на плате уже все продумано)
Да, нормально, такое подключение текстовых LCD к STM32 уже обсуждалось на форуме. Я сам подключал к F4-Dyscovery (там напряжение питания МК всего 3.0V, поэтому логические уровни даже ниже, чем стандартные 3.3V).

Значит логично допустить, что на железо грешить не надо и проблема в моем коде.
Я инициализацию делал прямо по даташиту, ни шагу в сторону. Много где говорят "проверь тайминги", но у меня функция Delay работает корректно(проверял на диодах, моргают с нужной частотой).
Чего я не замечаю?
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.03.2014, 18:19 122
Цитата Сообщение от butshirboy3000
Чего я не замечаю?
Я бы вот это условие убрал и всю ветвь "else" к нему:
if (Data!=0)

И в инициализации дисплея одного этого не достаточно:
Enter_4bits_LCD(0x03);
Должно быть передано четыре ниббла - 0x03, 0x03, 0x03, 0x02, прежде чем приступать к передаче полных байтов в LCD. После первого ниббла - задержка согласно даташиту (не менее 4.1 мс).

Возможно, и другие ошибки в коде есть. Если делаете принципиально сами по даташиту - так хотя бы читайте этот даташит весь, а не через абзац ;-) Диаграмма инициализации - must read.
0
butshirboy3000
16.03.2014, 19:26 123
Возможно, и другие ошибки в коде есть. Если делаете принципиально сами по даташиту - так хотя бы читайте этот даташит весь, а не через абзац ;-) Диаграмма инициализации - must read.
По поводу ветки (Data!=0)
Без нее у меня возникали трудности при передаче некоторых чисел, у которых старшая тетрада оказывалась равно нулю. Этот ноль функция SetByts воспринимала как неправильный параметр и вываливалась в бесконечный цикл(типа защита от неправильных параметров в учебном курсе у DI Halta подсмотрел).
Код
#ifdef  USE_FULL_ASSERT
/**
* @brief  Reports the name of the source file omd the source line number
*         where the ossirt_param error has occurred.
* @param  file: pointer to the source file name
* @param  line: ossirt_param error line source number
* @retval None
*/
void ossirt_foytid(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name omd line number,
ex: prymtf("Wrong parameters value: file %s on line %drn", file, line) */

/* Infymite loop */
GPIO_SetByts(GPIOB, GPIO_Pin_7);
while (1)
{
}
}
#endif
Понятное дело эту диаграмму инициализации я прочитал весьма внимательно. Но там ни слова не было про эти четыре ниббла!
по крайней мере в даташите на wh1602b-ygk-ctk
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.03.2014, 20:13 124
Цитата Сообщение от butshirboy3000
По поводу ветки (Data!=0)
Без нее у меня возникали трудности при передаче некоторых чисел, у которых старшая тетрада оказывалась равно нулю. Этот ноль функция SetByts воспринимала как неправильный параметр и вываливалась в бесконечный цикл
Вы же понимаете, что иногда надо передавать данные, равные нулю? А у Вас не только исключена такая возможность, но ещё и передаётся какой-то левак вместо нуля (т.к. строб "E" генерируется)! Используйте более универсальную функцию, чтобы могла передать любое значение.

Цитата Сообщение от butshirboy3000
Понятное дело эту диаграмму инициализации я прочитал весьма внимательно. Но там ни слова не было про эти четыре ниббла!
по крайней мере в даташите на wh1602b-ygk-ctk
Не знаю, что написано в даташите на конкретно этот LCD (конкретные "листовки" иногда бывают слишком краткими), сверьтесь с первоисточниками - документацией на HD44780, KS0066 и т.п.аналоги.
И по форумам (не только "STM32", но и "AVR", "SM8", ...) сайта посмотрите про инициализацию таких дисплеев - таких тем было очень много.
0
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
16.03.2014, 22:27 125
Цитата Сообщение от DY HOTT
А дисплею уровней STM32 хватит? Он то пятивольтовый, а стмка 3.3
Хватит однозначно, работает просто отлично :-)
0
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
16.03.2014, 22:35 126
К сообщению добавил архив, для работы с дисплеем используется 4-х битная шина, подключение следующее:
Используется только порт A, пин от дисплея RW подключен к земле, остальные так:
LCD_RS - GPIO_Pin_0
LCD_EN - GPIO_Pin_1
LCD_DB4 - GPIO_Pin_2
LCD_DB5 - GPIO_Pin_3
LCD_DB6 - GPIO_Pin_4
LCD_DB7 - GPIO_Pin_5

При отладке основной проблемой было то что при создании по даташиту таймингов и команд, дисплей работал через раз, но методом тыка подобрал режим при котором вероятность работы при любом включении стала 100%, если нужно могу сделать осциллограммы :-) всех пинов :-)
Проект сделан в кокосе.

[102.21 Кб]
0
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
17.03.2014, 09:38 127
В моменте инициализации дисплея у меня в файле LCD.c есть такой код
lcd_send(0b00100000,COMMAND);
LCDStrobi(); <----- очень важная штука
Delay_ms(5);
lcd_send(0b00101000,COMMAND);
Delay_ms(40);

В даташите написано что нужно установить на пинах данных 0010 сделать строб пина ENABLE, потом установить 0000 снова сделать строб, потом снова установить 0010 и сделать строб, и так далее, но инициализация не всегда проходила, но как только добавил ещё один строб, выделил в коде выше, так дисплей стал отлично инициализироваться. Судя по всему таким образом все-таки удается его переключить в 4-х битный режим... :-)
0
dymmko
17.12.2014, 17:39 128
Дабы не плодить темы.

Начались глюки PB2r2. Модуль с мегой16. Вчера написал хело-ворлд для LCD-экрана (на асме, простыню в столбик), все работало. Сегодня написал библиотеку под дисплей, тоже все работало, до недавних пор. На ровном месте, после очередного включения платы работать перестало. Дисплей не заводится ни с библиотекой, ни с простыней.

Решил зашить (проверить контроллер) одну из старых программ со светодиодами, и заметил такую вещь. При НАЖАТОМ РЕСЕТЕ МК на порте А происходит полный фарш. на РА0 - 3.7 В, на РА1 - прямоугольный импульс переменной частоты. Через раз при старте МК появлялось лог.1 на РА1 и РА2. Порт А никак не задействован в работе с ЛСД.

Заменил контроллер, дважды. У всех трёх всё одно и то же - ЛСД не заводится, на порте А - фарш (даже со стертым флешем и нажатым ресетом). Повторюсь - и хело-ворлд в столбик, и библиотека на ЛСД работали.

Что такое происходит? Куда смотреть? Сам, боюсь, не разберусь.
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
17.12.2014, 17:49 129
Как подключен дисплей?
0
dymmko
17.12.2014, 18:01 130
D0-D7 => PC0-PC7, PB0 => RS, PB1 => RW, PB2 => E.

Боюсь, что дисплей вообще не при делах окажется.

В аттаче файлы хело-ворлда. Проверьте кто-нибудь на работоспособность. Писалось для 8 МГЦ

[2.64 Кб]
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
17.12.2014, 18:20 131
На порт выведен JTAG. Он отключен? Просто у меня был похожий случай. Я что-то отлаживал, потом порт перестал отвечать. Я думал, что спалил его. А причина была проста - нужно в программе его отключать, установив соответствующий бит регистра. Ну или через фьюзы. Как только добавил команду отключения JTAG, то сразу все заработало как раньше.
0
dymmko
17.12.2014, 18:39 132
Fuse D9 E4. 11[jtag] 0[spien] 11001 11100100. Отключен. Я их не менял. Снял МК с модуля. на пине РА0, все равно ~2 вольта висит.

Проверьте портянку кода кто-нибудь на железе.
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
18.12.2014, 18:11 133
Ну так пин идет на переменник и джампер по умолчанию стоит. С него и идут эти напруги.
0
dymmko
19.12.2014, 15:51 134
В итоге заменил индикатор, работает.
19.12.2014, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2014, 15:51
Помогаю со студенческими работами здесь

Pinboard2, I2C, правильность соединений (вопросец)
Прикладываю картинку. Для удобства объяснений, все необходимые пины пометил красными цифрами,...

LCD распиновка
Нашел в горах своего железа кусок платы с маленьким дисплеем. От куда плата - не знаю, на самом...

FSMC LCD
Здаров форумчане. Дела такие. Какой из следующих экранов можно 100% подрубить на FSMC? url1...

Кодировка LCD дисплея
Привет. Какая кодировка на русские буквы у LCD дисплея, который с демоплатой идет ? Голову...

Способ крепления LCD
Во первых извиняюсь что вопрос такой глупый. Есть некое устройство, ...

LCD дисплей автономно
Я с дисплейчиками никогда не работал отсюда и вопрос. Можно ли подключить дисплей без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
134
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru