Страница 1 из 2
Конвертер скорости USART
Добавлено: Чт июн 25, 2009 15:27:41
vitaliy85
Добрый день всем!!!
Появилась необходимость сделать конвертер скорости USARTa на авр. Например, принимает по 19600 передает по 2400 и наоборот.
Подскажите, как это осуществить, имея один USART на микросхеме. Может у кого-то есть исходники.
Зараннее спасибо
Добавлено: Чт июн 25, 2009 17:37:23
Аlex
НаписАть програмный. Если ничем серьёзным больше МК не будет заниматься, то проблем не вижу никаких.
Добавлено: Чт июн 25, 2009 17:55:55
vitaliy85
Ну и подскажите же, как это сделать
Добавлено: Чт июн 25, 2009 18:26:48
Аlex
Для начала почитайте про USART, как работает, как реализуется и с чем его едят. А там всё сами поймёте.
Добавлено: Чт июн 25, 2009 19:27:15
Aheir
В сети есть при меры программной реализации USART'a. Если не найдете сами - поищу в закромах, где-то лежали, но сам я ими не пользовался.
Добавлено: Чт июн 25, 2009 20:13:06
asteroid7
vitaliy85
Вы опишите лучше что не получается, а не как сделать.
Исходные данные, которые вы привели, недостаточны для советов "как это сделать".
Добавлено: Чт июн 25, 2009 21:00:54
vitaliy85
asteroid7 писал(а):vitaliy85
Вы опишите лучше что не получается, а не как сделать.
Исходные данные, которые вы привели, недостаточны для советов "как это сделать".
Не понятно, какие прерывания будут использоваться вместо стандартных уартовских, какие таймеры/счетчики будут задействованы при этом. Алгоритм работы и т.д.
Дайте, плз, ссылки на описание, если есть у кого то.
И какие еще исходные данные нужны? Из УАРТа одной скорости, сделать другой и все...
Спасибо
Добавлено: Чт июн 25, 2009 21:02:22
vitaliy85
Аlex писал(а):НаписАть програмный. Если ничем серьёзным больше МК не будет заниматься, то проблем не вижу никаких.
Сами писали что-то типа такого? Можете помочь? Показать какие-то примеры? Исходники?
Добавлено: Чт июн 25, 2009 22:15:22
Аlex
ПисАл, и не раз. Но, к сожалению для Вас, пишу под PIC'и.
Так что мои примеры Вам ничего не дадут толкового.
Я реализовывал с помощью таймеров. Хотя если просто переходник и всё, то можно и без них обойтись.
Re: Конвертер скорости USART
Добавлено: Чт июн 25, 2009 22:17:42
ikarab
vitaliy85 писал(а): Например, принимает по 19600 передает по 2400 и наоборот. Подскажите, как это осуществить, имея один USART на микросхеме.
Это и есть ОДИН UART
Добавлено: Чт июн 25, 2009 22:48:16
mackerel
Действительно, задача непонятна. Один UART только принимает, другой - только передаёт? Оба принимают - передают? Т.е. симплекс, полудуплекс, дуплекс?
Добавлено: Чт июн 25, 2009 23:30:46
__Alexander
А переключить в регистре скорость религия не позволяет?
Добавлено: Пт июн 26, 2009 02:19:40
Настя
vitaliy85 - ответьте на вопросы:
1) микроконтроллер какого производителя вам приемлем;
2) на каком языке программирования нужны примеры;
3) каков объем пакетов, т.е. символов в передаче;
4) какова периодичность передач;
5) где больший приоритет приема данных.
Иначе так и будете сопли здесь собирать.
Ниже детские ассменные примеры под PIC
(аппаратьные и без таймеров)
Код: Выделить всё
; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс)
Tx movlw .9 ; 8+1, т.е + бит C из STATUS
movwf Reg_2
bcf STATUS,C ; подготовка стартового бита
m1 btfsc STATUS,C
goto bit1
goto bit0
bit1 bsf PORTA,1 ; передача единицы
call Pause
goto m2
bit0 bcf PORTA,1 ; передача нуля
call Pause
goto m2
m2 rrf Reg_3,F ; сдвиг вправо для передачи с младшего бита
decfsz Reg_2,F
goto m1
bsf PORTA,1 ; установка 1 - "режим ожидания"
call Pause
return
;delay = 95 machine cycles
Pause movlw .31
movwf Reg_1
wr decfsz Reg_1, F
goto wr
nop
return
Код: Выделить всё
; сегмент приема данных от ПК на стороне МК (9600, 8-N-1, 104 мкс)
Rx movlw .8 ; ровно 8 бит
movwf Reg_2
m1 btfsc PORTA,0 ; отслеживаем стартовый бит
goto m1
;delay = 52 machine cycles ; задержка на 104/2 мкс
Pause1 movlw .17 ; для выхода на середину бита
movwf Reg_1
wr1 decfsz Reg_1, F
goto wr1
m3 call Pause2
btfsc PORTA,0
goto bit1
goto bit0
bit1 bsf STATUS,C
goto m2
bit0 bcf STATUS,C
goto m2
m2 rrf Reg_3,F ; сдвиг вправо
decfsz Reg_2,F
goto m3
call Pause3
return
;delay = 89 machine cycles ; задержка с учётом
Pause2 movlw .29 ; ранее выполненных команд
movwf Reg_1
wr2 decfsz Reg_1, F
goto wr2
nop
return
;delay = 104 machine cycles ; задержка под 1 стоповый бит
Pause3 movlw .34
movwf Reg_1
wr3 decfsz Reg_1, F
goto wr3
nop
return
Добавлено: Пт июн 26, 2009 02:47:28
KT315B
__Alexander писал(а):А переключить в регистре скорость религия не позволяет?
Присоединяюсь. А если нужно принимать данные из двух источников и передавать данные в два источника - можно применить мультиплексор. Это, если, конечно, неохота программный UART ваять...
Добавлено: Пт июн 26, 2009 07:46:39
Аlex
Мультиплексоры ему не пойдут. Ему нужен переходник из одной скорости в другую. Когда один чем то занят другой тоже должен быть свободный как на приём, так и на передачу. Наверное ему нужен полный дуплекс.
Вообще не вижу здесь никакой проблемы. Автору просто лень почитать литературу. USART на столько прост, что и разбираться там не в чем. Обычная серийная передача битов.
Автор, скажите применение сия устройства.
Добавлено: Пт июн 26, 2009 10:50:57
Настя
KT315B и Аlex - по делу есть что сказать?
Вы что тут флудите. Или ищете легких путей?
Представьте себя в условиях юноши-топикстартера.
Решите задачу с максимальной универсальностью:
полноценный двухсторонний обмен с максимальной
скоростью каждой стороны. Приветствуются любые
дешевые схемотехнические решения.
Понятно что скорость будет ограничиваться скоростью
2400 бод, т.е. на стороне 19600 будут одиночные символы,
но не чаще чем это можно "переварить" на скорости 2400.
Упустила из виду - vitaliy85 просит на АВР.
Складывается впечатление, что любители АВР флудеры.
Хотелось бы в этом ошибаться.
Добавлено: Пт июн 26, 2009 11:22:57
DrWatson
У Atmel есть Апноуты
AVR307 об использовании USI (например в ATtiny26, tiny2313) в качестве полудуплексного UART. А также
AVR305 - полудуплексный программный UART. И
AVR304 - полудуплексный UART с использованием прерываний. Документы формата PDF, но весят порядка 200к.
Изучайте на здоровье. Единственное, возможно, неудобство - все на английском.
Добавлено: Пт июн 26, 2009 11:26:42
Настя
vitaliy85 - не знаю как на AVR возможно будет решена задача,
но на PIC это выглядело бы вот так. Схема проста, но
накладывает "некритичные" ограничения на протокол обмена,
а именно не посылать следующиъ пакетов, пока не пришло
подтверждение успешной ретрансляции.
Но и это, строго говоря, не проблема. Если данные
одновременно передаются на обоих скоростях в сторону
конвертера, то аппаратно проще применить два контроллера,
отдельный для каждой скорости и обмен данными между МК
сделать на параллельной шине.
Без четкого пониимания плотности потока данных
и протокола обмена на логическом уровне
(не путать с аппартным протоколом RS232)
однозначно решение не могу предложить. Удачи.
Добавлено: Пт июн 26, 2009 11:32:30
Настя
DrWatson писал(а):У Atmel есть Апноуты ...
И вы туда же. Чел просит практические проверенные примеры
из жизни. Вы сами это делали? Если делали - чел код просит!
Всё - надоела эта тема.
vitaliy85 - будут концептуальные вопросы - пишите.
Добавлено: Пт июн 26, 2009 11:48:34
Danko
А как на счет ATmega128
Из даташита:
...
Сдвоенный программируемый последовательный USART
также заглянуть в папку \CVAVR\examples\2USART_LCD