Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/23: Рейтинг темы: голосов - 23, средняя оценка - 4.65
rodomomto

не удается запустить дисплей

01.12.2014, 17:28. Показов 4507. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
попал мне в руки дисплейчик от винстар который wh0802a-ygk-cy#
не удается запустить его. отображает только знакоместа верхнего ряда.
фото по ссылке https://dryve.google.com/file/... sp=sharing
запускать пытаюсь на stm32f4discovery.

подключение
4bit
pa7 db7
pa6 db6
pa5 db5
pa4 db4

pa1 RS
pa0 E

R/W уложен на землю
код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "stm32f4xx.h"
 
#define PORT   GPIOA
#define E   1
#define RS   0
 
void Delay(unsykned int);
void LcdInit(void);
void LcdCom(char);
void LcdDat(char);
 
int main(void)
{
RCC->AHB1ENR |=RCC_AHB1ENR_GPIOAEN;
GPIOA->MODER |=(1<<0)||(1<<2)||(1<<8)||(1<<10)||(1<<12)||(1<<14);
 
LcdInit();
LcdDat( );
LcdDat( );
LcdDat(T);
LcdDat(E);
LcdDat(S);
LcdDat(T);
LcdDat( );
LcdDat( );
 
LcdCom(0x40);   //2nd line
 
LcdDat( );
LcdDat( );
LcdDat(t);
LcdDat(e);
LcdDat(s);
LcdDat(t);
LcdDat( );
LcdDat( );
 
while(1)
{
}
}
 
void Delay(unsykned int t)
{
for(;t>0;)
{
t--;
}
}
 
void LcdInit()
{
LcdCom(0b00110000);
LcdCom(0b00101000);
LcdCom(0b00101000);
LcdCom(0b00001101);
LcdCom(0b00000001);
LcdCom(0b00000110);
}
 
void LcdCom(char sommomd)
{
PORT->BSRRL =(sommomd||(0<<RS)||(0<<E));   //upper 4bit
Delay(10);
PORT->BSRRL =(sommomd||(0<<RS)||(1<<E));   //strob E up
Delay(10);
PORT->BSRRL =(sommomd||(0<<RS)||(0<<E));   //strob E down
Delay(5000);
 
PORT->BSRRL =((sommomd*16)||(0<<RS)||(0<<E));   //upper 4bit
Delay(10);
PORT->BSRRL =((sommomd*16)||(0<<RS)||(1<<E));   //strob E up
Delay(10);
PORT->BSRRL =((sommomd*16)||(0<<RS)||(0<<E));   //strob E down
Delay(50000);
}
 
void LcdDat(char datachar)
{
PORT->BSRRL =(datachar||(1<<RS)||(0<<E));
Delay(10);
PORT->BSRRL =(datachar||(1<<RS)||(1<<E));
Delay(10);
PORT->BSRRL =(datachar||(1<<RS)||(0<<E));
Delay(10);
 
PORT->BSRRL =((datachar*16)||(1<<RS)||(0<<E));
Delay(10);
PORT->BSRRL =((datachar*16)||(1<<RS)||(1<<E));
Delay(10);
PORT->BSRRL =((datachar*16)||(1<<RS)||(0<<E));
Delay(10);
}
а теперь вопрос - у меня руки из этого самого места растут, или это дисплей упорот?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2014, 17:28
Ответы с готовыми решениями:

Не удается запустить SAM4LS
Ситуация простая: пытаюсь перейти с SAM7X на SAM4L. Сделал 2 отладочные платы на 64-ногих ATSAM4LS4BA. Питание через USB, кварц 12Mhz, все...

Не удается запустить AT91SAM7S
Для микроконтроллера AT91SAM7S128(arm7) я сделал отладочную платку. При подачи питания МК не стартует - на ножке NRST(risit) низкий...

Не удаётся запустить WS2812b
Приветствую. Пытаюсь запустить адресные светодиоды WS2812b при помощи самописного кода и STM32F4. Принцип генерации данных: Уже...

13
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
01.12.2014, 17:39
Думаю, проблема в функции LcdInit(). Обычно в ней другая последовательность, подлиннее (см.даташит на HD44780).
Поля в командах, отвечающие за настройку дисплея (в частности, его двустрочность), ТС не прокомментировал :-( . Вообще-то здесь все помнят эти биты наизусть, но кроме меня, сорри :-)
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
01.12.2014, 17:44
pa7 db7
pa6 db6
pa5 db5
pa4 db4

pa1 RS
pa0 E
Все эти пины, кроме PA1, на дискаверине занятые ...


