Страница 1 из 1

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

Добавлено: Ср янв 16, 2013 17:41:00
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 таймера, а один-два могут еще в другом деле понадобится)

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

Добавлено: Ср янв 16, 2013 17:50:48
Ser60
Для подключения 3-х SPI устройств к МК, можно их выводы MISO, MOSI, SCLK обыеденить (запараллелить) и к каждому устройству протянуть свой CS провод. Т.о. надо будет иметь в МК только 1 SPI модуль и для управления стройствами будут задействованы 6 выводов.

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

Добавлено: Ср янв 16, 2013 17:56:37
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 ножек.

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

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

Хотелось бы еще понять насчет реализации SPI. Предполагаю, что это будет 1 программный SPI, но ввиду того, что SPI растягивается на 10 пинов, как дело это инициализировать? . Для тактирующего сигнала SCK нужно использовать таймер? У кого-то есть готовые функции под CVavr ?

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

Добавлено: Ср янв 16, 2013 18:30:52
Engineer_Keen
zigler писал(а):Предполагаю, что это будет 1 программный SPI
Нафиг программный? У 16 меги аппаратный же есть. Один раз настроили и дальше только управляйте SS-ми и кидайте данные в регистр SPDR, мега сама данные с тактом передаст.

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

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

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

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

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