AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
16.01.2013, 19:02
|
|
Прописка
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
|
Atmega16 - много переферийных устройств SPI
Доброго времени суток.
Нужно получить регулирумую с компьютера синусоиду (частота, фаза, амплитуда), применил для этого микросхему dds AD9834.
Вот картинка с Circuit Note CN-0156 (Как выполнять контроль амплитуды на этом dds) от того же Analog Devices:
В общем, рекомендуется это делать с помощью дополнительного ЦАП - увеличиваем напряжение ЦАП - уменьшаем амплитуду синусоиды.
Эти устройства работают по интерфейсу SPI. Таких генераторов синусоид с контролем амплитуды нужно 4 шт, их нужно подключить к одному микроконтроллеру Atmega16. Т.е. (всего 4х3+4х3=24) количество используемых ножек можно как-то уменьшить?
Вся проблема в том, что у этих устройств (dds ad9834 и dac ad5620) нет пина SS, т.е. как я понимаю, не получится подключить всё к трем выходам микрокантроллера (MOSI,MISO,SCK)+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 таймера, а один-два могут еще в другом деле понадобится)
Последний раз редактировалось pavned; 16.01.2013 в 19:05.
|
|
|
|
16.01.2013, 19:20
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от pavned
|
у этих устройств (dds ad9834 и dac ad5620) нет пина SS
|
У AD9834 есть пин FSYNC, а у AD5620 есть пин SYNC, которые выполняют функции Chip Select: т.е. запись в чип по SPI возможна только при нуле на этих пинах.
|
|
|
Сказали "Спасибо" Yurkin2007
|
|
|
16.01.2013, 19:24
|
|
Прописка
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от Yurkin2007
|
У AD9834 есть пин FSYNC, а у AD5620 есть пин SYNC, которые выполняют функции Chip Select: т.е. запись в чип по SPI возможна только при нуле на этих пинах.
|
С первым вопросом ясно, спасибо!
Из AD9834 datasheet:
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...
Из AD5620 datasheet:
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....
В общем, FSYNC и SYNC действуют и как выбор чипа. Итого - 8 пинов на SS, 2 пина на SCK и SDATA общие для всех.
Актуален вопрос насчет реализации программного SPI. Ввиду того, что SPI растягивается на 10 пинов, как дело это инициализировать? SCLK сигналы будет создавать счетчик/таймер? У кого-то есть готовые функции под CVavr ?
Последний раз редактировалось pavned; 16.01.2013 в 19:28.
|
|
|
|
16.01.2013, 19:50
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
SPI - шустрый интерфейс, у AD9834 минимальный такт = 20нс, что явно быстрее, чем Ваш МК. То есть пишите программный SPI прямо как есть, в лоб, никаких прерываний/таймеров не нужно.
Цитата:
|
1. SCLK = 1
2. FSYNC= 0
3. SDATA[15] -› выход
4. SCLK = 0
5. SCLK = 1
6. SDATA[14] -› выход
7. SCLK = 0
8. SCLK = 1
и т.д.
.
.
.
FSYNC=1
|
|
|
|
|
16.01.2013, 21:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от pavned
|
Актуален вопрос насчет реализации программного SPI. Ввиду того, что SPI растягивается на 10 пинов
|
Программный СПИ отъест ещё больше ног, т.к. вместо 8 ног CS нужно выделить 16 ног Clock и Data
Погугли 74HC595
|
|
|
|
16.01.2013, 22:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
а зачем программный? программные же только ноги cs, их можно и вправду на hc595 положить, а в остальном юзать аппаратный спи?
|
|
|
|
16.01.2013, 22:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от niXto
|
Программный СПИ отъест ещё больше ног, т.к. вместо 8 ног CS нужно выделить 16 ног Clock и Data
|
Да программно на кучу SPI Количество ног = CS + CLCK + N, где N число SPI - они ж параллельно все работать будут
|
|
|
|
16.01.2013, 22:10
|
|
Прописка
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от niXto
|
Программный СПИ отъест ещё больше ног, т.к. вместо 8 ног CS нужно выделить 16 ног Clock и Data
Погугли 74HC595
|
Почему? загрузка данных будет последовательная, т.е. я не собираюсь одновременно задание во все устройства грузить, поэтому нет необходимости под каждое устройство SPI инициализировать. 2 общих пина Clock и Data подключены ко всем устройствам, в SS к каждому устройству свой. И выбираем с каким работать, притягивая соответствующий SS к земле.
Я понимаю, что Вы это знали еще лет 15 назад, я описал как сам это вижу Критика приветствуется!!!
Сообщение от whoim
|
а зачем программный? программные же только ноги cs, их можно и вправду на hc595 положить, а в остальном юзать аппаратный спи?
|
Ну 8 ног я еще могу выделить
Дело в том, что этот Atmega16 сам является Slave'ом в сети из Master'a Atmega32 и нескольких Atmega16. Между ними связь задумана по SPI. Или может лучше использовать UART, I2C? Проводов между слейвами быть не должно (в смысле напрямую, все общение через мастера).
Нельзя же одновременно выступать в одной сети как слейв, в другой сети как местер на одних и тех же пинах? Да ну, даже если и можно, путать все это...
|
|
|
|
16.01.2013, 22:10
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Если вот так делать, то потребуется всего 5 ног
|
|
|
Сказали "Спасибо" Yurkin2007
|
|
|
16.01.2013, 22:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от pavned
|
Да ну, даже если и можно, путать все это...
|
я бы уарт/485 оставил для сетки
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:33.
|
|