ATtiny2313A к ПК через FT232RL проблема с UART

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

Добрый день!
Собрал схему по рисунку из документации к 232 (стр 29). Драйвера и прочее установил. Для передачи символов использую стандартную winapi "TransmitCommChar".
Для мк написал програмку. Вот ее основная часть(сорри за плагиат):

Код: Выделить всё

.equ    clock       = 12000000   ;clock frequency 
.equ    baudrate    = 9600     ;choose a baudrate 
.equ    baudconst   = (clock/(16*baudrate))-1
---------------
********************
------------
USART_Init:
; Set baud rate
 ldi    r17,high(baudconst)
 ldi    r16,low(baudconst)
out UBRRH, r17
out UBRRL, r16
; Enable receiver and transmitter
ldi r16, (1<<RXEN)|(1<<TXEN)
out UCSRB,r16
; Set frame format: 8data, 2stop bit
ldi r16, (1<<USBS)|(3<<UCSZ0)
out UCSRC,r16

USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer

ldi r18,0 ;проверяем ошибки
sbic UCSRA, FE
ori r18,1
sbic UCSRA, DOR
ori r18,2
sbic UCSRA, UPE
ori r18,4
cpi r18,0
breq nex
		;если ошибка приема
in r21, UDR
sts HexN,r21
ldi r16,$80	
rcall LCD_Cmd
ldi r30,low(Error)
ldi r31,high(Error)
rcall LCD_WriteWord
ldi r16,$80	
rcall LCD_Cmd
rcall LCD_WriteH

USART_Flush: ;подчистим буфер
sbis UCSRA, RXC
rjmp ok1
in r21, UDR
rjmp USART_Flush
ok1:
rjmp USART_Receive  ;начнем с начала
			;конец ошибки

nex:	;успешный прием

in r21, UDR
sts HexN,r21
ldi r16,$80	
rcall LCD_Cmd
ldi r30,low(Okk)
ldi r31,high(Okk)
rcall LCD_WriteWord
ldi r16,$80	
rcall LCD_Cmd
rcall LCD_WriteH

rjmp USART_Receive
Вместо **** естественно еще кусок кода ни на что не влияющий.
LCD - вывод на экран (ошибка или ок + что получил)
Но почему-то вся эта шарманка не играет - причем в протеусе все на ура(вместо 232 там терминал), а в реале - нет...
Фьюз деления частоты на 8 отключить не забыл, от внешнего затактировать не забыл, 232 чтоб выдавала 12МГц перепрошить не забыл...
Но что-то видимо все же забыл...

Вопрос - где косяк?
В протеусе все впорядке, в реале на экран выводит ошибку фрейма и естественно корявопринятый символ...
ПС Может поднимался вопрос - за ссылки спасибо. Реально пробовал и так и этак - символы не те...
Вложения
111.jpg
схема(копия из пдф)
(55.74 КБ) 557 скачиваний
Реклама
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

Может написал не туда?
Можно даже в код особо не глядеть - посмотрите на схему - должна ли работать и если да то как настроить UART - мне кажется что-то со скоростью не то, но что...
Реклама
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение s_black »

У Вас почему-то вход USBDP в воздухе висит... Ну а для того, чтобы проверить FT232 не нужен контроллер. Подключите её к разъёму USB, согласно даташиту. Потом установите драйвера (на сайте производителя). После установки драйверов проверьте в ПК в диспетчере устройств видит ли комп виртуальный COM -порт. Если видит, открывайте любую терминальную программу, соедините на FT232 выводы TX и RX перемычкой, и посылайте любые символы - они должны возвращаться как эхо. Удачи Вам)))
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

Приветствую!
Спасибо за совет - хоть кто-то ввязался в бой))
Схема просто копирована с даташита - естественно на самом деле в воздухе никто не висит))) видимо они просто не дорисовали;)
По поводу проверки FT232 - проверял - все работает:) Возвращаются именно они:) Да и мк получает символы - только искаженные... Даже пытался в цикле посылать на него 1 байт (например 98) с частотой 0,5с, а мк переинициализировал(УАРТ) все время увеличивая коэф деления на 1(UBRRH, UDRRL) начиная с 0,1... В результате верного сочетания так и не нашлось...
На самом деле может сталкивался кто с такой проблемой... Может теоретик какой скажет что все должно работать - меняй свои глючные схемы, трави заново и будет тебе счастье) Но просто сейчас даже не знаю куда копать - сегодня попробую мк на передачу настроить - посмотрю смогу ли на компе нормальные символы принять...
Любые идеи велкам и спасибо всем сочувствующим:)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение Meteor »

