Поклонники продукции 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) Скачиваний: 83
PIC12F508Clocks.hex
(2.85 KiB) Скачиваний: 85
Безымянный.JPG
(60.05 KiB) Скачиваний: 134

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


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