Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI: равномерный вывод нескольких байт
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
=GM=
Народ, тема навеяна постом по выводу символов на экран путём врезки отдельных пикселей в композитный видеосигнал. Хотелось бы поделиться своими результатами и обсудить их со специалистами.

Задача была такая: добиться равномерного вывода пикселей без каких-либо зазоров между байтами на максимально допустимой скорости 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МГц.

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

Вобщем, вероятно, так действительно можно получать Fclk/2...
=GM=
Цитата(singlskv @ Mar 4 2008, 19:04) *
...это просто везение, видимо так складывается, что момент опроса/синхронизации происходит в самом начале машинного такта...

Что за момент опроса? Поясните свою мысль, не доходит чё-то.
mdmitry
Для полноты картины можно взять БПФ от выборки (такт) и по качеству спектра судить о стабильности вывода.
почти bb-offtopic.gif USART в режиме SPI, а там двойная буферизация smile.gif . Если скорость не меняете по ходу работы, то стабильность, ИМХО, лучше.
defunct
Цитата(=GM= @ Mar 4 2008, 19:30) *
Что меня смущает, так это то, что слейв работает на частоте в два раза выше, чем описано в документации. Привлекает то, что для 20МГц атмеги максимальная скорость будет 10МГц.
Что скажете?

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

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

Спасибо. У меня SPI работает как слейв, значит входная частота F/2 проходит через синхронизатор, который опрашивается клоком F. Если подать F на вход синхронизатора, то на выходе будет постоянка, ну а не будет клоков - не будет работать SPI слейв. Мне кажется, что смещения не будет, т.к. входная частота для слейва идёт постоянно, какая разница какой импульс защёлкивает данные, задержанный на один такт или на два такта. Посмотрите на блок-схему SPI.
singlskv
Цитата(=GM= @ Mar 5 2008, 02:01) *
Что за момент опроса? Поясните свою мысль, не доходит чё-то.
Имелось в виду что XCK осуществляет переходы 0->1 и 1->0 в определенные моменты
такта MCU, и для того чтобы SPI Slave работало на F/2, схема синхронизации SPI должна засечь этот
переход в том же такте MCU.
singlskv
Кстати, для проверки такого режима работы, я бы просто подключил две меги на
один тактовый генератор и использовал один в режиме "псевдомастера" по описанному
Вами алгоритму, а второй в режиме слейв, ну и тогда можно было бы и оценить промежутки между
передачей битов и целостность посылки...
zltigo
Цитата(singlskv @ Mar 6 2008, 00:10) *
Кстати, для проверки такого режима работы, я бы просто...

Если "просто", то это просто проверяется почти любым цифровым осциллографом с установкой запуска по длительности импульса превышающей номинальную. Что, полагаю, и было сделано.
singlskv
Цитата(zltigo @ Mar 6 2008, 01:06) *
Если "просто", то это просто проверяется почти любым цифровым осциллографом с установкой запуска по длительности импульса превышающей номинальную. Что, полагаю, и было сделано.
Вы говорите только о непрерывности передачи, я же предлагаю проверить
будет ли потеря 1-2 битов в начале передачи, кстати это еще может зависить от установки CPHA.
zltigo
Цитата(singlskv @ Mar 6 2008, 01:23) *
я же предлагаю проверить
будет ли потеря 1-2 битов в начале передачи...

Еще проще - передача одного байта или с искусственной паузой между байтами, одиночный запуск и посмотреть начало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.