Мне необходимо реализовать синхронный преобразователь из параллельного в последовательный код (данные выводить через UART) на Atmel AT90S2313.
Помогите пожалуйста разобраться что такое параллельный и последовательный коды?
последовательный код - это обычный сдвиговый регистр. один выход, на него последовательно подаются биты.
параллельный - 8 входов и значения вводятся одновременно.
берешь какой-нить порт твоего мк, говоришь это будет мой параллельный ввод.
берешь еще один доп вход - синхросигнал.
как поступает синхолсигнал - считываешь свой порт и считанное значение отправляешь на USART. вот и весь твой преобразователь.
_________________ Я просто верю в то, что рушить догмы - лучший способ не стареть.
Спасибо за ответ!
Мне нужно обеспечить интенсивность входного потка неболее 50 слов в секунду. Программу я уже написал, таймеры в ней не использовал, как мне организовать данную интенсивоньсть?
Возможно, мне нужно подобрать определенную частоту кварцевого резонатора, чтобы в секунду обрабатывать параллельный код не более 50 раз. Как мне расчитать частоту кварца?
преобразователь-то синхронный, т.е. по синхросигналу преобразование идет. Если я правильно понимаю условие задачи, то вопрос стоит не в частоте кварца мк, а в частоте синхросигнала.
_________________ Я просто верю в то, что рушить догмы - лучший способ не стареть.
Некоторое внешнее устройство может посылать слова с любой частотой, но МК может их принимать лишь с интенсивностью 50 слов в секунду. Следовательно интенсивность поступления слов в МК необходимо задавать средствами данного МК, а синхросигнал поступает от внешнего устройства.
ну если так, то запоминать таймер при каждом синхроимпульсе и сверять при последующем (прошло ли 20 мс)
Интересная у вас темка! Сам делаю нечто похожее. Слушай, а можно как-нибудь без таймера обойтись! Там же по сути, программка то должна маленькая получиться. Можно организовать цикл обработки параллельного кода, в который программа будет входить по приходу синхросигнала.
А если попробовать такие расчеты:
на одну обработку параллельного кода - 8 тактов
50 обработок - 400 тактов
50 обработок в секунду - 400 тактов в секунду ~ 400 герц ~ 400/1000 Кгерц
Вообще возможно подобрать такой кварц???? Или все таки через таймер??
ну если таймер не нравится, то можно так сделать:
в основной программе ждем синхроимпульс.
по приходу синхроимпульса делаем преобразование.
потом делаем пустой цикл чтобы заполнить время до 20 мс.
возвращаемся в основную программу.
Естественно, при такой реализации есть большой шанс пропустить синхроимпульсы (т.е. вообще мк не будет знать, что некоторое время после преобразования были еще синхроимпульсы).
Подбирать кварц можно, но ИМХО, это не есть гуд.
_________________ Я просто верю в то, что рушить догмы - лучший способ не стареть.
Я так понял, что некое устройство просто выставляет код на параллельном интерфейсе с какой-то скоростью, подтверждая синхроимпульсом - и все...
Тогда его можно просто считывать с необходимой частотой, которую можно задать хоть таймером, хоть программной задержкой.. Главное - не считывать в момент синхроимпульса (по фронту/спаду - как там сделано обновление?) Такую проверку можно просто ввести дополнительным условием.
нет синхроимпульса? - считали код, подождали 20мс - нет синхроимпульса? - есть:подождали чуть - нет синхроимпульса? - считали код, подождали 20мс...
Вот и получится не более 50 слов в секунду, но не ровно 50!
Вроде все корректно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения