На каком младшем бите! Здесь порог. Меньше 1 вольта - хорошо, больше - лесом. Поставили 220 ом подтяжку получили 20 ма тока, ага? Токовая петля практически.) Вот вам и помехоустойчивость.
На каком младшем бите! Здесь порог. Меньше 1 вольта - хорошо, больше - лесом. Поставили 220 ом подтяжку получили 20 ма тока, ага? Токовая петля практически.) Вот вам и помехоустойчивость.
что будет если напряжение будет равно 1в?
а вот, что АЦП будет выдавать, то 204, а то 203, Выше условие будет барахлить.
В электрической схему у Вас какие будут напряжения? Схемы от Вас я не вижу, а без нее обсуждать особо нечего. Или мы говорим про
Если да - как Вы отследите одновременное нажатие A и B?
ну и наверно так будет более наглядно, да и наверно более правильно
uint8_t getKey() {
uint8_t result = 0;
for (uint8_t i = 0; i < sizeof(pin); i++)
digitalWrite(pin[i], LOW); pinMode(pin[i], OUTPUT);
for (uint8_t j = 0; j < sizeof(pin); j++) {
result <<= 1;
if (i != j) result |= analogRead(pin[j]) <= KEY_LEVEL;
}
pinMode(pin[i], INPUT_PULLUP);
return result;
}
Logik пишет:
Пусть схема так.
А как отследить одновременное нажатие G1+G2 ? в каждой итерации цикла делать 2 измерения с разной полярностью ?
Слушал долго и внимательно. То, что ТС пытается реализовать называется параллельный ЦАП. Теории про работу такого ЦАП и схемы включения есть, например http://www.gaw.ru/html.cgi/txt/doc/dac/pardacs.htm . Можно выбрать разные схемы включения. Опять же как прочитать результат такого кодирования тоже достаточно резжёван. Для уверенного распознавания разрядность АЦП должно быть лучше, чем точность резисторов ЦАП. В общем случае для уверенного распознавания разрядность АЦП должна быть как минимум в два раза выше - для шести кнопок нужно 12 разрядное АЦП.
А как отследить одновременное нажатие G1+G2 ? в каждой итерации цикла делать 2 измерения с разной полярностью ?
Да. Каждый цикл - перебор всех трех вариантов стробов смена полярности и снова перебор трех вариантов стробов. Итого 6 итераций. Это простая часть задачи. Вся фишка в логической обработке полученных с возвратов результатов. Там думать надо.
Слушал долго и внимательно. То, что ТС пытается реализовать называется параллельный ЦАП. Теории про работу такого ЦАП и схемы включения есть, например http://www.gaw.ru/html.cgi/txt/doc/dac/pardacs.htm . Можно выбрать разные схемы включения. Опять же как прочитать результат такого кодирования тоже достаточно резжёван. Для уверенного распознавания разрядность АЦП должно быть лучше, чем точность резисторов ЦАП. В общем случае для уверенного распознавания разрядность АЦП должна быть как минимум в два раза выше - для шести кнопок нужно 12 разрядное АЦП.
Добавлю, что это еще и при условии четкого согласования диапазона выходных напряжений этого "ЦАП" и АЦП. И при хорошей линейности "ЦАП" чего на простом делителе не получится.
Но отчасти проблема снимается тем что в схеме 2 "ЦАП" по 3 кнопки. Потому по теории - 6-и разрядное АЦП сойдет. А учетом предыдущего абзаца и помех - 10 разрядов может хватить, а может и нет.
При идеальном ЦАП количество кнопок равно разрядности АЦП. Или по Вашему N=M С=1. Уменьшение числа кнопок зависит от неравномерности подбора резисторов ЦАП, но оно всегда линейно. С может быть 2,3,4 и т.д. Это если нет ограничений на число одновременно нажатых кнопок. Если ограничение есть, то Ваша формула ближе к результату. У ТС нет ограничений на число кнопок - герконов.
Нарисуйте график преобразования ЦАП при разных значениях погрешности резисторов. Это всегда будет облако точек вокруг прямой. Чем шире облако, тем больше разрядов АЦП нужно иметь у запасе , что бы однозначно разрешить код ЦАП. Плюс шум, минус статистика. При этом не важно на каком месте кода ЦАП находится точка. Задавать приходиться по самому большому отклонению от центральной линии. А так как разряды АЦП вещь конечная, то соответственно и появляются цифры 2,3,4. Это как бы коридор двух линий внутри которых должно находиться облако точек ЦАП.
Нарисуйте график преобразования ЦАП при разных значениях погрешности резисторов. Это всегда будет облако точек вокруг прямой...
Собственно, можно не продолжать. Если у нас заданная точность резисторов (без подбора), то формула, очевидно, будет другой. Но все равно никак не N=C*M. Здесь эффект будет совершенно другим: скажем, если у нас точность резисторов 20%, то никакой возможности уверенно распознавать даже 4 кнопки у нас нет. Даже с 24-разрядным АЦП.
Другими словами, ни о какой линейной зависимости между числом кнопок и требуемым количеством разрядов нет. В первом приближении функция имеет вид двухзвенной ломаной, один из участков которой горизонтален.
Имено ломаной кривой, если соединить точки. если не содинять - облако, которое надо накрыть областью одназначного распознавания АЦП. N=C*M это предельный случай. Но мы живем в реальном мире. Дело даже не в 24 разрядном АЦП, а о весе разряда. То же АЦП AVR можно использовать в 8 битном варианте. При этом вес каждого разряда расширяется и может оказаться, что расширенный вес накрывает область разброса функции ЦАП и соответственно С выродится в единицу. Поэтому важен подбор резисторов ЦАП, особенно старших разрядов.
А по двум проводам 6 герконов не пойдет? ) R1, R8-R10 на стороне ардуино. Номиналы резисторов навскидку поставил. R1, R10 ограничительные. Можно линию на КЗ проверять и на обрыв. Сам схему не собирал и код не писал, но проблем не вижу.
А по двум проводам 6 герконов не пойдет? ) R1, R8-R10 на стороне ардуино. Номиналы резисторов навскидку поставил. R1, R10 ограничительные. Можно линию на КЗ проверять и на обрыв. Сам схему не собирал и код не писал, но проблем не вижу.
А по двум проводам 6 герконов не пойдет? ) R1, R8-R10 на стороне ардуино. Номиналы резисторов навскидку поставил. R1, R10 ограничительные. Можно линию на КЗ проверять и на обрыв. Сам схему не собирал и код не писал, но проблем не вижу.
почти идеально, осталось только компенсировать разное питание, но это легко.
Не знаю почему у Вас такая проблема. Может наводки виноваты. Я бы померил входное за 20 мс (20-50 значений) и посмотрел их значения. Стабильны или прыгают.
почти идеально, осталось только компенсировать разное питание, но это легко.
как я сам не додумал :(
Чушь собачья. Вам нужно измерить соотношение сопротивлений резистивного делителя. Для этого измеряется падение напряжения на верхнем конце делителя и его выходе. Находите формулу, и с удивлением замечаете, что соотношение напряжений плеч делителя, не зависит от напряжения питания. При вычислении напряжение уничтожается. В последней схеме есть нюанс - диоды, падение напряжения на которых зависит от протекающего тока, но если грамотно подобрать номиналы резисторов, то этот фактор можно свести к минимуму. Если использовать вместо двух, три провода, то диоды можно исключить. Можете посмотреть здесь http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=1#comment-349963 Но в принципе для измерения сопротивления достаточно двух проводов.
на сколько я понимаю ардуино только в теории так должно работать, на практике увы и ах, я мерил....
разница измерений при питании от +5 и от usb у меня достигала до 32 единиц на контакте по схеме из нулевого поста
ps
и кстати очень много чего пишут про ардуину и это не всегда правда, например про NANO пишут, что если его питать через собственную ногу +5вольт, но на контакте +3,3 питания не будет, а у меня все нормально, есть там 3.3 вольта :)
иногда полученный опытным путем результат не соответствует теоретическому :)
на сколько я понимаю ардуино только в теории так должно работать, на практике увы и ах, я мерил....
разница измерений при питании от +5 и от usb у меня достигала до 32 единиц на контакте по схеме из нулевого поста
Просто Вы их готовить не умеете. Если измеряете напряжение, то нужно или использовать внешний точный источник опорного напряжения или хотя-бы внутренний 1,1 В. Использование в качестве опорного напряжения питания в этом случае недопустимо. А для измерения сопротивлений не нужно абсолютных значений напряжения, нужно отношение их на резисторах делителя, а оно от напряжения источника питания не зависит.
Микросхема FTDI FT232RL получает питание, только если сама платформа запитана от USB.
Таким образом при работе от внешнего источника (не USB), будет отсутствовать напряжение 3.3 В
Вот один из вариантов, работает на автономном контроллере плазмореза. Помех выше крыши, но сбоев клавиатуры не замечалось. Резисторы ставились из имеющихся, возможно не оптимальны.
Резисторы можно подобрать тщательнее, для увеличения защитных интервалов, но того-же порядка. С увеличением номинала, возрастает уровень наводок. Условия ТС - 3 провода выполняются. Вход ардуино защищен, в кабель подается земля. В экселевской таблице все видно, минимальная разница между комбинациями клавиш 0,2В. Есть проблема с замедлением работы программы. Ардуина слишком быстро отлавливает нажатие клавиш. Поэтому надо проверить хотя-бы 100 раз ( и то не факт), сколько клавиш нажато. А то возможна непредсказуемая реакция. Допустим клавиша "1" - "ОГОНЬ", а клавиши "1" + "2" + "3" - "ПОСТАВИТЬ ОРУЖИЕ НА ПРЕДОХРАНИТЕЛЬ". Что будет в результате, если руки с похмелья дрожат?
1. Берем 2 esp. Первая AP, вместо вашей ардуины, вторая STA для физического подключения 100500 герконов.
2. Выдираем из земли один из трех проводов, сдаем на цветмет. По остальным двум подаем питание дла STA.
3. Передаем все нужное по вифи с STA на AP.
. дальше по классике
План "Б" - 2 ардуины + JDY40 с каждой стороны. Навар от сдачи в утиль третьего провода остается
Logic, много букв. Не убедил. НЕ КАТИТ!
Я объективно подходил, и понимал что убедить такой комок тьмы не реально. Забей, для других написано.
Я может быть и комок, однако мой вариант работает. В отличие от твоего!)))
Результат:
на младшем бите точно делать нельзя, всегда найдутся варианты с пограничными значениями и будет скакать даже без особых помех....
На каком младшем бите! Здесь порог. Меньше 1 вольта - хорошо, больше - лесом. Поставили 220 ом подтяжку получили 20 ма тока, ага? Токовая петля практически.) Вот вам и помехоустойчивость.
На каком младшем бите! Здесь порог. Меньше 1 вольта - хорошо, больше - лесом. Поставили 220 ом подтяжку получили 20 ма тока, ага? Токовая петля практически.) Вот вам и помехоустойчивость.
что будет если напряжение будет равно 1в?
а вот, что АЦП будет выдавать, то 204, а то 203, Выше условие будет барахлить.
В электрической схему у Вас какие будут напряжения? Схемы от Вас я не вижу, а без нее обсуждать особо нечего. Или мы говорим про
Если да - как Вы отследите одновременное нажатие A и B?
ну и наверно так будет более наглядно, да и наверно более правильно
Пусть схема так.
А как отследить одновременное нажатие G1+G2 ? в каждой итерации цикла делать 2 измерения с разной полярностью ?
Слушал долго и внимательно. То, что ТС пытается реализовать называется параллельный ЦАП. Теории про работу такого ЦАП и схемы включения есть, например http://www.gaw.ru/html.cgi/txt/doc/dac/pardacs.htm . Можно выбрать разные схемы включения. Опять же как прочитать результат такого кодирования тоже достаточно резжёван. Для уверенного распознавания разрядность АЦП должно быть лучше, чем точность резисторов ЦАП. В общем случае для уверенного распознавания разрядность АЦП должна быть как минимум в два раза выше - для шести кнопок нужно 12 разрядное АЦП.
Пусть схема так.
А как отследить одновременное нажатие G1+G2 ? в каждой итерации цикла делать 2 измерения с разной полярностью ?
Да. Каждый цикл - перебор всех трех вариантов стробов смена полярности и снова перебор трех вариантов стробов. Итого 6 итераций. Это простая часть задачи. Вся фишка в логической обработке полученных с возвратов результатов. Там думать надо.
Добавлю, что это еще и при условии четкого согласования диапазона выходных напряжений этого "ЦАП" и АЦП. И при хорошей линейности "ЦАП" чего на простом делителе не получится.
Но отчасти проблема снимается тем что в схеме 2 "ЦАП" по 3 кнопки. Потому по теории - 6-и разрядное АЦП сойдет. А учетом предыдущего абзаца и помех - 10 разрядов может хватить, а может и нет.
ну и наверно так будет более наглядно, да и наверно более правильно
Схема в скетче, но от перемены мест слагаемых сумма не изменяется.)
Это набросок для демонстрации. Там многое ещё можно делать.
Откуда такая зависимость?
Мне кажется, что должно быть:
N = M + K, где N - количество разрядов, M - количество кнопок, а K - некоторая константа (порядка 3)
Вы же предлагаете формулу:
N = C*M, где С=2.
При идеальном ЦАП количество кнопок равно разрядности АЦП. Или по Вашему N=M С=1. Уменьшение числа кнопок зависит от неравномерности подбора резисторов ЦАП, но оно всегда линейно. С может быть 2,3,4 и т.д. Это если нет ограничений на число одновременно нажатых кнопок. Если ограничение есть, то Ваша формула ближе к результату. У ТС нет ограничений на число кнопок - герконов.
Хотелось бы услышать обоснование.
Моя формула как раз для случая произвольной комбинации кнопок. Т.е. в Вашей терминологии "нет ограничений".
Нарисуйте график преобразования ЦАП при разных значениях погрешности резисторов. Это всегда будет облако точек вокруг прямой. Чем шире облако, тем больше разрядов АЦП нужно иметь у запасе , что бы однозначно разрешить код ЦАП. Плюс шум, минус статистика. При этом не важно на каком месте кода ЦАП находится точка. Задавать приходиться по самому большому отклонению от центральной линии. А так как разряды АЦП вещь конечная, то соответственно и появляются цифры 2,3,4. Это как бы коридор двух линий внутри которых должно находиться облако точек ЦАП.
Собственно, можно не продолжать. Если у нас заданная точность резисторов (без подбора), то формула, очевидно, будет другой. Но все равно никак не N=C*M. Здесь эффект будет совершенно другим: скажем, если у нас точность резисторов 20%, то никакой возможности уверенно распознавать даже 4 кнопки у нас нет. Даже с 24-разрядным АЦП.
Другими словами, ни о какой линейной зависимости между числом кнопок и требуемым количеством разрядов нет. В первом приближении функция имеет вид двухзвенной ломаной, один из участков которой горизонтален.
Имено ломаной кривой, если соединить точки. если не содинять - облако, которое надо накрыть областью одназначного распознавания АЦП. N=C*M это предельный случай. Но мы живем в реальном мире. Дело даже не в 24 разрядном АЦП, а о весе разряда. То же АЦП AVR можно использовать в 8 битном варианте. При этом вес каждого разряда расширяется и может оказаться, что расширенный вес накрывает область разброса функции ЦАП и соответственно С выродится в единицу. Поэтому важен подбор резисторов ЦАП, особенно старших разрядов.
План "Б" - 2 ардуины + JDY40 с каждой стороны. Навар от сдачи в утиль третьего провода остается
А по двум проводам 6 герконов не пойдет? ) R1, R8-R10 на стороне ардуино. Номиналы резисторов навскидку поставил. R1, R10 ограничительные. Можно линию на КЗ проверять и на обрыв. Сам схему не собирал и код не писал, но проблем не вижу.
А по двум проводам 6 герконов не пойдет? ) R1, R8-R10 на стороне ардуино. Номиналы резисторов навскидку поставил. R1, R10 ограничительные. Можно линию на КЗ проверять и на обрыв. Сам схему не собирал и код не писал, но проблем не вижу.
Для 6 кнопок, самый оптимальный вариант.
А по двум проводам 6 герконов не пойдет? ) R1, R8-R10 на стороне ардуино. Номиналы резисторов навскидку поставил. R1, R10 ограничительные. Можно линию на КЗ проверять и на обрыв. Сам схему не собирал и код не писал, но проблем не вижу.
почти идеально, осталось только компенсировать разное питание, но это легко.
как я сам не додумал :(
почти идеально, осталось только компенсировать разное питание, но это легко.
Поясните, что за "разное питание".
Еще. Чтоб легче было отслеживать КЗ в линии, нужно последовательно с S3 и S6 поставить резисторы Ом так на 47.
почти идеально, осталось только компенсировать разное питание, но это легко.
Поясните, что за "разное питание".
проблема:
http://arduino.ru/forum/apparatnye-voprosy/6-gerkonov-po-3m-provodam#comment-605139
решение:
http://arduino.ru/forum/apparatnye-voprosy/6-gerkonov-po-3m-provodam#comment-605580
Не знаю почему у Вас такая проблема. Может наводки виноваты. Я бы померил входное за 20 мс (20-50 значений) и посмотрел их значения. Стабильны или прыгают.
почти идеально, осталось только компенсировать разное питание, но это легко.
как я сам не додумал :(
Чушь собачья. Вам нужно измерить соотношение сопротивлений резистивного делителя. Для этого измеряется падение напряжения на верхнем конце делителя и его выходе. Находите формулу, и с удивлением замечаете, что соотношение напряжений плеч делителя, не зависит от напряжения питания. При вычислении напряжение уничтожается. В последней схеме есть нюанс - диоды, падение напряжения на которых зависит от протекающего тока, но если грамотно подобрать номиналы резисторов, то этот фактор можно свести к минимуму. Если использовать вместо двух, три провода, то диоды можно исключить. Можете посмотреть здесь http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=1#comment-349963 Но в принципе для измерения сопротивления достаточно двух проводов.
на сколько я понимаю ардуино только в теории так должно работать, на практике увы и ах, я мерил....
разница измерений при питании от +5 и от usb у меня достигала до 32 единиц на контакте по схеме из нулевого поста
ps
и кстати очень много чего пишут про ардуину и это не всегда правда, например про NANO пишут, что если его питать через собственную ногу +5вольт, но на контакте +3,3 питания не будет, а у меня все нормально, есть там 3.3 вольта :)
иногда полученный опытным путем результат не соответствует теоретическому :)
Где это такую ерунду про Nano пишут? Первый раз слышу...
на сколько я понимаю ардуино только в теории так должно работать, на практике увы и ах, я мерил....
разница измерений при питании от +5 и от usb у меня достигала до 32 единиц на контакте по схеме из нулевого поста
Просто Вы их готовить не умеете. Если измеряете напряжение, то нужно или использовать внешний точный источник опорного напряжения или хотя-бы внутренний 1,1 В. Использование в качестве опорного напряжения питания в этом случае недопустимо. А для измерения сопротивлений не нужно абсолютных значений напряжения, нужно отношение их на резисторах делителя, а оно от напряжения источника питания не зависит.
Где это такую ерунду про Nano пишут? Первый раз слышу...
http://arduino.ru/Hardware/ArduinoBoardNano
Судя по этой схеме, это не так.
vde69, покажите код с которым выдается различное значение АЦП с делителя при разном напряжении питания ардуино. Просто интересно.
vde69, покажите код с которым выдается различное значение АЦП с делителя при разном напряжении питания ардуино. Просто интересно.
Тогда и схему заодно. А то ТС может питать ардуино от одного источника питания, а делитель от другого. Пути господни неисповедимы.
Вот один из вариантов, работает на автономном контроллере плазмореза. Помех выше крыши, но сбоев клавиатуры не замечалось. Резисторы ставились из имеющихся, возможно не оптимальны.
Резисторы можно подобрать тщательнее, для увеличения защитных интервалов, но того-же порядка. С увеличением номинала, возрастает уровень наводок. Условия ТС - 3 провода выполняются. Вход ардуино защищен, в кабель подается земля. В экселевской таблице все видно, минимальная разница между комбинациями клавиш 0,2В. Есть проблема с замедлением работы программы. Ардуина слишком быстро отлавливает нажатие клавиш. Поэтому надо проверить хотя-бы 100 раз ( и то не факт), сколько клавиш нажато. А то возможна непредсказуемая реакция. Допустим клавиша "1" - "ОГОНЬ", а клавиши "1" + "2" + "3" - "ПОСТАВИТЬ ОРУЖИЕ НА ПРЕДОХРАНИТЕЛЬ". Что будет в результате, если руки с похмелья дрожат?