Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Програмирование pic на СИ.

Пн мар 28, 2022 11:46:35

Дык, как раз и хотелось-то понять, как это сделать красиво (точнее правильно) - макросом оно получается вроде более коротко. Тем более, в примере было именно так сделано. Ладно, буду этот фрагмент переписывать, тем более что должна появиться явная возможность изменять время действия EN. Пусть будет функция - отпишусь, позже..

Re: Програмирование pic на СИ.

Пн мар 28, 2022 14:20:53

Кстати, если написать так: (LCD_EN = 1; LCD_EN = 0) - то куча ошибок получается такая же. :(

Ошибки оцениваются не по количеству "куча - не куча", а по тексту в них. Вам система фактически объясняет ведь, что именно Вы сделали неправильно. Более того, по тексту ошибки очень легко получить в веб-поисковиках информацию, если всё равно не видно пути решения.

Re: Програмирование pic на СИ.

Пн мар 28, 2022 14:26:00

R666 писал(а):Кстати, если написать так: (LCD_EN = 1; LCD_EN = 0) - то куча ошибок получается такая же

А точка с запятой не пропущена? А то при отсутствии оной или скобки как раз появляется эта куча))

Re: Програмирование pic на СИ.

Пн мар 28, 2022 17:02:28

Нет, за "точка с запятой" и "скобка" я уже слежу внимательно.. :)
Переписал фрагмент для EN так:
Код:
void    LCD_STROBE()
{   LCD_EN=1;
   DelayUs(100);
   LCD_EN=0;
   }
, после этого на EN появились таки приличные импульсы.
Теперь проблема в том, что ничего нет на DATA. К сожалению, не могу видеть, что происходит на RS и EN одновременно (осциллограф однолучевой, могу только синхронизироваться по фронту одного из сигналов).
Похоже, примером этим можно воспользоваться лишь как образцом, а писать все управление LCD похоже, придется самому, с нуля. Все равно у меня конфигурация порта своя получилась. Может, удастся что-то универсальное (на будущее) сделать.

Re: Програмирование pic на СИ.

Вт мар 29, 2022 07:48:32

Все равно у меня конфигурация порта своя получилась. Может, удастся что-то универсальное (на будущее) сделать.

Оформляйте конфигурацию в хедере, что бы при переносе на другую схему (и даже на другой МК, и даже из другого семейства!) Си файл вообще не трогать.

Re: Програмирование pic на СИ.

Вт мар 29, 2022 19:29:32

Оформляйте конфигурацию в хедере... Си файл вообще не трогать.

Так все равно же придется сишник расколупывать, в примере именно в нем были все настройки портов. В железе получилось так, что остальные порты заняты другими делами. На LCD работает только PORTD кроме RD0, RD1 - они настроены на вход.
В макросе (из примера-исходника) для EN непонятно, каким образом выдерживается длительность импульса. Между LCD_EN = 1 и LCD_EN = 0 должно быть что-то для задания длительности, ведь так?
А откуда оно берется? Предполагаю, что здесь это время фиксировано (частотой кварца, например) и очень короткое. Потому осциллограф и не видит. (хотя кварц стоит на 4 MHz всего)
В даташите на LCD сказано, что EN должен быть не менее 1200ns, а данные должны (для 4-проводного режима) повторяться дважды.

Re: Програмирование pic на СИ.

Пт апр 08, 2022 13:51:34

Прошу прощения за молчание.. ремонт, однако.
Докладываю: со служебными сигналами на шине LCD в общем разобрался. Однако остается непонятным поведение конструкции
#define LCD_DATA PORTD. При пошаговом исполнении в MPLAB SIM видно, что на PORTD появляются LCD_RS RD2 и LCD_EN RD3 - но вот DATA - стоят нули, ничего не входит и не сдвигается на data bits 4-7 - ну хоть тресни. Понятно, что дисплей не может ничего сделать. А вот как быть дальше - пока не видно. Посмотрел, как это делают в цивилизованном мире, но там в основном все на асме сделано. А втыкать куски чужого кода как-то неспортивно получается. Хочется все же разобраться самому, как побороть окаянный затык при передаче на шину данных.. Похоже, придется что-то мудрить с промежуточной локальной переменной и сдвигом уже по ней. Неприятность при этом в том, что можно "внезапно" получить неожиданные критические временнЫе задержки
Что же касается "оценки по количеству "куча - не куча"" - ясно, что из-за первой же ошибки куча и возникает. Такое еще в стародавние времена на ДВК с перфолентами было..
Вот пока как-то так получается. :(

Re: Програмирование pic на СИ.

Пт апр 08, 2022 15:47:24

ДВК, перфоленты, романтика...)

Re: Програмирование pic на СИ.

Пт апр 08, 2022 16:20:24

R666, А как дисплей то подключен физически (электрически)?
Судя по этому:
Код:
LCD_DATA = ( ( c >> 4 ) & 0x0F );

Вы пишете в 4 младших разряда порта D. А он у Вас инициализирован два младших бита на ввод.
RD2 и RD3, определенные как LCD_RS и LCD_EN - это ТОЖЕ разряды того же порта D.
Так куда у вас шина данных дисплея то подключена?

Re: Програмирование pic на СИ.

Пт апр 08, 2022 17:25:26

Михаил, вот тут-то и странность получается. В примере-исходнике как раз было описано подключение так: данные на high nibble -разряды D7...D4. Это место из примера я не трогал. А вот управление там было сделано через порт А. Полностью я этот пример на предыдущей viewtopic.php?p=4203648#p4203648 странице выложил. Порт А я использовать не могу - там уже аналоговые входы. В порте D D0 и D2 тоже заняты.
Так что данные подключены так же, как и там, на D7...D4, а EN приходит на D3, а RS - на D2. RW в этом включении не используется, RW=0 всегда. То есть управление экраном хотелось подключить только на порт D.
Видимо, где-то я ошибся, но судя по тому, что конструкция #define LCD_DATA PORTD пищет в верхний ниббл - получается что строка LCD_DATA = ( ( c >> 4 ) & 0x0F ) должна позже "задвинуть" команду в нижний ниббл, а еще позже уже данные - в верхний. Возможно, что вот где-то здесь что-то пошло не так. Дело в том, что на симуляторе не видно, что данные вообще как-либо переносятся в порт D. Пошагово я вижу только перенос младшего ниббла.

Re: Програмирование pic на СИ.

Пт апр 08, 2022 17:57:24

R666, Я спросил у Вас, как ФИЗИЧЕСКИ подключен индикатор к камню.
Если D4-D7 индикатора подключены к RD4-RD7 PICa, то Ваш код МАСКИРУЕТ ( & 0x0f ) 4-7 разряды. И там ничего быть видно и не должно.
Если все так, как я написал выше,то процедура:
LCD_DATA = ( c & 0xF0 );
LCD_STROBE();
LCD_DATA = ( (c <<4) & 0xF0 );
LCD_STROBE();

но здесь еще одна засада - при записи в LCD_DATA у Вас запишется 0 в бит, отвечающий за RS.
Тут либо Вы его переносите в другой порт,
- либо передаете в функцию и после установки данных ставите и RS в нужное состояние (а потом и E),
- либо пишете две функции для записи данных и команд.

Добавлено after 6 minutes:
R666, А здесь viewtopic.php?f=61&t=584 Вы были?

Re: Програмирование pic на СИ.

Пт апр 08, 2022 19:10:36

Михаил, спасибо! Особенно за подсказку относительно RS. Кое-что начало проясняться.. Кажется начинает доходить, где я накосячил. :oops:
LCD подключен именно так. В аттаче схема модуля с именами сигналов. Это подключение я нашел в описании большой статьи "Робототехнический эксперимент с PIC-микроконтроллером PIC16F887".
Функцию для EN я уже сделал (возможно удачно, теперь есть возможность задавать длительность импульса). Так что теперь буду воевать с RS. Придется придумать способ, чтобы установка EN и RS происходила согласно таймингам.
Да кстати, а правомерно ли предположение что при выполнения INIT_LCD получившийся RS=0 будет кстати (пишем команду)? :roll:

upd: Заглянул на рекомендованную вами страницу. А сожалению самая интересная ссылка "Библиотека LCD HD44780 для PIC" битая. :( С 2006 года много времени утекло.. настал каюк странице: - "forum.chipmk.ru’s DNS address could not be found. ". А жаль, интересно все же было бы посмотреть.
Вложения
LCD_board.png
(22.78 KiB) Скачиваний: 80
Последний раз редактировалось R666 Пт апр 08, 2022 20:20:50, всего редактировалось 1 раз.

Re: Програмирование pic на СИ.

Пт апр 08, 2022 20:11:15

R666, Я бы две функции сделал. Во избежание.

Re: Програмирование pic на СИ.

Пт апр 08, 2022 20:36:32

То есть получается, что сначала одной функцией пишется команда, а второй после нее уже данные на вывод? Здесь предполагаю небольшое затруднение: из даташита получается, что надо сначала поставить RS=1, потом EN=1, установить что-то на D7..D4 И по переходу EN=0 должна произойти выдача на экран. А вот как сделать длинный RS, а внутри него короткий EN - пока не совсем ясно.
Вообще-то в этом что-то есть.. Попробую-ка сделать и так и этак - посмотрю, что лучше получится..

Re: Програмирование pic на СИ.

Пт апр 08, 2022 21:31:24

на ДВК с перфолентами было..

На ДВК никогда не было перфолент. Не путать с "Электроникой-60" или СМ-4. И не надо ссылаться на технику, которую уже не застал.
OKF
ДВК, перфоленты, романтика...)

Это ещё что! А как вам БЭСМ-6, перфокарты, магнитный барабан, память на колечках :)
http://forum.x-hw.by/viewtopic.php?f=11 ... &start=120
Если кому лень открывать ссылку, процитирую тот бред сивой кобылы, на который я не мог не ответить.
СпойлерДа это -ручной перфоратор для перфоленты, профессора студентам проверяли программу и если надо исправляли её с помощью этого устройства, ну и те кто составлял программы для компьютеров тоже использовали их. По нормативам для составления программ были задействованы независимо друг от друга два программиста и потом их сравнивали на специальных опять же независимых друг от друга считывателях и если надо, то исправляли. Это нужно было для того, что бы не было ошибок при вводе программ, так как компьютерное время было очень дорогое, жрали же эти компьютеры сотни киловатт энергии

Re: Програмирование pic на СИ.

Вс апр 10, 2022 04:04:03

На ДВК никогда не было перфолент.

Jack_A, ну тут Вы немного погорячились.. Были. Вообще (известных мне) конфигураций ДВК было не менее пяти. Во всяком случае то, что стояло в одной очень уважаемой конторе ввод имело именно с лент. Это был первый вариант с процессором 1801ВМ1. Последний известный мне вариант имел уже процессор 1801ВМ3, платы КНГМД, КМД, контроллер последовательных портов и даже мог иметь КЦГД. А вообще в корзинку ДВК можно было запихать очень многое от Э-60..
Так что про "ссылаться на технику, которую уже не застал" - наверно все же давайте не будем. Потому как застал, собирал и на этом потом работал.
В аттаче кадр из проверочного клипа (проверял чей-то камкодер, так что качество соответствующее вышло, сам клип - over 150Mb, если что). Это ДВК в немножко :) нестандартной комплектации, собранный из чего Бог послал. То, на чем стоит клава и все остальное - известный тогда ГМД-70, модернизированный, умеющий самостоятельно форматировать дискеты. (Да, было время, дюралевый лист в Таше проблемой не был). Рядом с монитором - блок дисководов: 5' односторонний, двухсторонний и 3', под ними - винчестер, аж на 80 Мб. К этой машине я цеплял перфоратор ПЛ-80 и ридер R-40 (уж не помню, откуда я его скрутил). Кстати, кое-какие программы с того ДВК где-то в шкафу остались, на 5'дискетках..
Про "а как вам БЭСМ-6.." Это еще что.. БЭСМ-6 - это чуть позже было. А вот скажите, что запрещалось делать на машине "Урал-2" при начальном пуске программы? И почему?

Про "два программиста и потом.." согласен - бред. А вот ручной перфоратор - тогда это была печальная реальность. С которой частенько приходилось ковырять ленту перед тем, как тащить ее на окончательное копирование. Кстати, а скажите, для чего там применялась фотобумага?
Вложения
DVK_my first.png
(161.62 KiB) Скачиваний: 79

Re: Програмирование pic на СИ.

Вс апр 10, 2022 12:16:58

