Пультоскоп на Arduino 27МГц!!!

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Okmor пишет:

Вчера приделал автономное питание к прибору - увеличились шумы, припаял несколько конденсаторов, но результатом не доволен.

Я использовал обычные китайские преобразователи DC-DC UP , что по 0,5$. 

Там нужно не просто конденсатор, а индуктивность+конденсатор, попробуйте. Если не поможет значит наводка по воздуху и поможет только экранировка входных цепей.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

P.S. : И все это зависит от индивидуальной конструкции.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Okmor пишет:

Вчера приделал автономное питание к прибору - увеличились шумы, припаял несколько конденсаторов, но результатом не доволен.

Я использовал обычные китайские преобразователи DC-DC UP , что по 0,5$. 

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

Считаю, что питание лучше организовать так: Преобразователь выставить вольт на 7-9. И питать ардуино через вход  стабилизатора. Питание на дисплей - от выхода ардуино через фильтр LC. Возможно преобразователь и входные цепи (аттенюатор, ОУ, АЦП) нужно упаковывать в отдельные металлические экраны. В моем на ЭЛТ сделано именно так. Никаких шумов. Но там расстояния поболее.

За схему спасибо.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Возможно стоит попробовать защиту в простейшем варианте.

 

На схеме  переделывал питание.

А использовать  RAW (VIN) для питания целесообразно как дополнительный фильтр по питанию.

При чем АЦП штука цифровая, может шуметь на ОУ. Их надо развязывать по питанию.

Если попробуете, то напишите результат, плиз. Индуктивность указана от балды. Большая она там и не нужна. Можно использовать те, которые выглядят как резисторы на 2-5 мкгн. Возможно получится обойтись без сильной экранировки цепей. Чувствительность то не столь велика.

А вот если повышать КУ для ОУ и делать многоступенчатый аттенюатор, то вопросы экранировки обязательно встанут во весь рост.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Лекс 59 пишет:

Okmor пишет:

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

Считаю, что питание лучше организовать так: Преобразователь выставить вольт на 7-9. И питать ардуино через вход  стабилизатора. Питание на дисплей - от выхода ардуино через фильтр LC. Возможно преобразователь и входные цепи (аттенюатор, ОУ, АЦП) нужно упаковывать в отдельные металлические экраны. В моем на ЭЛТ сделано именно так. Никаких шумов. Но там расстояния поболее.

За схему спасибо.

Да или так ставить линейный стаб после импульсного

Vin - Это Vcc?

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

А вообще-то не понятно , чо за Ардуино у которого и 5В и 3,3 В на борту ?

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

240265 пишет:

А вообще-то не понятно , чо за Ардуино у которого и 5В и 3,3 В на борту ?

Это Ардуино-Нано. Но там ведь кварц маленький. Я лично такой не факт, что смогу заменить. Если без разгона то у тех нано, что у меня есть кажется 8 мгц.

В принципе, если Okmor именно с таким кварцем получал то, что мы видим, то ладно. И по практике с 3 вариантами Пультоскопа я осторожно отношусь к экстремальному разгону. В своем Пультоскопе на 24 мгц кварце на опорном 1,1 вольта выше 6 не рисует. А при 20 мгц - полный функционал. Мне этот вариант понравился больше.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Okmor пишет:

Вчера приделал автономное питание к прибору - увеличились шумы, припаял несколько конденсаторов, но результатом не доволен.

Okmor возможно помехи связаны именно с питанием через VIN.

5 вольт питания для 5 вольтового стабилизатора вряд ли являются штатным режимом. И возможно встроеный стабилизатор пульсирует из-за незначительной разницы вход-выход.

Если у вас нет желания переделывать питание как на измененной схеме выше, то можно попробовать просто запитывать ардуино через вход 5 вольт.  Но питание  ОУ лучше все-таки пустить через индктивность и поставить емкость.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Ну да если Vin это RAW y PRO MINI. Я ими пользуюсь. поэтому и не понял про 3,3 В. У Нано есть на борту. Извиняюсь за невнимательность.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

К стати у свежих Про мини тоже кварц маленький (3 вывода) и без конденсаторов (они внутри кварца ) .Тоже геморрой с заменой.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Не исключено, что индуктивно емкостный фильтр нужно ставить еще и между цифровым и аналоговым питанием АЦП. Или резистивно-емкостный.

Но необходимость такой развязки надо пробовать на практике. У меня таковой пока нет.

Сарк
Offline
Зарегистрирован: 22.04.2015

Поскольку шуметь можно только по аналоговой части, то внимательнее отнестись к питанию, а точнее к линиям питания. Если из одной точки будете брать питание на аналоговую часть и на цифровую, то успех обепечен, но отдельными линиями!. Вообщето было б интересна величина шума, сколько разрядов? 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Лекс 59 пишет:
 Okmor возможно помехи связаны именно с питанием через VIN.

На схеме я указал не правильно. Питание должно быть через пин +5В, в следующий раз поправлю.

Промыл плату и шумы существенно уменьшились. У меня разводка по принципу "как вышло" типа паутина из проводков. Думаю, если развести грамотно, то и шумы пропадут вообще.

Еще есть несколько багов в программе, но это не влияет на основную работу. Понемногу все исправлю. 

Вижу, что надо сделать отдельную ветку. Как доделаю следующий релиз, сделаю фото, видео и отдельную ветку.

Планирую развести плату. Вот только не знаю как делать:

Вариант 1. Под народный корпус сделать плату под ЛУТ и продавать/дарить понемногу, для тех кому лень делать самому.

Вариант 2. Сделать разводку под макетную универсальную плату.

Вариант 3. Сделать шильд для Arduino UNO типа бутерброда. Шильд АЦП, сверху ОУ с входным делителем, потом батарея с зарядкой, сверху экранчик. Будет такой универсальный уродец.

GFX
Offline
Зарегистрирован: 24.04.2015

Если тут голосование то Вариант 1. 

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

я тоже думаю что первый вариант предпочтительней, хотя и с шилдом тоже не плохо, а кварц стоять стандартный будет? или перепаивать надо будет?

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Я тоже склоняюсь к первому варианту, особенно учитывая, что паять СОИК на макетку некомильфо.

Если сооружать печатку, то следующие вопросы будут у каждого: Какие резисторы переменные (с выводом наружу), а какие подстроечные (сугубо внутри). Подстроечники многооборотные или достаточно простых. Какая ардуинка, с каким кварцем (если ее запаивать без панелек, то фиг потом кварц поменяешь). Какой дисплей естественно.

В принципе можно соорудить печатку только для основной части. Т.е. входные цепи, ОУ, АЦП, ардуинка, энкодер. Разьем на дисплей. С питаловом надо думать. Если отдельным блочком, то легче экранировать.  Можно соорудить печатку ОУ,  АЦП, ардуино. Но там будет много внешних соединений.

