Поклонники продукции 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) Скачиваний: 79
Последний раз редактировалось 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. Вот так получилось. Конечно, если совсем припрет - что же, придется дорожки резать. :(
Ответить