реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SPI: равномерный вывод нескольких байт, на максимальной допустимой скорости
=GM=
сообщение Mar 4 2008, 17:30
Сообщение #1


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Народ, тема навеяна постом по выводу символов на экран путём врезки отдельных пикселей в композитный видеосигнал. Хотелось бы поделиться своими результатами и обсудить их со специалистами.

Задача была такая: добиться равномерного вывода пикселей без каких-либо зазоров между байтами на максимально допустимой скорости Fclk/2.

Для экспериментов была взята атмега8515 (частота кварца 10 МГц) из старых запасов, чтобы не жалко было покурочить плату и пожечь кристалл в случае чего.

Сначала была попытка вывода отдельных бит через SPI, работающего в режиме ведущего (мастер). Но как я ни бился, получался зазор в 1МЦ, т.е. полпиксела. Было решено перейти к режиму ведомого (слейв), а на вход SCK подать Fclk/2=5МГц.

В документации отмечено, что слейв работает только до частот Fclk/4, так как необходимо синхронизировать внешнюю частоту. Но идея была такая, что поскольку источником 5 МГц будет тот же самый микроконтроллер (вывод XCK синхронного USART), то вроде бы проблем с синхронизацией не должно быть.

Сказано, сделано. Оказалось, что устройство прекрасно работает на Fclk/2=5МГц в режиме слейва. Вот тестовая программка, которая выдавала байты в регистр данных SPI. Данные можно было менять, переключая ключи, подключенные к порту С.
Код

spsout: out   spdr,r16;current data
        in    r16,pinc;reading the switch
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        rjmp  spsout

Вот картинка с экрана осциллографа, видно, что между байтами зазоров нет.

Вроде всё важное сказал. Что меня смущает, так это то, что слейв работает на частоте в два раза выше, чем описано в документации. Привлекает то, что для 20МГц атмеги максимальная скорость будет 10МГц.

Что скажете?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 4 2008, 19:04
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(=GM= @ Mar 4 2008, 20:30) *
Сначала была попытка вывода отдельных бит через SPI, работающего в режиме ведущего (мастер). Но как я ни бился, получался зазор в 1МЦ, т.е. полпиксела. Было решено перейти к режиму ведомого (слейв), а на вход SCK подать Fclk/2=5МГц.
В документации отмечено, что слейв работает только до частот Fclk/4, так как необходимо синхронизировать внешнюю частоту. Но идея была такая, что поскольку источником 5 МГц будет тот же самый микроконтроллер (вывод XCK синхронного USART), то вроде бы проблем с синхронизацией не должно быть.
Что скажете?
Да, ИМХО идея правильная!
хотя наверное то что не понадобилось дополнительных тактов для синхронизации,
это просто везение, видимо так складывается, что момент опроса/синхронизации происходит
в самом начале машинного такта...

Вобщем, вероятно, так действительно можно получать Fclk/2...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 4 2008, 23:01
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(singlskv @ Mar 4 2008, 19:04) *
...это просто везение, видимо так складывается, что момент опроса/синхронизации происходит в самом начале машинного такта...

Что за момент опроса? Поясните свою мысль, не доходит чё-то.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 5 2008, 16:02
Сообщение #4


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Для полноты картины можно взять БПФ от выборки (такт) и по качеству спектра судить о стабильности вывода.
почти bb-offtopic.gif USART в режиме SPI, а там двойная буферизация smile.gif . Если скорость не меняете по ходу работы, то стабильность, ИМХО, лучше.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 5 2008, 16:46
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Mar 4 2008, 19:30) *
Что меня смущает, так это то, что слейв работает на частоте в два раза выше, чем описано в документации. Привлекает то, что для 20МГц атмеги максимальная скорость будет 10МГц.
Что скажете?

Я думаю, что для вывода непринципиальна Fclk. Максимум сигнал будет смещен на такт для каждого семпла (кстати, а Вы не попробовали подать не F/2, а F ? smile.gif ), а вот для ввода, такое смещение неприемлемо, т.к. может привести к искажению данных, потому в документации и F/4.

Решение красивое
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 5 2008, 17:28
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Mar 5 2008, 16:46) *
Я думаю, что для вывода непринципиальна Fclk. Максимум сигнал будет смещен на такт для каждого семпла (кстати, а Вы не попробовали подать не F/2, а F ? smile.gif ), а вот для ввода, такое смещение неприемлемо, т.к. может привести к искажению данных, потому в документации и F/4.
Решение красивое

Спасибо. У меня SPI работает как слейв, значит входная частота F/2 проходит через синхронизатор, который опрашивается клоком F. Если подать F на вход синхронизатора, то на выходе будет постоянка, ну а не будет клоков - не будет работать SPI слейв. Мне кажется, что смещения не будет, т.к. входная частота для слейва идёт постоянно, какая разница какой импульс защёлкивает данные, задержанный на один такт или на два такта. Посмотрите на блок-схему SPI.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 5 2008, 18:07
Сообщение #7


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(=GM= @ Mar 5 2008, 02:01) *
Что за момент опроса? Поясните свою мысль, не доходит чё-то.
Имелось в виду что XCK осуществляет переходы 0->1 и 1->0 в определенные моменты
такта MCU, и для того чтобы SPI Slave работало на F/2, схема синхронизации SPI должна засечь этот
переход в том же такте MCU.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 5 2008, 21:10
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Кстати, для проверки такого режима работы, я бы просто подключил две меги на
один тактовый генератор и использовал один в режиме "псевдомастера" по описанному
Вами алгоритму, а второй в режиме слейв, ну и тогда можно было бы и оценить промежутки между
передачей битов и целостность посылки...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 5 2008, 22:06
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Mar 6 2008, 00:10) *
Кстати, для проверки такого режима работы, я бы просто...

Если "просто", то это просто проверяется почти любым цифровым осциллографом с установкой запуска по длительности импульса превышающей номинальную. Что, полагаю, и было сделано.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 5 2008, 22:23
Сообщение #10


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Mar 6 2008, 01:06) *
Если "просто", то это просто проверяется почти любым цифровым осциллографом с установкой запуска по длительности импульса превышающей номинальную. Что, полагаю, и было сделано.
Вы говорите только о непрерывности передачи, я же предлагаю проверить
будет ли потеря 1-2 битов в начале передачи, кстати это еще может зависить от установки CPHA.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 5 2008, 23:09
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Mar 6 2008, 01:23) *
я же предлагаю проверить
будет ли потеря 1-2 битов в начале передачи...

Еще проще - передача одного байта или с искусственной паузой между байтами, одиночный запуск и посмотреть начало.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016