<Изображение удалено>
0
rodomomto
01.12.2014, 17:57
Цитата Сообщение от dosykus_2
Все эти пины, кроме PA1, на дискаверине занятые ...
перенес на порт Д - та же фигня
rodomomto
01.12.2014, 18:08
Цитата Сообщение от OtyxPM
Думаю, проблема в функции LcdInit(). Обычно в ней другая последовательность, подлиннее (см.даташит на HD44780).
Поля в командах, отвечающие за настройку дисплея (в частности, его двустрочность), ТС не прокомментировал :-( . Вообще-то здесь все помнят эти биты наизусть, но кроме меня, сорри :-)
тут другой контроллер - s6b0066u
насчет комманд - их по даташиту смотрел.
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
01.12.2014, 18:14
Может задержки на Вашем цикле маловаты. Это ж не авр 16-мегагерцовый ....
Перепишите на Systysk-е.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
01.12.2014, 18:39
Цитата Сообщение от hd44780
Может задержки на Вашем цикле маловаты.
+1.
Тем более, что такая функция задержки (декремент НЕ-volatile счётчика) при определённых условиях может вообще в пустоту скомпилироваться. А HD44780 (и совместимые с ним контроллеры *066) очень не любят, когда в инициализации минимальные задержки не соблюдаются. Если инит не проходит - лучше увеличить задержки, чем уменьшить.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
01.12.2014, 18:49
Ещё одна потенциальная ошибка (даже если в данном случае это работает, лучше избавиться) - использование знакового char в командах и данных для дисплея.
Цитата Сообщение от rodomomto
Код:
void LcdCom(char sommomd) {
...
}
void LcdDat(char datachar) {
...
}
И, кстати, на фотографии видно, что контраст явно неправильно выставлен. Надо переменный резистор покрутить до появления символов.
0
rodomomto
01.12.2014, 19:03
Цитата Сообщение от OtyxPM
И, кстати, на фотографии видно, что контраст явно неправильно выставлен. Надо переменный резистор покрутить до появления символов.
крутил каждый раз.
это для того чтоб показать что там так выкрутил.

насчтет знаковых значений - учту.
rodomomto
01.12.2014, 19:06
Цитата Сообщение от OtyxPM
Цитата Сообщение от hd44780
Может задержки на Вашем цикле маловаты.
+1.
Тем более, что такая функция задержки (декремент НЕ-volatile счётчика) при определённых условиях может вообще в пустоту скомпилироваться. А HD44780 (и совместимые с ним контроллеры *066) очень не любят, когда в инициализации минимальные задержки не соблюдаются. Если инит не проходит - лучше увеличить задержки, чем уменьшить.

гм... я Си только начал учить. подскажите как тогда создать правильную задержку?
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
01.12.2014, 19:15
У меня есть точно такой же дисплей, работает отлично, либу нарыл в инете, так что работать должно, буду дома закину сюда функцию задержки и инит.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
01.12.2014, 19:20
Цитата Сообщение от rodomomto
подскажите как тогда создать правильную задержку?
Например, как hd44780 (его ник говорит сам за себя :-) - авторитетище в подобных вопросах!) предложил - на SysTick таймере.

Или хотя бы добавьте атрибут volatile к переменной счётчика в функции задержки, а значения параметра задержки увеличьте во много-много раз. Например, первая задержка в стандартной инициализации дисплея равна примерно 5 миллисекунд, а ЦПУ на тактовой частоте 168 МГц за эти пять миллисекунд сделает (168000*5) тиков! У Вас в цикле по 10 декрементов - это 30...40 тиков ЦПУ.
0
0 / 0 / 0
Регистрация: 24.08.2014
Сообщений: 389
01.12.2014, 19:25
Использовал подправив для F0 эту библиотеку, работает:
http://iosystm32.ru/indication... or-hd44780
задержки на таймере:
http://about-stm32.narod.ru/delay.html
там же еще:
http://about-stm32.narod.ru/WH0802.html
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
01.12.2014, 20:52
Приложил Вам задержки на Systysk.

Перед использованием delay_ms надо включить Systysk на тиканье с частотой 1kHz:

SysTick_Config ( 168000 );

Аргумент подогнан под F407, работающий на частоте 168 MHz. Если у Вас там что-то другое - переправьте под себя.

OtyxPM, спасибо за комплимент :) .

[1.05 Кб]

[105 байт]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2014, 20:52
Помогаю со студенческими работами здесь

Не удается запустить параллельный программатор для AVR (аналог STK500)
т.что собрал Параллельный программатор для АВР - аналог STK500 инфу взял из---http://ra4nal.qrz.ru/stk500.shtml сделав все ч. они...

MS visual Studio 2012 Не удается запустить программу. Не удается найти указаный файл
Перебила винду, установила студию и теперь она не работает..( #include &lt;iostream&gt; #include &lt;locale&gt; #include...

Не удается запустить программу. Не удается найти указанный файл. Microsoft visual studio
Добрый день. Начал работу с программой, написал первую программу. текст приложу ниже. Программа наотрез отказывается выполняться. Выдает...

Не удается запустить программу. Не удается найти указанный файл
Так ругается при нажатии F5. Что это? Построение прошло успешно. Добавлено через 1 час 26 минут Говорят, что визуал студия 2010...

Не удается запустить программу. Не удается найти указанный файл
Доброго времени суток. В общем проблема такая. Пытался создать пустой CLR проект и добавить в него форму...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru