Обсуждаем цифровые устройства...
Ответить

Вариант энкодера для DSO138

Сб май 28, 2016 17:07:45

Скажу сразу - тема до конца не доделана, но то что выкладываю хоть и сырое, но вполне рабочее.
Загорелся идеей таки прикрутить к сабжу энкодер - напрашивается поставить доп. контролер, чеб он имитировал нажатие кнопок "+", "-". У сабжа большая плата, ей бы дисплей 3,2" да энкодер.
Нашел в сети одну реализацию:
https://github.com/kuwatay/AVR/tree/mas ... for-dso138
но приспичило попытаться самому. Мутить как мутить - дополнил еще кнопкой ходить по режимам в обратную сторону (пять "нажатий" на SEL). И чтоб быстрый поворот энкодера отрабатывался как удержание кнопки для "прыжков".

Делается или покупается маленькая платка с attiny13 / attiny85 / atmega328.
МК, стабилизатор и минимум обвязки (в корпусе приклеиваем рядом с энкодером).
К платке: 2 провода от энкодера, 1 - от кнопки, 1 - их общий корпусной;
с платы сабжа: корпусной, +V и от кнопок "+", "-", "SEL".

Пока прошивку написал только под atmega328p (Mini Pro, других у меня пока нет), во фьюзах изменил один бит - включил прескалер на 8. Писал в eclipse. В свойствах проекта: atmega328p, частота 2000000. Не все еще гладко, для эргономики надо с задержками поиграться, да и 60-ю сабжевую надо попробовать поковырять - время удержания кнопки уменьшить до секунды и "прыжок" увеличить с 10 до 20-25 точек.


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

В архиве: прошивка и main.c
Вложения
enc.rar
(3.67 KiB) Скачиваний: 143

Re: Вариант энкодера для DSO138

Вс май 29, 2016 08:44:23

Дополню
основная "сырость" (в функционале) - реализация "прыжков". когда боролся с прошивкой у меня исполнителем был штатный светодиод (без dso138), события "шифровал" различным количеством и длительностью моргания. Тогда , вроде, добился - 3-5 быстрых дрынка энкодером - почти столько же прыжков на экране (+- один прыжок), а если приноровиться то и ровно (сколько я дрынкнул - столько он и "отпрыгал"). А вот когда подключился к dso : с доп.кнопкой и шаганием энкодером все нормально (и шагание и спокойное вращение - адекватно отрабатывается), а вот прыжки не складываются (дрынки с прыжками не сходятся). Думаю не всегда stm32 ждет 2сек., бывает что и дольше, поэтому и удержание от 328 воспринимает как одно нажатие. В ближайшие 2-3 дня, если не сильно буду занят, поиграюсь с задержками.

Еще: если кого смущает прямое соединение ног контроллеров и он хочет подстраховаться - сообщите. Перепишу, выложу. Сейчас управляющая нога переключается с режима вход на реж. выход и прижимается к 0, потом снова на реж. вход; сделаю: управляющая нога всегда выход, управ. сигнал лог. 1, подадите на транзисторы, шунтирующие кнопки - вот и развязка контроллеров. Наверно так не только безопасней, но и надежней.

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

На всякий случай: Прошу не считать выложенное "моей разработкой" - в том смысле, что если кто "возьмет инициативу в свои руки" - с моей стороны никаких возражений; наоборот только плюс, ведь это значит народу гораздо быстрее станет доступней более грамотное и надежное решение.

Re: Вариант энкодера для DSO138

Пн май 30, 2016 17:52:44

Поправил прошивку - с "прыжками" наладилось. Пользоваться правда - не очень, надо копать 60-ю.
В архиве main.c и прошивка.

Если с 60-ой получится выложу вместе с соответствующей прошивкой для энкодера.
Вложения
enc.rar
(3.65 KiB) Скачиваний: 112

Re: Вариант энкодера для DSO138

Сб июн 04, 2016 21:52:19

Никто не критикует, вероятно никто еще не собрал.
раскритикую сам:
не достаточная проработка темы на этапе постановки задачи (т.е. ее вообще не было) привела к лишним затратам времени и необоснованным ожиданиям.