Т.е. с печаткой видимо целесообразно позже возиться. После утрясания и в отдельной ветке. Например фото внутренностей сильно поможет в вопросах компановки.

Что касается шилда. Осциллограф нередко нужен внезапно. Ну не работает что-то. Это тот прибор, который должен быть, как тестер, под рукой.

Ага, быстренько освободили ардуинку, быстренько залили скетч (кстати, а где он у меня, на Е или на F?, Этот или этот?), быстренько напялили шилд...   "Я на это пойтить не могу", как говаривали в одной небезызвестной игрушке.

Возможно кому-то шилд целесообразен. Если ослик так, поиграться и не особо нужен. Это зависит от задач. Я буду делать законченый прибор.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Очень хочется уместить все в вот такой корпус. (Я таких прикупил 5 шт и лежат без дела.)

Наружу будет только два резистора. Все остальные внутри. Ввиду дешевизны подстроечников, я их использовал всюду, где не знал номиналов. Да и вдальнейшем можно их использовать, это значительно удобнее чем возится с перепайкой, или подбирать константы в скетче.

Переменники: Вот только не нашел красивых недорогих переменников. Все какие-то огромные и большие. Привязыватся к совку не хочу, их все труднее достать.

Ардуинка: Она огромная. Можно переделать под Atmega328 в DIP корпусе. DIP мне нравится больше, его можно палить и менять. Да и для начинающих паяльщиков (как я) SMD паять затруднительно. При уходе от ардуинки, придется добавить опорное для измерения диапазона. Можно просто впаять стаб на 3,3В.

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

ОУ: Тоже на панельку. Позволяет его палить через день и не уродуя прибора менять без проблем.

Дисплей: Придется использовать как у меня. Во первых он самый дешевый из 128х64. Вовторых он двухцветный и инертный, что позволяет добится эффекта шлейфа за быстроизменяющимися сигналами. И он SPI, что позволяет использовать аппаратные возможности процессора.

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

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

Okmor пишет:

Очень хочется уместить все в вот такой корпус. (Я таких прикупил 5 шт и лежат без дела.)

Наружу будет только два резистора. Все остальные внутри. Ввиду дешевизны подстроечников, я их использовал всюду, где не знал номиналов. Да и вдальнейшем можно их использовать, это значительно удобнее чем возится с перепайкой, или подбирать константы в скетче.

Переменники: Вот только не нашел красивых недорогих переменников. Все какие-то огромные и большие. Привязыватся к совку не хочу, их все труднее достать.

Ардуинка: Она огромная. Можно переделать под Atmega328 в DIP корпусе. DIP мне нравится больше, его можно палить и менять. Да и для начинающих паяльщиков (как я) SMD паять затруднительно. При уходе от ардуинки, придется добавить опорное для измерения диапазона. Можно просто впаять стаб на 3,3В.

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

ОУ: Тоже на панельку. Позволяет его палить через день и не уродуя прибора менять без проблем.

Дисплей: Придется использовать как у меня. Во первых он самый дешевый из 128х64. Вовторых он двухцветный и инертный, что позволяет добится эффекта шлейфа за быстроизменяющимися сигналами. И он SPI, что позволяет использовать аппаратные возможности процессора.

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

тоже в наличии таких два корпуса имеются, заказывал под ослика, но никак не дойдут руки)

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Okmor пишет:

 

Дисплей: Придется использовать как у меня. Во первых он самый дешевый из 128х64. Вовторых он двухцветный и инертный, что позволяет добится эффекта шлейфа за быстроизменяющимися сигналами. И он SPI, что позволяет использовать аппаратные возможности процессора.

А можно марку дисплея и по возможности ссылку на Али где он не дорогой , а то я видел только в районе 500 руб.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

240265 пишет:
А можно марку дисплея и по возможности ссылку на Али где он не дорогой , а то я видел только в районе 500 руб.

Вот дисплей. Браз здесь:

Ivan_Kornege
Offline
Зарегистрирован: 23.06.2016

EgorKa пишет:

Ivan_Kornege пишет:

EgorKa пишет:

Купил 5110

так правильно подключать ?

Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей  CLK,DIN,DC,CE,RST

Ножка Ардуино--- Ножка 5110

2-----------------------CLK

3-----------------------DIN

4-----------------------DC

6-----------------------CE

7-----------------------RST

?

должон завестись. проверь только питание, они 5110 бывают на 5 и на 3 вольта.

Чёт надо схему полноценную на пультоском намуливать . Ща порисую.

да завелся пультоскоп. Частота на дисплее пультоскопа 1600KHz а частотомер и осциллограф 1687KHz показывают.

Шаги с дробями 1.7, 17, 169, 1688

Можно сделать шаг 1Гц, 10Гц, 100Гц, 100КГц -где что подпарвить?

ХМ. я впаял кварц на 30мегагерц.

В режиме генератор на дисплее 1408KHz а на осциллографе 1,500MHz кажет.

Косяк однако.

Ivan_Kornege
Offline
Зарегистрирован: 23.06.2016

bodriy2014, ХЕЛП!

Показания дисплея и осциллографа разные

Будь ласка подскажи где косяк

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

Ivan_Kornege пишет:

EgorKa пишет:

Ivan_Kornege пишет:

EgorKa пишет:

Купил 5110

так правильно подключать ?

Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей  CLK,DIN,DC,CE,RST

Ножка Ардуино--- Ножка 5110

2-----------------------CLK

3-----------------------DIN

4-----------------------DC

6-----------------------CE

7-----------------------RST

?

должон завестись. проверь только питание, они 5110 бывают на 5 и на 3 вольта.

Чёт надо схему полноценную на пультоском намуливать . Ща порисую.

да завелся пультоскоп. Частота на дисплее пультоскопа 1600KHz а частотомер и осциллограф 1687KHz показывают.

Шаги с дробями 1.7, 17, 169, 1688

Можно сделать шаг 1Гц, 10Гц, 100Гц, 100КГц -где что подпарвить?

ХМ. я впаял кварц на 30мегагерц.

В режиме генератор на дисплее 1408KHz а на осциллографе 1,500MHz кажет.

Косяк однако.

в коде на сколько я помню выставляется какой кварц ставишь такое значение туда и пишешь.... возможно косяк в этом

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Ivan_Kornege пишет:

bodriy2014, ХЕЛП!

Показания дисплея и осциллографа разные

Будь ласка подскажи где косяк

Это нормально, чем выше частота тем больше погрешность от написанного, генератор работает от таймеров у которых есть определенные делители. В соседней ветке у dimax генератор показывает то что выдает. без погрешности и округления как у меня.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

 

334 р конечно не 500 но по сравнению с цветными дофига.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Okmor пишет:

1. Очень хочется уместить все в вот такой корпус. (Я таких прикупил 5 шт и лежат без дела.)

