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

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

Дык, как раз и хотелось-то понять, как это сделать красиво (точнее правильно) - макросом оно получается вроде более коротко. Тем более, в примере было именно так сделано. Ладно, буду этот фрагмент переписывать, тем более что должна появиться явная возможность изменять время действия EN. Пусть будет функция - отпишусь, позже..
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

[uquote="R666",url="/forum/viewtopic.php?p=4205253#p4205253"]Кстати, если написать так: (LCD_EN = 1; LCD_EN = 0) - то куча ошибок получается такая же. :([/uquote]
Ошибки оцениваются не по количеству "куча - не куча", а по тексту в них. Вам система фактически объясняет ведь, что именно Вы сделали неправильно. Более того, по тексту ошибки очень легко получить в веб-поисковиках информацию, если всё равно не видно пути решения.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

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

Сообщение Psych »

R666 писал(а):Кстати, если написать так: (LCD_EN = 1; LCD_EN = 0) - то куча ошибок получается такая же
А точка с запятой не пропущена? А то при отсутствии оной или скобки как раз появляется эта куча))
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

Нет, за "точка с запятой" и "скобка" я уже слежу внимательно.. :)
Переписал фрагмент для EN так:

Код: Выделить всё

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

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

Сообщение OKF »

[uquote="R666",url="/forum/viewtopic.php?p=4205549#p4205549"]Все равно у меня конфигурация порта своя получилась. Может, удастся что-то универсальное (на будущее) сделать.[/uquote]
Оформляйте конфигурацию в хедере, что бы при переносе на другую схему (и даже на другой МК, и даже из другого семейства!) Си файл вообще не трогать.
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

[uquote="OKF",url="/forum/viewtopic.php?p=4205780#p4205780"]Оформляйте конфигурацию в хедере... Си файл вообще не трогать.[/uquote]
Так все равно же придется сишник расколупывать, в примере именно в нем были все настройки портов. В железе получилось так, что остальные порты заняты другими делами. На LCD работает только PORTD кроме RD0, RD1 - они настроены на вход.
В макросе (из примера-исходника) для EN непонятно, каким образом выдерживается длительность импульса. Между LCD_EN = 1 и LCD_EN = 0 должно быть что-то для задания длительности, ведь так?
А откуда оно берется? Предполагаю, что здесь это время фиксировано (частотой кварца, например) и очень короткое. Потому осциллограф и не видит. (хотя кварц стоит на 4 MHz всего)
В даташите на LCD сказано, что EN должен быть не менее 1200ns, а данные должны (для 4-проводного режима) повторяться дважды.
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

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

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

Сообщение OKF »

ДВК, перфоленты, романтика...)
Аватара пользователя
Michael_Sch
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт июл 12, 2013 13:53:52
Откуда: Санкт-Петербург

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

Сообщение Michael_Sch »

R666, А как дисплей то подключен физически (электрически)?
Судя по этому:

Код: Выделить всё

LCD_DATA = ( ( c >> 4 ) & 0x0F );
Вы пишете в 4 младших разряда порта D. А он у Вас инициализирован два младших бита на ввод.
RD2 и RD3, определенные как LCD_RS и LCD_EN - это ТОЖЕ разряды того же порта D.
Так куда у вас шина данных дисплея то подключена?
Зачем, зубодер распроклятый, мучительный тянешь момент?
Тебе, стоматолог, сто матов измученный шлет пациент! (с) Вадим Шефнер
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

Михаил, вот тут-то и странность получается. В примере-исходнике как раз было описано подключение так: данные на high nibble -разряды D7...D4. Это место из примера я не трогал. А вот управление там было сделано через порт А. Полностью я этот пример на предыдущей https://radiokot.ru/forum/viewtopic.php ... 8#p4203648 странице выложил. Порт А я использовать не могу - там уже аналоговые входы. В порте D D0 и D2 тоже заняты.
Так что данные подключены так же, как и там, на D7...D4, а EN приходит на D3, а RS - на D2. RW в этом включении не используется, RW=0 всегда. То есть управление экраном хотелось подключить только на порт D.
Видимо, где-то я ошибся, но судя по тому, что конструкция #define LCD_DATA PORTD пищет в верхний ниббл - получается что строка LCD_DATA = ( ( c >> 4 ) & 0x0F ) должна позже "задвинуть" команду в нижний ниббл, а еще позже уже данные - в верхний. Возможно, что вот где-то здесь что-то пошло не так. Дело в том, что на симуляторе не видно, что данные вообще как-либо переносятся в порт D. Пошагово я вижу только перенос младшего ниббла.
Аватара пользователя
Michael_Sch
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт июл 12, 2013 13:53:52
Откуда: Санкт-Петербург

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

Сообщение Michael_Sch »

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, А здесь https://radiokot.ru/forum/viewtopic.php?f=61&t=584 Вы были?
Зачем, зубодер распроклятый, мучительный тянешь момент?
Тебе, стоматолог, сто матов измученный шлет пациент! (с) Вадим Шефнер
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

Михаил, спасибо! Особенно за подсказку относительно 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 КБ) 113 скачиваний
Последний раз редактировалось R666 Пт апр 08, 2022 20:20:50, всего редактировалось 1 раз.
Аватара пользователя
Michael_Sch
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт июл 12, 2013 13:53:52
Откуда: Санкт-Петербург

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

Сообщение Michael_Sch »

R666, Я бы две функции сделал. Во избежание.
Зачем, зубодер распроклятый, мучительный тянешь момент?
Тебе, стоматолог, сто матов измученный шлет пациент! (с) Вадим Шефнер
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

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

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

Сообщение Jack_A »

[uquote="R666",url="/forum/viewtopic.php?p=4211309#p4211309"]на ДВК с перфолентами было..[/uquote]
На ДВК никогда не было перфолент. Не путать с "Электроникой-60" или СМ-4. И не надо ссылаться на технику, которую уже не застал.
OKF
ДВК, перфоленты, романтика...)
Это ещё что! А как вам БЭСМ-6, перфокарты, магнитный барабан, память на колечках :)
http://forum.x-hw.by/viewtopic.php?f=11 ... &start=120
Если кому лень открывать ссылку, процитирую тот бред сивой кобылы, на который я не мог не ответить.
СпойлерДа это -ручной перфоратор для перфоленты, профессора студентам проверяли программу и если надо исправляли её с помощью этого устройства, ну и те кто составлял программы для компьютеров тоже использовали их. По нормативам для составления программ были задействованы независимо друг от друга два программиста и потом их сравнивали на специальных опять же независимых друг от друга считывателях и если надо, то исправляли. Это нужно было для того, что бы не было ошибок при вводе программ, так как компьютерное время было очень дорогое, жрали же эти компьютеры сотни киловатт энергии
Изображение
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

На ДВК никогда не было перфолент.
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 КБ) 117 скачиваний
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

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

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

Сообщение R666 »

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:
Аватара пользователя
Michael_Sch
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт июл 12, 2013 13:53:52
Откуда: Санкт-Петербург

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

Сообщение Michael_Sch »

R666, у Вас же 877 камень, неужели не хватает портов?
Вы для начала выбрали довольно сложный вариант подключения.
Выберите для сигналов квитирования другой порт.
Зачем, зубодер распроклятый, мучительный тянешь момент?
Тебе, стоматолог, сто матов измученный шлет пациент! (с) Вадим Шефнер
Аватара пользователя
R666
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт фев 15, 2008 12:10:56
Откуда: Planet Of Earth: 50N,36E

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

Сообщение R666 »

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

Вернуться в «PIC»