ФУОЗ по дешману
на сайте:
ноя-08
нахождение:
Москва, Ясенево
|
|
26-11-20 18:13
|
|
Ребята на базе ардуино запилили фуоз, дешево и просто |
|
на сайте:
ноя-08
нахождение:
Москва, Ясенево
|
|
26-11-20 18:13
|
|
Ребята на базе ардуино запилили фуоз, дешево и просто |
|
Скачал файл без MAP.
Вот теперь появился смысл в глобальности переменной diffTime, потому что мы начали её использовать в двух разных функциях (язвительную часть из коммента к данной переменной можно смело убирать, что ты и сделал в строке 17 :-))
... и финальный шаг оптимизации в этой функции - два машинных и один человечий:
0. Повышаем точность вычисления.
1. Избавляемся от одной лишней операции.
2. Убираем из кода непонятные магические числа.
Возьмём для примера состояние, обозначенное в строке 196:
058340 мкс - ВМТ - oldModulator = 1, modulator = 0, ignitionFlag = 0, nextIgnition = 15899, ignitionFlagWithOffset = 0, oldtime = 8340
VMTtime = 58340
diffTime = 50000
rpm = 1200
ignitionDegree = map(1200, 1000, 2000, 22, 150) = 47
nextIgnition = 58340 + 50000 - (50000 / 360 * 47 / 10)
nextIgnition = 58340 + 50000 - (138 * 47 / 10)
nextIgnition = 58340 + 50000 - (6486 / 10)
nextIgnition = 58340 + 50000 - 648
nextIgnition = 108340 - 648 = 107692
Итого 5 операций (на самом деле, больше, потому что ATMega имеет восьмибитную архитектуру, и не умеет без костылей оперировать 4-байтовыми данными, но это уже ограничения архитектуры и от них особо никуда не деться, по крайней мере, с моими знаниями)
107692 мкс - это 4,66 градуса до ВМТ. Отлично, практически попали в цель. Формулу можно считать верной, но в ней есть два "магических числа" - 360 и 10, и одна лишняя операция деления, тратящая машинное время и вносящая путаницу в мозг того, кто пытается разобраться в коде.
Избавиться от них очень просто.
Для начала сократим выражение - объединим две последовательные операции деления и запишем формулу как
nextIgnition = VMTtime + diffTime - (diffTime/3600*ignitionDegree);
Оп! Сразу стало меньше на одно магическое число и на одну математическую операцию!
Для проверки пересчитаем:
nextIgnition = 58340 + 50000 - (50000/3600*47)
nextIgnition = 58340 + 50000 - (13*47)
nextIgnition = 58340 + 50000 - 611
nextIgnition = 108340 - 611 = 107729
Итого 4 операции.
Но 107729 мкс - это 4,4 градуса до ВМТ. Промахнулись на 3 десятки против 4 соток в предыдущем варианте. Почему же мы так сильно потеряли в точности?
Потому что, как объяснял ранее, при целочисленных операциях деления дробная часть отбрасывается.
Поэтому стоит сначала производить все операции умножения с оглядкой на тип данных, и только по завершении операций умножения производить деление, чтобы отбрасываемый остаток был минимальным.
Поэтому запишем формулу как
nextIgnition = VMTtime + diffTime - (diffTime*ignitionDegree/3600);
И произведём контрольный расчёт.
nextIgnition = 58340UL + 50000UL - (50000UL*47U/3600)
nextIgnition = 58340UL + 50000UL - (2350000UL/3600)
nextIgnition = 58340UL + 50000UL - 652UL
nextIgnition = 108340UL - 652UL = 107688UL
Итого 4 операции, как и было на предыдущей итерации, а 107688 мкс - это 4,69 градуса до ВМТ. Практически в яблочко!
Как можно заметить, у некоторых чисел появились суффиксы. Они нужны, чтобы наглядно оценить тип данных и не встретиться с переполнением.
Тип данных задаётся при объявлении константы или переменной. В нашем случае объявлены 3 глобальные переменные и 1 локальная константа:
unsigned long VMTtime (4 байта, беззнаковая, диапазон 0...4294967295, суффикс UL от Unsigned Long)
unsigned long diffTime (аналогично)
word ignitionDegree (2 байта, беззнаковая, диапазон 0...65535, суффикс U от Unsigned int)
3600 (по умолчанию тип int16 - 2 байта, знаковая, диапазон -32768...32767, суффикс отсутствует)
При выполнении математических операций с двумя переменными разных типов компилятор автоматически приводит в соответствие размеры переменных, но за типами данных лучше следить самостоятельно, потому что 5000 * 20 = -31072, а никак не ожидаемые 100000 - возникло переполнение типа int16, т.к. данные типа int16 не приведены явно к int32.
Правильно и предсказуемо будет вычисление 5000UL * 20 = 100000UL, или 5000L * 20 = 100000L.
Но в нашем случае всё в порядке, переменные изначально имеют нужные типы.
Теперь осталось дело за малым - избавиться от последнего магического числа в коде
В самом начале кода объявим константу:
#define DEC_DEGREES 3600 // Количество десятичных долей градуса в полном обороте, потому что все расчёты углов мы ведём в десятичных долях
И теперь мы можем записать формулу как
nextIgnition = VMTtime + diffTime - (diffTime*ignitionDegree/DEC_DEGREES);
Всё, функция оптимизирована.
Но поле для дальнейшей оптимизации и причёсывания кода ещё непаханое.
А это зачем? Чтобы точно не завести с первого кика? :-)
Если ты таким образом пытался избежать хлопка в карбюраторы при включении зажигания на уже крутящемся моторе, то, ИМХО, логичнее было бы чуть изменить алгоритм старта - первые две искры подавать точно в ВМТ, а расчёт скорости вращения и угла опережения начинать только со второй ВМТ. Основываясь на разнице времени между двумя ВМТ, уже можно считать обороты и входить в основной алгоритм.
Peacedeath подкрался незаметно, но слышен был издалека
после причесывания кода , прошивка стала меньше изначальной , теперь она 39 процента занимает больше нет плавающих точек.
так же можно ввести обработку кнопок если надо , например при нажатие кнопки понижать или повышать график на определенный угол , например одни раз нажал , график повысился , второй раз нажал , понизился , третий раз нажал вернулся в нормальное состояние , четвертый раз нажал вырубилось все нахрен , или двигстоп так реализовать. один раз нажал перестала искра идти, второй раз пошла.
Может реализовать как у Сарумана - смену графиков в зависимости от типов ДВС и нагрузки?
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)
У сарумана 3 графика и пара функций на выбор , тут можно записать и 3 графика разных , но проще просто делать корректировку текущего графика на определённый угол , программно это менее затратно чем писать другие графики, хотя не факт что правильно для мотора .
По переключению графиков вообще не вижу смысла так как обработка МАР как раз и избавит от необходимости переключения графиков на тяговые, верховые и т.д. .
А вот допилить функции прогрева свечей может , хотя ни разу таким не пользовался.
или функцию откатки или охраны. и отсечку наверно надо добавить.
П.С.
хотя режим переключения возможно хорошо подойдет для отладки графиков под конкретный мотоцикл.
ты напиши сколько графиков хочешь видеть разных попробую продумать как это сделать
П.П.С.
к реализации обработки МАР придумал читать показания в середине момента впуска, это избавит от необходимости городить ресиверы и сглаживать пульсации , но необходимо брать показания сразу с двух цилиндров , например через тройник на шлангах. в код по ссылке это добавил.
Ну так Сарумановская схема была отлажена для работы без МАР от того то и сделали там 3 графика.
Предлагаю такую концепцию:
1. Схема без МАР - реализуем те же 3 графика как у Сарумана - колясыч, одичка и условно "спорт". Хотя городить третий график не вижу большого смысла
2. Схема МАР - прошивка подгоняется под конкретный датчик из недорогих и доступных. Вакуум берется через пресловутую переплюйку.
Режим прогрева свечей считаю функцией бесполезной, так как при нормально работающем ДВС это не нужно.
Сдвигать график туда сюда наверное не логично, а вот сдвиг участков графика в диапазонах определенных оборотов логичен.
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)
Да можно попробовать ,
еще можно попробовать например не графики переключать а менять их угол наклона, ..
мне в сарумане например разница в работе графиков неощутима вообще на нагрузке но вот мотор то тупил то наоборот (но вибрирует одинакого) (видать это применительно к750, или моего изготовления сарумана)) потому и думаю попробовать на ардуине мож я криворукий паятель), занижение графика целиком не вижу смысла так как например с увеличением нагрузку вибрации росли прям пропорционально , и общее снижение графика на 10 градусов толку не давало , а вот локально в нужный момент понижать график на 0-20 в зависимости от нагрузки думаю смысл имеет потому и смотрю на МАР.
Выпала тут пол часика свободных..
Дописал Скеч , на 2 графика с обработкой кнопки переключения графиков , 2 графика взял с сарумана "золотая середина" (по умолчанию) и "колясыч" при замкнутой на землю кнопке.
Поправил условие обработки первого оборота двигателя. в первые 2 прохождения искра идет в вмт. далее считается как положено.
Поправил Скеч с МАР график м72 отсечка на 5200 под датчик МАР 45.3829 газель по параметрам он как раз от 0.2 до 1 бар и напряжение 0.8-4.8 соответственно.
П.С.
расчет искры для первого скеча сделал как в сарумане до 7000 об/м далее отсечка.
Элиас , жду твоих конструктивных коментов.
Откатал на стенде прошивки с коммутатором 95.3734, искра при старте будет всегда, это особенность платы, при старте стартует бутлотер который и дает сигнал на ногу выхода, и это не победить будет Бах при включении зажигания. Подправил прошивку под вырез, так же программно на пины входа подтягиваем +, дает более стабильную реакцию на датчик холла.
осталось обкатать на мотоцикле. все свежие скечи по ссылкам в посту выше , аналог сарумана называется sketch-461_NO_MAP...
так же на вход датчика мап надо подтягивать отдельным резистором на 10кОм gnd иначе при отключеном датчике на порту начинаются самопроизвольные показания и угол коррекции начинает плясать. подтягивание встроенным резистором толку не дает.
ТЕсты на мотоцикле показали несостоятельность данный прошивки , холостые работают четко , но набор оборотов сопровождалось пропусками зажигания и т.п.
После нескольких тестов и правок в итоге получилась рабочая прошивка а-ля саруман (....no_map), протестировал пока с одним графиком, пока заводка и работа на холостых в разных режимах, прошивку можно взять в папке папке.
Далее буду выкладывать по мере проведения работ.
Поглядел эту версию.
Не понял, зачем ты выпилил внедрённую тобой же защиту от обратной вспышки при включении зажигания на вращающемся моторе.
Ну и плюс есть поле для оптимизации. ИМХО, надо сначала закончить с этой версией, добившись максимальной производительности и минимального веса, а потом уже внедрять MAP.
Кнопка - штука хорошая, но вход надо защищать от случайного включения на 12В. И это уже не программно...
Кстати, шаг в 1000 об/мин не большеват ли, как считаешь?
Нет желания уменьшить его до 500, а в идеале - до 200 об/мин?
Потребуется, конечно, более детально прописать графики и потратить дополнительно 36...120 байт, но, может, овчинка стоит выделки, чтобы приблизиться к целевому графику от текущей ломаной линии?
Peacedeath подкрался незаметно, но слышен был издалека
Когда прошивка нормально не заработала, первый запуск.. вообще очень странно прошивка себя вела , потом я из нее выпилил почти все до изначальной и добавлял по немногу с тестами на мотоцикле, до внедрения защиты и проверки просто не хватило времени.
(Я долго сидел сравнивал изначальную прошивку и свою, так и не понял почему она нормально не заработала, может не надо писать программы в 4 утра как вариант..))
На выход кнопки можно вкорячить резюк на 1кОм и стабилитрон на 5В или 4.5, можно конечно сделать обвязку с транзисторным ключом что то типо кт3102, это точно избавит от возможного высокого напряжения , но ИМХО достаточно резистора, так как 12В на этом порту может взяться только от криворукости и перекоротившей проводки . если кнопка выносится на руль .
По оптимизации , наверняка поле там не паханное , но я просто не вижу что и как можно поправить, вроде все лаконично и лишнего нет, может конечно на case перейти но по моему это одно и тоже что и else if по скорости))
ОК.
Значит, будем допиливать...
Ибо защита от обратной вспышки, ИМХО, нужна.
Да, резистора 1 кОм должно быть достаточно. Высокое напряжение там может появиться только если обмотать провод кнопки вокруг катушки / ВВ провода, или при электростатическом разряде.
Peacedeath подкрался незаметно, но слышен был издалека
Защиту внедрим , тем более обработка её достаточно простая.
А вот по оптимизации мне знаний не хватит , жду предложения ))
Внедряй и кидай ссылку на обновлённую прошивку.
А я займусь оптимизайцами.
Peacedeath подкрался незаметно, но слышен был издалека
Немного допилил после просмотра обучалок (не смотрите обучалки перед сном.. сон прогоняет) , переделал считывание с пинов на непосредственное и непосредственный вывод на пины, в теории должно увеличить скорост ьработы прошивки , так же добавил защиту на первый оборот Папка со скетчами , теперь при первом обороте всегда искра бьет в вмт , а далее уже идет полноценный расчет.
В прямую работу с портами лезть стоит, когда всё остальное уже вылизано. Функции чтения порта и записи в порт стоят не то чтобы очень дорого, но код моментально перестаёт быть читабельным, и нужно выносить все операции с портами в отдельные функции. Но начинание похвальное.
Порадовали строки 36, 41 и 47 - сэкономил сразу 8 байт памяти ОЗУ относительно предыдущей версии. Было любопытно, когда же мы избавимся от одной дублирующей переменной и излишнего размера двух других. И вот оно пришло.
Правда, я не очень понимаю, зачем всё же переменным rpm и ignitionDegree знак - неужели у нас может быть отрицательное значение скорости вращения или УОЗ?
Также правильно сделал, что убрал из конца присвоение переменной oldtime значения текущего времени и перенёс его к расчёту скорости вращения, где оно и должно быть - таким образом ты исключил влияние всей математики на временную метку. Теперь время ставится чётко (есть, конечно, нюансы, но о них позже).
Плюс после этого переноса ты увидел, что при присвоении значения oldtime можно не обращаться к функции micros(), а взять значение из уже существующей переменной VMTtime, что дополнительно сэкономило несколько тактов и повысило точность измерений.
Это всё мелочи, но в сумме они дадут прирост производительности и свободное время камня, которое можно будет применить куда-то ещё.
И рекомендовал бы тебе обратить взор на строки 111...113 вкупе с 116...119
Если правильно с ними поступить, то будет сэкономлено ещё несколько байт флеша.
Peacedeath подкрался незаметно, но слышен был издалека
Спасибо . учел замечания , сделал правки , выносить считывание и вывод на порты в отдельные функции не стал, из-за этого растет размер прошивки. Сейчас доковырял алгоритм по условиям от rpm , для понимания страшновато выглядет но теперь до каждого значения у нас не более 3 прыжков , 4 прыжка только до самых медленных значений, по идеи программа должны быстрее отрабатывать теперь условия .
скеч в той же папке по ссылке выше обновил.
Провел полноценный ходовой тест, прошивка на 2 графика работает , графики переключаются, на колясочном графике лучше тянет меньше трясет, что и не удивительно для касика с каляской и 9-кой. работает стабильно, заводится нормально, работает стабильно.
Осталось откатать прошивку под мап. но тут пока под рукой датчика нет.
Молодец.
Спасибо, что не забросил.
А что-бы эту программу заставить работать с четырехкотловым мотором с трамблером что надо поменять? Я так понимаю просто вычисление количества об/мин подправить?
Очень уж хочется на буса себе прилепить это, и чтоб в зависимости от топлива (газ/бензин) график переключался автоматически.
А что там в первичной цепи катушки-то?
Коммутатор с Холлом или контакты?
Если коммутатор с Холлом, то пойдёт, но количество правок зависит от расположения шторки, её формы и расположения фронта.
Peacedeath подкрался незаметно, но слышен был издалека
Датчик Холла. Шторку я могу любую сделать. Могу ее прямо на распредвал посадить, на шкив. И отдельный датчик. Да и форма шторки тут вроде как не завязана на расчеты..
для работы с 4-х целиндровым надо либо делать двойную систему на 1,4 и 2,3 кател , отдельные датчики, платы и коммутаторы, или править прошивку. можно например только дописать расчет до 14000 оборотов и сделать график более пологий раза в 2 (так как модулятор имеет 4 лепестка и соответственно обороты умножаем на 2).
Не нужна там двойная система. Трамблёр же.
Достаточно будет повесить шторку с двумя лепестками на коленвал или с четырьмя - на распредвал, задать нужные графики и скорректировать расчёт скорости вращения.
Обороты считать как 30000000UL/diffTime, т.к. между фронтами теперь не 1 оборот, а 0,5 оборота.
Правильнее весь этот праздник для всех версий будет записать так:
#define FRONTS_PER_ROTATE 1 // Количество прохождений шторки через датчик за 1 оборот КВ
#define MICROS_IN_MINUTE 60000000UL // Количество микросекунд в минуте
#define TIME_FOR_RPM_COUNT (MICROS_IN_MINUTE / FRONTS_PER_ROTATE) // определяем коэффициент для расчёта скорости вращения в зависимости от количества импульсов на оборот
И в строке 65:
rpm = TIME_FOR_RPM_COUNT / diffTime;
Теперь при установке на четырёхцилиндровый мотор с трамблёром достаточно задать константу
FRONTS_PER_ROTATE 2
И вуаля, обороты считаются корректно, и графики можно рисовать нормальные.
Peacedeath подкрался незаметно, но слышен был издалека
тут уже попахивает универсальностью .. предлагаю тогда так
#define ROTATE_IN_CYCLE 2 /Колличество оборотов каленвала в полном цикле мотора
#define CYLNDERS 4 // Количество цилиндров
#define MICROS_IN_MINUTE 60000000UL // Количество микросекунд в минуте
#define TIME_FOR_RPM_COUNT (MICROS_IN_MINUTE * ROTATE_IN_CYCLE/ CYLNDERS ) // определяем коэффициент для расчёта скорости вращения в зависимости от количества импульсов на оборот
Погоди-ка... А зачем так?
В полном цикле мотора всегда 2 оборота коленвала, если это 4Т, и 1 оборот - если 2Т.
Если зажигание будет установлено на одноцилиндровый 4Т мотор со шторкой на коленвалу, то расчёт скорости по этой формуле сломается - значение будет в 2 раза выше истинного. Именно поэтому предлагаю завязываться на параметр "Количество прохождений шторки в датчике за 1 оборот коленвала".
Peacedeath подкрался незаметно, но слышен был издалека
так мы можем считать и 3 и 5 и 6 и 8 и 12 цилиндров , универсальность.
В случае с 1 цилиндровым и шторкой на кв , у нас получается всегда одна холостая искра ..
тогда мы должны учитывать полный цикл (обычно 2 оборота) на колличество прохождений шторки (которое обычно равно цилиндрам) .
#define ROTATE_IN_CYCLE 2 //Колличество оборотов каленвала в полном цикле мотора
#define CYLNDERS 4 // Количество цилиндров, или прохождение шторки за полный цикл
#define MICROS_IN_MINUTE 60000000UL // Количество микросекунд в минуте
#define TIME_RPM_COUNT (MICROS_IN_MINUTE * ROTATE_IN_CYCLE / CYLNDERS) // определяем коэффициент для расчёта скорости вращения в зависимости от количества импульсов на оборот
В предложенном мной варианте ровно так же могут обрабатываться что 3-цилиндровые, что 12-цилиндровые моторы с трамблёром. Только есть возможность ещё и одноцилиндровые включить в тот же ряд без каких-либо условностей. Холостая искра - она и на наших родных оппозитах есть, проблем вроде бы не вызывает.
Но спорить далее не стану, ибо это не принципиальный вопрос, и влияет исключительно на удобство редактирования прошивки и задания констант под конкретную конфигурацию.
Peacedeath подкрался незаметно, но слышен был издалека
Ну это да ... ))
Куда интереснее предложения по оптимизации и графикам , их наверно и стоит сделать с шагом 250.
А если "rpm = 60000000 / diffTime;" заменить на "rpm = 30000000 / diffTime;"
Т.е. сразу высчитаем обороты в 2 раза меньше, а дальше как и было?
Уйти от трамблера конечно заманчиво, но пока не хочется.
А кстати да , будет работать. если ты искру бегунком трамблёра будешь раздавать по котлам
Допилил прошивку , шаг расчета 250 оборотов
кривые зашиты из сарумана ,
стантарт по умолчанию и калясыч при замкнутой на - пине 2 (кнопка переключение графиков)
поиск сделал алгоритмом в котором до любого значения оборотов у нас не более 6 сравнений . при размере таблиц в 25 значений
осталось провести тестовые испытания
прошивка как всегда NO_MAP ТУТ
так же выложил туда же екселчик с графиками , по которому подбирал промежуточные занчения .
П.С.
Как точно узнать сколько микросекунд занимает полный цикл программы сколько самый малый цикл . ожидания и сколько проходит времени от срабатывания датчика в вмт и сигналом на коммутатор..
Для этого надо осциллограф мегагерцовый+ иметь.
Вот приедет мне платка эта - и расскажу по таймингам, что и сколько занимает.
Кстати, а как ты вычислял промежуточные значения для графика?
Я посмотрел на Сарумановские графики и увидел там шаг 1000 об-мин, а всё, что между ними - прямая линия, которая описывается функцией MAP
Peacedeath подкрался незаметно, но слышен был издалека
промежуточные подгонял в екселе чтоб был наиболее ровный, красивый график.
Протестировал на мотоцикле последнюю прошивку под 2 графика, работает стабильно, графики переключаются (заметно по максимальным оборотам, для к750 график более пологий лучше). считаю прошивку а-ля саруман законченной, дальнейшую оптимизацию в какую сторону копать уже не вижу.
На её базе добавлю обработку МАР, но это уже ольше, сначала надо сделать место отбора вакуума, подключить МАР и получить значения на разных оборотах , и потом исходя из них сделать зависимость.
А как ты переключение графиков реализовал физически, какой вывод платы нужно на землю замыкать?
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)
Выходы платы :
Р0 = вход с датчика холла или оптического
Р1 = выход на коммутатор
Р2 = выход на кнопку переключения графиков (кнопка замыкает, размыкает - бортсети), между кнопкой и этим выходом желательно припаять последовательно резистор на 1КОм (защита от замыкания на + 12в от бортсети)
GND = - 12в (бортсети)
VIN = + 12в (бортсети)
видео с теста зажигания https://youtu.be/tC2brxl9h3I
А какого вида шторка? Вырез или пластина? Ну и в целом, как настраивать, сам процесс?
прошивка сделана под вырез в шторке , размер выреза непринципиален главное симетрия (у меня стоит модулятор от сарумана, так как он был и городить отдельный смысла нет).
для того чтоб сделать прошивку для работы со шторкой надо поменять один параметр
строка 146
if (modulator == HIGH) { // HIGH для активного элемента вырез, LOW для активного элемента пластины
Выход активного элемента из датчика должен быть +- ВМТ , далее корректируем под свой мотор.
В момент вхождение активного элемента в датчик , на плате загорается светодиод , в момент выхода гаснет.
заказал, прошил, скрестил воедино с оптодатчиком. На столе работает. Поставлю на мотоцикл и стробоскопом гляну работает ли и как.
обрати внимание особенно на режимы от 700 до 1500. жду результатов.
измерения показаний с МАР на работающем двигателе показали изменения переменной нагрузки в среднем от 800 до 1021 , показания менее 800 там не интересны , потому что достигаются только на сбросе газа , а вот показаний более 1021 быть не может,
исходя из этого поправил скеч с обработкой МАР, новую версию выложил по ссылке выше.
Ты только скажи какой MAP-sensor был взят и как его цеплять к контроллеру. Ветка разрослась и не у всех хватит умения все внимательно прочесть.
___________________________________________________________________
"Человека можно уничтожить, но его нельзя победить" (Э. Хемингуэй)
Скеч NO MAP подключение
Выходы платы :
Р0 = вход с датчика холла или оптического
Р1 = выход на коммутатор
Р2 = выход на кнопку переключения графиков (кнопка замыкает, размыкает - бортсети), между кнопкой и этим выходом желательно припаять последовательно резистор на 1КОм (защита от замыкания на + 12в от бортсети)
Скеч MAP :
MAP модель Gaz 45.3829 (и его аналоги ссылка на exist)
Подключение, так как датчик работает с 5В , подключается к плате следующим образом:
5V = первый контакт с МАР подключаем
GND = второй контакт с МАР подключаем
Р0 = вход с датчика холла или оптического
Р1 = выход на коммутатор
Р2 = третий контакт с МАР подключаем (за место кнопки переключения графиков)
Общее для всех прошивок :
GND = - 12в (бортсети)
VIN = + 12в (бортсети)
Дублирую еще раз Папка со скечами
Электрические вопросы:
Платка нормально работает сразу от 12 вольт?
Можно ее просто на жгут от датчика до коммутатора повесить и питать ее с питания датчика Холла? Брать минус и плюс, в разрыве сигнального собственно выход-вход платы.
по описанию плата переваривает до 17В так что можно питать из любого места ,но у меня именно так и сделано как ты предлагаешь , плюс разъемы сделаны так что можно соединить напрямую коммутатор с датчиком если вдруг ФОЗУ выйдет из строя (еще для сарумана это делал).
А почему плата ждет секунд 6 прежде чем начать реагировать на датчик?
Это в прошивке зашито, или она сама по себе инициализируется так долго?
Это дань, которую приходится платить за возможность прошивки по USB.
При подаче питания запускается bootloader, который ожидает связи по USB и поступления данных в порт. При отсутствии данных в течение 5 секунд - запускает основную программу, зашитую пользователем.
Peacedeath подкрался незаметно, но слышен был издалека
Обойти никак?
На Ардуино Нано программа портируется ведь? Там вроде такой фигни нету..