2. Ардуинка: Она огромная. Можно переделать под Atmega328 в DIP корпусе. DIP мне нравится больше, его можно палить и менять. Да и для начинающих паяльщиков (как я) SMD паять затруднительно. При уходе от ардуинки, придется добавить опорное для измерения диапазона. Можно просто впаять стаб на 3,3В.

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

4. ОУ: Тоже на панельку. Позволяет его палить через день и не уродуя прибора менять без проблем.

5. Дисплей: Придется использовать как у меня. Во первых он самый дешевый из 128х64. Вовторых он двухцветный и инертный, что позволяет добится эффекта шлейфа за быстроизменяющимися сигналами. И он SPI, что позволяет использовать аппаратные возможности процессора.

1. Да, корпус интересный. Мне такой же набор едет со 2 апреля с Ебея. Вчера заказал еще 2 шт на Али. Хорошо бы в него уместиться.

2. Я тоже предпочитаю ДИП. На панельке. Про опорное понял не очень. Там же делитель. Можно брать и с 5 вольт. Стабильность чуть хуже, а это важно? Осциллограф не есть высокоточный вольтметр. Стоит ли ставить отдельный стаб?

3. Думаю разумнее пихнуть на плату с процем и ОУ, да и энкодер посмотреть туда-же. Схему выработаем - можно соорудить печатку под ЛУТ.

4. У меня АД823 в СОИК. ХЗ. Хотя не велика проблема. Разводка то одинаковая, только размеры отличаются. Плату поправить не долго.

5. А вот здесь для меня засада. Такого дисплея у меня нет и нет желания выписывать и ждать минимум 2 месяца. Да у меня и без того уже много разных скопилось. Видимо придется ждать, пока кто-то сведующий в программировании адаптирует под имеемый дисплей.

Подстроечники на входе. Конечно с ними проще. Но ведь можно и просто два резюка. Припаял проводками подстроечник, настроил, померил и запаиваешь уже штатные. Тем более, что можно увеличить номинал. Входное сопротивление ОУ позволяет. Да и такая уж потрясающая точность там не нужна.

Реально там подстроечник нужен только на опорном.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Нужно попробовать экран на ILI9341 хватит ли скорости в цвете.

С библиотекой Adafruit_ILI9341-master вроде бы шустро работает.

но хватит ли памяти ? После компиляции скетча Okmor вот что получилось:

Sketch uses 28 882 bytes (94%) of program storage space. Maximum is 30 720 bytes.
Global variables use 1 728 bytes (84%) of dynamic memory, leaving 320 bytes for local variables. Maximum is 2 048 bytes.
Low memory available, stability problems may occur.

Может быть придется убрать один луч. Который без ADC.

Okmor , раз у Вас все налажено сделайте вариант с одним лучом.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

При разводке платы под Atmega328 в DIP корпусе, вспомнил, что в ней не будет выходов А6, А7. - Нет там таких.

Начал искать решение и сообразил, что к диплею ведут два провода без которых можно обойтись. Первый CS включение интерфейсв LCD, а второй RST - сброс дисплея. CS тупо посадил на землю. RST запитал через RC задержку где-то 0,5с. Все заработало, входы освободились.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Тогда можно сделать так:

ST7565 glcd(11, 13, 8, 12);

Освободится D10.

Кнопку "ПАУЗА" перекинуть на него, а сигнал с А7 подать на А2 и вот Вам Dip корпус.

Ardudue
Offline
Зарегистрирован: 31.08.2016

bodriy2014 , Вы проделали огромную работу - Спасибо Вам.

Собрал последнюю версию с дисплеем 5110 все работает.

Вот жаль что нет запомининания последней частоты генератора.

После выключени приходится все выставлять заново.

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

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Ardudue пишет:

bodriy2014 , Вы проделали огромную работу - Спасибо Вам.

Собрал последнюю версию с дисплеем 5110 все работает.

Вот жаль что нет запомининания последней частоты генератора.

После выключени приходится все выставлять заново.

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

---Как вариант укажите в скетче частоту которая нужна, она будет появится после включения прибора.

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

---а что вы хотите убрать из меню напишите, я выложу код.

Ardudue
Offline
Зарегистрирован: 31.08.2016

bodriy2014 пишет:

Ardudue пишет:

bodriy2014 , Вы проделали огромную работу - Спасибо Вам.

Собрал последнюю версию с дисплеем 5110 все работает.

Вот жаль что нет запомининания последней частоты генератора.

После выключени приходится все выставлять заново.

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

---Как вариант укажите в скетче частоту которая нужна, она будет появится после включения прибора.

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

---а что вы хотите убрать из меню напишите, я выложу код.

Спасибо за скорый ответ. 

Стартовую частоту я поставил 1 МГц. Но в ходе пользования приходится перенастраивать генератор и если не закончил настройку моей поделки а надо отлучиться с выключением приборов, то для продолжения приходится опять выставлять генератор. Энергонезависимая память тут конечно очень бы помогла.

Да в меню мне достаточно только генератор прямоугольных импульсов с регулировкой частоты и скважности с точностью как в последней версии.

Все остальные функции наверняка полезны, но я не использую. 

С уважением.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Ardudue пишет:

Да в меню мне достаточно только генератор прямоугольных импульсов с регулировкой частоты и скважности с точностью как в последней версии.

Все остальные функции наверняка полезны, но я не использую. 

С уважением.

Возможно вам стоит присмотреться вот к этому прибору http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=4

Ivan_Kornege
Offline
Зарегистрирован: 23.06.2016

Лекс 59 пишет:

Ardudue пишет:

Да в меню мне достаточно только генератор прямоугольных импульсов с регулировкой частоты и скважности с точностью как в последней версии.

Все остальные функции наверняка полезны, но я не использую. 

С уважением.

Возможно вам стоит присмотреться вот к этому прибору http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=4

этот ген шагет семимильными шагами на частоте 1мегагерц а скважность так только 20,40,60 %

bodriy2014 разогнал ардуину и ген выглядит получше почти в 2-А РАЗА.

Я вот тоже смотрел на его ген и думал воткнуть кварц 32мега. Но нет пока кварца.

Ardudue
Offline
Зарегистрирован: 31.08.2016

Лекс 59 пишет:

Ardudue пишет:

Да в меню мне достаточно только генератор прямоугольных импульсов с регулировкой частоты и скважности с точностью как в последней версии.

Все остальные функции наверняка полезны, но я не использую. 

С уважением.

Возможно вам стоит присмотреться вот к этому прибору http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=4

Спасибо за совет! Я собирал этот генератор. На частотах 0,5-2МГц он грубоват.

VetalST
Offline
Зарегистрирован: 29.12.2015

 Xumuk и Лекс 59 я помню у вас есть дисплеи LS020 и L2F50.