собственно я о следующем:
время держать кнопку, чтобы dso138-м это было воспринято как удержание, зависит от загруженности stm32 и сильно варьируется (от секунды в реж.HOLD, до 4-5сек. на длительных развертках);
как уменьшить это время я в 60-ой не нашел.
Посему, решил отказаться от всего этого механизма, выкинул из прошивки MiniPro все что с этим связано. Выкладываю и исходник и два hex'та один скомпилирован под частоту 2МГц(с прескалером на 8 ), другой для 16МГц (вернул фьюзы как было - без бита прескалера на 8 ).
Опрашивается нога с доп.кнопкой, если не нажата - опрашиваются ноги к энкодеру, если и там движухи нет - снова на доп.кнопку. Если была движуха по кнопке или энкодеру - отрабатывается соответствующий ногодрыг на линиях к ногам dso138.

А теперь, что нашел в 60-ой (в бинарнике):
смещение - было - себе сделал
7536 - 0A - 19 (10 сменил на 25)
754A - 14 - 32 (20 сменил на 50)
75B6 - 0A - 19
75CA - 14 - 32
здесь, через сколько позиций прыгает при удержании кнопки: +10, -10 и +20, -20 для маркера "окна".
hex-редактор, в котором ковырял - Hex Workshop. файл формата hex открывается через импорт. Снова в hex запихивать не обязательно, st'шный Flash Loader и bin и hex понимает.
в прочим ... свою 60-ю то же положил в архив.
Вложения
lite.rar
(29.15 KiB) Скачиваний: 114

Re: Вариант энкодера для DSO138

Вт авг 23, 2016 18:24:06

что-то никто не портирует прошивку на камень по-меньше, типа Attiny45 Attiny85 или не наращивает каким-нибудь генератором, мне пока это ни к чему, а то б прикрутил. А пока ...

Попался мне на днях энкодер из "мыши" - откорректировал под него прошивку.
В отличии от "обычного" энкодера, у которого на один тактильный шаг приходится смена четырех состояний, у мышиного как бы полшага, т.е. тактильный шаг - с 00 на 11 либо с 11 на 00. Это и принял за условие - шаг совершен, направление определяю по последнему состоянию линий перед завершением шага, т.е. перед 11 или 00 в шаге. Ломал голову на предмет устойчивости к дребезгу, что лог."0" (в отличии от "1") не всегда может оставаться 0В (в следствии скользящего контакта), но остановился пока на такой обработке линий. Имеющийся у меня энкодер с этой прошивкой работает стабильно. Остальное как предыдущей прошивке (lite). В архиве main.c и hex для 328Р 16МГц.
Энкодер мелкий, но на счет компактности всего механизма не уверен. В отличии от "обычного" энкодера, которому кроме собственно ручки больше ничего и не нужно, здесь сам энкодер как одна опора колесу, т.е. требуется вторая опора. Да и колесо пожалуй удобней широкое, чем диском.
Вложения
mouse.zip
(2.26 KiB) Скачиваний: 108

Re: Вариант энкодера для DSO138

Сб июл 07, 2018 09:34:07

Периодически возникают мысли - чего бы там допилить, но ведь работает и так... :)
Есть большое желание таки разгрести родные исходники - я немного в них ковырялся, но пока только "верхний слой" разгреб :) - STM я всего год программирую и пока слаб в разгребании чужого - вот своего наворотить уже немного могу :). Лично мне в сабже не так энкодера нехватает, как нормальной отрисовки на ВЧ диапазонах, без "фантазий" графического фильтра. Ну и второй канал. И опять таки энкодер и кнопки переключения диапазонов сигнала - как в DSO150... В общем - желание есть, а вот с квалификацией пока не очень... :) Кстати - схема DSO150 довольно удачна в смысле организации входной аналоговой части, там и энкодер прикручен - токо производитель туда защиту прошивки ставит...
В общем - ежели кто-нибудь тоже желает погрызть прогу на уровне исходников - мне было бы очень интересно поучаствовать...

Re: Вариант энкодера для DSO138

Сб авг 18, 2018 11:03:42

Не знаю, интересно это еще кому-нибудь - новую тему создавать пока не буду. попробую тут отписаться....
В общем, в рамках освоения STM32 был заказан 3,2 дюймовый TFT ЖК-дисплей 320X240 на ILI9341. На момент заказа я был еще не совсем в теме, потому совершил "небольшую" ошибочку - заказанный дисплей хотя и имел разрешение, как у DSO138, подключался по 16 битной шине (у DSO138 - по 8ми)... Так что идея попробовать собрать на этом дисплее и отладочной плате STM32F103C8T6 :) аналог DSO138 провалилась еще до начала работ...
Ну, раз о совместимости с DSO138 речь уже не шла, для ускорения процессов освоения TFT за основу я взял уже слегка освоенный мной процессор STM32F0R8 на плате Discovery. Задача была поставлена "учебно-боевая" - сделать свою версию карманного осциллографа - больше для удовольствия, чем по необходимости, ибо Интернет полон подобными конструкциями и без меня... :) (ну нравится мне сам процесс программирования и отладки :) )...
В общем - на сегодняшний день прога написана процентов на 60 - осциллограмма отображается и синхронизируется (триггер с внешнего компаратора), но пока не прописан диапазон медленных разверток и не доделана интерфейсная часть. Экран похож (оформлением) на DSO138, немного по-другому я разместил служебную информацию. Пока использую внутренний DAC, максимальная частота семплирования - 1.2 MHz при 24 точках на клетку, что дает мне 50 kHz входного сигнала любой формы с адекватным отображением (у DSO138 на этих частотах "не синус" уже рисует криво), а применяя простейшую линейную интерполяцию мы получим относительно "честное" отображение 100 и, возможно, 200 kHz. Для получения таких частот сэмплирования пришлось слегка "разогнать" процессор, он работает на 72 MHz тактовой частоты (максимальная по даташиту- 48, максимальная еще рабочая - 96 :) ) при тактировании ADC 18 MHz.
Планирую сделать версию с внешним DAC, там есть с чем повозиться :) - синхронный ввод с порта с DMA... Задачка эта решена до меня - но мне интересно разобраться самому - не справлюсь, тогда буду просить помощи у корифеев... При внешнем DAC диапазон расширится (надеюсь) раз в десять, что уже позволит называть конструкцию "прибором" :).
Аналоговую часть еще не делал, но наработки у меня есть (см. https://radiokot.ru/forum/viewtopic.php ... 1#p2862281) - буду делать нечто похожее, хотя и несколько иначе (другие ОУ, ключи, компаратор и т.д.), еще не рисовал начисто.
В интерфейсе будет энкодер (один - точно!), несколько кнопок, уровень триггера и, возможно, уровень сдвига по вертикали будут задаваться потенциометрами. Теоретически хочу оставить возможность добавления второго канала - но пока реализовывать не буду - сначала отработаю схемотехнику на одном, да и частотные параметры двухканальника сразу уполовинятся...

Re: Вариант энкодера для DSO138

Вт фев 04, 2020 23:17:31

Ну вот - не прошло и двух лет! :)
А вдруг кому интересно - маленький отчет. Осцилл я таки сделал! :) На STM32F103C8T6 Экран - 3.2'
Изображение
Параметры - чувствительность 5mV - 5V на клетку(левый энкодер), развертки 100mS - 2uS на клетку(правый энкодер). Полоса пропускания аналогового тракта - около 5 MHz, реально нормально видимый сигнал - 1MHz., при этом еще можно отличить прямоугольник от синуса. Автоизмерение верхнего и нижнего напряжения по экрану и частоты срабатывания триггера развертки (ну точность там не ахти - несколько %, ибо подсчет ведется по пикселям, только чтобы по клеточкам вручную не считать :)), режимы развертки - авто и норм (ждущий), однократный отсутствует, что в некоторых случаях компенсируется ждущим с последующим остановом (Hold). Вход - закрытый/открытый (переменка/постоянка), уровень GND отмечен левым маркером и сдвигается в пределах экрана вверх/вниз (левый энкодер после нажатия на него), уровень триггера отмечен правым маркером и сдвигается в пределах экрана вверх/вниз (правый энкодер после нажатия на него). С помощью кнопок можно выбрать режим и фронт срабатывания триггера, заморозить изображение (Hold/Run) и переключить режим входа (переменка/постоянка). Точка срабатывания триггера отмечена на экране белой линией (первая клетка от левой стороны экрана) и двигаться не может, кольцевой буфер экрана отсутствует - двигать остановленное изображение по экрану вправо/влево нельзя. "Красивостей" в виде менюшек и разнообразных измерительно-вычислительных режимов нет.
Изображение
http://img.radiokot.ru/files/99520/24cu1edyk0.jpg
Прямоугольник не лучшего качества - ну это с самодельного DDS, он такой и есть - с выхода Attiny 2313 :).

