Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опрос клавиатуры на С
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
AlexandrY
Цитата(iliusmaster @ Jun 26 2018, 08:30) *
Например.http://omronfs.omron.com/en_US/ecb/products/pdf/en-b3sn.pdf. Советские ТУ на кнопочные переключатели.

А подумать?
"Minimum applicable load" в 10 мкА означает что при меньшем токе вы будете ловить токи утечки кнопки, поскольку у нее довольно маленькое сопротивление утечки, всего 100Мом.
Т.е. при 250 В вы получите 2.5 мкА утечки. Вот ребята вас и предупреждают.

Токи величиной в микроамперы гуляют по воздуху туда сюда просто из-за атмосферного электричества и электромагнитных полей.

Я же под низкоомной нагрузкой полагал сопротивление максимум в пару десятков Ом.
Вот где такие рекомендации?

А загрязнение контактов реле отдельная тема.
Если посмотреть на эти контакты под микроскопом, то видно что основная проблема у них - это эрозия и выгорание от коммутации больших токов.
Грязь там появляется вследствии горения.

Поэтому совет противоположный - никогда не коммутировать при низкоомной нагрузке.
Forger
Цитата(AlexandrY @ Jun 26 2018, 10:42) *
Поэтому совет противоположный - никогда не коммутировать при низкоомной нагрузке.

Видать, вы еще не сталкивались с подобными проблемами коммутации контактов относительно мощных концевиков/переключателей.

Поэтому я пришел к выводу, что понятия большой и малый ток, нагрузка и т. п. весьма относительны.
В любом случае источником информации является документация на тот или иной коммутационный элемент.
k155la3
Цитата(Make_Pic @ Jun 23 2018, 08:17) *
. . . .Как написать компактный и "красивый" код? . . . Дайте pls примеры . . . .
Вот пример моего кода (из первых версий), без претензий на красивость и компактность. Скорее наоборот. Претензии - на функциональность. (обработка в "событийном" режиме, очередь, скан-коды, обработка удержания).
Без комментариев sm.gif Обрабатывать напильником до требуемой формы.
CODE
// MSP430, S_M_V
// -------- keyb ---------
#define S_PORT_KEYB_IN P6IN
#define S_PORT_KEYB_OUT P6OUT
// P6.0 . . . P6.3 - входные линии матрицы, подтянуты через 100к на GND
// P6.4 . . . P6.7 - выходные линии матрицы (опрос линии установкой в 1)

static char key_wr = 0, key_rd = 0, keyCodeScan_old = 0;
char keyCodeScan = 0, KeyCode = 0;
char KeyCodeRep = 0; // запомнить код удерживаемой клавиши
char f_repeat = 0; // флаг удержания нажатия

t16_sint time_repeat; // таймаут удержания клавиши, после которого работает автоповтор

// процедура сканирования клавиатуры (аппаратный опрос линий)
// void OS::system_timer_user_hook()
// Периодически вызывается в тиках OS или в обработчике таймера
void KEY_Scan_R(void)
{
static char F_Press_now = 0, F_Press_old = 0, KKeyCode = 0;
// ================== KEY ===================================
SOUND_OFF;

keyCodeScan_old = keyCodeScan; // проверка изменения коорд. нажатия
F_Press_old = F_Press_now; // контроль событий нажатия-отжатия

key_rd = S_PORT_KEYB_IN & 0x0F; // Read keyLines 0...3 (InData) from PORT
keyCodeScan = (key_wr << 4) & 0xF0; // номер скан-линии 0 1 2 3 (row)
keyCodeScan |= key_rd & 0x0F; // считанные столбцы (col)

if( keyCodeScan & 0x0F ) // нажата как минимум 1 клавиша
{ // нажата ли любая кнопка ? 0F маска - читаем из порта только "приемные" линии
F_Press_now = 1;
if( keyCodeScan != keyCodeScan_old ) // изменен скан-код ?
{ // первый вход по нажатию клавиши
time_repeat = 0; // сбросить таймаут
f_repeat = 0;

}
else // повторные входы по нажатой клавише
{
if( f_repeat == 0 ) // пока нет события "удержание", ++ таймера
{
if( time_repeat > 62 ) //4 // 62 цикла по 16 мс - около 1с
{
time_repeat = 0; // сбросить таймаут
f_repeat = 1;
}
else
time_repeat++;

}
}

}
else // клавиша не нажата
{
F_Press_now = 0; // холостой проход - без нажатий
}

// ---------- выдать скан-линию для следующего цикла --------
if( !F_Press_now ) // продолжаем сканировать линии - тк нет нажатия
{ // далее только если не нажата кнопка
if( key_wr == 3 )
key_wr = 0;
else
key_wr++; // счетчик скан-линий ++
// ----------------------
if( key_wr == 3 ) S_PORT_KEYB_OUT = 0x80; // A B C D выбор столбца D0 D1 D2 D3
if( key_wr == 2 ) S_PORT_KEYB_OUT = 0x40; // 3 6 9 #
if( key_wr == 1 ) S_PORT_KEYB_OUT = 0x20; // 2 5 8 0
if( key_wr == 0 ) S_PORT_KEYB_OUT = 0x10; // 1 4 7 *
}

// заменить switch на перекодировку по ассоц.массиву
// ------- скан для матрицы 4x4 ---------------------
// перекодировка в KKeyCode - для PCB F5438A с подключением на мембр. кл-ру 4x4
// кабелем 9-w и HDR'10 на PCB
switch( keyCodeScan )
{
// key_wr == 0 1 4 7 *
case (0x00 | 0x01): KKeyCode = 0x31; break; // 1
case (0x00 | 0x02): KKeyCode = 0x34; break; // 4
case (0x00 | 0x04): KKeyCode = 0x37; break; // 7
case (0x00 | 0x08): KKeyCode = 0x2E; break; // * ekeyPoint
// ----------------
// key_wr == 1 2 5 8 0
case (0x10 | 0x01): KKeyCode = 0x32; break; // 2
case (0x10 | 0x02): KKeyCode = 0x35; break; // 5
case (0x10 | 0x04): KKeyCode = 0x38; break; // 8
case (0x10 | 0x08): KKeyCode = 0x30; break; // 0
// ----------------
// key_wr == 2 3 6 9 #
case (0x20 | 0x01): KKeyCode = 0x33; break; // 3
case (0x20 | 0x02): KKeyCode = 0x36; break; // 6
case (0x20 | 0x04): KKeyCode = 0x39; break; // 9
case (0x20 | 0x08): KKeyCode = 0x04; break; // # ekeyEnter
// ----------------
// key_wr == 3 A B C D
case (0x30 | 0x01): KKeyCode = 0x01; break; // A F1
case (0x30 | 0x02): KKeyCode = 0x02; break; // B F2
case (0x30 | 0x04): KKeyCode = 0x03; break; // C F3
case (0x30 | 0x08): KKeyCode = 0x05; break; // D F4

default: KKeyCode = 0x00; break; // ekeyNO
}

KeyCode = KKeyCode;
// ================= /KEY ===================================

if( F_Press_old && !F_Press_now ) // KEY_OFF
{ // обработка отжатия
time_repeat = 0;

if ( f_repeat == 2 ) // если был режим "отпуск-удержания" (2)
{
KEY_push( (t16_sint) (KeyCodeRep | 0x4000) ); // (стоп удержания) маска 0x40
//KEY_pushBf( (t16_sint) ( 0x99 | 0x4000) );

f_repeat = 0;

}
}

if( !F_Press_old && F_Press_now ) // KEY_ON
{ // обработка нажатия

SOUND_ON;

KEY_push( (t16_sint) KKeyCode ); // тк буфер 16-битный

}

if( F_Press_old && F_Press_now ) // KEY_ON_ON_ON
{ // обработка удержания

if( f_repeat == 1 )
{
f_repeat = 2; // положить в буфер код "удержания", переключиться в след. цикле на
// ожидание "отпуск-удержания" (режим 2)

KEY_push( (t16_sint) (KKeyCode | 0x8000) ); // (старт удержания) маска 0x80

// --------- системный ресет --------------------
if( KKeyCode == 0x31 ) // Reset на удержание клавиши <1>
{
SLEEP(100);
WDTCTL = WDTPW | WDTHOLD;
asm ("push &0xfffe");
asm ("ret");
}
// -------- /системный ресет --------------------

KeyCodeRep = KeyCode; // сохранить для выдачи кода отжатия
}
}

}// KEY_Scan(void)
Jenya7
В последних проектах юзаем ADP5589. Изначально я был против. Теперь - категорически рекомендую.Опрос клавиатуры на С получается красивый и лаконичный.
Forger
Цитата(Jenya7 @ Jun 26 2018, 17:35) *
В последних проектах юзаем ADP5589. Изначально я был против. Теперь - категорически рекомендую.Опрос клавиатуры на С получается красивый и лаконичный.

Код в студию!

Имхо, за цену этой чудо-микросхемы можно купить довольно "толстый" МК, которого за глаза хватит для этой задачи. Код получает не менее лаконичный.
haker_fox
QUOTE (Forger @ Jun 26 2018, 23:24) *
Имхо, за цену этой чудо-микросхемы можно купить довольно "толстый" МК, которого за глаза хватит для этой задачи.

Ну это зависит от цены проекта и стоимости часа разработчика rolleyes.gif
Forger
Цитата(haker_fox @ Jun 27 2018, 05:32) *
Ну это зависит от цены проекта и стоимости часа разработчика rolleyes.gif

Спорно. С этой чудо-микросхемой плата выйдет сложнее и само собой дороже.
Код - тоже спорно: с чудо-микросхемой нужно читать-писать соотв. регистры по I2C, т.е. писать по сути для нее драйвер.
Без нее - простой цикл опроса матричной клавиатуры (см. второй пост этой темы).
Короче, из пушки по воробьям cool.gif

Имхо, вижу единственное разумное применение такой "микрульки" - батарейное питание: проц. всегда спит и просыпается по прерыванию от этой микросхемы, которая в режиме ожидания потребляет около 1мкА.
Но это решаемо и без нее: перед входом в сон "тянем" вниз все линии клавиатуры (скажем, строки), и ждем прерывания по любому из столбцов. Т.е. ждем нажатия любой кнопки.
После просыпания делает все по обычной схеме, определяя какая именно кнопка нажата.
AlexandrY
Цитата(Jenya7 @ Jun 26 2018, 17:35) *
В последних проектах юзаем ADP5589. Изначально я был против. Теперь - категорически рекомендую.Опрос клавиатуры на С получается красивый и лаконичный.

Я выбрал AS1115-BSST
Дополнительно поддерживает еще и семисегментный дисплей.

Тема неплохо экономит ресурсы.
Когда управляешь двигателями и кучкой SMPS-ов одновременно то реально не хватает ног да и лишние прерывания ни к чему.
arhiv6
Цитата(Make_Pic @ Jun 25 2018, 09:06) *
Тема ушла куда то "налево" sad.gif А хотелось просто увидеть код хорошего простого решения по клавиатуре...

Встречал эти библиотеки:
http://chipenable.ru/index.php/programming...osa-knopok.html
https://github.com/Celeron/gcc-celeronkeyinputlib
Сам эти библиотеки не пробовал, но можно на их примере посмотреть, как другие делают.
k155la3
Цитата(Forger @ Jun 26 2018, 18:24) *
Код в студию! . . .
чип полезный в хозяйстве, но малодоставабельный, по крайней мере у нас. Разве что для фирмы брать партией.
Решение с таким чипом полезно, когда "морда" прибора имеет клавиатуру и дисплей на отдельной PCB. Если у обоих - I2C (например LCD TIC32) то получится очень неплохо.
Хотя сейчас пошли в работу емкостные матрицы как на спец. контроллерах, так и на базе обычных контроллеров или с узлом периферии touch-sense (см. Texas instr. MSP430 и тд)
haker_fox
QUOTE (Forger @ Jun 27 2018, 12:35) *
Спорно.

Ну так я и написал:
QUOTE (haker_fox @ Jun 27 2018, 10:32) *
Ну это зависит от цены проекта и стоимости часа разработчика rolleyes.gif

QUOTE (Forger @ Jun 27 2018, 12:35) *
С этой чудо-микросхемой плата выйдет сложнее и само собой дороже.

Почему она будет сложнее? Таже матрица, ну добавиться пара конденсаторов на питание этой микросхемы, и резистор на подтяжку прерывания.
На счёт "дороже". Время конторы тоже денег стоит. И оно может оказаться значительно дороже одной микросхемы.
QUOTE (Forger @ Jun 27 2018, 12:35) *
Код - тоже спорно: с чудо-микросхемой нужно читать-писать соотв. регистры по I2C, т.е. писать по сути для нее драйвер.

Ну писать всё-равно что-то придётся)
QUOTE (Forger @ Jun 27 2018, 12:35) *
Короче, из пушки по воробьям cool.gif

Ага, AD просто так пушку делает))) Кто-то же покупает.

В одном из приборов мы сделали клавиатуру на отдельной плате, и поставили на неё копеечный кортекс-а0 в корпусе tqfp32. Связывается с основной платой последовательным интерфейсом. Это было дешевле, и проще, чем тащить широкий шлейф. На этом же кортексе опрашивается резистивный тач-скрин. Без микросхем на подобии tsc2007. При этом на основном МК были высвобождены ценные GPIO, и ещё остались в резерве. Я понимаю, что может быть "проще" было заказать другой МК, в другом корпусе. Но когда для основного всё есть, включая печатную плату, вопрос "дороже" или "дешевле" очень не однозначен. Иногда, например, дешевле и проще поставить 10 резисторов по 1 кОм последовательно, чем 1 по 10 кОм.
ArtemKAD
Цитата(AlexandrY @ Jun 26 2018, 08:17) *
Что за блажь использовать низкоомную подтяжку для механических контактов.
Кто этот миф распускает, интересно?
Т.е. интересует первоисточник.

Для меня первоисточником стал собственный опыт когда сигналка на стоянке через несколько часов после дождя начала орать по концевикам дверей в которых сгорела штатная лампочка. Подтяжки в 20к при пороге в 3В оказалось сильно недостаточно. С тех пор везде где возможно попадание/конденсация влаги на контактах, я использую импульсную подтяжку не более 1кОм.

ЗЫ. Плюс еще были статьи по мощным реле и контакторам. Там действительно указывался минимальный ток контактов в несколько мА.
iliusmaster
Цитата(AlexandrY @ Jun 26 2018, 10:42) *
А подумать?
"Minimum applicable load" в 10 мкА означает что при меньшем токе вы будете ловить токи утечки кнопки, поскольку у нее довольно маленькое сопротивление утечки, всего 100Мом.
Т.е. при 250 В вы получите 2.5 мкА утечки. Вот ребята вас и предупреждают.

Токи величиной в микроамперы гуляют по воздуху туда сюда просто из-за атмосферного электричества и электромагнитных полей.

Я же под низкоомной нагрузкой полагал сопротивление максимум в пару десятков Ом.
Вот где такие рекомендации?

А загрязнение контактов реле отдельная тема.
Если посмотреть на эти контакты под микроскопом, то видно что основная проблема у них - это эрозия и выгорание от коммутации больших токов.
Грязь там появляется вследствии горения.

Поэтому совет противоположный - никогда не коммутировать при низкоомной нагрузке.


Какой воздух? Какие прогулки тока?
Такая уверенность в своей правоте иногда умиляет. Прочитайте классические книги о конструировании контактных групп и узнаете, что такое минимальный коммутируемый ток.
Слой окисла на контактах перед замыканием может образоваться и без выгорания, простая химия.
Удаляет защитную пленку не НАПРЯЖЕНИЕ, а ТОК! Именно протекание тока и выделяемое при этом тепло в зоне контакта приводит к тепловому разрушению оксидной пленки! Напряжение же нужно только чтобы создать достаточный ток.

rx3apf
Напряжение, очевидно, нужно чтобы пробить пленку. Ток - чтобы разрушить. И таки да, регламентируется минимальный ток и минимальное напряжение контактной группы, даже, например, для герконов. Это и в справочниках советских времен было всегда.
Forger
Цитата(iliusmaster)

Цитата(rx3apf)

Вот: https://electronix.ru/forum/index.php?showt...p;#entry1568887
Там же есть ссылка на "литературу".
AlexandrY
Цитата(iliusmaster @ Jun 28 2018, 18:55) *
Удаляет защитную пленку не НАПРЯЖЕНИЕ, а ТОК! Именно протекание тока и выделяемое при этом тепло в зоне контакта приводит к тепловому разрушению оксидной пленки! Напряжение же нужно только чтобы создать достаточный ток.

Где ссылки вот с такой вот версией ?
От производителей современной компонентной базы.
Чтоб прямо так говорили про какой-то там пробой оксидации и проч. муть.

Открываю список мер предосторожности на реле Omron (делаю одолжение и обсуждаю реле, хотя тема реле подброшена сюда тем кому уже нечего сказать про кнопки)
Никакой рекомендации пробивать оксидацию током или напряжением не видим.
Но за то видим такой график надежности реле
Нажмите для просмотра прикрепленного файла
Т.е. чем больше ток тем ресурс у реле меньше.

Просто производитель на 1 мА гарантирует сопротивление контактов в неких пределах через миллион циклов.
И даже при таком токе видна деградация сопротивления контактов
Нажмите для просмотра прикрепленного файла

Ну так чё, будем продолжать пробивать контакты током? lol.gif
Herz
Цитата(AlexandrY @ Jun 28 2018, 22:40) *
Ну так чё, будем продолжать пробивать контакты током? lol.gif

Коллега, ничего смешного не вижу. Или Вы намеренно прикалываетесь?
https://en.wikipedia.org/wiki/Wetting_current
rx3apf
Цитата(AlexandrY @ Jun 28 2018, 22:40) *
(делаю одолжение и обсуждаю реле, хотя тема реле подброшена сюда тем кому уже нечего сказать про кнопки)

Хотите про кнопки - извольте. http://www.ia.omron.com/products/family/28...cification.html, картинка с "micro load area". Вообще-то все это общеизвестно с незапамятных времен, и физика с тех пор не изменилась.
AlexandrY
Цитата(Herz @ Jun 28 2018, 22:49) *
Коллега, ничего смешного не вижу. Или Вы намеренно прикалываетесь?
https://en.wikipedia.org/wiki/Wetting_current

С каких пор википедия стала производителем реле?
Может перекинем спор на германиевые транзисторы и эффекты в них.
Так мы располземся по всей истории.

А если бы не ленились и почитали бы по списку публикаций в конце статьи википедии по вашей ссылке, то узнали бы что речь идет о непрекращающемся! токе через контакты в течении всего времени когда они замкнуты.
И эффект заключается не в некоем пробое, а в электромиграции, когда вместе с током переносится материал. Это и не дает захватить пленке контакты.
Но электромиграция эта та же деградация. Так что палка о двух концах.

Факт в том что Omron не дает никаких рекомендаций по пробою, а советует для микротоков просто взять реле в двойными контактами.
И не оставлять на месяцы контакты без движения.


Цитата(rx3apf @ Jun 28 2018, 23:11) *
Хотите про кнопки - извольте. http://www.ia.omron.com/products/family/28...cification.html, картинка с "micro load area". Вообще-то все это общеизвестно с незапамятных времен, и физика с тех пор не изменилась.

То же самое - электромиграция для долгое время замкнутых контактов.
Forger
Вот еще немного любопытной информации про электрическое разрушение оксидной пленки: https://www.atof.ru/pea/relay/rl_014.shtml
rx3apf
Цитата(AlexandrY @ Jun 28 2018, 23:27) *
То же самое - электромиграция для долгое время замкнутых контактов.

Все б ничего, вот только и для тактовых кнопок (что еще ближе к обсуждаемой теме), которым, за редким исключением, не свойственно длительное время находиться в замкнутом состоянии, аналогичные ограничения "снизу" - http://www.te.com/commerce/DocumentDeliver...&DocLang=EN

AlexandrY
Цитата(rx3apf @ Jun 28 2018, 23:41) *
Все б ничего, вот только и для тактовых кнопок (что еще ближе к обсуждаемой теме), которым, за редким исключением, не свойственно длительное время находиться в замкнутом состоянии, аналогичные ограничения "снизу" - http://www.te.com/commerce/DocumentDeliver...&DocLang=EN

А это уже ограничение из-за контактной ЭДС
Herz
Цитата(AlexandrY @ Jun 28 2018, 23:27) *
С каких пор википедия стала производителем реле?

