Пульт на плис. Логическая и практическая схемы
Нужно собрать пульт с 20 кнопками. С восемьюсегментным индикатором для отображения. С со связью с мк. Я сделал его без плис на атмеге но он долго опрашивает кнопки и их приходиться удерживать до секунды, это не годиться. С плис я не работал пока что поэтому вопросов много. Какую именно выбрать? я остановился на альтера, но не определился с семейством и моделью. Как выглядит логическая схема? ну и т.д. Если можно подробнее. Програмное обеспечение я выбрал MAX+
- Реклама
- Сообщения: 70
- Зарегистрирован: Пт янв 30, 2009 18:02:40
Конечно, не годится! Но это не значит, что обязательно Altera бросаться ваять - нужно просто грамотно программу изменить.xxxl писал(а):Я сделал его без плис на атмеге но он долго опрашивает кнопки и их приходиться удерживать до секунды, это не годиться.
Просмотрите внимательно темы - помнится, была такая, про опрос кнопок. Возможно, и не одна. Но то, что проблема решается чисто программными методами - безусловно.
Хм... Или у Вас тактовая частота на кристалле 1 kHz?
нет, частота нормальная вроде. Попробую исправить программно. Но все же если делать на плис как это осуществить?
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
Да смысла нет ни каково, если на меге уже сделано.Но все же если делать на плис как это осуществить?
http://radiokot.ru/start/mcu_fpga/avr/16/
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
На меге можно сделать пульт хоть на 500 кнопок и еще повесить кучу функций и всё это будет работать без тормозов при грамотно написанной программе. ПЛИС тут совершенно избыточна
- Реклама
- Сообщения: 703
- Зарегистрирован: Вс янв 18, 2009 21:12:49
Вы бы привели частоты и временные условия работы пульта. А то гадать хватает меги или нет можно бесконечно.xxxl писал(а):Нужно собрать пульт с 20 кнопками. С восемьюсегментным индикатором для отображения. С со связью с мк. ...
- Сообщения: 804
- Зарегистрирован: Чт мар 12, 2009 16:31:05
Можно рассмотреть возможность подключение кнопок к 16-битному расширителю порта PCF8575(всё-же намного дешевле ПЛИС и позволит сохранить ножки проца).Будете на выходе I2C получать код нажатой клавиши.
В моём примере к уже 20 кнопкам можно прибавить еще 40.И всё это счастье по 2 проводам.
В моём примере к уже 20 кнопкам можно прибавить еще 40.И всё это счастье по 2 проводам.
- Вложения
-
- key.rar
- (43.67 КБ) 225 скачиваний
с опросом кнопок справился. Действительно дело было в программе. Теперь все очень быстро опрашивает. Возник другой вопрос. Пульт управляет установкой и у него есть команда -запрос состояния. Отослав эту команду пульт ждет данные с установки:
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;
}
и пульт переставал правильно получать входящие данные
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;
}
и пульт переставал правильно получать входящие данные


