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

uldin@mail.ru
Offline
Зарегистрирован: 15.02.2012

cSRsAxYG.jpg?download=1&name=%D0%A1%D0%B

от дребезга оч помогает 4043

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Насколько я могу судить - то "команда" постаралась и в этом плане проблем нет -  дребезг контактов, где это надо, устранён программно. Во всяком случае у меня всё работает отлично, возможно просто кнопки хорошие мне попались? 

uldin@mail.ru
Offline
Зарегистрирован: 15.02.2012

Иногда лишнее оно не лишнее))

progrik
Offline
Зарегистрирован: 30.12.2018

Hy6yk пишет:
возможно просто кнопки хорошие мне попались?
не, кнопки не при чем) я накодил подавление дребезга. 200 - кол-во миллисекунд между принятием нажатий.
if((millis() - ok_last_time) > 200) //progrik: подавление дребезга - ждем 200 мс со времени последнего нажатия

и мне совершенно непонятно, зачем нужно аппаратное подавление, от слова совсем.
програмно - те-же яйца, только надежнее. искри себе ржавыми контактами, лишь бы хоть как-то нажималось, всё будет 100% работать без лишнего геморроя)
дополнительные десятки мест пайки, микросхема - зачем, блин, зачем?!
только _не кодящие_, по видимому, люди думают, что аппаратно - лучше.
а я говорю - нет нет и еще раз нет! програмно в разы надежнее и проще.
не надо мусорить))

Hy6yk
Offline
Зарегистрирован: 14.06.2020

progrik, Вам отдельное спасибо за проделанную работу! Именно её я и имел в виду когда писал, что "команда" постаралась!
Что же касается аппаратного подавления дребезга - я конечно не отношу себя ни к _не кодящим_, ни тем более к _кодящим_, и в той и другой теме я лишь по самым-самым верхушкам знаток). Но справедливости ради хочу отметить - что когда, пару лет назад, этот вопрос передо мной встал - интернет мне рассказывал, что аппаратно хорошо там, где ресурсов микроконтроллера не хватает и нагружать лишними вычислениями не стоит.
Другой вопрос, что применительно к этому проекту это не актуально. Возможно, что и к подавляющему большинству других ардуино-проектов тоже))

progrik
Offline
Зарегистрирован: 30.12.2018

Hy6yk пишет:
... аппаратно хорошо там, где ресурсов микроконтроллера не хватает и нагружать лишними вычислениями не стоит...
дык вот та одна строка, что я написал делает почти всё. десяток тактов.
обычно те, кто не писал ничего быстрого, могут в глубоком астрале на диване рассуждать о скорости)) я не знаю ни одного случая, где нельзя было бы впихнуть 10-20 тактов на проверку...
единственный случай, это если нужно не теряя ни одного лишнего такта отреагировать на нажатие... юзер-терминатор чтоб не нервничал из-за задержек))
даже если ты фракталы считаешь или майнишь на ардуино - все равно 50 раз в секунду опрашивая кнопку потеряешь ну 1-2к тактов из 16М... потеря 2/16000... кошмар))

PS: а, забыл. это когда delay юзают, будут тормоза... но delay это всем костылям костыль...

 

Hy6yk
Offline
Зарегистрирован: 14.06.2020

progrik пишет:

...даже если ты фракталы считаешь или майнишь на ардуино...

Спасибо, посмеялся))

brayn
Offline
Зарегистрирован: 18.04.2021

 

 

brayn
Offline
Зарегистрирован: 18.04.2021

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

 

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

brayn пишет:
что я делаю не правильно или не делаю?

Так и рассказали бы: что делаете и что нет. Какие ошибки выдает Arduino IDE? Ходят слухи, тут штатной гадалки нет ;)

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

Хвастаюсь своим.

Корпус -повербанк, кнопки две (сверху -Hold, красная select) и рычажковый преключатель - от старой мышки.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

Хвастаюсь своим.

Корпус -повербанк, кнопки две (сверху -Hold, красная select) и рычажковый преключатель - от старой мышки.

