| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Atmega16 - много переферийных устройств SPI
16.01.2013, 22:47
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Рисую плохо, я б так 8 SPI сделал и параллелно сразу 8 SPI грузил - и быстро и синхронно все будет
|
|
|
|
16.01.2013, 23:45
|
|
|
Прописка
Регистрация: 25.10.2012
Сообщений: 112
Сказал спасибо: 50
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от Boba_spb
|
|
Рисую плохо, я б так 8 SPI сделал и параллелно сразу 8 SPI грузил - и быстро и синхронно все будет
|
спасибо за картинку, так себе и представлял.
что скажете насчет реализации SPI? какие бы функции использовали?
Сообщение от whoim
|
|
я бы уарт/485 оставил для сетки
|
Спасибо за помощь.
Насчет RS485 все, что знаю - это теория: мультислейв (не точка-точка), 2 провода, полудуплекс, нейтрализация помех. Можете подсказать что-то насчет программной реализации? Какие функции использовать? Отличается RS485 от UART(насчет программы на микроконтроллере) ? Нужно использовать приемопередатчик, витую пару?
Последний раз редактировалось pavned; 17.01.2013 в 00:04.
|
|
|
|
17.01.2013, 00:17
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Да программные - какие там функции. ..
типа такого что нить
short SpiSendDat[8]; // это данные которые надо передать;
// а это передача
void SendToSpi()
{
unsigned char dat;
short mask=0x8000;
PORT2.1=0; // установка СS
for(int i=0;i‹16;i++)
{
dat=0;
for(int j=0;j=8;j++)
{
dat››=1;
if(SpiSendDat[i] & mask) dat|=0x80;
}
PORT1=dat; // установили данные
PORT2.0=1; // подняли CLCK
mask››=1; // двинули маску
PORT2.0=0; // опустили CLCK
}
PORT2.1=0; // сбросили CS
}
А если на АСМе вдумчиво написать, это вообще будет летать.
|
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
17.01.2013, 01:33
|
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от Boba_spb
|
|
я б так 8 SPI сделал
|
Оригинально, конечно. Только не гибко. Если мне надо только один SPI загрузить в данный момент, в остальные придётся параллельно единички запузыривать?
И потом, входы SYNC надо передёргивать всё равно, иначе прибор не почует загрузку нового слова. Значит ещё ноги надо добавлять ...
|
|
|
|
17.01.2013, 09:26
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Каюсь, SYNC упустил, но это одна всего одна нога. Так не проблема единички писать. Зато все синхронно будет работать и довольно быстро.
Можно правда еще поизголяться, данные писать не в порт, а в регистр сдвига, а потом все одним CLCK ...
Так, примерно, светодиодные экраны работают. Там много чего последовательно, но параллельно заряжают - скорости большие нужны.
|
|
|
|
17.01.2013, 10:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от pavned
|
Почему? загрузка данных будет последовательная, т.е. я не собираюсь одновременно задание во все устройства грузить, поэтому нет необходимости под каждое устройство SPI инициализировать. 2 общих пина Clock и Data подключены ко всем устройствам, в SS к каждому устройству свой. И выбираем с каким работать, притягивая соответствующий SS к земле.
.....
Ну 8 ног я еще могу выделить
|
Примерно так и надо.
В app. notes тогда ещё Motorol'ы - видел способ экономии выводов для сигналов !CS (SS, FSYNC и т.п.). К шине SPI подключен 595-й регистр (2 вывода управления), а уже с него снимается до 8 сигналов выборки периферийных устройств.
Сообщение от pavned
|
Дело в том, что этот Atmega16 сам является Slave'ом в сети из Master'a Atmega32 и нескольких Atmega16. Между ними связь задумана по SPI. Или может лучше использовать UART, I2C? Проводов между слейвами быть не должно (в смысле напрямую, все общение через мастера).
Нельзя же одновременно выступать в одной сети как слейв, в другой сети как местер на одних и тех же пинах? Да ну, даже если и можно, путать все это...
|
ЕМНИП, USART может работать и как SPI. Т.о., Вы получите 2 аппаратных SPI в одном контроллере.
|
|
|
|
18.01.2013, 21:47
|
|
|
Гражданин KAZUS.RUN
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Самый простой способ - поставить мультиплексор на линию CLK. Линию данных развести на все устройства, т.к. данные будут восприниматься только тем усройством, на который идет clk.
|
|
|
|
18.01.2013, 23:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от tanq
|
|
Самый простой способ - поставить мультиплексор на линию CLK
|
Угу, ещё одну 74хх138. На входы А, В, С выбор канала, на ОЕ - клок. Придётся, правда, 8 pullup-ов поставить.
|
|
|
|
19.01.2013, 21:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от tanq
|
|
Самый простой способ - поставить мультиплексор на линию CLK. Линию данных развести на все устройства, т.к. данные будут восприниматься только тем усройством, на который идет clk.
|
По-моему - фигня. !CS (SS, FSYNC и т.п.) - наше всё.
|
|
|
|
21.01.2013, 11:48
|
|
|
Гражданин KAZUS.RUN
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 980
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: Atmega16 - много переферийных устройств SPI
Сообщение от pavned
|
|
Дело в том, что этот Atmega16 сам является Slave'ом в сети из Master'a Atmega32 и нескольких Atmega16. Между ними связь задумана по SPI.
|
Сорри, а что мешает один камушек побольше выбрать вместо кучки мелких ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:06.
|
|