Атмега16 - много переферийных устройств SPI

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Открыл глаза
Сообщения: 49
Зарегистрирован: Чт окт 25, 2012 15:46:44

Сообщение zigler »

Доброго времени суток.
Нужно получить регулирумую с компьютера синусоиду (частота, фаза, амплитуда), применил для этого микросхему dds AD9834.
В общем, вот картинка с Circuit Note CN-0156 (Как выполнять контроль амплитуды на этом dds) от того же Analog Devices
Изображение
В общем, рекомендуется это делать с помощью дополнительного ЦАП - увеличиваем напряжение ЦАП - уменьшаем амплитуду синусоиды.
Эти устройства работают по интерфейсу SPI. Таких генераторов синусоид с контролем амплитуды нужно 4 шт, их нужно подключить к одному микроконтроллеру Atmega16. Т.е. (всего 4х3+4х3=24) количество используемых ножек можно как-то уменьшить?
Вся проблема в том, что у этих устройств (dds ad9834 и dac ad5620) нет пина SS, т.е. как я понимаю, не получится подключить всё к трем выходам микрокантроллера.
Как решить проблему? Может существуют какие-то промежуточные элементы с ~12 входами (3 SPI, остальные SS1, SS2, ...) и ~50 выходами, которые бы работали по интерфейсу SPI, но вход был бы с пином SS, а выход на соответствующие 3 выходные пина?
Можно, конечно, увеличить количество атмег... что посоветуете?
К тому же, несколько реализаций программного SPI... с учетом того, что аппаратный SPI будет задействован в другом деле как Slave... что посоветуете?
Может ли 1 Атмега16/32 работать по интерфейсу SPI на одни выходы как Master, на другие как Slave? Spi оба программные, или 1 программный, один аппаратный.
Кстати, как реализовать программный SPI? Для сигнала SCLK нужно таймер использовать? Можно ли создать несколько программных SPI (например 4 или лучше 8 ) на разных пинах Атмега16/32 (МК как Master), при этом один таймер использовать для всех четырех программных SPI? (исходя из того, что в атмеге 3 таймера, а один-два могут еще в другом деле понадобится)
Последний раз редактировалось zigler Ср янв 16, 2013 17:51:01, всего редактировалось 1 раз.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3793
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Для подключения 3-х SPI устройств к МК, можно их выводы MISO, MOSI, SCLK обыеденить (запараллелить) и к каждому устройству протянуть свой CS провод. Т.о. надо будет иметь в МК только 1 SPI модуль и для управления стройствами будут задействованы 6 выводов.
Реклама
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Сообщение phenomen »

datasheet AD9834 писал(а):The FSYNC input is a level triggered input that acts as a frame synchronization and chip enable. Data can only be transferred into the device when FSYNC is low. To start the serial data transfer, FSYNC should be taken low, observing the minimum FSYNC-to-SCLK falling edge setup time...
datasheet AD5620 писал(а):The write sequence begins by bringing the SYNC line low. Data from the DIN line is clocked into the 16-bit shift register (AD5620/AD5640) or the 24-bit shift register (AD5660) on the falling edge of SCLK....
Детально описано в даташите, откуда взята информация.

Согласно этому вам нужно 2 ножки (data/clock) + 4*2 = 8 ножек для выбора чипа. Итого 10 ножек.
Открыл глаза
Сообщения: 49
Зарегистрирован: Чт окт 25, 2012 15:46:44

Сообщение zigler »

phenomen писал(а):Детально описано в даташите, откуда взята информация.
Согласно этому вам нужно 2 ножки (data/clock) + 4*2 = 8 ножек для выбора чипа. Итого 10 ножек.
Ого! Моментальное понимание даташитов=)))
Вот спасибо!! Перечитал весь даташит, но то, что FSYNC действует как SS не отложилось...
Хорошо, 8 пинов на SS, 2 пина на SCK и SDATA общие для всех. Радует!

Хотелось бы еще понять насчет реализации SPI. Предполагаю, что это будет 1 программный SPI, но ввиду того, что SPI растягивается на 10 пинов, как дело это инициализировать? . Для тактирующего сигнала SCK нужно использовать таймер? У кого-то есть готовые функции под CVavr ?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

zigler писал(а):Предполагаю, что это будет 1 программный SPI
Нафиг программный? У 16 меги аппаратный же есть. Один раз настроили и дальше только управляйте SS-ми и кидайте данные в регистр SPDR, мега сама данные с тактом передаст.
Реклама
Открыл глаза
Сообщения: 49
Зарегистрирован: Чт окт 25, 2012 15:46:44

Сообщение zigler »

Engineer_Keen писал(а): Нафиг программный? У 16 меги аппаратный же есть. Один раз настроили и дальше только управляйте SS-ми и кидайте данные в регистр SPDR, мега сама данные с тактом передаст.
Дело в том, что этот Atmega16 сам является Slave'ом в сети из Master'a Atmega32 и нескольких Atmega16. Между ними связь задумана по SPI. Или может лучше использовать UART, I2C? Проводов между слейвами быть не должно (в смысле напрямую, все общение через мастера).

Нельзя же одновременно выступать в одной сети как слейв, в другой сети как местер на одних и тех же пинах? Да ну, даже если и можно, путать все это...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

А, ну раз он занят тогда не вопрос. Связь между контроллерами можно сделать на UART, только не напрямую, а с преобразованием в RS485, иначе больше двух контроллеров не связать без хитростей, но это имеет смысл если расстояние большие (метры, сотни метров). Иначе имеет смысл оставить SPI. Можно сделать на I2C, если он не задействован. Ну и еще можно вместо программного SPI задействовать UART в синхронном режиме (наоборот тоже можно).
Ответить

Вернуться в «Периферия»