Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.12.2009, 08:00  
Vetal-soft
Временная регистрация
 
Регистрация: 04.08.2006
Сообщений: 67
Сказал спасибо: 2
Сказали Спасибо 20 раз(а) в 11 сообщении(ях)
Vetal-soft на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

У вас проблемы в программе и подходе написания кода. Вам нужно осознать чего вы хотите добиться. И еще следует перестать пользоваться генераторами кода и разобраться в настройках перефирии.

Конкретно по программе:
1. Преравание INT1 при нажатии кнопки будет вызываться постоянно и последний раз когда кнопка уже отпущена. первый раз при нажатии, остальные при скане кнопок.
2. Задержка после установки бита порта нужна обязательно, минимум NOP, т.к. изменения на выводах происходят с задержкой в такт.
3. У вас весма "своеобразный" подход к написанию подпрограмм. )))
Реклама:
Vetal-soft вне форума  
Непрочитано 12.12.2009, 01:24  
os1n
Частый гость
 
Регистрация: 09.12.2009
Сообщений: 17
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
os1n на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

В том варианте, который я выложил подпрограмма была убрана совсем, если вы не заметили )
Вся подпрограмма была внесена в область выполнения прерывания.

2. настройки периферии тут не при чем, потому как эта самая периферия тут не участвует, и потому как та же периферия на AT90S8535 работает гладко, даже очень гладко.

А с остальным - спасибо, это дельный совет, попробую разобраться.

Но что интересно, раз уж вы смотрели код и нашли время его покритиковать, так может вы нашли время его сделать правильно и добиться работоспособности программы? Буду Очень благодарен, если поделитесь.
os1n вне форума  
Непрочитано 12.12.2009, 18:49  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

У меня не открылся проект в протеусе. Поэтому такой вопрос - на киборду навешаны резисторы?

З.Ы. Матрица кнопок по внешнему прерыванию это худшее из возможных вариантов. Лучше запускать процедуру от таймера.
MasterMushi вне форума  
Непрочитано 13.12.2009, 00:31  
os1n
Частый гость
 
Регистрация: 09.12.2009
Сообщений: 17
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
os1n на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

Сообщение от MasterMushi Посмотреть сообщение
У меня не открылся проект в протеусе. Поэтому такой вопрос - на киборду навешаны резисторы?

З.Ы. Матрица кнопок по внешнему прерыванию это худшее из возможных вариантов. Лучше запускать процедуру от таймера.
На киборд никаких резисторов не вешал, а зачем собственно?

И если есть вариант запуска по таймеру - подскажите пожалуйста почему и где я могу об этом почитать, желательно с примером.

Спасибо за помощь!
os1n вне форума  
Непрочитано 13.12.2009, 04:12  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

Сообщение от Vetal-soft Посмотреть сообщение
У вас весма "своеобразный" подход к написанию подпрограмм.
Имхо начинающий.. ещё немало шишек набьёт пока выработает...

Сообщение от os1n Посмотреть сообщение
На киборд никаких резисторов не вешал, а зачем собственно?
Для надёжного считывания состояния ОТПУЩЕНЫХ клавишь, минимизация помех


Сообщение от os1n Посмотреть сообщение
И если есть вариант запуска по таймеру
Да хоть по ВАЧДОГ таймеру... тогда процесор может спать.. а по ВАЧДОГ просыпатся и сканить клавиши... и не нужно никаких внешних прерываний.. будет работать на любом контролере.

Так делал датчик на PIC10F200, питающийся от 3в батарейки. потребление в ожидании получилось до 1 мка при замкнутом датчике обрыва. Срабатывает при замыкании ножки и по RF каналу на 50 метров посылает кодированую посылку о срабатывании, ежеминутно посылает посылку о том что ещё живой. Период посылки по табличке псевдослучайной что бы 20-30 датчиков не мешались.

Алгоритм: Применяется с небольшими модификациями (срабатывание на отпускание или нажатие, повторное срабатывание при удержании, ускорение срабатывания повтора при удержании клавиш и.т.д.) уже лет 8... и для PIC и для AVR

Вызовы процедуры с произвольным периодом 1-30 милисек, подкоректировать константы времени на срабатывание и на повтороное срабатывание, обычно первое срабатываени 30-80 милисек, повторноесрабатываение (при удержании) 0,15-0,3 сек

0) Если флаг нажатия установлен (клавиши не обработаны) вываливаемся из процедуры.
1) считываем состояние клавишь с портов.
2) сравниваем с состоянием, когда все отпущены.
если равно:
a)устанавливаем счётчик срабатывания = начальное значение.
b)в предыдущее состояние клавиш записываем = отпущеное состояние.
с) вываливаемся из процедуры.

если не равно идём дальше:
3) сравниваем с состоянием клавиш в предыдущем проходе
если не равно:
a)устанавливаем счётчик срабатывания = начальное значение.
b)в предыдущее состояние клавиш записываем = текущее состояние.
с) вываливаемся из процедуры.

если равно идём дальше:
4) уменьшаем счётчик совпадений считаннного состояния клавишь.
5) Если счётчик = 0, выставляем флаг = нажата клавиша (для процедур реагирующих на нажатие)
6) в счётчик записываем значение времени для повторного срабатывания клавиши.
7) вываливаемся из процедуры.

На прохождение всей процедуры обычно тратится 5-30-60 команд(не нажаты быстрее - нажаты дольше) в зависимости от количества ножек портов и способа их чтения.

В процедурке реагирующей на нажатие, ожидаем установки флага нажатия. Затем проверяем сожержимое (предыдущее состояние клавиш) на предмет состояния интересующей нас клавиши (или нескольких)... нажата-нет и производим нужные действия, сбрасываем флаг нажатия и ждём снова.

