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

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
Родился
Сообщения: 7
Зарегистрирован: Ср окт 07, 2015 05:11:54

Сообщение 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 поддельная, говорят такое может быть?
Реклама
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Сообщение Андрей СШ »

benedjadet писал(а): все значения UBRR для 16МГц для всех скоростей по документам от меги.
А не пробовали задавать значения немного в сторону от указанного в даташите?
Реклама
Родился
Сообщения: 7
Зарегистрирован: Ср окт 07, 2015 05:11:54

Сообщение benedjadet »

Да попробовал, написал программу для меги, в которой в цикле идет запись в UBRR значений от 138 до 416(с удвоением скорости, что бы уменьшить шаг) тобиш сканируются все значения от скорости 4800 до 14400 бод,
после каждого изменения коэффициента отправляется символ и я жду когда прийдет правельный символ.
Ситуация такая, символ не приходит, приходит похожее значение с еденицей в старшем бите(например отправляю символ 'A' = 0b01000001, а в терминал приходит 0и11000001), не могу найти причину откуда эта единица берется.
Родился
Сообщения: 7
Зарегистрирован: Ср окт 07, 2015 05:11:54

Сообщение benedjadet »

Прошу у всех прощения, и от всей души благодарю всех откликнувшихся!

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

теперь все летает на всех скоростях!!!=)))))))))
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Практика»