Почему именно такой набор функций и органов управления?
Ну - во-первых была поставлена цель - сделать как можно проще схему, потому в ней отсутствуют внешний АЦП, память FIFO и компаратор триггера, как следствие однократный режим развертки реализовать не получилось (я вообще крайне редко его использую, даже когда он есть :) - в основном я занимаюсь звуковыми устройствами).
Во-вторых - я делал прибор "под себя" - мне хотелось сделать удобный осциллограф с привычным (мне) интерфейсом в "аналоговом стиле" - это когда не приходится для переключения входа "на переменный ток" заходить в две менюшки, а потом выходить из них обратно (RIGOL), об "удовольствии" изменить уровень GND в DSO138 я вообще молчу... :) Потому у меня два энкодера (как на "больших" осциллографах :)) и по кнопке на каждый режим. При том удобство цифрового прибора мне хотелось тоже сохранить, потому есть режим Hold, позволяющий в сочетании со ждущим режимом триггера "поймать" нужную волну и разглядывать ее сколько угодно. Да, на медленных развертках там еще и "антиалиасинг" есть..
Что касается экранных измерений - опыт работы с RIGOL'ом показал, что точность там неважная, да и основное назначение осциллографа - визуализация сигналов, потому у меня измеряются только размах напряжения и частота.
Ну и последнее - дома RIGOL'а у меня нет, а DSO138 - все же слабоват - при 100 kHz он уже форму сигнала не отображает - все переводит на синус, все, что выше 10-20 kHz - сплошная аппроксимация, да и синхронизация у него на этих частотах никакая. Да, у него есть однократный режим, токо он не работает на этих частотах...
Потому я "выжал" почти на порядок лучшую частотку - на развертке 2uS на клетку АЦП снимает 12 точек и линейно аппроксимируется до 24 точек на клетку.
Питание - аккумулятор (пока от старой Нокии :)), зарядка - по микроЮСБ (контроллер зарядки ТР4056). Потребление - около 200 мА, на плате стоит DC-DC, повышает до 7.5v, отрицательное напряжение для аналоговой части преобразуется на 7660. В аналоговой части - 2 ОУ AD8065 (поначалу купил подделки, потом перезаказал и заменил первый ОУ, второй так и остался подделкой :)) и пара коммутаторов CD4051/53.
Ну как-то так... :)

Re: Вариант энкодера для DSO138

Чт фев 06, 2020 07:28:29

Интересная тема, хотелось бы увидеть продолжение.
А первоначальный автор не развивал тему с энкодером дальше?

Re: Вариант энкодера для DSO138

Чт фев 06, 2020 19:34:31

Я где-то встречал... Жаль точно не помню - но вроде была версия с энкодером и для DSO138... Жаль один только энкодер не особенно добавляет функциональности - да и там одним энкодером не обойтись - ведь если делать все управление от энкодера, то нужно чем-то переключать входной делитель... Правда - можно поставить герконовые или твердотельные реле или коммутатор на КМОП... Так все это уже сделано в DSO150, в сети есть его схема
http://img.radiokot.ru/files/99520/medi ... 51phes.jpg
и, возможно, прошивки... Но все остальные-то параметры остается прежними - частотка до 100kHz с неважной синхронизацией!
Да и по сложности получится не проще, чем моя конструкция....
Ответить