brayn
Offline
Зарегистрирован: 18.04.2021
Arduino: 1.6.5 (Windows 8.1), Плата"Arduino/Genuino Uno"
 
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawRect(int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawFastVLine(int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawFastHLine(int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::fillRect(int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::fillScreen(unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::invertDisplay(bool)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::Adafruit_GFX(int, int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::Adafruit_GFX(int, int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawCircle(int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawCircleHelper(int, int, int, unsigned char, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::fillCircleHelper(int, int, int, unsigned char, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::fillCircle(int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawRoundRect(int, int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::fillRoundRect(int, int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawTriangle(int, int, int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::fillTriangle(int, int, int, int, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawBitmap(int, int, unsigned char const*, int, int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::drawChar(int, int, unsigned char, unsigned int, unsigned int, unsigned char)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::write(unsigned char)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::setCursor(int, int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::setTextSize(unsigned char)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::setTextColor(unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::setTextColor(unsigned int, unsigned int)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::setTextWrap(bool)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
Adafruit_GFX_Library\Adafruit_GFX.cpp.o: In function `Adafruit_GFX::drawLine(int, int, int, int, unsigned int)':
D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:165: multiple definition of `Adafruit_GFX::setRotation(unsigned char)'
Adafruit GFX Library\Adafruit_GFX.cpp.o:D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX/Adafruit_GFX.cpp:197: first defined here
collect2.exe: error: ld returned 1 exit status
Multiple libraries were found for "Adafruit_GFX.h"
 
 Used: D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX
 
 Not used: D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library
 
Ошибка компиляции.
 
  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки
 
brayn
Offline
Зарегистрирован: 18.04.2021

Да точно я просто уже голову сломал.

progrik
Offline
Зарегистрирован: 30.12.2018

дел

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

У вас две ошибки:
1. collect2.exe: error: ld returned 1 exit status - пробуйте менять версию IDE на более свежую чем 1.6.5-r5 (предпочтительно) или более древнюю. Искать в Гугле  иные возможные причины возникновения этой ошибки.
2. Полу-ошибка - Multiple libraries were found for "Adafruit_GFX.h" - найдено несколько одинаковых библиотек.
Used (используется): D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX

Not used (не используется): D:\Новая папка\arduino-1.6.5-r5\libraries\Adafruit_GFX_Library
Возможно, надо наоборот... Удалите не нужную.

 

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

И, самое главное, вы пишете "залить прошивку для ардуино про мини"
А отчёт выкладываете Плата"Arduino/Genuino Uno".
Может начать с того, что правильно выбрать плату Pro Mini?
Как считаете?
 

brayn
Offline
Зарегистрирован: 18.04.2021

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

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Нужно поставить последнюю версию arduino ide  в корень диска и чтоб не было по пути папок с названием на кирилице.Ну и правильно выбрать плату и порт 

brayn
Offline
Зарегистрирован: 18.04.2021

Блинк вгрузил, платка заморгала, это значит что оная подключена и грузится?

brayn
Offline
Зарегистрирован: 18.04.2021

Прога и прошивка была скачана у автора потому сомнений в её работа способности не было.

brayn
Offline
Зарегистрирован: 18.04.2021

Да да да заработалааааа. Поставил новейшую иду и поставил в диск С. Вопрос я сделал прибор из этой темы http://forklg.ru/viewtopic.php?f=98&t=1041# можно это сделать информативней?

 

progrik
Offline
Зарегистрирован: 30.12.2018

....

brayn
Offline
Зарегистрирован: 18.04.2021

Теперь ещё вопрос, как регулировать контрасность дисплея? Нашёл как, спасибо. Ещё вопрос как перевернуть экран? И почему он вырубается? Подсветка горит а картинки нет.

 

 

Hy6yk
Offline
Зарегистрирован: 14.06.2020

karl2233 У Вас, отличный приборчик получился!

Интересно как вы реализовали "масштаб" временной шкалы? - я имею в виду, в верху посередине у Вас изображён отрезок и 1 мс. 

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

Наверняка же есть более правильный расчётный метод? Просто я до него дотумкать сходу не могу))

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

Нубук, к сожалению ничем не могу помочь.
Проект не мой, японский V300.
Пару страниц назад выкладывали ссылку и скетч.
Я только повторил его: корпус от повербанка, пара кусочков оргстекла и несколько вечеров.

progrik
Offline
Зарегистрирован: 30.12.2018

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

Наверняка же есть более правильный расчётный метод? Просто я до него дотумкать сходу не могу))

подать точный сигнал)) чисто эмпирическая настройка, к черту математику!))

нужно просто посчитать... кварц 16 млн., делим на делитель АЦП))) и еще делим на 13 - столько тактов уходит на цикл АЦП.
делители АЦП - 2(не во всех скетчах), 4, 8, 16, 32, 64, 128 - выставляется при переключении развертки
то есть, в самом медленном режиме получаем 16млн/128/13 = 9615,38 замеров/сек
если нужно этот режим разметить допустим по 2мс, получаем 9615*2мс/1000 = 19,2. - каждые 19,2 точек рисуем разметку, всё.
каждое последующее уменьшение делителя уменьшает время разметки ровно в 2 раза.
единственное, в местном ослике по дебильному реализован самый медленный режим, там эта формула падет))
есть решение, нужно в функции чтения АЦП где стоит блЯ*ь С*кА delay - вместо этого дебильного делея нужно вставить пустой цикл чтения ацп - естественная задержка и снова ровно в 2 раза падает частота семплирования...

пишу, пишу... как будто тут кто-то вообще кодить собирается, ага...

brayn
Offline
Зарегистрирован: 18.04.2021

Парни где глянуть как OLED дисплей 128X64 подсоединяется к про-мини, тот у которого 4 контакта.

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

А что там смотреть? 4 контакта, значит управление по i2c: два контакта - +5 и -5 Вольт питания (или 3,3) и два оставшихся - SCL и SDA.
На Про Мини стандартные SCL - вывод А5, SDA - вывод А4 (эта парочка контактов размещена особняком внутри платы рядом с контактом А3).
Это касается ВСЕХ i2c устройств а не только "OLED дисплей 128X64" (если только вы эти выводы специально не перенаправляли).

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

_//_

brayn
Offline
Зарегистрирован: 18.04.2021

Спасибо. Перенаправлять скорее нет в ардуино я чайник с паяльником:) Пультоскоп всё-же сделал, в инверторе нарисовал корпус, распечатал на 3 д принтере.

Hy6yk
Offline
Зарегистрирован: 14.06.2020

progrik пишет:

пишу, пишу... как будто тут кто-то вообще кодить собирается, ага...

Ваши труды не напрасны! Может не прям сейчас, но эта информация будет востребована и полезна для жаждущих.

Мне конечно проще эмпирическим путём - просто я не настолько погружён в тему чтобы так легко и чётко понимать, что там внутри происходит. И уж чего-чего, но даже я, после Вашего объяснения, почти понял что к чему и как-нибудь при удобном случае попробую что-нибудь изобразить))  Спасибо!

uldin@mail.ru
Offline
Зарегистрирован: 15.02.2012

karl2233 этот?

FbCTofQO.jpg?download=1&name=%D0%A1%D0%B

brayn
Offline
Зарегистрирован: 18.04.2021

Спасибо. Вопрос, что бы не ставить разные преобразователи для 5 вольт можно програмно сделать что бы схема работала от 3 вольт?

 

Hy6yk
Offline
Зарегистрирован: 14.06.2020

brayn пишет:

Спасибо. Вопрос, что бы не ставить разные преобразователи для 5 вольт можно програмно сделать что бы схема работала от 3 вольт?

 

На сколько я могу судить - программно конечно же нет. У Вас же про мини в варианте с питанием от 5вольт? Про мини также существуют и в варианте с питанием от 3,3 вольта, но там вроде кварц на 8 Мгц. А вообще, голая атмега 328 вполне может питаться от 3 вольт. И вроде даже ниже. Лучше всего на этот вопрос ответит даташит.

brayn
Offline
Зарегистрирован: 18.04.2021

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

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

Если вы берете готовую плату, там уже подумали за вас и установили линейный стабилизатор на нужное напряжение: хоть 9V подавайте на Vin - Атмега получит свои либо 5, либо 3,3V. Ничего ограничивать при прошивке не надо - всё шьётся как обычно.
PS
Не путать Vin и Vcc !!!

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Пусть меня поправят, я могу быть не прав - работать я думаю должно, но с нюансами. Смотря какую версию вы заливали. В начале была версия, в которой напряжение питания было прописано (VCC=5 вольт или близкое число). Затем были версии в которых прописывать напряжение питания не требовалось - оно считывалось программно, но опять же, вроде как исходя из максимума в 5 вольт - но тут я не уверен, не ковырялся в той функции (функция что-то типа ReadVCC). Т.е. Вам надо эти моменты утрясти и должно работать... Но стоит помнить что максимальное напряжение сигнала которое Вы сможете увидеть будет равняться напряжению питания (это если не использовать делитель напряжения с поправочными коэффициентами). 

UPD:Там же в последних версиях где-то были и автопределы в 5В, 1,1В и 0,22В, возможно надо и там что-то подкорректировать.

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

Естественно, питание надо выбирать исходя из поставленных целей. При 3,3В - частота будет 8Мгц. Не 16 и уж тем более не 27. Вот только что собрал погодную станцию. Она питалась в оригинале от 5В. Но там нафиг не нужна частота 16. Поменял плату на 3,3 и всё прекрасно работает. Да ещё и потребление уменьшилось.
PS
Да, понижение частоты делает устройство более экономичным. Но это накладывает и ряд ограничений на функционал. Это надо знать и учитывать. А не просто менять. Для Осциллоскопа, и так медленного, да ещё и 3,3В... Смысл?

brayn
Offline
Зарегистрирован: 18.04.2021

Значит что 3.3 вольта не потянет 16 герц кварц? Тогда действительно смысла нет.

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Значит надо просто читать даташит на камень,в нем  описаны зависимость частоты от напряжения у камня..

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

brayn, Рекомендую заглянуть сюда и почитать:
https://alexgyver.ru/lessons/arduino-power/

brayn
Offline
Зарегистрирован: 18.04.2021

Хорошая ссылка, спасибо. Но всё же продолжу свои глупые вопросы:) Почему у пультоскопа на 5110 больше функций чем у пультоскопа на TFT экране, я не люблю считать и хотелось бы что бы на TFT экране выводился параметр частота и то же меню, реально это сделать? Поставить нужную библиотеку и раскоментировать её в скетче это слишком просто наверное.

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Как правило да, просто раскомментировать библиотеку не годится. Нужно смотреть как вывод информации в той и другой библиотеке происходит и согласовать всё. Я сейчас практически тем же занимаюсь, но только под дисплей от нокиа 1202. Мне гораздо проще, так как есть вариант пультоскопа от пользователя Serioshka под этот дисплей (за что ему огромный респект!), я лишь небольшие коррективы вношу.

brayn
Offline
Зарегистрирован: 18.04.2021

У автора пультоскопа два скеча под 5110 и TFT экран просто смешать не получится, выводы на дисплеи получается нужно согласовать?

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Я к сожалению не знаю как вывод на TFT организован, у меня такого нет. И утверждать, что в вашем случае, 100% не получится просто раскомментировать библиотеку для нормальной работы я не могу. Более того я думаю, что один TFT-дисплей другому TFT-дисплею рознью.

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

Может так будет понятней - например Адафруитовская библиотека выводит текст следующими командами:

  display.setTextSize(1); // установить размер шрифта
  display.setTextColor(BLACK); // установить цвет (черный/белый) для 5110
  display.setCursor(0,5); //установить курсор 
  display.println("Hello, world!");//Вывести текст и перейти на следующую строку
  display.print("Hello, world! "); // Этот текст выведется уже на следующей строке
  display.print("Again"); // а этот сразу за предыдущим текстом в той же строке, так - Hello, world! Again
 
а например библиотека для нокиа 1202 выводит так
  lcd.print10х16(0, 0, "Hello, world!", 1); // где print10х16 - размер; 0, 0, - координаты куда выводить; "Hello, world!" - что выводить; 1 - цвет
 
На первый взгляд библа для 1202 гораздо удобней выводит, типа всё можно в одной строчке записать. Но нет, это не так. На практике всё немного иначе.
Одним словом откройте рядом свои два скетча, посмотрите как там и там выводятся одни и те же данные и делайте вывод с последующими корректировками кода.
progrik
Offline
Зарегистрирован: 30.12.2018

brayn пишет:
Почему у пультоскопа на 5110 больше функций чем у пультоскопа на TFT экране, я не люблю считать и хотелось бы что бы на TFT экране выводился параметр частота и то же меню, реально это сделать?
пультоскопом на TFT никто не занимался, а версия от автора - мягко говоря, никакая. высыпал на стол кучу деталей, дальше каждый сделает под себя))
вот тебе и предоставляется великолепный шанс запрограммировать прибор под себя)))
считать частоту лучше програмно.
аппаратный подсчет будет работать только на сигнале с хорошим размахом, достигающим логического 0 и 1... для аппаратного подсчета - да, нужно подключать библиотеку FreqCount.h...
но судя по вопросам, ответ на основной вопрос НЕТ! сделать ничего нельзя) вот, что есть - лучше уже не будет)))