https://ru.wikipedia.org/wiki/Диалоговы ... й_комплекс
Как видим, контроллера перфоленты нет вообще в принципе в штатной комплектации. Ну а самому прикошачить что угодно можно. Кстати, на вашем снимке тоже нет ничего перфоленточного. В той БЭСМ-6, на которой я работал, мастера (в истинном смысле этого слова) техподдержки добавили дисководы от ЕС и текстовые дисплеи, которые при проектировании БЭСМ и не просматривались даже. Да и я сам изваял как-то связку СМ-4 - ДВК-2 через крейт КАМАК по 3-битному параллельному интерфейсу :))
Если будет ссылка на ДВК со штатной перфолентой или хотя бы снимок - признаю, что были такие. Но мне не встречались, хотя работал с ними достаточно плотно. Ну и всякие клоны были - НЦ, допустим, Тоже PDP, но не ДВК.
Про Урал не скажу - не только не работал с ними - даже в глаза не видел. Минск далеко от Урала :))
В моём посте про фотобумагу - ни слова.
Вот в конце 50-х, когда в качестве носителей шла засвеченная 35-милиметровая кинопленка ( сам я такого не застал, но мой брат в универе кувыркался с таким железом то ли на Минск-2, то ли х.з ) - так там действительно закольцовывали ленту, считывали несколько раз, если КС совпадала, ввод считался правильным.

Re: Програмирование pic на СИ.

Вс апр 10, 2022 13:36:17

Jack_A, это собиралось дома, так что выставить комп "при полном параде" было просто негде. И так вся конструкция стояла на телевизорном столике (типа "курья ножка" на колесиках), а справа от всего этого благолепия жил D-100 на табуретке. Тем более, корзинку паял сам из того, что удалось урвать, было в ней всего 8 слотов. Потому перфоленточные платы на момент этого видео были сняты ради освобождения места под контроллеры дисков и СОМ-портов (это нужнее было). Конечно, если бы разъемов было побольше - можно было бы и не ужиматься. Ладно, не буду душу бередить, это - дела давно минувших дней. Все это пришлось при переезде оставить в Таше. Если оно в радиоклубе и осталось, то скорее всего в качестве экспоната лишь. Если пионеры на потрошки не растаскали..

Про фотобумагу (если честно) - вопрос был почти разряда мелких провокаций. Дык, черная бумага вкупе с тем ручным дыроколом и клеем 88 применялась как раз для редактирования исходников. На машине Урал-2 для ввода применялась засвеченная 35-мм кинолента, (надеюсь, этим ранее упомянутый запрет как бы объяснился?) на которой выбивались отверстия, похожие формой на перфокарточные. Если дырочки не хватало - пробивали; если была лишняя - залепляли кусочком черной бумаги. С 88 клеем такие шлепуги пару прогонов выдерживали. Ну и все же - "Ребята, давайте жить дружно" © (а то этак и модератор может по шеям накостылять)

Теперь вот что все же по основной теме получилось:
Михаил, с вашей подачи - дело с дохлой точки сдвинулось. :) После того, как сделал вот так:
Код:
DelayUs(40);
   LCD_DATA = ( ( c << 4 ) & 0xF0 );
   LCD_STROBE();
   LCD_DATA = ( c & 0xF0 );
   LCD_STROBE();

- на экране получилось что-то отличное от вечного самотеста. Команда хоть как-то начала проходить.
Пока что результат не похож на ожидаемое ( на экране нечетные строки - квадратики, четные - тоже квадратики, но половинной высоты. Теперь хотя бы стало ясно, куда дальше копать. Как разберусь со сдвигами и очередностями - отпишусь. Спасибо! :beer:

Re: Програмирование pic на СИ.

Вс апр 10, 2022 17:01:33

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

Re: Програмирование pic на СИ.

Вс апр 10, 2022 18:13:59

Михаил, дело как раз в том, что что все уже довольно плотно упихано, а дополнительное осложнение в том, что все уже на плате.. Порты А и Е заняты под входы, порт В управляет релейными выходами. В порту C есть аппаратная связка по I2C, она была оставлена для 24С08 - я туда хотел строковый вывод пристроить, чтобы основную память не занимать текстами. Позже по ходу затеи возникло еще несколько довольно критичных входных сигналов, так что в конце концов пришлось занять даже D0. Вот так получилось. Конечно, если совсем припрет - что же, придется дорожки резать. :(
Ответить