Неверные символы получаются скорее всего из-за набегающей ошибки вызванной "некрасивостью" тактовой частоты. Лечение достаточно простое - длинные передачи дробить на фрагменты за время передачи которых набежит не больше полу бита (см. проценты ошибок на частоте)
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Реклама
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

Специально перешел с функции WriteFile которая отправляет пакетом, на TransmitChar - которая отправляет только 1 символ... Вообще похоже что что-то с частотой не то - но что :dont_know:
Тем более специально затактировал мк от ft232, чтобы частоты совпадали - по идее тоже должно было сказаться положительно...
Реклама
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение s_black »

А попробуйте убрать RTS и CTS - я в 90% случаев работаю без них.
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

ок - попробую - о результатах напишу:)
Кстати, добавлять резисторы 100ом между 232 и мк(на RxD и TxD) - пробовал, "подтягивать" их же к 0 - 100КОм -тоже (мало ли...)
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение Kavka »

В контролере вы скорость выставляете, а на компе в свойствах порта выставили? Может в этом косяк?

Дописал через минуту:
А может в 2-х стоповых битах...

Код: Выделить всё

;Set frame format: 8data, 2stop bit
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

В компе стоит именно так так. Хотя за примерно неделю мучений я уже все варианты перебрал)
Да и стоп биты(2 или 1) вроде ресиверу побарабану(где-то в даташите читал, но может неправ). Да и на счет скорости выставляемой в компе - сне очень понимаю... вот например, ставлю маленький коэф деления в мк - соответственно когда комп на скорости 9600 что-то посылает мк успевает это принять несколько раз - не знаю насколько реально, но похоже, я увеличиваю скорость передачи в компе до максимума (там что-то типа 900 000), а разницы нет - мк все равно получает 3 символа вместо 1... Тоже не понимаю как такое может быть...
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение s_black »

Скорее всего у Вас в контроллере неправильно вычисляется коэффициент деления для определения скорости. Я на ассемблере не программирую, но мне кажется макрос ".equ baudconst = (clock/(16*baudrate))-1 " более походит на макрос языка высокого уровня.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение s_black »

Попробуйте вручную посчитать коэффициент для 9600 б/сек и занести его в регистры скорости минуя макрос. Кроме того попробуйте поставить кварц из ряда указанных в даташите для получения нулевых ошибок - там и коэффициент уже посчитан и указан виде таблицы.
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

Считает коэфф не ассемблер а компилятор, а потом вставляет в асм готовые цифры... Вообще пробовал(правда когда тактировал от 232) - попробую еще раз(с кварцем)
saya812
Родился
Сообщения: 8
Зарегистрирован: Пн июн 13, 2011 16:50:26
Откуда: SPb

Re: ATtiny2313A к ПК через FT232RL проблема с UART

Сообщение saya812 »

Сначала попробовал, как советовали ручками посчитать частоту - сделал, записал и заработало! Но как такое может быть - я же делал это... Снова поставил тот "макрос" - работает... Решил что видимо все таки проблема в элементах - стал убирать по одному что бы понять когда перестанет работать и отписаться... но работать не перестало. Подумав что я *** стал вспоминать что же я менял. И понял – чтобы проверить ft я скачал терминальную программку...

В общем оказалось что:
если сначала после включения устройства в разъем подключиться терминалом, а потом отключиться - то дальше моя пк-шная программка работает как часы.
если пробовать сразу моей - не работает!

значит функция апи CreateFile неверно инициализирует устройство.
Сейчас буду капать, что с ней не так:)
По результатам отпишусь. Всем огромное спасибо:)

ADD:
повкуривал вин апи и понял что есть еще пара замечательных функций собственно налаживающих работу порта:
SetupComm --- function initializes the communications parameters for a specified communications device.
SetCommState --- function configures a communications device according to the specifications in a device-control block (a DCB structure). The function reinitializes all hardware and control settings, but it does not empty output or input queues.

В последней из них задается скорость порта:) Непонятно только зачем тогда эта скорость задается в виндах, если ее надо все равно писать самому...
Проблема полностью решена и понятна:) Еще раз всем спасибо!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»