SerialPrintLn() — при скорости 9600 около 250мкс, а при максимальной скорости около 3мкс.
Вот здесь, думаю, нужны некоторые оговорки.
9600 - это чуть больше 1 мс на символ. Т.к. PrintLn, то помимо "полезных" символов есть еще и служебные. В зависимости от длины строки это будет выполняться до нескольких десятков мс. Реально - меньше. Почему?
Потому, что Вы в своих измерениях по сути меряете не время передачи, а время копирования в буфер. Но это время не зависит от скорости передачи. Значит, при том способе, которым Вы проводите измерения, буфер переполняется и подтормаживает возвращение из функции writeln до освобождения места в буфере.
Другими словами, 250 мкс - это характеризует Ваш измерительный фрагмент программы, но никак не связано с реальной скоростью работы с портом.
vosara пишет:
DigitalWrite() — 1800мкс
DigitalRead() — 1900мкс
А тут явно что-то не то. Должно быть в пределах 5-7 мкс.
А библиотека эта , мы что просто по другому указываем номер пина и все намного быстрее работает.?
Там основное ограничение - номер пина должен быть константой. С переменной не работает. Ну и проверки убраны. В результате все вычисления выполнячет компилятор, а самой ардуине остается лишь считать заранее известный компилятору порт, изменить его известной операцией по известной маске и записать обратно. В результате - доли мкс.
mag155, посмотрите сами исходники digitalRead и digitalWrite в стандартной библиотеке Ардуино и в CyberLib, я что, исходник должен своими словами пересказывать?
Да, библиотека интересная, но авто очень глубоко внедряется в системные функции, в результате чего возникают конфликты с новыми версиями Arduino IDE. Лично я пользуюсь при необходимости отдельными фрагментами библиотеки.
Авторы разные, но свою версию писал с огладкой на Cyberlib. Она была тольео под УНО, а мне нужна была версия под Мегу, заодно тогда и решил что "можно" переопределяя типовые функции Wiring получать хороший код без переработки скетчей. К сожалению, этот путь - тупиковый, ибо эффективно закрывается разработчиками Wiring от версии к версии. Потому и не работает в новых версиях.
Если переписать так, чтобы отказаться от перекрытия типовых функций, то можно добиться стабильной работы во всех версиях. Но, гораздо лучше отказаться от числовой нумерации пина, в пользу "имени" (по особенности спецфункций пина) или "структуры" (порт, бит).
Всем привет !!! Такая задумка, сравнивать значения на одном аналоговом входе относительно другого и если значения отличаются изменять значения в переменной . Типа так работает но както медленно уж очень. Может есть какие идеии???
Всем привет !!! Такая задумка, сравнивать значения на одном аналоговом входе относительно другого и если значения отличаются изменять значения в переменной . Типа так работает но както медленно уж очень. Может есть какие идеии???
Такой вопрос. Как сравнивать одну переменную с другой и если одна переменная больше например на 10 то плюсовать в третью переменную по одному. А если больше к примеру на 20 то плюсовать не по одному а по 5.?
Всем привет !!! Такой вопрос: почему данная строка кода на ардуино уно работает а на меге ошибку выбивает ? Dimmer = map(A0_Read, 0, 1023, 6000, 0);
Полный код в посте 151.
Всем привет !!! Такой вопрос: почему данная строка кода на ардуино уно работает а на меге ошибку выбивает ? Dimmer = map(A0_Read, 0, 1023, 6000, 0); Полный код в посте 151.
потому что макрос A0_read. вероятно, не определен для Меги. Перепишите эту строку со стандартным AnalogRead. может заработает
Батюшки, я уж беспокоиться начал. Предыдущий крайний пост был, что то насчет питьсот вольт померить, а дальше тишина на месяц. Ви таки в отпуске были или измерения прошли неудачно?
Cyberlib изначально был для УНО ваще-то. Для меги, если и есть, то не так давно. Далал свою как раз из-за того, что не было "для Меги" никакой вовсе. :)
По сути вопроса понятно, в попадавшихся мне вариантах библиотеки этих макросов для меги просто нет. Вот и ругается.
Но любопытно почему? Просто не удосужился никто написать или с этим контроллером сложности какие-то в этом плане есть? Спрашиваю чисто из любопытства, для общего развития.
Поищите на гитхабе, где-то по ARHAT_H там есть мой вариант для Меги с описанием что к чему. Компилируется нормально под ИДЕ не старше 1.6.4 (писалось под ней). Начиная, кажется с 1.6.7 ардуинщики заблокировали использованный подход подмены файла Arduino.h, поэтому разработку дальше в этом ключе тогда и забросил.
А в целом, выкиньте и то и другое (и Cyberlib и Wiring) и пишите нормально "по взрослому" .. Это всё не требуется. Достаточно типового io.h (там у меня есть стек вложений хидеров, как памятка) ..
Скачал вашу библиотеку. Переустановить ардуино. До версии 1.6.4 Все работает кроме аналоговых входов. И как я понял библиотека заточен под входа от 0.До 7 го. У Мне И их больше может в этом проблема ?
Пробуйте
SerialPrintLn() — при скорости 9600 около 250мкс, а при максимальной скорости около 3мкс.
DigitalRead() — 1900мкс
А тут явно что-то не то. Должно быть в пределах 5-7 мкс.
Не проверял, спорить не буду. Даные взяты на какомто сайте.
https://habr.com/post/141442/
Но вот сейчас посмотел Ваш анализ и на других сайтах, похоже напугал человека хтя АЦП правильно!
Да маленько испугали при таких скоростях она про не могла бы успевать даже импульсы раздавать.
А библиотека эта , мы что просто по другому указываем номер пина и все намного быстрее работает.?
Там основное ограничение - номер пина должен быть константой. С переменной не работает. Ну и проверки убраны. В результате все вычисления выполнячет компилятор, а самой ардуине остается лишь считать заранее известный компилятору порт, изменить его известной операцией по известной маске и записать обратно. В результате - доли мкс.
Проверки при компилировании ?
А диммер это ж переменная ??
mag155, посмотрите сами исходники digitalRead и digitalWrite в стандартной библиотеке Ардуино и в CyberLib, я что, исходник должен своими словами пересказывать?
С телефона файл не открывается. Но как я понял библиотека классная.
Да, библиотека интересная, но авто очень глубоко внедряется в системные функции, в результате чего возникают конфликты с новыми версиями Arduino IDE. Лично я пользуюсь при необходимости отдельными фрагментами библиотеки.
Кстати, автор присутствует на этом форуме.
А под каким ником ?
Кстати, автор присутствует на этом форуме.
Андриано, по-моему вы спутали с библиотекой arhat.h
Вероятно да. Я почему-то думал, что автор у них один.
Вероятно да. Я почему-то думал, что автор у них один.
Нет, Архат позже немного ее допиливал.
Авторы разные, но свою версию писал с огладкой на Cyberlib. Она была тольео под УНО, а мне нужна была версия под Мегу, заодно тогда и решил что "можно" переопределяя типовые функции Wiring получать хороший код без переработки скетчей. К сожалению, этот путь - тупиковый, ибо эффективно закрывается разработчиками Wiring от версии к версии. Потому и не работает в новых версиях.
Если переписать так, чтобы отказаться от перекрытия типовых функций, то можно добиться стабильной работы во всех версиях. Но, гораздо лучше отказаться от числовой нумерации пина, в пользу "имени" (по особенности спецфункций пина) или "структуры" (порт, бит).
Все работает благодарю!!! Буду теперь думать как напряжение на выходе мерить от 0 до 500 вольт .
Те, кто с таким уровнем знаний лезет мерять 500В, через некоторое время, почему-то, исчезают со всех форумов...
Те, кто с таким уровнем знаний лезет мерять 500В, через некоторое время, почему-то, исчезают со всех форумов...
тут все еще хуже... человек полгода на форуме, а вопросы до сих пор задает такие, на которые 12-летние пацаны на амперке с ходу отвечают.
Но он упорный.
Ну хоть стопарь потом на льете помянете ?
Те, кто с таким уровнем знаний лезет мерять 500В, через некоторое время, почему-то, исчезают со всех форумов...
На медицинских можна поискать.
Ага или в морге. НЕ ДОЖДЕТЕСЬ.
Всем привет !!! Такая задумка, сравнивать значения на одном аналоговом входе относительно другого и если значения отличаются изменять значения в переменной . Типа так работает но както медленно уж очень. Может есть какие идеии???
Медленно работает не изменение значения переменной, медленно работает чтение с аналогового входа - примерно 112 мкс с каждого.
Всем привет !!! Такая задумка, сравнивать значения на одном аналоговом входе относительно другого и если значения отличаются изменять значения в переменной . Типа так работает но както медленно уж очень. Может есть какие идеии???
Паралелить?
А если ардуино DUE. Взять она ж быстрее по идее .?
А может в тему по теме написать? Например в тему о выборе контролера или о быстрой работе с АЦП.
Такой вопрос. Как сравнивать одну переменную с другой и если одна переменная больше например на 10 то плюсовать в третью переменную по одному. А если больше к примеру на 20 то плюсовать не по одному а по 5.?
А может в тему по теме написать? Например в тему о выборе контролера или о быстрой работе с АЦП.
а МАГ никогда в правильные темы не пишет. Он все в одну будет валить, чему подтверждение следующее сообщение
Тогда тему подскажете.
Всем привет !!! Такой вопрос: почему данная строка кода на ардуино уно работает а на меге ошибку выбивает ? Dimmer = map(A0_Read, 0, 1023, 6000, 0);
Полный код в посте 151.
потому что макрос A0_read. вероятно, не определен для Меги. Перепишите эту строку со стандартным AnalogRead. может заработает
Стандартно работает. Но скорость медленнее .
И будет ли работать эта библиотека с ARDUINO. DUO
?
Батюшки, я уж беспокоиться начал. Предыдущий крайний пост был, что то насчет питьсот вольт померить, а дальше тишина на месяц. Ви таки в отпуске были или измерения прошли неудачно?
Был таки на морях вот вернулся решил продолжить.
Вполне логично.
Иначе зачем CyberLib, если не для того, чтобы работало быстрее, чем в стандартном случае?
Эта ж библиотека изначально вроде для меги была. Чё не работает не пойму ?
Cyberlib изначально был для УНО ваще-то. Для меги, если и есть, то не так давно. Далал свою как раз из-за того, что не было "для Меги" никакой вовсе. :)
По сути вопроса понятно, в попадавшихся мне вариантах библиотеки этих макросов для меги просто нет. Вот и ругается.
Но любопытно почему? Просто не удосужился никто написать или с этим контроллером сложности какие-то в этом плане есть? Спрашиваю чисто из любопытства, для общего развития.
Наверное потому что на этом контроллере мало кто лепит вещи, в которых требовалась бы сайберлиб.
Соответственно с DUO тоже работать не будет. Хотя судя по скорости DUO и так шустрая.
Есть какие идеии?
написать свою библиотеку для Меги по аналогу с циберлиб?
Всем ривент !!!! Подскажите как все таки подружить МЕГУ с #include <CyberLib.h>????
Всем ривент !!!! Подскажите как все таки подружить МЕГУ с #include <CyberLib.h>????
Попробуй договориться. Если не получится - проси. Если и это не получится - умоляй, можно на коленях.
Arhat109-2. Подскажите как библиотеку к ардуино мега адаптировать. Аналоговые входы не читает ?
Поищите на гитхабе, где-то по ARHAT_H там есть мой вариант для Меги с описанием что к чему. Компилируется нормально под ИДЕ не старше 1.6.4 (писалось под ней). Начиная, кажется с 1.6.7 ардуинщики заблокировали использованный подход подмены файла Arduino.h, поэтому разработку дальше в этом ключе тогда и забросил.
А в целом, выкиньте и то и другое (и Cyberlib и Wiring) и пишите нормально "по взрослому" .. Это всё не требуется. Достаточно типового io.h (там у меня есть стек вложений хидеров, как памятка) ..
Ок. Благодарю буду искать.
.
Скачал вашу библиотеку. Переустановить ардуино. До версии 1.6.4 Все работает кроме аналоговых входов. И как я понял библиотека заточен под входа от 0.До 7 го. У Мне И их больше может в этом проблема ?