Устройство управления звуковой системой 5.1 нужна помощь!!!
Добавлено: Вс мар 27, 2011 17:29:42
Привет всем котам!!! Возникло желание разработать устройство по управлению 3 цифровыми темброблоками (TDA7313). Седцем контроллера будет Mega32 или Mega64 если вдруг не хватит памяти. Всю информацию буду выводить на дисплей LCD16x4 или LCD20x4 в зависимости что найду в своих радиомагазинах. Дисплей будет подключен по 4-х битной шине, хотя может и по 8-ми битной - просто гдето читал что если подключить по 8-ми битной шине то LCD можно использовать как внешнюю память и простой командой посылать в нее информацию. Также собираюсь использовать 1-2 термодатчика для контроля температуры усилителей мощности, при достижении заданной температуры будут включаться вентиляторы. Управление темброблоками будет по шине I2C, причем настройка каждого темброблока будет независимой. Так же будет использоваться клавиатура 6-9 кнопок(число будет зависеть от того как я построю меню системы) подключенных матричным способом. Для регулировки громкости баланса да и просто навигации по меню будет использоваться инкрементальный энкодер. Вот собственно и все что я хочу сделать.
Теперь перейдем к более печальной части этого проекта:
- Писать программу собираюсь на СИ в CV AVR. СИ начал изучать недано (буквально неделю назад) но уже есть свои плоды: более менеее научился отображать информацию на LCD, опрашивать порты контроллера, зажигать светодиоды, но до совершенства еще конечно далеко. В связи с чем прошу помощи по следующим вопросам( желательно чтобы для каждого вопроса был отдельный пример на СИ (в идеале написанный на CV AVR) ):
- Сколько я не бился у меня так и не получилось корректно обработать повороты энкодера. Перерыл кучу информации и нашел два метода с помощью которых это можно сделать:
1. Опрашивать порты к которым присоединен энкодер и сравнивать это значение с предыдущим и в зависимости от ситуации ++ или -- счетчик энкодера.
2. Использовать прерывания по INT0 или INT1. Но здесь говорят нужно бояться дребезга контактов.
Пробовал написать алгоритмы по обоим методам но ничего толкового не вышло(((
- Т. к. буду использовать клавиатуру с достаточно большим количеством кнопок, подсоеденять ее буду матричным способом. Таким образом я сэкономлю ножки микроконтроллера. Алгоритм по клавиатуре я тоже нащел: вначале порты к которым подсоеденены строки клавиатуры выставляем на вход, а порты к которым присоеденины столбцы - на выход. Далее опррашиваем строки клавиатуры. Если будет нажата какая нибудь клавиша на ножке порта-входа появится еденица в этот момент запоминаем на какой строчке появилась еденица, далее перенастраиваем порты с точностью до наоборот - ножки которые были входами делаем как выходы, а которые были выходами делаем как входы, и опрашиваем столбцы клавиатуры. Таким образом мы получаем еденицу на определенной строке и столбце клавиатуры а потом с помощью IF или CASE проверяем какой кнопке соответствует эта комбинация.
По клавиатуре я нащел примеры только на ассемблере, но не стал разбираться, может у кого нибудь есть примеры работы с матричной клавиатурой на СИ.
- С диспелеем как я уже говорил почти разобрался - единственное что у меня не получается так это вывести на него значение какой нибудь переменной. CV выдает ошибку в строке вывода - типа у вас несоответсвие типов. Подскажите как решить эту проблему.
- Следующая проблема это EEPROM память. Мне она понадобится для хранения настроек системы(баланс, тембры ВЧ, НЧ, Громкость и т. д.) Сразу скажу что я с ней даже не разбирался. По этому пункту также нужен наглядный пример чтобы легче было понять алгоритм записи и чтения из нее.
- И последняя проблема это интерфейс I2C. Алгоритм в общем то мне понятен: сначала нужно выбрать устройство по его уникальному адресу а потом посылать или считывать с него команды. Но для большего пониманияз какой нибудь пример не помешал бы.
Думаю данная тема будет многим интересна, поэтому совместными усилиями надеюсь мы соберем это устройство. Сразу хочу сказать огромное спасибо тем, кто откликнется на мои просьбы))))
Теперь перейдем к более печальной части этого проекта:
- Писать программу собираюсь на СИ в CV AVR. СИ начал изучать недано (буквально неделю назад) но уже есть свои плоды: более менеее научился отображать информацию на LCD, опрашивать порты контроллера, зажигать светодиоды, но до совершенства еще конечно далеко. В связи с чем прошу помощи по следующим вопросам( желательно чтобы для каждого вопроса был отдельный пример на СИ (в идеале написанный на CV AVR) ):
- Сколько я не бился у меня так и не получилось корректно обработать повороты энкодера. Перерыл кучу информации и нашел два метода с помощью которых это можно сделать:
1. Опрашивать порты к которым присоединен энкодер и сравнивать это значение с предыдущим и в зависимости от ситуации ++ или -- счетчик энкодера.
2. Использовать прерывания по INT0 или INT1. Но здесь говорят нужно бояться дребезга контактов.
Пробовал написать алгоритмы по обоим методам но ничего толкового не вышло(((
- Т. к. буду использовать клавиатуру с достаточно большим количеством кнопок, подсоеденять ее буду матричным способом. Таким образом я сэкономлю ножки микроконтроллера. Алгоритм по клавиатуре я тоже нащел: вначале порты к которым подсоеденены строки клавиатуры выставляем на вход, а порты к которым присоеденины столбцы - на выход. Далее опррашиваем строки клавиатуры. Если будет нажата какая нибудь клавиша на ножке порта-входа появится еденица в этот момент запоминаем на какой строчке появилась еденица, далее перенастраиваем порты с точностью до наоборот - ножки которые были входами делаем как выходы, а которые были выходами делаем как входы, и опрашиваем столбцы клавиатуры. Таким образом мы получаем еденицу на определенной строке и столбце клавиатуры а потом с помощью IF или CASE проверяем какой кнопке соответствует эта комбинация.
По клавиатуре я нащел примеры только на ассемблере, но не стал разбираться, может у кого нибудь есть примеры работы с матричной клавиатурой на СИ.
- С диспелеем как я уже говорил почти разобрался - единственное что у меня не получается так это вывести на него значение какой нибудь переменной. CV выдает ошибку в строке вывода - типа у вас несоответсвие типов. Подскажите как решить эту проблему.
- Следующая проблема это EEPROM память. Мне она понадобится для хранения настроек системы(баланс, тембры ВЧ, НЧ, Громкость и т. д.) Сразу скажу что я с ней даже не разбирался. По этому пункту также нужен наглядный пример чтобы легче было понять алгоритм записи и чтения из нее.
- И последняя проблема это интерфейс I2C. Алгоритм в общем то мне понятен: сначала нужно выбрать устройство по его уникальному адресу а потом посылать или считывать с него команды. Но для большего пониманияз какой нибудь пример не помешал бы.
Думаю данная тема будет многим интересна, поэтому совместными усилиями надеюсь мы соберем это устройство. Сразу хочу сказать огромное спасибо тем, кто откликнется на мои просьбы))))