Пульт на плис. Логическая и практическая схемы

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 13
Зарегистрирован: Ср май 27, 2009 21:07:05
Откуда: Kawkasus

Сообщение xxxl »

Нужно собрать пульт с 20 кнопками. С восемьюсегментным индикатором для отображения. С со связью с мк. Я сделал его без плис на атмеге но он долго опрашивает кнопки и их приходиться удерживать до секунды, это не годиться. С плис я не работал пока что поэтому вопросов много. Какую именно выбрать? я остановился на альтера, но не определился с семейством и моделью. Как выглядит логическая схема? ну и т.д. Если можно подробнее. Програмное обеспечение я выбрал MAX+
Контактная информация:
Реклама
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

xxxl писал(а):Я сделал его без плис на атмеге но он долго опрашивает кнопки и их приходиться удерживать до секунды, это не годиться.
Конечно, не годится! Но это не значит, что обязательно Altera бросаться ваять - нужно просто грамотно программу изменить.
Просмотрите внимательно темы - помнится, была такая, про опрос кнопок. Возможно, и не одна. Но то, что проблема решается чисто программными методами - безусловно.
Хм... Или у Вас тактовая частота на кристалле 1 kHz?
Реклама
Родился
Сообщения: 13
Зарегистрирован: Ср май 27, 2009 21:07:05
Откуда: Kawkasus

Сообщение xxxl »

нет, частота нормальная вроде. Попробую исправить программно. Но все же если делать на плис как это осуществить?
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Но все же если делать на плис как это осуществить?
Да смысла нет ни каково, если на меге уже сделано.
http://radiokot.ru/start/mcu_fpga/avr/16/
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Аватара пользователя
Сообщения: 201
Зарегистрирован: Пн сен 08, 2008 11:21:11
Откуда: Пермь

Сообщение Alex72 »

На меге можно сделать пульт хоть на 500 кнопок и еще повесить кучу функций и всё это будет работать без тормозов при грамотно написанной программе. ПЛИС тут совершенно избыточна
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

xxxl писал(а):Нужно собрать пульт с 20 кнопками. С восемьюсегментным индикатором для отображения. С со связью с мк. ...
Вы бы привели частоты и временные условия работы пульта. А то гадать хватает меги или нет можно бесконечно.
Реклама
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Можно рассмотреть возможность подключение кнопок к 16-битному расширителю порта PCF8575(всё-же намного дешевле ПЛИС и позволит сохранить ножки проца).Будете на выходе I2C получать код нажатой клавиши.
В моём примере к уже 20 кнопкам можно прибавить еще 40.И всё это счастье по 2 проводам.
Вложения
key.rar
(43.67 КБ) 225 скачиваний
Родился
Сообщения: 13
Зарегистрирован: Ср май 27, 2009 21:07:05
Откуда: Kawkasus

Сообщение xxxl »

с опросом кнопок справился. Действительно дело было в программе. Теперь все очень быстро опрашивает. Возник другой вопрос. Пульт управляет установкой и у него есть команда -запрос состояния. Отослав эту команду пульт ждет данные с установки:

void USART_Transmit(unsigned char data)
{
/* Ожидание освобождения буфера передатчика */
while ( !( UCSR0A & (1<<5)) );
/* Помещение данных в буфер, отправка данных */
UDR0 =data;
}

проблема в том что он входит в этот цикл приема, и крутиться там пока не получит эти данные. Видимо я не до конца понимаю как это работает, так как у меня не получилось вставить в этот цикл опрос кнопок, что бы можно было нажатием выходить из него. Я делал так:

void USART_Transmit(unsigned char data)
{
/* Ожидание освобождения буфера передатчика */
while ( !( UCSR0A & (1<<5)))
{
if(Opros()==20) //Opros() функция опроса , которая возвращает
// номер нажатой кнопки
return;
}
/* Помещение данных в буфер, отправка данных */
UDR0 =data;
}

и пульт переставал правильно получать входящие данные
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»