Вимірювання швидкості натискання клавіші

Власне сабж. При натисканні на клавішу спочатку замикається один контакт потім інший. Потрібно якось порахувати час. все це на АВР. Пробую - нихрена не виходить, сильно залежить від кількості натиснутих одночасно клавіш )

BCluster:ніхрену не виходитьА в чому проблема? І чому треба всю клавіатуру підключати? Одна клавіша підключена, і заміряйте. Організуйте програмний лічильник, більше розрядності. Перший контакт замкнувся, пішов рахунок. Другий замкнувся, припинився. Значення вивести на який-небудь індикатор. Ну, ще треба службову кнопочку зробити, щоб лічильник скидати. А можна і при відпусканні скидати клавіші.

Gregory:І чому треба всю клавіатуру підключати?пропонуєте окремий процесор на кожну клавішу? --- оскільки мова про клавіші, а не про кнопки - це музичний інструмент? я так зрозумів він не може розпаралелити обчислення, щоб обробка різних клавіш не заважала один одному

AnSi:окремий процесор на кожну клавішу?Це я, мабуть, неправильно питання зрозумів. Просто, якщо для експерименту, з'ясувати час між замиканнями, для подальших розрахунків у програмі, тоді - одне. А якщо це - вже про програму, тоді, природно, всю клавіатуру. Тут треба "відпрацьовувати" усі гілки програми. І, бажано, на Асмі.

для "орієнтування" можна на осцилографі подивитися, або до звукової карти підключити без орієнтовних величин і "кроку" відліку порадити складно

Може треба зробити масив пам'яті із записом поточного стану вільно обертового таймера для кожної кнопки? Тільки ненатиснутих буде " 0 " , а натиснутих завжди більше 0, тобто. якщо потрапите на 0, пишіть 1. Тоді при повторному натисканні контролер порівняє поточний стан таймера і збереженийта обчислить час прольоту клавіші. Начебто швидко має працювати. Тільки таймер потрібен довгий, тож і осередки пам'яті будуть подвійні. При кількості кнопок 128 в 256 байт вже не вкладемося, потрібні ще комірки під стек. Контролер буде потрібен інший. У вас який?

А навіщо два байти? У ненатиснутої кнопки значення лічильника =0. При замкнутому першому контакті та розімкнутому другому значення лічильника збільшуються на одиницю при кожному сигналі від таймера. Якщо обидва контакти замкнуті, значення лічильника не змінюється, якщо обидва контакти розімкнені - лічильник обнулюється. Тільки тут треба оцінити чи вистачить часу на опитування і запис стану всіх клавіш за один період таймера від тривалості якого залежить точність визначення часу.

SAK:А навіщо два байти? У ненатиснутої кнопки значення лічильника =0. При замкнутому першому контакті та розімкнутому другому значення лічильника збільшуються на одиницю при кожному сигналі від таймера. Якщо обидва контакти замкнуті, значення лічильника не змінюється, якщо обидва контакти розімкнені - лічильник обнулюється. Тільки тут треба оцінити чи вистачить часу на опитування і запис стану всіх клавіш за один період таймера від тривалості якого залежить точність визначення часу.

хлопці, все майже так і зроблено. Є таймер, який постійно інкрементується. при натисканні на клавішу (1контакт) відбувається запис значення в комірку масиву, що відповідає даній клавіші. при замиканні 2 контакту вважається різниця тиків таймера. але млинець, при однаковій швидкості натискання, майже завжди виходить однакове значення, що добре, але іноді вилазить астрономічно велике. Тут і питання, звідки воно береться. Пізніше постараюся код викласти, просто зараз він у такому вигляді, що показувати людям соромно

Контролер велике достатньо,ATMega16

BCluster, ось я тому й казав, що спершу треба з'ясувати реальний час. Оскільки побудова програми багато в чому від неї залежить. Адже, якщо воно становить пів секунди, то можна і без таймера обійтися.

PS: А чи не простіше було все-таки просто приробити МИДІ-вихід?

BCluster:вважається різниця тиків таймераBCluster:але іноді вилазить астрономічно велике

а різницю вважаєш правильно? - враховуєш що таймер при переповненні скидається? тобто. якщо початкова цифра F0 , а кінцева FF , то різниця = F а якщо кінцева наприклад 02 - після переповнення лічильника - скільки виходить у вашій програмі? контактів? при НЕ замиканні першого або другого контакту(окислення) ? якщо через окислення спочатку замкнеться другий контакт, а потім перший ?

Форум про радіо — сайт, присвячений обговоренню електроніки, комп'ютерів та суміжних тем.