Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Конвертер скорости USART

Чт июн 25, 2009 15:27:41

Добрый день всем!!!

Появилась необходимость сделать конвертер скорости USARTa на авр. Например, принимает по 19600 передает по 2400 и наоборот.
Подскажите, как это осуществить, имея один USART на микросхеме. Может у кого-то есть исходники.

Зараннее спасибо

Чт июн 25, 2009 17:37:23

НаписАть програмный. Если ничем серьёзным больше МК не будет заниматься, то проблем не вижу никаких.

Чт июн 25, 2009 17:55:55

Ну и подскажите же, как это сделать

Чт июн 25, 2009 18:26:48

Для начала почитайте про USART, как работает, как реализуется и с чем его едят. А там всё сами поймёте.

Чт июн 25, 2009 19:27:15

В сети есть при меры программной реализации USART'a. Если не найдете сами - поищу в закромах, где-то лежали, но сам я ими не пользовался.

Чт июн 25, 2009 20:13:06

vitaliy85
Вы опишите лучше что не получается, а не как сделать.
Исходные данные, которые вы привели, недостаточны для советов "как это сделать".

Чт июн 25, 2009 21:00:54

asteroid7 писал(а):vitaliy85
Вы опишите лучше что не получается, а не как сделать.
Исходные данные, которые вы привели, недостаточны для советов "как это сделать".


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

Дайте, плз, ссылки на описание, если есть у кого то.

И какие еще исходные данные нужны? Из УАРТа одной скорости, сделать другой и все...

Спасибо

Чт июн 25, 2009 21:02:22

Аlex писал(а):НаписАть програмный. Если ничем серьёзным больше МК не будет заниматься, то проблем не вижу никаких.


Сами писали что-то типа такого? Можете помочь? Показать какие-то примеры? Исходники?

Чт июн 25, 2009 22:15:22

ПисАл, и не раз. Но, к сожалению для Вас, пишу под PIC'и.
Так что мои примеры Вам ничего не дадут толкового.
Я реализовывал с помощью таймеров. Хотя если просто переходник и всё, то можно и без них обойтись.
Последний раз редактировалось Аlex Чт июн 25, 2009 22:20:20, всего редактировалось 1 раз.

Re: Конвертер скорости USART

Чт июн 25, 2009 22:17:42

vitaliy85 писал(а): Например, принимает по 19600 передает по 2400 и наоборот. Подскажите, как это осуществить, имея один USART на микросхеме.
Это и есть ОДИН UART

Чт июн 25, 2009 22:48:16

Действительно, задача непонятна. Один UART только принимает, другой - только передаёт? Оба принимают - передают? Т.е. симплекс, полудуплекс, дуплекс?

Чт июн 25, 2009 23:30:46

А переключить в регистре скорость религия не позволяет?

Пт июн 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

__Alexander писал(а):А переключить в регистре скорость религия не позволяет?


Присоединяюсь. А если нужно принимать данные из двух источников и передавать данные в два источника - можно применить мультиплексор. Это, если, конечно, неохота программный UART ваять...

Пт июн 26, 2009 07:46:39

Мультиплексоры ему не пойдут. Ему нужен переходник из одной скорости в другую. Когда один чем то занят другой тоже должен быть свободный как на приём, так и на передачу. Наверное ему нужен полный дуплекс.
Вообще не вижу здесь никакой проблемы. Автору просто лень почитать литературу. USART на столько прост, что и разбираться там не в чем. Обычная серийная передача битов.
Автор, скажите применение сия устройства.

Пт июн 26, 2009 10:50:57

KT315B и Аlex - по делу есть что сказать?
Вы что тут флудите. Или ищете легких путей?
Представьте себя в условиях юноши-топикстартера.

Решите задачу с максимальной универсальностью:
полноценный двухсторонний обмен с максимальной
скоростью каждой стороны. Приветствуются любые
дешевые схемотехнические решения.

Понятно что скорость будет ограничиваться скоростью
2400 бод, т.е. на стороне 19600 будут одиночные символы,
но не чаще чем это можно "переварить" на скорости 2400.

Упустила из виду - vitaliy85 просит на АВР.
Складывается впечатление, что любители АВР флудеры.
Хотелось бы в этом ошибаться.

Пт июн 26, 2009 11:22:57

У Atmel есть Апноуты AVR307 об использовании USI (например в ATtiny26, tiny2313) в качестве полудуплексного UART. А также AVR305 - полудуплексный программный UART. И AVR304 - полудуплексный UART с использованием прерываний. Документы формата PDF, но весят порядка 200к.
Изучайте на здоровье. Единственное, возможно, неудобство - все на английском.

Пт июн 26, 2009 11:26:42

vitaliy85 - не знаю как на AVR возможно будет решена задача,
но на PIC это выглядело бы вот так. Схема проста, но
накладывает "некритичные" ограничения на протокол обмена,
а именно не посылать следующиъ пакетов, пока не пришло
подтверждение успешной ретрансляции.

Но и это, строго говоря, не проблема. Если данные
одновременно передаются на обоих скоростях в сторону
конвертера, то аппаратно проще применить два контроллера,
отдельный для каждой скорости и обмен данными между МК
сделать на параллельной шине.

Без четкого пониимания плотности потока данных
и протокола обмена на логическом уровне
(не путать с аппартным протоколом RS232)
однозначно решение не могу предложить. Удачи.
Вложения
2400-19600.GIF
(7.65 KiB) Скачиваний: 496
Последний раз редактировалось Настя Пт июн 26, 2009 11:40:34, всего редактировалось 1 раз.

Пт июн 26, 2009 11:32:30

DrWatson писал(а):У Atmel есть Апноуты ...


И вы туда же. Чел просит практические проверенные примеры
из жизни. Вы сами это делали? Если делали - чел код просит!

Всё - надоела эта тема.

vitaliy85 - будут концептуальные вопросы - пишите.

Пт июн 26, 2009 11:48:34

А как на счет ATmega128
Из даташита:
...
Сдвоенный программируемый последовательный USART

также заглянуть в папку \CVAVR\examples\2USART_LCD
Ответить