Последний раз редактировалось picavr; 13.12.2009 в 04:37.
picavr вне форума  
Эти 3 пользователя(ей) сказали Спасибо picavr за это сообщение:
MasterMushi (13.12.2009), os1n (14.12.2009)
Непрочитано 13.12.2009, 05:10  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

Резисторы на считывающих столбцах (строках) помогают избавиться от дребезга согласует сигналы предотвращая блипы на фронте сигнала, который в твоем случае выводит МКху в дикий перманентный INT.

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

Пример...

Код:
#define PORTx PORTC
#define DDRx DDRC
#define PINx PINC

char pressedkeycode;
// Timer 0 overflow interrupt service routine in CVAVR
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//Сохраняем значения на порту, мы же наверно еще для чегото его используем а не только для кнопок 
//Пример как это красиво аппаратно сделать есть в апноуте AVR242
unsigned int saved_port, saved_direction;
char icount=0;
saved_port=PORTx;
saved_direction=DDRx; 
TCNT0=0xFF; //Таймер по "нулям"
DDRx=0b11110000; //Строки на старших питаем и столбцы на младших разрядах читаем

while (icount‹4) 
{
  icount++; //Для надежного считывания прокрутим циклом 4 скана
  delay_ms(10);
  PORTx=0b10000000;
  if (PINx.3) pressedkeycode="1";
  if (PINx.2) pressedkeycode="2";
  if (PINx.1) pressedkeycode="3";
  if (PINx.0) pressedkeycode="a";
  delay_ms(10);
  PORTx=0b01000000;
  if (PINx.3) pressedkeycode="4";
  if (PINx.2) pressedkeycode="5";
  if (PINx.1) pressedkeycode="6";
  if (PINx.0) pressedkeycode="b";
  delay_ms(10);
  PORTx=0b00100000;
  if (PINx.3) pressedkeycode="7";
  if (PINx.2) pressedkeycode="8";
  if (PINx.1) pressedkeycode="9";
  if (PINx.0) pressedkeycode="0";
  PORTx=0b00010000;
  if (PINx.3) pressedkeycode="c";
  if (PINx.2) pressedkeycode="d";
  if (PINx.1) pressedkeycode="e";
  if (PINx.0) pressedkeycode="f";
}
PORTx=saved_port; // Вернем на родину наш порт
DDRx=saved_direction;
}
Банально неправдали?


Блин я хреновый подсказчик, запостил это, врубил схему которую отлаживаю... из за неправильного тыка который по идее не должен был убить ничего.... мега16я и LCD экран почили в вечной славе павшим героям бесчеловечных экспериментов над железом.

ПЕРЕД ВКЛЮЧЕНИЕМ ТРИЖДЫ ПРОВЕРИТЬ!
и Не ленитесь паять разъемы питания в которые трудно ткнуть неправильно.

Последний раз редактировалось MasterMushi; 13.12.2009 в 05:25.
MasterMushi вне форума  
Эти 2 пользователя(ей) сказали Спасибо MasterMushi за это сообщение:
os1n (14.12.2009)
Непрочитано 13.12.2009, 05:57  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

Сообщение от MasterMushi Посмотреть сообщение
Банально неправдали?
Это будет работать, пока вы не добрались до многозадачных проектов, когда паралельно обрабатывается по 10 - 30 процесов. С таким подходом писать програмы для поиграться.

Мой пример тратит порядка 1-20 микросекунд с паузой в 10-30 милисек, то есть 0,1% времени. А остальное время процессора на другие задачи.

Последний раз редактировалось picavr; 13.12.2009 в 06:05.
picavr вне форума  
Непрочитано 13.12.2009, 15:14  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

Сообщение от picavr Посмотреть сообщение
С таким подходом писать програмы для поиграться.
True )

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

ЗЫ а вообще я матрицу кнопок использую только когда ну вообще уже никак без этого. Потому что всегда есть UART связь и PS/2 клавиатуры которые без лишних ухищрений и лишнего кода можно использовать как душе угодно. Плату из клавиатуры вытянул, нужные кнопки на текстолит отдельный развел вот и счастье.)))
MasterMushi вне форума  
Непрочитано 14.12.2009, 19:59  
Gai000login
Прописка
 
Регистрация: 09.05.2005
Сообщений: 98
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 13 сообщении(ях)
Gai000login на пути к лучшему
По умолчанию Re: Помогите решить глюк с клавиатурой

Было у меня в проэкте(первый проект)такое: в протеусе нет подтягивающих резисторов но всёравно всё работало. а вот собраный образец неработал.
Так в протеусе по умолчанию если сбросить в "0" -то там и увидите синий маркер постоянно.... чего небывает в поделках на макетке.
-----------------------------------------------
Или я ошибаюсь
Gai000login вне форума  
Непрочитано 14.12.2009, 23:01  
os1n
Частый гость
 
Регистрация: 09.12.2009
Сообщений: 17
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
os1n на пути к лучшему
Лампочка Re: Помогите решить глюк с клавиатурой

ВСЕМ СПАСИБО за оказанную помощь. Буду сидеть, сушить мозги, но думаю получится!
os1n вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти схемы Toshiba Satellite A300-1ec и Toshiba Satellite A300d Alex-Alpha Поиск схем. Делимся схемами 1 11.03.2010 22:09
Помогите перевернуть пилу akula58 Электроника - это просто 73 11.02.2010 11:30
Помогите решить задачки Doc_Brown Автоматика и аппаратура связи 0 29.10.2009 23:18
Помогите решить, плиз: usb - не опознается Haze_ Микроконтроллеры, АЦП, память и т.д 3 09.10.2009 21:35


Часовой пояс GMT +4, время: 21:02.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot