Страница 1 из 1

FT232R 1335-C и AVR ATmega8A - PU проблема со скоростью

Добавлено: Пт окт 09, 2015 20:55:00
benedjadet
Здравствуйте, ни разу еще не задавал вопросов на форумах, не будьте строги.

У меня такая ситуация, собрал USB-модуль для своей меги8 ( кварц 16МГц, FUSE CKSEL3..0=1111; CKOPT=0; SUT1..0=11; ) для связи с компьютером, на FT232R схема типовая bus-powered.
Программу для меги: принимает 8бит, инвертирует PB0, отправляет принятое.(Функции getchar и putchar по документации, пишу в Atmel Studio 6.1).
Для работы с COM-портом использую Terminator 1.9b.
Драйвера для FT232R версии 2.10.00 потому что если ставишь 2.12.06 то в терминаторе приходит только "Легальное устройство не обнаружено".
Когда замыкаю RxD и TxD, все работает нормально на всех скоростях, но с мегой работает только на 600 бод при UBRR = 1666;.
Перебрал все значения UBRR для 16МГц для всех скоростей по документам от меги.
В диспетчере задач изменение скорости порта не меняет дела.
Добиться скорости 9600,8,N,1, не получается.

Что может быть?
Может FT поддельная, говорят такое может быть?

Re: FT232R 1335-C и AVR ATmega8A - PU проблема со скоростью

Добавлено: Сб окт 10, 2015 15:23:35
Андрей СШ
benedjadet писал(а): все значения UBRR для 16МГц для всех скоростей по документам от меги.
А не пробовали задавать значения немного в сторону от указанного в даташите?

Re: FT232R 1335-C и AVR ATmega8A - PU проблема со скоростью

Добавлено: Пн окт 12, 2015 18:32:55
benedjadet
Да попробовал, написал программу для меги, в которой в цикле идет запись в UBRR значений от 138 до 416(с удвоением скорости, что бы уменьшить шаг) тобиш сканируются все значения от скорости 4800 до 14400 бод,
после каждого изменения коэффициента отправляется символ и я жду когда прийдет правельный символ.
Ситуация такая, символ не приходит, приходит похожее значение с еденицей в старшем бите(например отправляю символ 'A' = 0b01000001, а в терминал приходит 0и11000001), не могу найти причину откуда эта единица берется.

Re: FT232R 1335-C и AVR ATmega8A - PU проблема со скоростью

Добавлено: Пн окт 12, 2015 21:41:50
benedjadet
Прошу у всех прощения, и от всей души благодарю всех откликнувшихся!

Проблема решена!
все дело втом что при обращении к UCSRC нельзя пользоваться макросами и запись в него должна выглядеть так: UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
а я сделал так:
sbit(UCSRC,URSEL); // Получаем доступ к разрядам UCSRC
sbit(UCSRC,UCSZ0); // 8 бит длина слова
sbit(UCSRC,UCSZ1);
по этому не работало.

теперь все летает на всех скоростях!!!=)))))))))