Hy6yk
Offline
Зарегистрирован: 14.06.2020

Уважаемый, progrik, в продолжении темы о функции чтения АЦП и наличия в ней задержки в виде delay. Вы писали что вместо злосчастного дэлэя необходимо вставить пустой цикл чтения. Подскажите пожалуйста как правильно это сделать?

Вот кусок исходного кода:

     ...   else {                          // развертка с задержками (delay)
    ADCSRA = 0b11100111;            // делитель на /128
    for (uint16_t i = 0; i < len; i++) { // цикл для чтения
      while (!(ADCSRA & 0x10));     // ждем готовность АЦП
      ADCSRA |= 0x10;               // запускаем следующее преобразование
      delayMicroseconds(500);       // делаем задержку
      adcBuf[i] = ADCH;             // записываем данные в массив
    }
  }

Всё до чего я могу дотумкать, это тупо вставить ещё один цикл for:

     ...   else {                          // развертка с задержками 
    ADCSRA = 0b11100111;            // делитель на /128
    for (uint16_t i = 0; i < len; i++) { // цикл для чтения
      while (!(ADCSRA & 0x10));     // ждем готовность АЦП
      ADCSRA |= 0x10;               // запускаем следующее преобразование
          for (uint16_t j = 0; j < len; j++) { // цикл для чтения ещё, здесь задал переменную j - надо ли? или оставить i?
      while (!(ADCSRA & 0x10));     // ждем готовность АЦП
      ADCSRA |= 0x10;               // запускаем следующее преобразование 
        };  
      adcBuf[i] = ADCH;             // записываем данные в массив
    }
  }

Вроде всё компилируется, но не работает)) виснет

я конечно осознаю, что не понимаю что там конкретно происходит, ткните носом в чём я дурак?

b707
Онлайн
Зарегистрирован: 26.05.2017

во втором коде в строчке 6 вместо len поставьте 2 или скажем 5

for (uint16_t j = 0; j < 2; j++) { 

 

progrik
Offline
Зарегистрирован: 30.12.2018

Hy6yk пишет:
нужно повторить только две строки, вот эти, прям подряд

      while (!(ADCSRA & 0x10));     // ждем готовность АЦП
      ADCSRA |= 0x10;               // запускаем следующее преобразование
и не забыть в расчете частоты поправить коэффициент... сделать, как у соседа, только делить на два) или умножить. смотря с какой стороны)