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

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

Вт авг 20, 2019 19:52:49

Я рад, что у вас все получилось.

Добавлено after 4 hours 25 minutes 39 seconds:
serg_svd, Дело было в SSPSTAT. Подпилил ваш драйвер ssd1306 под свой i2c, закинул в отладочную плату, красота.
Изображение

Добавлено after 5 minutes 32 seconds:
хотя у меня подтяжка на плате через резисторы 10к к +5 В и все норм работает и раньше работало)

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

Ср авг 21, 2019 08:21:32

хотя у меня подтяжка на плате через резисторы 10к к +5 В и все норм работает и раньше работало)

Спасибо за помощь!
У меня тоже резисторы 10кОм были, но я поверх них запаял еще по 10к. В итоге стало 5к подтягивающие. Просто думал в них дело...
Схему на плату ssd1306 я только огрызок нашел, но в ней тоже подтягивающие по питанию после стабилизатора подключены. На своей плате я тщательно все прозвонил. Не думаю, что китайцы столько модификаций плат лепят.
Изображение

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

Ср авг 21, 2019 13:28:38

Кстати попробуйте увеличить частоту i2c. Для 128х64 на частоте 100кгц медленный вывод шрифтом 5х8. Чтоб заполнить весь экран символами уходит гдето 0.5 секунды.

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

Ср авг 21, 2019 20:38:28

Кстати попробуйте увеличить частоту i2c.

Игрался с частотой. Насколько знаю, предел 400 кГц. Но даже при такой частоте видно, как заполняется дисплей. Для больших объемов выводимой информации я предпочитаю вначале гасить индикатор после очистки, выводить информацию и затем включать его.
PS. я такие дисплеи, хоть и имею несколько штук в наличии, но в своих конструкциях так и не применил. Хотя для простого применнения можно обойтись и без буфера, но, по-хорошему, все-же лучше с буфером. Но для этого требуются жирные контролллеры с минимум 2 кБ памяти.

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

Ср авг 21, 2019 21:36:34

Уже попробывал. Таки да выше 400 начинаются глюки, после 600 вообще тухнет. Хотя можно уменьшить подтягивающие резисторы.

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

Чт сен 19, 2019 16:49:21

Здравствуйте! Нет ли у кого примера динамической индикации на PIC+74HC595 под XC8 компилятор.
На сайте narodstream все хорошо разжёвано, от туда беру примеры, но нет примера именно с 74HC595.
Спасибо.

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

Пт сен 20, 2019 21:05:51

расскажите что не получается? толи с пиком не разобрались, или с регистром?
входные пины 595
[10] MR — сброс регистра, при подаче логического нуля на MR и единицы на STCP переводит все выходы в состояние логического нуля;
[11] SH_CP — вход для тактовых импульсов;
[12] ST_CP — линия прерываний;
[13] OE — вход, переводящий выходы из высокоимпедансного состояния в рабочее;
[14] DS — вход данных;
[8] GND — Ground. Земля
[16] VCC — Питание +5 В.

посылка для вывода цифр

. | 0b00000001
0 | 0b00000000
1 | 0b01100000
2 | 0b11011010
3 | 0b11110010
4 | 0b01100110
5 | 0b10110110
6 | 0b10111110
7 | 0b11100000
8 | 0b11111110
9 | 0b11110110

ну а дальше перебор общего у индикаторов как обычно при динамической индикации

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

Сб сен 21, 2019 14:24:26

Если я вижу пример, то смогу что то сварганить для своих нужд, с ноля не напишу :facepalm: . Я не настолько знаю С.
Это как читать книгу на английском, имея под рукой словарь.

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

Ср дек 11, 2019 01:12:43

На Си писАть не люблю. Там думать надо над языком. Вот на Бейсике - там думать надо именно над "задуманным".
Вложения
PIC12F508Clocks.zip
(1.7 KiB) Скачиваний: 321
PIC12F508Clocks.hex
(2.85 KiB) Скачиваний: 356
Безымянный.JPG
(60.05 KiB) Скачиваний: 452

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

Пн янв 20, 2020 20:45:46

Чтобы не создавать отдельную тему, напишу тут:

МК: pic12f683; Программа: MPLAB X IDE; Компилятор: xc8 v2.10(2.05 тоже пробовал)
Проблема: ножка порта сбрасывается на 0 через пару мкс после установления 1.
Код:

сбрасывается ножка code (gp1) на ножке RX была подобная проблема когда запись была RX=!RX. с вводом переменной RXv все нормализовалось. я решил, что при чтении значения с порта, чтобы сделать инверсию он сбрасывался. но с ножкой CODE такой проблемы нет... она не читается в программе.
Логика программы: по запросу с ТХ (прямоугольный импульс длиной около 50мс) по завершению идёт генерация импульсов синхронизации на RX а на ножке Code идёт пробитовая посылка на каждом пике RX перед спадом.
Осцилограмма работы
Изображение
видно что логика работает 255 бит отправляются, но при передаче 0( т.е. 1 потому что через транзистор) на gp1 он появляется кратковременно и не остаётся в нем, а возвращается в 1( т.е в 0). оранжевым дорисовал как должно быть в начале идут 0 т.е. должна быть прямая. осцилограмма снята на выходе, т.е. после транзисторов. на прямую с мк то же самое только наоборот.
Схема устройства:
Изображение

в чем может быть причина такого поведения? компилятор чудит? осцилятор используется внутренний на 8Mhz, но кроме как что gp4,5 всегда на вход будут ничего не нашёл в этом режиме. или переферия какая сбрасывает на 0??

P.S. пока писал пришла в голову мысль, что может быть это из-за инверсии "!" ?? попробую завтра массив вручную инвертировать, хотя не очень логично т.к. RX=!RXv; проходит нормально...

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

Сб янв 25, 2020 06:26:11

Процедура RMW - чтение-модификация-запись.
При записи в любой бит порта читается ВЕСЬ ПОРТ, затем модифицируется этот бит, затем результат записывается в ВЕСЬ ПОРТ. Чтение порта при записи бита В ЭТОМ СЕМЕЙСТВЕ МК происходит прямо с пинов, а не с выходной буферизованной защелки. Если пин сильно нагружен, то на нем может быть напряжение ниже порога единицы и при чтении на нем будет ноль. Таким образом, этот ноль будет перезаписан в этот пин при записи совершенно в другой пин этого порта. Тоже самое происходит, если записи следуют раньше, чем на пине устанавливается уровень, т.е. слишком быстро.
Ворк эрраунд. Держать в коде копию порта и работать с ней, отдавая в порт только его копию целиком, а не побитно.

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

Вс фев 09, 2020 20:01:13

Процедура RMW - чтение-модификация-запись.
При записи в любой бит порта читается ВЕСЬ ПОРТ, затем модифицируется этот бит, затем результат записывается в ВЕСЬ ПОРТ. Чтение порта при записи бита В ЭТОМ СЕМЕЙСТВЕ МК происходит прямо с пинов, а не с выходной буферизованной защелки. Если пин сильно нагружен, то на нем может быть напряжение ниже порога единицы и при чтении на нем будет ноль. Таким образом, этот ноль будет перезаписан в этот пин при записи совершенно в другой пин этого порта. Тоже самое происходит, если записи следуют раньше, чем на пине устанавливается уровень, т.е. слишком быстро.
Ворк эрраунд. Держать в коде копию порта и работать с ней, отдавая в порт только его копию целиком, а не побитно.


уже справился, спасибо. вся проблема была в не отключённом компараторе, который на этом мк по умолчанию был включен. из-за этого было такое неадекватное поведение портов.
за метод спасибо, я его как то встречал. и сейчас ещё напомнили. очень интересный способ вывода.

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

