Например TDA7294

Форум РадиоКот • Просмотр темы - TimeOut по ринятию команды от клавиатуры
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср июл 30, 2025 23:35:18

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 16 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Сб июн 30, 2012 09:51:49 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Здраствуйте. Была поставлена задача связать МК с PS/2 клавиатурой.(прогарммирую на avr, под avrstudio 5 "gcc") С помощью апноута задача была решена но нужно реализовать проверку передачи команды на tomeout. передача должна закончится примерно через 1,5 мс. Как организовать в программе timeout.
Вот часть кода программы:

Побитное считывание данных

ISR (INT0_vect)
{
cli();
if (!edge)
{
if(bitcount < 11 && bitcount > 2)
{
data = (data >> 1);
if(PIND & 8 )
data = data | 0x80;
}
MCUCR = 3;
edge = 1;
}
else
{
MCUCR = 2;
edge = 0;
if(--bitcount == 0) // Когда все биты считаны
{
bitcount = 11;
decode();
}
}
sei();
}

ЗЫ МК atmega8

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Сб июн 30, 2012 10:56:21 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4568
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Что за "таймаут команды" ? По подробнее о проблеме можно ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Сб июн 30, 2012 16:05:29 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Цитата:
Что за "таймаут команды" ? По подробнее о проблеме можно ?


Программа мк все основное время ничего не делает пока на вход int0 не прийдет первый импульс. Приходит с клавиатуры поссылка 11бит данных. В прерывании INT0 считываются все 11 и выделяются только код клавиши (8бит).
В случае потери хотябы одного битика програама будет ждать пока он не прийдет, а это может быть уже совсем другая поссылка. Для стабильной роботы нужно отсеевакть ошибочные данные. Единственный способ это с помощью таймера отсчитывать 1,5мс (время передачи 11 бит от клавы) и в случае превышения интервала игнорировать всю поссылку.
В моем коде (прилогается ниже) при каждом нажатии на клавишу возникает прерывание по таймауту, хотя время расчитывал с запасом.
Может кто делал похожее, можно пример кода?


Вложения:
kb.c [2.94 KiB]
Скачиваний: 526

_________________
Немного нервов и девайс готов
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Вс июл 01, 2012 14:36:09 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Неужели никто ни делал проверку по окончании времени. Подскажите как правильно это реализовать на gcc.

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Вс июл 01, 2012 21:35:34 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4568
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Единственный способ это с помощью таймера отсчитывать 1,5мс
По моему мнению, это тоже самый единственно правильный вариант.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 14:28:52 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Цитата:
По моему мнению, это тоже самый единственно правильный вариант.


То что нужно так выполнить это да, вопрос в реализации.
Что у меня не получается:
1. Жду прерывания от клавиатуры;
2. Приходит прерывание
----запрещаю все прерывания
---- если таймер не запущен записываю в счетный регистр значение, запускаю таймер
----обрабатываю пришедший бит
----разрешаю прерывания и выхожу с текущего

И как только прошло прерывание от клавы, МК уходит в прерывание по таймеру. Почему так происходит?
Вроде правильно рассчитал время таймера.
8000000Гц/64 = 125000/250 = 500Гц = 2мс

На осциллограмме верхний сигнал это программа уходит в прерывание по таймеру, лог 1
нижний это тактовая от клавы.


Вложения:
kb.c [3.06 KiB]
Скачиваний: 342
ADS00001.gif [28.38 KiB]
Скачиваний: 552

_________________
Немного нервов и девайс готов
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 14:59:01 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Возможно что после запуска таймера 1й тик прерывания происходит сразу же? Если да то как этого избежать?

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:02:18 
Держит паяльник хвостом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 79
Зарегистрирован: Ср апр 16, 2008 13:22:54
Сообщений: 904
Откуда: Приднестровье, Тирасполь
Рейтинг сообщения: 0
Vergilium писал(а):
Что у меня не получается:
1. Жду прерывания от клавиатуры;
2. Приходит прерывание
----запрещаю все прерывания..

Зачем?..

_________________
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:13:18 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Цитата:
Vergilium писал(а):
Что у меня не получается:
1. Жду прерывания от клавиатуры;
2. Приходит прерывание
----запрещаю все прерывания..

Зачем?..


Чтобы во время обработки пришедшего бита ничего не мешало. После завершения, прерывания разрешаются.

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:16:39 
Держит паяльник хвостом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 79
Зарегистрирован: Ср апр 16, 2008 13:22:54
Сообщений: 904
Откуда: Приднестровье, Тирасполь
Рейтинг сообщения: 0
А кто Вам сказал что будет что то мешать? Пока выполняется обработчик, прерывания и так запрещаются автоматически. По теме - хорошим тоном считается сбрасывать флаг прерывания, после разрешения прерывания и тактирования таймера. Попробуйте, мож поможет..

_________________
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:44:35 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4568
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
---- если таймер не запущен записываю в счетный регистр значение, запускаю таймер
А если запущен ? :)
Он же просто протикает у Вас и всё. Его не нужно проверять, его нужно на каждом бите обновлять, а по его истечению - считать, что байт пришёл. Обновлять его нужно на время в 1.5 бита.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:45:32 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
if(!timer){
timer = 1;
TCNT0 = 0x45;
TIMSK = 1;
TIFR &= ~(1<<TOV0);
}

Не помогает, после окончания прерывания в котором выполняется запуск таймера, мк идет в прерывание по таймеру.

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:49:09 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Цитата:
А если запущен ?
Он же просто протикает у Вас и всё. Его не нужно проверять, его нужно на каждом бите обновлять, а по его истечению - считать, что байт пришёл. Обновлять его нужно на время в 1.5 бита.


А если запущен мы с ним ничего не делаем пока не закончим принимать данные.

Цитата:
Обновлять его нужно на время в 1.5 бита.


Сейчас попробую.

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:49:49 
Держит паяльник хвостом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 79
Зарегистрирован: Ср апр 16, 2008 13:22:54
Сообщений: 904
Откуда: Приднестровье, Тирасполь
Рейтинг сообщения: 0
Goodefine писал(а):
сбрасывать флаг прерывания, после разрешения прерывания и тактирования таймера.

Строчку (флаг сбрасывается единицей):
Код:
TIFR |=(1<<TOV0);

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

_________________
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


Последний раз редактировалось Goodefine Пн июл 02, 2012 16:52:27, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 16:51:07 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4568
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
мы с ним ничего не делаем
Так вот зря. Его нужно постоянно запускать, а по его прерыванию считать что байт принят и выключать его.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
СообщениеДобавлено: Пн июл 02, 2012 17:13:34 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Ср фев 13, 2008 14:41:32
Сообщений: 260
Откуда: Украина, Николаев
Рейтинг сообщения: 0
Спасибо всем. Все рекомендации помогли. Действительно нужно было сбросить флаг прерывания. Еще раз спасибо.

_________________
Немного нервов и девайс готов


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 16 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y