Вот библиотеки всё как и в старых, но работают с новими ID вплоть до arduino 1.6.11.

S65Display_ls020_PowerOff_arduino_1_6_11     https://yadi.sk/d/AAiPUBOtunmsd

S65Display_LCD_L2F50_PowerOff_arduino_1_6_11    https://yadi.sk/d/GcwwC3Ilunn3m

Может пригодятся.

 

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

VetalST пишет:

 Xumuk и Лекс 59 я помню у вас есть дисплеи LS020 и L2F50.

Вот библиотеки всё как и в старых, но работают с новими ID вплоть до arduino 1.6.11.

S65Display_ls020_PowerOff_arduino_1_6_11     https://yadi.sk/d/AAiPUBOtunmsd

S65Display_LCD_L2F50_PowerOff_arduino_1_6_11    https://yadi.sk/d/GcwwC3Ilunn3m

Может пригодятся.

 

большое спасибо=))) Я все никак не дособеру в корпусе все... ремонт дома времени нет=))) вот должен закончить попробую новую версию)))

VetalST
Offline
Зарегистрирован: 29.12.2015

Тоже хочу новую попробовать. Но времени не хватает. Вот и подумал может вы быстрей сделаете (: 

К стати arduino 1.6.11 экономит место в ардуине. Пультоскоп занимает 18 844 (61%), а в arduino 1.6.5 - 21 256 (69%) байт, в arduino 1.0.5 - 21 430 байт.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

VetalST пишет:

 Xumuk и Лекс 59 я помню у вас есть дисплеи LS020 и L2F50.

Громадное спасибо. Пригодятся наверняка. Только для меня это будет чуть позже. Сейчас есть заботы которые я не имею возможности откладывать.  И кроме разных дел еще и накладывается возможность/необходимость (сложно сказать чего больше) замены компа со всей сопутствующей возней, переустановкой, переносом и т.д. Так что пауза может и подзатянуться.

240265
240265 аватар
Offline
Зарегистрирован: 12.08.2015

Лекс 59 пишет:

накладывается возможность/необходимость

"Возможность" - главнее :). "Необходимость" - Она всегда присутствует.

Саня555
Offline
Зарегистрирован: 02.09.2016

Всем доброго времени суток. Я тоже хочу сделать осцилограф но мои знаеия в элеектронике оставляют желать лутчего.

Как то давно находил проэкт и сохранил его.

может вам пожет схема этого осцилографа.

Сылка. http://s41.radikal.ru/i094/1609/b9/e6722317353b.gif

 

 

revlerik
Offline
Зарегистрирован: 26.12.2015

Саня555 пишет:

Как то давно находил проэкт и сохранил его.

может вам пожет схема этого осцилографа.

Сылка. http://s41.radikal.ru/i094/1609/b9/e6722317353b.gif

 

 

Это хамилион первой ревизии.

Саня555
Offline
Зарегистрирован: 02.09.2016

Понял. а если в место про мини использовать Maple mini.?
у меня просто про мини с миниатюрныим кварцом.

VetalST
Offline
Зарегистрирован: 29.12.2015

Xumuk и Лекс 59 вы пользуетесь пультоскопом на дисплеи LS020 или L2F50?

Если хотите вот мой последней версии убрал мерцание экрана.

Вот видео  https://youtu.be/TrIkPTDAqUk .

Скетч https://yadi.sk/d/HH6YIVcMusKoP Компелировал в ID arduino 1.6.11.

Или замените в своем скетче. За счет двух масивов ,зарисовует старый график и рисует новый. Можно и на других дисплеях так сделать. И немного изменил по мелочам.

изменил и добавил
byte mass[501];//массив АЦП
byte massPOV[501];//массив АЦП

byte sinhMASS=0;
byte sinhMASSPOV=0;
/////////////// ИЗМЕНИЛ ////////////////////////
void Zamer(){
  if (razv>=6){ADCSRA = 0b11100010;}//delitel 4
  if (razv==5){ADCSRA = 0b11100011;}//delitel 8
  if (razv==4){ADCSRA = 0b11100100;}//delitel 16
  if (razv==3){ADCSRA = 0b11100101;}//delitel 32
  if (razv==2){ADCSRA = 0b11100110;}//delitel 64
  if (razv<2){ADCSRA = 0b11100111;}//delitel 128
  if (razv==0){
      for(int i=0;i<500;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          delayMicroseconds(500);
          mass[i]=ADCH;
      }
  }
  if (razv>0){
      for(int i=0;i<500;i++){ 
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          mass[i]=ADCH;
      }
  }
  
}

void MenuT(){//перерисовка нижнего меню    
  if (FreqCount.available()) { 
    count = FreqCount.read();
  }//вывод частоты по готовности счетчика
  //#######################################частоты сигнала
  byte Frec1=0;
  long Frec=0;
  bool flagFrec1=0;
  bool flagFrec2=0;
  bool flagFrec3=0;
  for(int y=1;y<255;y++){
    if(flagFrec1==0){
      if(mass[y]<SinU){
        flagFrec2=1;
      }
    }
    if(flagFrec1==0){
      if(flagFrec2==1){
        if(mass[y]>SinU){
          flagFrec1=1;
          Frec1=y;
        }
      }
    }
    if(flagFrec1==1){
      if(mass[y]<SinU){
        flagFrec3=1;
      }
    }
    if(flagFrec3==1){
      if(mass[y]>SinU){
        if (razv>=6){
          Frec=1000000/((y-Frec1-1)*3.27);
        }//delitel 4
        if (razv==5){
          Frec=1000000/((y-Frec1)*3.27)/2;
        }//delitel 8
        if (razv==4){
          Frec=1000000/((y-Frec1)*3.27)/4;
        }//delitel 16
        if (razv==3){
          Frec=1000000/((y-Frec1)*3.27)/8;
        }//delitel 32
        if (razv==2){
          Frec=1000000/((y-Frec1)*3.27)/16;
        }//delitel 64
        if (razv==2){
          Frec=1000000/((y-Frec1)*3.27)/32;
        }//delitel 128
        if (razv==1){
          Frec=1000000/((y-Frec1)*3.27)/32;
        }//delitel 128
        if (razv==0){
          Frec=1000000/((y-Frec1)*500)-0.2;//-0.2 КОРЕКЦИЯ ПОКАЗАНИЙ ЧАСТОТЫ ГЦ
        }//delitel 128
        flagFrec1=0;
        flagFrec3=0;
      }
    }
  }
  //#######################################частоты сигнала
  if(opornoe==1){
    if((Vmax*VCC/255)>2.8){
      countX=count*(overclock/16.0);
    }
    if((Vmax*VCC/255)<=2.8){
      countX=Frec*(overclock/16.0);
    }
  }
  if(opornoe==0){
    countX=Frec*(overclock/16.0);
  }
  if(countX<1000){
    sprintf(str, "%dHz", countX);
    //lcd.drawText(18, 122, str, 1, WHITE, BLACK);
  }
  if(countX>=1000){
  float countXK=countX/1000.0;
  temp = (countXK - (int)countXK) * 1000; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д
  sprintf(str, "%d.%03dkHz", (int)countXK, abs(temp));
  // lcd.drawText(18, 122, str, 1, WHITE, BLACK);
  }
  ////////////////пишем частоту///////////////////////
  lcd.drawText(0, 122, "F=             ", 1, WHITE, BLACK);
  lcd.drawText(18, 122, str, 1, WHITE, BLACK);
  /////////////////////////////////////////////////////////////
/////////////////////////V=/////////////////////////////////////////////
  if(digitalRead(delit)==HIGH){//включен или отключен делитель
  if(opornoe==0){
    armcurrent = (Vmax*1.1/255)*10;
    temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
    sprintf(str, " V=%d.%02d ", (int)armcurrent, abs(temp)); 
  }
  if(opornoe==1){
    armcurrent = (Vmax*VCC/255)*10;
    temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
    sprintf(str, " V=%d.%02d ", (int)armcurrent, abs(temp)); 
  } 
  lcd.drawText(110, 122, str, 1, WHITE, BLACK); //пишем вольты
  }
  else {//включен или отключен делитель
  if(opornoe==0){
    armcurrent = Vmax*1.1/255;
    temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
    sprintf(str, " V=%d.%02d ", (int)armcurrent, abs(temp)); 
  }
  if(opornoe==1){
    armcurrent = Vmax*VCC/255;
    temp = (armcurrent - (int)armcurrent) * 100; // множитель - число знаков после запятой. 10 - 1, 100 - 2, 1000 - 3 и т.д.
    sprintf(str, " V=%d.%02d ", (int)armcurrent, abs(temp)); 
  }
  lcd.drawText(110, 122, str, 1, WHITE, BLACK); //пишем вольты 
 }
}
////////////////////////////////////////////////////////////////////////////
void loop()  Замените в своем
if(pultoskop==1){
    while(1){
  //////////////////////отключение пультоскопа
   PowerOff(); //отключение пультоскопа
  ////////////////////////////////////////
      //отрисовка и перебор меню###############################
      if(menu==0){ // опорное
        lcd.fillRect(0, 0, 45, 9, PINK);
   
        if(digitalRead(pravo)==HIGH){
         // lcd.fillRect(0, 12, 30, 120, BLACK);//стирание напряжения
          opornoe=1;
        }
        if(digitalRead(levo)==HIGH){ 
         // lcd.fillRect(0, 12, 30, 120, BLACK);//стирание напряжения
          opornoe=0;
        }
        lcd.drawText(55, 1,"Razv", 1, WHITE, BLACK);
        sprintf(str, "%d", razv); 
        lcd.drawText(91, 1,str, 1, WHITE, BLACK);
        lcd.drawText(112,1,"PauseOFF", 1, WHITE, BLACK);
      }
      //////////////////////////////////////////////////////
      if(menu==1){ // развертка
        lcd.fillRect(48, 0, 108, 9, PINK);
        if(digitalRead(pravo)==HIGH){//
        delay (30);
        while((digitalRead(pravo)==HIGH));
        lcd.fillRect(25, 16, 175, 111, BLACK);//стиране поле графика
          razv++;
          if(razv==11){
            razv=10;
          } 
        }
        if(digitalRead(levo)==HIGH){//
        delay (30);
        while((digitalRead(levo)==HIGH));
        lcd.fillRect(25, 16, 175, 111, BLACK);//стиране поле графика
          razv--;
          if(razv==255){
            razv=0;
          } 
        } 
        lcd.drawText(55, 1,"Razv", 1, WHITE, BLACK);
        sprintf(str, "%d", razv); 
        lcd.drawText(91, 1,str, 1, WHITE, BLACK);
        lcd.drawText(112, 1,"PauseOFF", 1, WHITE, BLACK);
      }
      ////////////////////////////////////////////////////
      if(menu==2){  // синхронизация
        prokr=0;
        paus=0;
        lcd.drawText(55, 1,"Razv", 1, WHITE, BLACK);
        sprintf(str, "%d", razv); 
        lcd.drawText(91, 1,str, 1, WHITE, BLACK);
        lcd.drawText(112,1,"PauseOFF", 1, WHITE, BLACK);
        
      ///////////////стираем синхронезацию/////////////
        lcd.fillCircle(169,110-SinU/3, 5, BLACK);
        lcd.fillCircle(169,110-SinU/3, 6, BLACK);
        lcd.fillCircle(169,110-SinU/3, 2, BLACK);
        lcd.fillCircle(169,110-SinU/3, 3, BLACK);
        ////////////////////////////////////////
        if(digitalRead(levo)==HIGH){
          SinU=SinU-20;
          if(SinU<20){
            SinU=20;
          }
        }
        if(digitalRead(pravo)==HIGH){
          SinU=SinU+20;
          if(SinU>230){
            SinU=230;
          }
        }
     ///////////////рисуем синхронезацию/////////////
        lcd.fillCircle(169,110-SinU/3, 5, PINK);
        lcd.fillCircle(169,110-SinU/3, 6, PINK);
        lcd.fillCircle(169,110-SinU/3, 2, WHITE);
        lcd.fillCircle(169,110-SinU/3, 3, WHITE);
      }      
      /////////////////////////////////////////////////////
      if(menu==3){//пауза
        paus=1;
        if(clen_p==0){
         clen_p=1; 
         lcd.fillRect(105, 0, 174, 9, PINK);
        
         lcd.drawText(55, 1,"Razv", 1, WHITE, BLACK);
         sprintf(str, "%d", razv); 
         lcd.drawText(91, 1,str, 1, WHITE, BLACK);
         
         lcd.drawText(112, 1,"PauseON", 1, WHITE, BLACK);
         
        }
      }
///////////////////////////////////////////////////////////////////////

      if(digitalRead(ok)==HIGH){
        delay (30);
        while((digitalRead(ok)==HIGH));
        menu++;
        lcd.fillRect(25, 16, 175, 111, BLACK);//стиране поле графика 
        if(menu==4){
          menu=0;
          paus=0;
          clen_p=0;
        }
        lcd.fillRect(0, 0, 175, 15, BLACK);//стиране ВЕРХ МЕНЮ
        lcd.fillRect(0, 12, 25, 120, BLACK);//стирание напряжения  
      }

    /*  //ось напряжения##########################################
      lcd.drawLine(25, 20, 25, 113, BLUE); 
      lcd.drawLine(26, 20, 26, 113, BLUE);

      lcd.drawLine(26, 25, 29, 25, BLUE); 
      lcd.drawLine(26, 26, 29, 26, BLUE);
      lcd.drawLine(26, 42, 29, 42, BLUE); 
      lcd.drawLine(26, 43, 29, 43, BLUE); 
      lcd.drawLine(26, 59, 29, 59, BLUE); 
      lcd.drawLine(26, 60, 29, 60, BLUE);
      lcd.drawLine(26, 76, 29, 76, BLUE); 
      lcd.drawLine(26, 77, 29, 77, BLUE);
      lcd.drawLine(26, 93, 29, 93, BLUE); 
      lcd.drawLine(26, 94, 29, 94, BLUE);
      lcd.drawLine(26, 109, 29, 109, BLUE); 
      lcd.drawLine(27, 110, 29, 110, BLUE);*/
      //////////////////////////////////////////////////////////////////////////
      if(digitalRead(delit)==HIGH){//включен или отключен делитель
        if(opornoe==0){
        lcd.drawText(3, 1,"11.0V", 1, WHITE, BLACK);
        ////////////////////////////////////////////  
        lcd.drawText(17, 107, "0", 1, RED, BLACK);
        lcd.drawText(0, 90, "2.2", 1, RED, BLACK); 
        lcd.drawText(0, 73, "4.4", 1, RED, BLACK); 
        lcd.drawText(0, 56, "6.6", 1, RED, BLACK);
        lcd.drawText(0, 39, "8.8", 1, RED, BLACK);
        lcd.drawText(0, 22, " 11", 1, RED, BLACK);  
      }
      if(opornoe==1){
        lcd.drawText(3, 1,"50.0V", 1, WHITE, BLACK);
        ///////////////////////////////////////////
        lcd.drawText(17, 107, "0", 1, RED, BLACK);
        lcd.drawText(0, 90, " 10", 1, RED, BLACK);
        lcd.drawText(0, 73, " 20", 1, RED, BLACK); 
        lcd.drawText(0, 56, " 30", 1, RED, BLACK);
        lcd.drawText(0, 39, " 40", 1, RED, BLACK); 
        lcd.drawText(0, 22, " 50", 1, RED, BLACK); 
      }
      }
      else {//включен или отключен делитель
        if(opornoe==0){
        lcd.drawText(3, 1,"1.1V ", 1, WHITE, BLACK);
        ////////////////////////////////////////////  
        lcd.drawText(17, 107, "0", 1, RED, BLACK);
        lcd.drawText(0, 90, "0.2", 1, RED, BLACK); 
        lcd.drawText(0, 73, "0.4", 1, RED, BLACK); 
        lcd.drawText(0, 56, "0.6", 1, RED, BLACK);
        lcd.drawText(0, 39, "0.8", 1, RED, BLACK);
        lcd.drawText(0, 22, "1.1", 1, RED, BLACK);  
      }
      if(opornoe==1){
        lcd.drawText(3, 1,"5.0V ", 1, WHITE, BLACK);
        ///////////////////////////////////////////
        lcd.drawText(17, 107, "0", 1, RED, BLACK);
        lcd.drawText(0, 90, "1.0", 1, RED, BLACK);
        lcd.drawText(0, 73, "2.0", 1, RED, BLACK); 
        lcd.drawText(0, 56, "3.0", 1, RED, BLACK);
        lcd.drawText(0, 39, "4.0", 1, RED, BLACK); 
        lcd.drawText(0, 22, "5.0", 1, RED, BLACK); 
      }
      }
          
      //шкала напряжения########################################
      if(opornoe==0){
        ADMUX = 0b11100100;
      }//выбор внутреннего опорного 1,1В
      if(opornoe==1){
        ADMUX = 0b01100100;
      }//Выбор внешнего опорного
      delay(5);
      if(paus==0){Zamer();}
      //#######################################определение точки синхронизации
      bool flagSINHRO=0;
      bool flagSINHRnull=0;
      for(int y=1;y<255;y++){
        if(flagSINHRO==0){
          if(mass[y]<SinU){
            flagSINHRnull=1;
          }
        }
        if(flagSINHRO==0){
          if(flagSINHRnull==1){
            if(mass[y]>SinU){
              flagSINHRO=1;
              sinhMASS=y;
            }
          }
        }
      }
      //#######################################определение точки синхронизации
      //максимальное значение сигнала##########################
      Vmax=0; 
      for(int y=1;y<255;y++){
        if(Vmax<mass[y]){
          Vmax=mass[y];
        } 
      }
      //максимальное значение сигнала##########################
      //отрисовка графика№№№№№№№№№№№№№№№№№№№№№
      if(paus==0){
       // lcd.fillRect(30, 16, 175, 112, BLACK);//стиране поле графика
        //////////////////////////////////////////////////сетка
        for(byte i=110;i>18;i=i-3){
            lcd.drawPixel(26,i, BLUE);
            lcd.drawPixel(43,i, BLUE); 
            lcd.drawPixel(60,i, BLUE); 
            lcd.drawPixel(77,i, BLUE); 
            lcd.drawPixel(94,i, BLUE); 
            lcd.drawPixel(111,i, BLUE);
            lcd.drawPixel(128,i, BLUE); 
            lcd.drawPixel(145,i, BLUE); 
            lcd.drawPixel(162,i, BLUE);
          }
          for(byte i=30;i<175;i=i+3){
            lcd.drawPixel(i,25, BLUE);
            lcd.drawPixel(i,42, BLUE); 
            lcd.drawPixel(i,59, BLUE);
            lcd.drawPixel(i,76, BLUE); 
            lcd.drawPixel(i,93, BLUE); 
            lcd.drawPixel(i,110, BLUE);
         }
        //////////////////////////////////////////////////////
       lcd.fillCircle(169,110-SinU/3, 2, YELLOW);//рисуем уровень синхронизации 
       lcd.fillCircle(169,110-SinU/3, 3, YELLOW);//рисуем уровень синхронизации 
        ///////////////////////////////////////////////////////
        x=25;
        for(int y=sinhMASSPOV;y<sinhMASSPOV+150;y++){ 
          //for(int y=0;y<145;y++){
           if(razv<7){
            x++;
          }
          if(razv==7){
            x=x+2;
          }
          if(razv==8){
            x=x+3;
          } 
          if(razv==9){
            x=x+4;
          }
          if(razv==10){
            x=x+5;
          }
          if(x>175){
            x=176;
          } // что бы не засирало экран
          
          lcd.drawLine(x,110-massPOV[y]/3, x+1,110-massPOV[y+1]/3, BLACK);//график
        }
        /////////////////////////////////////////////////////////////////////////////////////////
        x=25;
        for(int y=sinhMASS;y<sinhMASS+150;y++){ 
         // for(int y=0;y<145;y++){
           if(razv<7){
            x++;
          }
          if(razv==7){
            x=x+2;
          }
          if(razv==8){
            x=x+3;
          } 
          if(razv==9){
            x=x+4;
          }
          if(razv==10){
            x=x+5;
          }
          if(x>175){
            x=176;
          } // что бы не засирало экран
                
          lcd.drawLine(x,110-mass[y]/3, x+1,110-mass[y+1]/3, GREEN);//график
        }

       // memcpy(massPOV,mass,350); // копируем с одного в другой массив
        for(int i = 0; i < 500; i++){  // копируем с одного в другой массив
        massPOV[i] = mass[i]; // убираем все лишнее
        } 
        sinhMASSPOV = sinhMASS;
        sinhMASS = 0;
        MenuT();  
      }
     /////////////////////////////////////////////////////////////////////////// 
    if(paus==1){//режим паузы
        //////////////////////////////////////////////////////////////////////
        if(digitalRead(pravo)==HIGH){//листаем
          prokr=prokr+5;
          if(prokr>350){prokr=350;}
          lcd.fillRect(0, 12, 175, 15, BLACK);//стиране поле графика
          lcd.fillRect(25, 16, 175, 112, BLACK);//стиране поле графика
          //////////////////////////////////////////////////////////////
          lcd.drawLine(prokr/3+27,12,prokr/3+57,12, YELLOW);//шкала прокрутки
          lcd.drawLine(prokr/3+27,13,prokr/3+57,13, YELLOW);//шкала прокрутки
          lcd.drawLine(prokr/3+27,14,prokr/3+57,14, YELLOW);//шкала прокрутки
          lcd.drawLine(prokr/3+27,15,prokr/3+57,15, YELLOW);//шкала прокрутки
          //////////////////////////////////////////////////сетка
          for(byte i=110;i>18;i=i-3){
            lcd.drawPixel(26,i, BLUE);
            lcd.drawPixel(43,i, BLUE); 
            lcd.drawPixel(60,i, BLUE); 
            lcd.drawPixel(77,i, BLUE); 
            lcd.drawPixel(94,i, BLUE); 
            lcd.drawPixel(111,i, BLUE);
            lcd.drawPixel(128,i, BLUE); 
            lcd.drawPixel(145,i, BLUE); 
            lcd.drawPixel(162,i, BLUE);
          }
          for(byte i=30;i<175;i=i+3){
            lcd.drawPixel(i,25, BLUE);
            lcd.drawPixel(i,42, BLUE); 
            lcd.drawPixel(i,59, BLUE);
            lcd.drawPixel(i,76, BLUE); 
            lcd.drawPixel(i,93, BLUE); 
            lcd.drawPixel(i,110, BLUE);
          }
          //////////////////////////////////////////////////////
          x=25;
          for(int y=prokr;y<prokr+150;y++){
            if(razv<7){
              x++;
            }
            if(razv==7){
              x=x+2;
            }
            if(razv==8){
              x=x+3;
            }
            if(razv==9){
              x=x+4;
            }
            if(razv==10){
              x=x+5;
            }
            if(x>175){
              x=176;
            }// что бы не засирало экран
             
           lcd.drawLine(x,110-mass[y]/3, x+1,110-mass[y+1]/3, GREEN);//график
           //lcd.drawLine(x+1,110-mass[y]/3+1, x+2,110-mass[y+1]/3+1, GREEN);//график
          }
        }
      ////////////////////////////////////////////////////////////////////////////////   
      if(digitalRead(levo)==HIGH){//листаем
          prokr=prokr-5;
          if(prokr<0){prokr=0;}
          lcd.fillRect(0, 12, 175, 15, BLACK);//стиране поле графика
          lcd.fillRect(25, 16, 175, 112, BLACK);//стиране поле графика
          //////////////////////////////////////////////////////////////
          lcd.drawLine(prokr/3+27,12,prokr/3+57,12, YELLOW);//шкала прокрутки
          lcd.drawLine(prokr/3+27,13,prokr/3+57,13, YELLOW);//шкала прокрутки
          lcd.drawLine(prokr/3+27,14,prokr/3+57,14, YELLOW);//шкала прокрутки
          lcd.drawLine(prokr/3+27,15,prokr/3+57,15, YELLOW);//шкала прокрутки
          //////////////////////////////////////////////////сетка
          for(byte i=110;i>18;i=i-3){
            lcd.drawPixel(26,i, BLUE);
            lcd.drawPixel(43,i, BLUE); 
            lcd.drawPixel(60,i, BLUE); 
            lcd.drawPixel(77,i, BLUE); 
            lcd.drawPixel(94,i, BLUE); 
            lcd.drawPixel(111,i, BLUE);
            lcd.drawPixel(128,i, BLUE); 
            lcd.drawPixel(145,i, BLUE); 
            lcd.drawPixel(162,i, BLUE);
          }
          for(byte i=30;i<175;i=i+3){
            lcd.drawPixel(i,25, BLUE);
            lcd.drawPixel(i,42, BLUE); 
            lcd.drawPixel(i,59, BLUE);
            lcd.drawPixel(i,76, BLUE); 
            lcd.drawPixel(i,93, BLUE); 
            lcd.drawPixel(i,110, BLUE);
          }
          //////////////////////////////////////////////////////
          x=25;
          for(int y=prokr;y<prokr+150;y++){ 
            if(razv<7){
              x++;
            }
            if(razv==7){
              x=x+2;
            }
            if(razv==8){
              x=x+3;
            } 
            if(razv==9){
              x=x+4;
            }
            if(razv==10){
              x=x+5;
            }
            if(x>175){
              x=176;
            } // что бы не засирало экран
            
           lcd.drawLine(x,110-mass[y]/3, x+1,110-mass[y+1]/3, GREEN);//график
           //lcd.drawLine(x+1,110-mass[y]/3+1, x+2,110-mass[y+1]/3+1, GREEN);//график 
          }
        }     
      }
    }
}
GFX
Offline
Зарегистрирован: 24.04.2015

VetalST пишет:

За счет двух масивов ,зарисовует старый график и рисует новый. 

Ого, неужели там этого даже не было? Рисовали весь интерфейс заного каждый раз? Жесть, может и на аппаратный SPI переведете наконец?

VetalST
Offline
Зарегистрирован: 29.12.2015

Библиотек для ардуино с дисплеями LS020 или L2F50 почти нет. Вот и приходится извращяться. В дисплеях LS020 или L2F50 нет очистить екран, а только закрасить его каким то цветом, а это долго и приводит к мерцанию экрана. А так мерцает немного только сам график. Библиотеки под свои нужды я полностью еще не переделал.

Этот код можно вставить в скетч с любом TFT экраном.

Перерисовырать дважды график приходиться только из за синхронизации.

/////////////////////////////////////// зарисовываем график
        x=25;
        for(int y=sinhMASSPOV;y<sinhMASSPOV+150;y++){ // 150 длинна графика
           if(razv<7){
            x++;
          }
          if(razv==7){
            x=x+2;
          }
          if(razv==8){
            x=x+3;
          } 
          if(razv==9){
            x=x+4;
          }
          if(razv==10){
            x=x+5;
          }
          if(x>175){
            x=176;
          } // что бы не засирало экран Только для моих экранов
          
          lcd.drawLine(x,110-massPOV[y]/3, x+1,110-massPOV[y+1]/3, BLACK);//старый график

        }
        //////////////////////////////////////////// рисуем график
        x=25;
        for(int y=sinhMASS;y<sinhMASS+150;y++){ // 150 длина графика
           if(razv<7){
            x++;
          }
          if(razv==7){
            x=x+2;
          }
          if(razv==8){
            x=x+3;
          } 
          if(razv==9){
            x=x+4;
          }
          if(razv==10){
            x=x+5;
          }
          if(x>175){
            x=176;
          } // что бы не засирало экран Только для моих экранов
                
          lcd.drawLine(x,110-mass[y]/3, x+1,110-mass[y+1]/3, GREEN);//новый график
        }

       // memcpy(massPOV,mass,500); // копируем с одного в другой массив
        for(int i = 0; i < 500; i++){  // копируем с одного в другой массив
        massPOV[i] = mass[i]; 
        } 
        sinhMASSPOV = sinhMASS; // копируем синхронизацию
        sinhMASS = 0;
        MenuT();  
      }