Ср июл 15, 2020 23:48:26

На Си писАть не люблю. Там думать надо над языком. Вот на Бейсике - там думать надо именно над "задуманным".
-не знаю, как на бейсике, а для паскаля вот разрабатывается транслятор, чтобы отлаживать на дельфях, а потом транслировать в код Си.

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

Чт июл 16, 2020 06:57:54

lin17 писал(а):для паскаля вот разрабатывается транслятор, чтобы отлаживать на дельфях, а потом транслировать в код Си
как-то слишком просто... надо бы как-то так: на питоне транслятор, который транслирует код на асме в код на бейсике, на бейсике транслятор в паскаль для отладки в дельфи, а уж из дельфи транслятор в код Си... так лучше, имхо

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

Чт июл 16, 2020 14:20:08

ARV - я думаю, напрямую делать компилятор малоперспективно для маленьких опенсорсных проектов. Т.к. он всё равно будет хуже, чем MPlabX, и как только энтузиасты перестанут его поддерживать, то весь код превратиться в тыкву. А так можно дальше на Си проекты развивать.

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

Чт июл 16, 2020 15:28:51

Выводы всяких трансляторов из одного языка в дргуой обычно мало пригодные для правки человеком. С тем же успехом можно пытаться дизассемблер транслировать в C и пытаться править. Зачастую проще вручную переписать с одного языка на другой, чем пытаться разобраться в автотрансляции.

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

Чт июл 16, 2020 16:15:29

ARV - я думаю...

NStorm писал(а):...обычно мало пригодные для правки человеком. С тем же успехом можно пытаться.....

Даладна!!! :))) :))) :)))
Коллеги, это только мне кажется, что ARV ерничает? Вообще то это был сарказм. И тут можно только поржать, но никак не обсуждать на полном серьезе перспективы.

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

Чт июл 16, 2020 19:27:42

КРАМ, а не ARV отвечал, там явный сарказм был. А lin17, который про транслятор из "делфи" писал.

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

Вт окт 20, 2020 09:11:52

А как в MPLAB X посмотреть дизасм? Компилятор XC8. Версии MPLAB X и компилятора последние.
Вот только с Ассемблера перешел на СИ, написал работающую программу. Хотелось бы узнать мнение гуру о коде программы. Пойдет такое написание на СИ? Или что-то можно по другому скомпоновать в программе?

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

Вт окт 20, 2020 11:29:23

А как в MPLAB X посмотреть дизасм? Компилятор XC8. Версии MPLAB X и компилятора последние.

Включить отладку (можно через симулятор), потом Window->Debugging->Disassembly

Добавлено after 25 minutes 22 seconds:
4uvak, напишите модель МК для кода, так проверить удобнее будет собрав исходник.

Добавлено after 2 minutes 56 seconds:
Вообще конечно видно, что переход был с асма ) Стилистика осталась в асм стиле. Вместо меток лучше в виде функций оформить. Да и вообще в Си метки почти никогда не нужны.

Добавлено after 23 minutes 7 seconds:
Чисто в плане избавления от ненужных меток:

Что еще я бы улучшил, но уже безотносительно перехода с асма:
1. Мне не нравится сброс n каждый раз в случае перемычки. Обычно перемычку на работающем ус-ве не меняют. Поэтому обычно значение перемычки считается только один раз. А дальше я бы просто сделал бы бесконечный цикл, где n приращивалось бы или нет.
2. Нажатие кнопки проверяется разово. При этом ожидание и замеры АЦП останавливаются. Дребезгом или дрочением кнопки можно тормознуть выполнение другого участка кода.
3. Вместо перехода на конец программы, где просто будет бесконечный цикл ничего не делания крутится, я бы в конце power_off() в спящий режим бы уходил бы постоянный.
Последний раз редактировалось NStorm Вт окт 20, 2020 13:47:05, всего редактировалось 1 раз.
Ответить