Знаете, я даже не буду комментировать. По-моему, хорошее дополнение к сказанному Вами в теме про TL494. Пишите ещё. А читатели сами разберутся.
AlexandrY
Цитата(Forger @ Jun 28 2018, 23:28) *
Вот еще немного любопытной информации про электрическое разрушение оксидной пленки: https://www.atof.ru/pea/relay/rl_014.shtml

Мда, это из таких источников опыт значит черпаете? У юридических консультантов. Поздравляю.
Вы еще у врачей-проктологов проконсультируетесь по поводу реле. biggrin.gif
Forger
Цитата(AlexandrY @ Jun 29 2018, 07:36) *
У юридических консультантов ... у врачей-проктологов

Ну, тут вам виднее sm.gif В этих областях я профан, моё - схемотехника/программирование ...

Цитата
Вы еще у врачей-проктологов проконсультируетесь по поводу реле.

И не стоит так утруждаться с "полезными" советами, ваша позиция тут уже давно всем хорошо ясна: "существуют только два мнения - ваше и неправильное".
AlexandrY
Цитата(Forger @ Jun 29 2018, 08:08) *
И не стоит так утруждаться с "полезными" советами, ваша позиция тут уже давно всем хорошо ясна: "существуют только два мнения - ваше и неправильное".

Ищите надежные пруфы и я с удовольствием изменю свое мнение. laughing.gif
Forger
Цитата(AlexandrY @ Jun 29 2018, 08:39) *
Ищите надежные пруфы и я с удовольствием изменю свое мнение. laughing.gif

По-ходу, у вас несколько завышенное самомнение cool.gif Эта тема посвящена не вам.

Ссылки были не для вас, а для всех. Цель их, не кого-то конкретного убедить в чем-то, а в том, чтобы поделиться опытом и знаниями с другими участниками форума.
По-моему, это - одно из основных назначений этого форума.

Кстати, насчет ссылок: от вас так и не последовало ни одной, одни лишь "голые" утверждения, неизвестно на чем основанные, в стиле:
Цитата(AlexandrY)
Что за блажь использовать низкоомную подтяжку для механических контактов.
Цитата(AlexandrY)
Поэтому совет противоположный - никогда не коммутировать при низкоомной нагрузке.
AlexandrY
Цитата(Forger @ Jun 29 2018, 08:50) *
По-ходу, у вас несколько завышенное самомнение cool.gif Эта тема посвящена не вам.

Ссылки были не для вас, а для всех. Цель их, не кого-то конкретного убедить в чем-то, а в том, чтобы поделиться опытом и знаниями с другими участниками форума.
По-моему, это - одно из основных назначений этого форума.

Кстати, насчет ссылок: от вас так и не последовало ни одной, одни лишь "голые" утверждения, неизвестно на чем основанные, в стиле:

Эй полегче, еще поделитесь опытом что земля плоская.
От вас не опыт, а одни пузыри.
Еще раз - где надежные пруфы, да хотя бы пруфы вашего опыта.
И не превращаете ветку в выяснение отношений.
Forger
Цитата(AlexandrY @ Jun 29 2018, 09:40) *
От вас не опыт, а одни пузыри.

Перечитайте обязанности модератора еще раз. Там не указано: принимать решения у кого "опыт", а у кого "пузыри".

Цитата
Еще раз - где надежные пруфы, да хотя бы пруфы вашего опыта.

Пруфы моего опыта, это - мои слова.
Если вас это не устраивает - игнорируйте, проходите мимо. Это не сложно. Впрочем, я уже писал об этом.

Цитата
И не превращаете ветку в выяснение отношений.

Аналогично: https://electronix.ru/forum/index.php?s=&am...t&p=1569752


AlexandrY
Цитата(Forger @ Jun 29 2018, 09:51) *
Пруфы моего опыта, это - мои слова.
Если вас это не устраивает - игнорируйте, проходите мимо. Это не сложно. Впрочем, я уже писал об этом.

Также вам предлагаю помолчать относительно меня и моего опыта.
Модераторы обсуждаются в отдельной ветке.

Форум для того и создан чтобы разбивать в хлам ничем не обоснованные утверждения.
Ярлык "опыт" присвоенный им самими же авторами ни от чего их не защищает.

Forger
Цитата(AlexandrY)
Также вам предлагаю помолчать относительно меня и моего опыта.

Аналогично!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.