Без синхронизации гораздо проще 

        /////////////////////////////////////////////////////////////////////////////////////////
        x=25;
          for(int y=0;y<150;y++){ // 150 длинна графика
           if(razv<7){
            x++;
          }
          if(razv==7){
            x=x+2;
          }
          if(razv==8){
            x=x+3;
          } 
          if(razv==9){
            x=x+4;
          }
          if(razv==10){
            x=x+5;
          }
          if(x>175){
            x=176;
          } // что бы не засирало экран Только для моего экрана

           lcd.drawLine(x,110-massPOV[y]/3, x+1,110-massyPOV+1]/3, BLACK);// зарисовываем график
     
          lcd.drawLine(x,110-mass[y]/3, x+1,110-mass[y+1]/3, GREEN);// рисуем график
        }

       // memcpy(massPOV,mass,500); // копируем с одного в другой массив
        for(int i = 0; i < 500; i++){  // копируем с одного в другой массив 
        massPOV[i] = mass[i]; // убираем все лишнее
        } 
    
        MenuT();  
      }

 

GFX
Offline
Зарегистрирован: 24.04.2015

VetalST пишет:

Библиотек для ардуино с дисплеями LS020 или L2F50 почти нет. 

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

Вот за 2 сотки нормальный экран https://ru.aliexpress.com/item/Free-Shipping-1-8-inch-TFT-touch-LCD-Module-LCD-Screen-Module-SPI-serial-51-drivers/1822931267.html?ws_ab_test=searchweb201556_0,searchweb201602_5_10039_10057_10065_10056_10068_10055_10037_10054_10069_301_10059_10033_10058_10032_10073_10017_10070_10060_10061_10052_10062_10053_10050_10051,searchweb201603_9&btsid=f92e9f96-7f59-496d-8974-e202948589b1

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

