roboforum.ru

Технический форум по робототехнике.

Аналогавая клавиатура на 1 pin arduino

Аналогавая клавиатура на 1 pin arduino

FantasyOR » 26 май 2011, 12:11

Здравствуйте!
Есть необходимость иметь много датчиков контакта(фактически клавиши), но в ардуине их не так уж и много(мне нужно как минимум в 2 раза больше) поэтому возник вопрос: сделать схему типа этойИзображение
идею я увидел тут http://pic-avr.narod.ru/opisanie.htm и немного подкорректировал под себя(4 кнопки это пример).
Вот у меня смутные сомнения по поводу одновременного нажатия нескольких кнопок в этой схеме. помогите пожалуйста, я программист, а не электронщик. Физику конечно учил, и даже в институте была электроника...
При нажатии 1 кнопки понятно: напряжение в точке А0 должно меняться пропорционально R1, R1+R2, R1+R2+R3, R1+R2+R3+R4.
Но при одновременном нажатии 2х: например K2 и К3, то в А0 все равно будет R1+R2(R3 шунтируется), а при замыкании К1 - отследить нажатие остальных нельзя? из закона Ома я понимаю, что ток (Амперы) увеличится, но напряжение в точке А0 останется как при замыкании одной только К1.
вероятней всего можно, я понимаю, что лучший ответ будет учебник по физике(вероятней всего даже школьный класс так 7-8) но лучше вкратце напишите где я ошибся в схеме или в рассуждениях. Зачем тут конденсатор? защита от дребезга контактов?
Спасибо.

Добавлено спустя 7 минут 34 секунды:
так же знаю, что при последовательном соединении резисторов увеличивается (R1+R2), а при параллельном уменьшается (R1+R2)/(R1*R2). в программе я так полагаю нужно будет сравнивать значение с pin'a с вычисленным значением - попробовать виртуально за контачить разные кнопки и какое значение будет ближе, такие кнопки и нажаты. пока я думаю так реализовать определение нажатия кнопки.

Re: Аналогавая клавиатура на 1 pin arduino

HarryStar » 26 май 2011, 14:38

Можно сделать просто матрицу например 8 х 8, получится 64 кнопки на 16-ти входах мк.

Re: Аналогавая клавиатура на 1 pin arduino

FantasyOR » 26 май 2011, 16:05

все же это не то 16 входов, считайте это все что есть на ардуине, а мне еще туда надо кучу серв прилепить. мне нужно около 20 кнопок даже 4*5 это 9 пинов, очень много более чем уверен, что можно справиться 1, но вот как тут уже нужна Ваша помощь

Re: Аналогавая клавиатура на 1 pin arduino

dccharacter » 26 май 2011, 16:16

бюджет какой?
на два пина можно повесить PS/2 клавиатуру (MISO MOSI)

Добавлено спустя 1 минуту 12 секунд:
если один пин - можно поставить МК-прокладку за 50 рублей, сделать там матрицу и в путь. На Ардуину передавать по уарту/спи/и2ц/итд

Re: Аналогавая клавиатура на 1 pin arduino

Michael_K » 26 май 2011, 16:40

FantasyOR писал(а):где я ошибся в схеме или в рассуждениях.

Вот здесь:
FantasyOR писал(а):но напряжение в точке А0 останется как при замыкании одной только К1.

Если вы замыкаете:
K1 то напряжение на входе АЦП будет = V*(R5+R4+R3+R2)/(R1+R2+R3+R4+R5) = 4 вольта
K2 - V*(R5+R4+R3)/(R1+R2+R3+R4+R5) = 3 вольта
K3 - V*(R5+R4)/(R1+R2+R3+R4+R5) = 2 вольта
K1 и К2 одновременно - V*(R5+R4+R3)/(R1+R3+R4+R5) = 3.75 вольта
K1 и К3 одновременно - V*(R5+R4)/(R1+R4+R5) = 3.33 вольта (состояние К2 при этом ни на что не влияет)


Но вообще, решение не слишком красивое. Тогда уж смотрите в сторону R2R, например.

Re: Аналогавая клавиатура на 1 pin arduino

RootAdmin » 26 май 2011, 17:59

А где-то проскакивала мысль про "отладка по одному проводу. Если как там, но наоборот?

Добавлено спустя 3 минуты 27 секунд:
В смысле - сдвиговый регистр, длительным низким (высоким) уровнем на ноге его сбраcывать через RC цепочку, короткими низкими (высокими) импульсами тактировать, после такта читать его выход, подключенный через резистор этой же ногой?

Добавлено спустя 45 минут 54 секунды:
Прикинул в симуляторе - на регистр лучше две ноги выделять.

Re: Аналогавая клавиатура на 1 pin arduino

FantasyOR » 27 май 2011, 16:42

Добавлено спустя 1 час 52 минуты 52 секунды:[/color][/size]
нашел вот такую компоненту, ЦАП называется вот ее даташит http://www.google.ru/url?sa=t&source=web&cd=1&ved=0CBgQFjAA&url=http%3A%2F%2Fwww.alfarzpp.lv%2Frus%2Fsc%2F572pa2.pdf&rct=j&q=%D0%9A%D0%A0572%D0%9F%D0%902%D0%90&ei=kZrfTdi5GMuWOsP4lPsJ&usg=AFQjCNFh-U61bQNWFEcJ790aNfmlaVJ9VA&cad=rjt

интересно,можно ли на его цифровые входы повесить мои контакты: нажали кнопку, пошел ток - на цифровом входе считай 1, контакт замкнулся... или не так?

Re: Аналогавая клавиатура на 1 pin arduino

RootAdmin » 27 май 2011, 17:52

Тогда придется тоже считать. Если замкнуты две кнопки - то напряжение будет складываться. то есть, грубо, кнопка 1 дает на выходе АЦП .1 вольт
- 2 - .2 вольт
- 3 - .4 вольт
Одновременное нажатие 1 и 3 даст .5 вольт
Одновременное нажатие 2 и 3 даст .6 вольт

Добавлено спустя 3 минуты 47 секунд:
Но! Проще все кнопки, через разные (в 2 раза) резисторы подключить к питанию, как правильно говорил Michael_K.
То есть
питание - 1ком - кнопка - вход.
питание - 2 ком - кнопка - вход
питание - 4 ком - кнопка - вход
питание - 8 ком - кнопка - вход
Вход на землю через 500 ом. Например.
Тот же самый ЦАП и однозначно определяется несколько нажатых кнопок.

Добавлено спустя 1 минуту 40 секунд:
Считаем сопротивления нажатых кнопок как ппараллельный резистор, получаем значение коэффициента делителя.

Re: Аналогавая клавиатура на 1 pin arduino

FantasyOR » 28 май 2011, 09:34

в 2 раза резисторы повышать... это если вешать 10 контактов на 1 пин, то будет 2^10 = 1024/ не сильно ли большая разница между самым маленьком и самым большим, считайте на 3 порядка. поэтому я и решил использовать заводской ЦАП, там сопротивления подобраны с достаточной точностью.

"Считаем сопротивления нажатых кнопок как параллельный резистор" это сложно, нет конечно я знаю формулу, но для МК много действий: сложения, умножения, деление. А ведь чтоб узнать комбинацию, нужно посчитать все возможные комбинации(их просто куча - сумма С(из n по k ), где n=10, а k=0..10. это 1024 сочетания, многовато правда) и сравнить с входным напряжением. тут более подойдет схема шунтирования сопротивлений, сопротивления изменяются как веса в битовой маске:
Изображение
R1 = 1 kOm
R2 = 2*R1 = 2 kOm
R3 = 2*R2 = 4 kOm
...
R10= 1024 kOm
по этой схеме общее сопротивление должно считаться гораздо проще: только сумма.
хотя остаётся та же проблема с огромной разницей в сопротивлениях... наверное все же нужен заводской ЦАП.
Последний раз редактировалось FantasyOR 28 май 2011, 10:32, всего редактировалось 1 раз.

Re: Аналогавая клавиатура на 1 pin arduino

RootAdmin » 28 май 2011, 10:42

ИМХО - извращение. Заводской ЦАП - те же сопротивления, переключаемые электронно. ;)
Тогда уж чем плоха шина 1-wire? Одна нога - и сколько угодно кнопок-реле-светодиодов.
http://www.ibutton.ru/news/8/
Заказать: http://www.terraelectronica.ru/catalog.php?ID=725
Выглядит куда логичней и не надо использовать ненадежные аналоговые сигналы.

Добавлено спустя 56 секунд:
ЗЫ. Поправить бы название темы, а то аналогАвый как-то не звучит.

Добавлено спустя 1 минуту 26 секунд:
И если использовать ЦАП-АЦП на 10 разрядов, то тогда малейшая помеха-пичок - и все, младший разряд неверен.

Добавлено спустя 16 минут 21 секунду:
Сложение и деление в случае с резисторами зачем?
Массив значений напряжений для каждого разряда - храним.
x = измеренное значение
цикл для кнопок b, от старшего разряда к младшему.
If x>(уровень напряжения ТЕКУЩЕГО разряда) then
b(ТЕКУЩИЙ) = 1
x-=(уровень напряжения ТЕКУЩЕГО разряда)
end if
next

Re: Аналогавая клавиатура на 1 pin arduino

boez » 28 май 2011, 13:58

Первая ссылка с гугля про расширитель клавиатурный на сдвиговом регистре. http://easyelectronics.ru/podklyuchenie ... strax.html. Если опрашивать быстро не надо, то можно хоть сто кнопок повесить, и нет проблем с аналоговыми сигналами. И все сто кнопок могут нажиматься в разных комбинациях.
Вообще дихальт молодец, хорошие у него на сайте статьи, много сам пишет, и статьи других авторов помещает.

Re: Аналогавая клавиатура на 1 pin arduino

HarryStar » 28 май 2011, 15:10

Супер ссылка. Большое спасибо. Как раз мне подходит решение со сдвиговыми регистрами. Мне кажется лучше решения на 1м МК не придумать. Правда не 1 провод, а 3(4 с землей) - но мне подойдет.

Re: Аналогавая клавиатура на 1 pin arduino

FantasyOR » 28 май 2011, 20:42

Да согласен ссылка отличная, большое спасибо, время опроса у меня не критично.

Тему наверное можно закрыть.


cron
Rambler\'s Top100 Mail.ru counter