Спасибо большое все получилось, вот видео как и просили. Прошу прощение за качество, это пока макетка, когда прийдет плата с китая, то распаяю как положено, думаю и этого мерцания контраста тоже не будет
моргает потому что надо оптимальнее написать. не перерисовывать весь экран а только нужную часть. сначала все квадраты зарисовать, а потом нарисовать нужное
или еще оптимальнее. запоминать старое значение и если изменилось нарисовать квардрат/квадраты, или наоборот ненужные затереть
Мерцание к сожалению хорошо видно, но я думаю это из-за длинных проводов, да и в целом пока все зделано лиш бы работало. Поэтому пока не разбираюсь с биением контраста, когда распаяю как положено и если это биение останется, то тогда буду разбираться. Что косается оптимизации кода, то мне пока есть куда рости, я только учусь.
jeka_tm не подскажешь, как cделать шаг перемещения индикатора батареи по оси Y плавно (попиксельно), а не скачкообразно при использовании функции Goto_XY(x,y)? По оси X перемещается свободно и точно, а по оси Y меняешь значения на пару едениц и индикатор уходит сразу в середину экрана или в конец
void Goto_XY(char x, char y){
SendByte(0,(0xb0|(y&0x0F))); // установка адреса по Y: 0100 yyyy
SendByte(0,(0x00|(x&0x0F))); // установка адреса по X: 0000 xxxx - биты (x3 x2 x1 x0)
SendByte(0,(0x10|((x>>4)&0x07))); // установка адреса по X: 0010 0xxx - биты (x6 x5 x4)
}
void napr(){
U = analogRead(accum);
U = constrain(U, 650, 855);
U = map(U, 650, 855, 0, 9);
Goto_XY(78,3);
Goto_XY это для перехода по строкам. она тебе вроде как и не нужна. разве что если твой уместится по высоте в 8 писелей в одной из строк. в коде почти все графические фукнции имеют возможность задать координаты вывода
Я прошу прощения, но я выдрал индикатор из вашего прошлого проекта и воткнул в текущий, подвинул немного левее среднию скорость, а в этоже окно правее индикатор, только индикатор начинается с 0-го пикселя по Y и перемещяется функцией Goto_XY,т.е. по строкам , а символы с третъего пиксела и перемещаются по пиксельно. Но спасибо, что прояснили по функции Goto_XY, значит буду думать как переместить индикатор другой функцией.
честно сказать не то чтобы долго, надо куда то это выводить, еще один экран наверно делать, в смысле окно, хз как описать попроще
но времени у меня свободного почти нет, не то что раньше, поэтому я врядли как то модернизировать его буду, если кто то будет допиливать, как недавно индикацию питания к нему приделали вместо количества измерений
если дальше ардуину не будешь изучать то возьми такую или такую
я за первую, хоть у самого пяток вторых. просто до этого не попадались с microusb. arduino pro micro без необходимости в проекте usb (клавиатуры, геймпады) не стал бы ставить
а дисплей в проекте у меня только 1202. есть еще несколько, но там либо размер меньше либо паять гемор. была мысль под такой переделать. но мелковат, да и разбираться с ним наверно пришлось бы для других шрифтов и другой высоте
За электронную часть в районе 1т.р, ну может чуть меньше, с учетом себестоимости одной платы 300р. Правдв китайцы по одной плате не делают + 500р токарю за трубку.
Итого себистоимость моего аппарата мне обошлась около 1500р.
и на второй странице читаем параметр TF и TR. Типичное значение 15 мкс для фронта и спада. Итого лучше 30 кгц мы ничего не получим. И компаратор здеся не поможет. Выход сдесь один. Использовать не фототранзистор , а фотодиод. Быстродействие схемы только за счет этого можно увеличить в сотни раз. Ну и естественно оставить компаратор.
Ну и для начала проверьте быстродействие датчика. На излучающий датчик подаем прямоугольные импульсы частотой например 10 кгц. И смотрим эти же импульсы на приемном датчике после компаратора. Подаем это на двухканальный осцилограф. На первый вход сигнал с генератора. На второй вход сигнал с выхода компаратора. И смотрим задержку между импульсами. Меняя наименования деталей и последовательно увеличивая частоту генератора до 1000 кгц добиваемся минимальной задержки. Простыми способами можно получить задержку порядка 100 нс.
да это накладывает ограничение на минимальное расстояние между датчиками
например самый сложный случай время между импульсами 30мкс. расстояние между датчиками 70мм.
70мм/30мкс=2333м/с. ну это гораздо выше максимальной измеряемой скорости
уже и ардуина не успеет такие скорости измерить, так как каждое прерывание это еще запоминание времени текущего
кстати компаратора нет в последней версии
проблема быстродействия датчиков возникнет не в данном хронографе
я не говорю что этот хронограф очень хороший попараметрам и измеряет высокие скорости, но он простой и работает. спорить и доказывать по выбору комплектующих или схемных решений, то как я написал программу я не буду. хочешь пользуйся, хочешь улучшай
Если будет возможность проверьте пожалуйста. Может мой arduino pro micro считает чего то не того, хотя как мне кажется, что от платфрмы расчет арифметических операций зависить не должен.
Хочу купить это устройство,так как очень понравился хронограф,но сделать самому не получиться мало что я в этом понимаю.Можно без корпуса только начинка.Буду очень признателен. Напиши мне в VK https://vk.com/maxiplus
Если не охото этим заниматься, то не лучше ли купить готовый девайс, т.к. этот девайс сыроват еще, а за себистоимость вряд ли тебе кто нибудь продаст. Готовое устройство пусть стоит дороже, но уже отработано и характеристики у него лучше и стабильней.
Доброго времени суток. Подскажите-закинул полный скетч в среду arduino 1.6.7. Выбрал в инструментах плату Arduino/Genuino Uno. Компиляция выдает ошибку. Следовательно не могу залить проект в Arduino Uno Rev3. В чем может быть проблема?
PS-тапками прошу не закидывать. поскольку с ардуино только начал знакомство и многие вещи ещё мною не изучены
а фьюзы надо менять в файле boards.txt??? Я пользуюсь средой без всяких исправлений. Плюс заметил- для Micro компиляция проходит без проблем. А сейчас акцентировал внимание на фьюзы(почитал), и решил узнать про правку фьюзов в файле boards.txt для своей китайской Arduino Uno Rev.3. Нужно ли под этот скетч парвить фьюзы? Если я прав, то после этих манипуляций не умрет ли платка для последующих экспериментов?
Спасибо. Уже сам нашел, скачал и проверил. И самое удивительное-скомпилило вообще без предупреждений и ошибок на версии 1.0.6. А как же так??? Чего то я не понимаю. Как такое может быть? )))
PS-дополнительно jeka_tm тебе отдельное большое СПАСИБО-за скетч, проект хрона и оперативную помощь )))
Сам делаю проекты на 1202, поэтому решил поделиться. Делал замеры с помощью logic analyser. Частота меги 16МГц. Обновление (запись всего буфера в экран) экрана 1202 занимает 7.5 мс, если использовать как здесь програмный spi. Если развести аппаратный spi, то обновление всего экрана будет занимать 4.4 мс (на частоте spi 4МГц)
То есть теоритически (чистое обновление, без какой либо логики) получается:
программный spi - 133 Гц.
аппаратный spi - 222 Гц.
P. S. Цифры с моего кода, но похож на код автора.
P. P. S. Еще есть дисплей C1-00. 140р стоит. Он побольше и цветной. Но разъем точно такой же, подсветка так же один светодиод (по крайней мере у меня такие). То есть при желании можно перейти и на такой )
Использовать digitalRead/digitalWrite которые дают килогерцы быстродействие, вместо мегагерц прямого обращения к портам и писать про одну ассемблерную команду. Ну это не серьезно ))
Да при чем тут loop. Он работает один раз за один кадр.
Хочешь скорости, то в функции передачи кадра на дисплей убирай вызов функции, убирай проверку на дата/команда, убирай цикл передачи 8 бит. По коду конечно несколько больше, но получается 4.9 мс. Это у меня еще прерывания работают. Но мне влом убирать.
Я за 30 секунд работы сделал из 133Гц 201Гц )))
То есть твоим кодом. Я его не проверял, просто тут написал, чтобы понятно было. Сам цикл for передачи 8 бит тоже много ест времени.
Спасибо большое все получилось, вот видео как и просили. Прошу прощение за качество, это пока макетка, когда прийдет плата с китая, то распаяю как положено, думаю и этого мерцания контраста тоже не будет
ну вот) но можно было и из старого кода взять графику для батареи, а то непонятно неподготовленному человеку что это за квадратики))
моргает потому что надо оптимальнее написать. не перерисовывать весь экран а только нужную часть. сначала все квадраты зарисовать, а потом нарисовать нужное
или еще оптимальнее. запоминать старое значение и если изменилось нарисовать квардрат/квадраты, или наоборот ненужные затереть
хотя глаз наверно и не видит этих морганий
Мерцание к сожалению хорошо видно, но я думаю это из-за длинных проводов, да и в целом пока все зделано лиш бы работало. Поэтому пока не разбираюсь с биением контраста, когда распаяю как положено и если это биение останется, то тогда буду разбираться. Что косается оптимизации кода, то мне пока есть куда рости, я только учусь.
во вкладке LCD замени функцию Sendbyte на эту, дожно быть без мерцаний
в исходниках тоже поправил
Уже было сделано сразу еще со страници 6 этой ветки в этом посте и да оказалось, что менюшка быстрей переключаются.
ну значит надо делать как в 303 посте
jeka_tm не подскажешь, как cделать шаг перемещения индикатора батареи по оси Y плавно (попиксельно), а не скачкообразно при использовании функции Goto_XY(x,y) ? По оси X перемещается свободно и точно, а по оси Y меняешь значения на пару едениц и индикатор уходит сразу в середину экрана или в конец
Goto_XY это для перехода по строкам. она тебе вроде как и не нужна. разве что если твой уместится по высоте в 8 писелей в одной из строк. в коде почти все графические фукнции имеют возможность задать координаты вывода
Я прошу прощения, но я выдрал индикатор из вашего прошлого проекта и воткнул в текущий, подвинул немного левее среднию скорость, а в этоже окно правее индикатор, только индикатор начинается с 0-го пикселя по Y и перемещяется функцией Goto_XY,т.е. по строкам , а символы с третъего пиксела и перемещаются по пиксельно. Но спасибо, что прояснили по функции Goto_XY, значит буду думать как переместить индикатор другой функцией.
в том проекте было сделано по другому, и там достаточно было меги8
Здравствуйте, хотел сказать спасибо автору за идею дипломного проекта)
))) даже так. заработай пятерку
А нельзя дописать в код проверку скорострельности? Было бы суперски удобно замерять
честно сказать не то чтобы долго, надо куда то это выводить, еще один экран наверно делать, в смысле окно, хз как описать попроще
но времени у меня свободного почти нет, не то что раньше, поэтому я врядли как то модернизировать его буду, если кто то будет допиливать, как недавно индикацию питания к нему приделали вместо количества измерений
jeka_tm , подскажи, пожалуйста, от какой нокии лучше использовать дисплей. http://ru.aliexpress.com/item/New-Pro-Mini-Atmega-328-5V-16M-Improved-Version-Module-Replace-Arduino-Nano-Board/1602482574.html эта плата подойдет для хронометра ?
Я например в настоящее время мучаю такую плату (arduino pro micro). Прошивку заливать удобно сразу через microUSB порт.
если дальше ардуину не будешь изучать то возьми такую или такую
я за первую, хоть у самого пяток вторых. просто до этого не попадались с microusb. arduino pro micro без необходимости в проекте usb (клавиатуры, геймпады) не стал бы ставить
а дисплей в проекте у меня только 1202. есть еще несколько, но там либо размер меньше либо паять гемор. была мысль под такой переделать. но мелковат, да и разбираться с ним наверно пришлось бы для других шрифтов и другой высоте
не знаю, как подписаться на тему без того, чтобы написать пост :)
интересный проект
Здравствуйте! а по деньгам что выходит на сборку платы с датчиками?
ну и нет желающих взяться за изготовление, за денюжку естественно =)
там все недорогое. кто собирать будет не знаю
Ну примерно какие суммы?
За электронную часть в районе 1т.р, ну может чуть меньше, с учетом себестоимости одной платы 300р. Правдв китайцы по одной плате не делают + 500р токарю за трубку.
Итого себистоимость моего аппарата мне обошлась около 1500р.
красиво
Здравствуйте! Отличный нужный проект,спасибо за схему. Не подскажете,последняя прошивка подойдет к Atmega168PA?
привет. нет. в 168 оперативной памяти вроде не хватит даже если попробовать скомпилировать. да ардуина нано 130 р стоит
Спасибо за ответ
Первый вопрос по схеме. В качестве датчика используем l32p3c. Открываем даташит на него по ссылке
http://lib.chipdip.ru/195/DOC000195379.pdf
и на второй странице читаем параметр TF и TR. Типичное значение 15 мкс для фронта и спада. Итого лучше 30 кгц мы ничего не получим. И компаратор здеся не поможет. Выход сдесь один. Использовать не фототранзистор , а фотодиод. Быстродействие схемы только за счет этого можно увеличить в сотни раз. Ну и естественно оставить компаратор.
Ну и для начала проверьте быстродействие датчика. На излучающий датчик подаем прямоугольные импульсы частотой например 10 кгц. И смотрим эти же импульсы на приемном датчике после компаратора. Подаем это на двухканальный осцилограф. На первый вход сигнал с генератора. На второй вход сигнал с выхода компаратора. И смотрим задержку между импульсами. Меняя наименования деталей и последовательно увеличивая частоту генератора до 1000 кгц добиваемся минимальной задержки. Простыми способами можно получить задержку порядка 100 нс.
да это накладывает ограничение на минимальное расстояние между датчиками
например самый сложный случай время между импульсами 30мкс. расстояние между датчиками 70мм.
70мм/30мкс=2333м/с. ну это гораздо выше максимальной измеряемой скорости
уже и ардуина не успеет такие скорости измерить, так как каждое прерывание это еще запоминание времени текущего
кстати компаратора нет в последней версии
проблема быстродействия датчиков возникнет не в данном хронографе
я не говорю что этот хронограф очень хороший попараметрам и измеряет высокие скорости, но он простой и работает. спорить и доказывать по выбору комплектующих или схемных решений, то как я написал программу я не буду. хочешь пользуйся, хочешь улучшай
jeka_tm а у вас првильно отображалась средняя скорость?
А то чего то у меня не правильно. И вроде бы формулы правильные,
for(byte i=0;i<n;i++){
вроде да. надо проверять раз возможно ошибка
Если будет возможность проверьте пожалуйста. Может мой arduino pro micro считает чего то не того, хотя как мне кажется, что от платфрмы расчет арифметических операций зависить не должен.
Хочу купить это устройство,так как очень понравился хронограф,но сделать самому не получиться мало что я в этом понимаю.Можно без корпуса только начинка.Буду очень признателен. Напиши мне в VK https://vk.com/maxiplus
Если не охото этим заниматься, то не лучше ли купить готовый девайс, т.к. этот девайс сыроват еще, а за себистоимость вряд ли тебе кто нибудь продаст. Готовое устройство пусть стоит дороже, но уже отработано и характеристики у него лучше и стабильней.
Доброго времени суток. Подскажите-закинул полный скетч в среду arduino 1.6.7. Выбрал в инструментах плату Arduino/Genuino Uno. Компиляция выдает ошибку. Следовательно не могу залить проект в Arduino Uno Rev3. В чем может быть проблема?
PS-тапками прошу не закидывать. поскольку с ардуино только начал знакомство и многие вещи ещё мною не изучены
я пользуюсь версией 1.0.6
я пользуюсь версией 1.0.6
а фьюзы надо менять в файле boards.txt??? Я пользуюсь средой без всяких исправлений. Плюс заметил- для Micro компиляция проходит без проблем. А сейчас акцентировал внимание на фьюзы(почитал), и решил узнать про правку фьюзов в файле boards.txt для своей китайской Arduino Uno Rev.3. Нужно ли под этот скетч парвить фьюзы? Если я прав, то после этих манипуляций не умрет ли платка для последующих экспериментов?
фьюзы это только если будешь прошивать бутлоадер, а так они не нужны
фьюзы это только если будешь прошивать бутлоадер, а так они не нужны
а я проверил-там такие же значения... ((( Попытаюсь найти версию 1.0.6 и скетч компильнуть для версии Arduino/Genuino Uno
http://arduino.cc/download_handler.php?f=/arduino-1.0.6-windows.zip
http://arduino.cc/download_handler.php?f=/arduino-1.0.6-windows.zip
Спасибо. Уже сам нашел, скачал и проверил. И самое удивительное-скомпилило вообще без предупреждений и ошибок на версии 1.0.6. А как же так??? Чего то я не понимаю. Как такое может быть? )))
PS-дополнительно jeka_tm тебе отдельное большое СПАСИБО-за скетч, проект хрона и оперативную помощь )))
пожалуйста. да хз почему
по хорошему ты должен был приложить ошибку которую выдал компилятор
Сам делаю проекты на 1202, поэтому решил поделиться. Делал замеры с помощью logic analyser. Частота меги 16МГц. Обновление (запись всего буфера в экран) экрана 1202 занимает 7.5 мс, если использовать как здесь програмный spi. Если развести аппаратный spi, то обновление всего экрана будет занимать 4.4 мс (на частоте spi 4МГц)
То есть теоритически (чистое обновление, без какой либо логики) получается:
программный spi - 133 Гц.
аппаратный spi - 222 Гц.
P. S. Цифры с моего кода, но похож на код автора.
P. P. S. Еще есть дисплей C1-00. 140р стоит. Он побольше и цветной. Но разъем точно такой же, подсветка так же один светодиод (по крайней мере у меня такие). То есть при желании можно перейти и на такой )
у меня похожие цифры получались
http://arduino.ru/forum/obshchii/vremya-na-ispolnenie-raznykh-funktsii#c...
но позже узнал что void loop медленный. если внутри while(1) поставить и внутри крутить код получится быстрее
А чего гадать то )). Благо arduino это же набор C функций, а не скомпилированные библиотеки.
Смотрим:
И видим что еще есть
Если никакие данные от компьютера не приходят, то дает 1 ассемблерную команду проверки регистра ))
Так что это какие то сказки про while(1)
А если хочется посмотреть ассемблерный код своего проекта (с описаниями из C кода), то
avr-objdump -h -S xxx.elf > xxx.asm
а эта 1 команда тоже отнимает время
Использовать digitalRead/digitalWrite которые дают килогерцы быстродействие, вместо мегагерц прямого обращения к портам и писать про одну ассемблерную команду. Ну это не серьезно ))
не подожди мы же говорили о максимальной скорости отрисовки, а она будет если применить while(1)
Да при чем тут loop. Он работает один раз за один кадр.
Хочешь скорости, то в функции передачи кадра на дисплей убирай вызов функции, убирай проверку на дата/команда, убирай цикл передачи 8 бит. По коду конечно несколько больше, но получается 4.9 мс. Это у меня еще прерывания работают. Но мне влом убирать.
Я за 30 секунд работы сделал из 133Гц 201Гц )))
То есть твоим кодом. Я его не проверял, просто тут написал, чтобы понятно было. Сам цикл for передачи 8 бит тоже много ест времени.
void Update(){
Еще у меня один цикл основной, а не два как у тебя. 2 цикла тоже кушают.
ладно чего спорить