VetalST пишет:

Перерисовырать дважды график приходиться только из за синхронизации.

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

 

 

VetalST
Offline
Зарегистрирован: 29.12.2015

Мне вчера понадобилось глянуть сигнал и померять частоту. И я вспомнил про пультоскоп. Собрал побыстрому на макетке с кварцем на 26 Мгц мерцания нет вообще. Сигнал 25 кГц нормально еще видно. А дисплей я собираюсь заказать для ослика с внешним ацп. А пока приедет попользуюсь этим. Я давно переделал пультоскоп, и видео снял, но так и не выложил скетч.  Вот и подумал может кому то как и мне понадобиться, или как пример.

Аппаратный SPI не когда не вникал в это дело. Нужно посидеть по гуглить, почитать, пока пультоскоп на макетке собран.

Перерисовырать дважды график приходиться потому что, синхронизация постоянно меняеться, и если делать в одном цикле, не затираеться старый график. Проверенно.

GFX
Offline
Зарегистрирован: 24.04.2015

VetalST пишет:

Перерисовырать дважды график приходиться потому что, синхронизация постоянно меняеться, и если делать в одном цикле, не затирается старый график. Проверенно.

Просто нужно внести смещение относительно прошлой синхронизации. Не в лоб конечно, учесть дельту между текущей и прошлой синхронизацией. Когда зарисовка происхдит одновременно с рисованием, график не мерцает так явно, он как бы перерисовывается, а так он сначала стирается , потом рисуется, на загруженном экране это будет видно. Завалы фронтов даже на 20кГц конечно большие, АЦП явно не тянет той частоты с которой ее опрашивают.

Кстати, тот экран, что я давал ссылку и прикрутить бы к атмеге с внешним АЦП, потому как тот, который я использую с STM32 320х240 явно будет слишком медленно зарисовываться на AVR, а 128х160 я цеплял к атмеге, конечно не космос по скорости, но работать можно, он даже более цветастей смотрится и по качеству прям получше, но меньше конечно и разрешение меньше, вообщем смотрите сами. На экране 320х240 проверить бы скорось закраски(полная закраска экрана), сколько он кадров в секунду выдаст на AVR, но лень) На STM32 выдает 18 кадров в секунду, что быстро достаточно, а в разгоне и все 30.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

VetalST пишет:

 Xumuk и Лекс 59 я помню у вас есть дисплеи LS020 и L2F50.

Вот библиотеки всё как и в старых, но работают с новими ID вплоть до arduino 1.6.11.

VetalST здравствуйте. Ну я более-менее переустановился после переезда на другое железо.

Возвращаюсь к пробам с ЛС020. Во, блин... пару месяцев не попользовался программами и програматорами и усе... Как по новой начинать.

Сегодня честно скрипел мозгами чтобы примантулить Ваш новый скетч (с приглаженым мерцанием), попытавшись воспользоваться советом и заменить часть кода в скетче с гашением экрана отдельной командой меню, пост 1455 стр. 30 данного обсуждения) (ну не люблю я полевики по старой памяти с советских времен, чтобы делать выключение кнопкой). И нифига у меня не получилось. Не вьехал, какую именно часть нужно заменить. Сорри. Если не в лом и если не так долго, то не могли бы Вы ... (далее следует потупленый взгляд в пол и застенчивое шарканье ножкой).

Если нет, то и фиг с ним. Это не критично и носит скорее характер пробы пока.

А если Вы подумываете после завершения варианта от Окмор пересадить его на ЛС020, то проба эта (с пультоскопом на ЛС020) практически наверняка дальше пробы не зайдет.