roboforum.ru

Технический форум по робототехнике.


I/O PORT & UART (Порт забивает УАРТ)

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

I/O PORT & UART (Порт забивает УАРТ)

Сообщение AGman » 28 дек 2007, 22:14

Помогите пжлста! Все перепробывал, везде переискал решения проблемы, но не нашел.
Проблема---->
-пишу в прорт МК (например 0-ой пин порта Б ставлю в 1, диод загорается), все по датащиту. Перепробывал выводить во все порты (один фиг)...

- запусакю УАРТ на 9600 (др скорости не пробывал; все как нада делал- через прерывания; пробывал библеотеки из AVRLIB; даже во флэш писал принятые символы для того чтоб узнать на приеме или передаче искажение символа возникает искажение)

- делаю в main цикл
Код: Выделить всёРазвернуть
while (1) {
   putchar(getchar())
}

(работал даже напрямую с регистром приема/передачи, равнял их через переменную (генерировал ЭХО))

- В терминале жму любую кнопку (например 4), в ответ получаю левый символ (вместо 4 получаю <; 5 - =; 6 ->). Просек что происходит замещение какого то разряда (по ASCII таблице легко увидеть линейное смешение по таблице).

Когда с портами не работаю, передача без ошибок, все как нада- что написал - то получил. Что нибудь в порт -- каша в ЭХО.

В протеусе все работает как часы, хоть все порты забей 1цами на вывод.
Есть предположения почему так??? Точно уверен в том, не в программе косяк (выложил лишь один вариант, поразному делал...).
Информация по мк: ATMEGA8 DIP28, настроен на тактирование от внутр генератора (8мГц)
Вложения
usart.c
(4.74 КиБ) Скачиваний: 208
Последний раз редактировалось AGman 29 дек 2007, 15:57, всего редактировалось 1 раз.
AGman
 
Сообщения: 8
Зарегистрирован: 28 дек 2007, 21:05

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение $ilent » 29 дек 2007, 10:06

С какими портами? RxD, TxD? Ессесенно - отключать нада UART если работаешь с ними как с обычными портами ввода/вывода.
$ilent
 

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение rig » 29 дек 2007, 10:11

у меня СV мастером по USART выдал такие настройки
Код: Выделить всёРазвернуть
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

твои:
UCSRA=0x00;
UCSRB=0x58;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

и вообще как то все странно, вот прошелся поверхам с помощью мастера, проверь будет работать? в свете НГ гулянок не хочу сам проверять.

usart_my.rar
(1.6 КиБ) Скачиваний: 20
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение AGman » 29 дек 2007, 17:43

$ilent писал(а):С какими портами? RxD, TxD? Ессесенно - отключать нада UART если работаешь с ними как с обычными портами ввода/вывода.

-Вот именно что пишу не в эти пини, и более того что не в тот порт (не в порт D, там пины TX/RX) где они есть. В частности работал с 0 пином порта Б.

$ilent писал(а):твои:
UCSRA=0x00;
UCSRB=0x58;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

и вообще как то все странно, вот прошелся поверхам с помощью мастера, проверь будет работать? в свете НГ гулянок не хочу сам проверять.


И мастером КОДЕ ВИЖИОНа генерировал, и по даташиту смотрел-делал (толку то, один в один). Пардон, UCSRB=0x58 - это был кусок моего эксперимента (надо приложить правильный код). В первом посте прикрепил неправильный файл, а на самом деле делал так:
UCSRA=0x00;
UCSRB=0x98; (вкл RX/TX, вкл прерывания по приему, 8 бит информ туды/сюды ... )
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x05; здесь у меня UBRRL=0x33; (скорость 9600 при частоте тактирования МК 8мГц)

Уважаемые форумчане, кто сможет проверить в железе , проверте ПЖЛСТА. Если подтвердится серийное существование косяка или найдется баг в моих действиях, ПЖЛСТА поделитесь своими размышлениями и/или результатми проверки.

ПС: проверил в железе usart_my.rar прикрепленный выше RIGом (в принципе у меня почти тоже, только пропущенное через мои кривые руки :D ),результат тот же самый блин (в порту нет 1цы все как часы, стоит пин B0 в 1цу поставить -глючит), таже фигня, много символов в ЭХО левые, попадаются на некоторые кнопки правильные ЭХО ответы. Может у меня кристал, левый, или требует кварцевого генератора. А может из-за того что при таких настроках в УАРТС ошибка 0,2%. Хм...

Добавлено спустя 4 часа 26 минут 31 секунду:
Ну вот, не став дожидаться помощи со стороны, достал кварцевый резонатор на 16мГц, два кондера 22пФ и начал колдовать. Решил проверить гепотизу о том что весь каламбур из-за тактирования от внутреннего генератора (можно было бы подкалибровать через регистры, но не знаю как). Все спаял, перепрошил фьюзы, запустил от внешнего кварца. Теперь все как нада работает, порты не влияют на работу УАРТА, по крайней мере на скорости 9600 бод :Yahoo!: .
Тема может быть закрыта! Но уж оч хочется знать почему и как порты могут влиять на УАРТ при нестабильном тактировании. Всеже просьба ко всем интересующимся, попробуйте запустить УАРТ от вн генератора и работать с портами, что у вас получится (какое ЭХО в терминале)? Отпишитесь здесь если не влом. Предоложения о причине возникновения ошибки тож буду рад услышать.
Все же осталась горечь, из-за незнания, почему такая ошибка имела место и как она вообще могла произойти, ведь переферийные устройства откл от шины данных если не с них происходит чтение/запись. Хммм...
Вложения
usart.c
правильный код
(4.74 КиБ) Скачиваний: 191
AGman
 
Сообщения: 8
Зарегистрирован: 28 дек 2007, 21:05

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение rig » 29 дек 2007, 17:58

я делал чтото подобное, отправлял в комп по ком (мах232) данные и заворачивал их обратно, результат выводил на лсд того же МК, ни каких проблем небыло. еще клавка подсоединялась которая требует один порт. вот только сткорость я делал толи 2400 толи 4800, внутренний генератор 8 МГц. ошибок небыло - на экран выводил процент успешных/плохих . может дело в скорости? ЮСАРТ он ведь аппаратно работает, ему пофиг что мк делает.
Останавливать ЮСАРт тоже нет необходимости. При разрешении ТХ/RХ соответствующие выводы портов канфигурируются ках вход/выход и ни чего туда записать невозможно. Сам проверял 8) , даташит тоже самое говорит, я работал с тинькой 2313 глянул на мегу 8ю - тоже самое написано.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение AGman » 31 дек 2007, 14:04

Вот вроде бы во всем и разобрался. Вобщем все моё устройство
питалось от КОМ порта, а у него нагрузочная способность
неважная. Когда описывал проблему, устройсто состояло из:
стабилизатора 5В, MAX232CPE, AMEGA8,и светодиода на PIN0
порта B .Пока работал от внутр RC-генератора, шли косяки УАРТа
при включении светодиода (включал без ограничивающих
резисторов). Стабилизировал кварцем, все заработало хорошо. НО...
Как только я решил запитать от КОМа помимо контроллера 2-ой
LED,инфракрасный приемник (TSOP) и его вывод завести на int0,
ВОЗНИКЛА следующая проблема. Прерывание генерировалось как
попало (рандомом), хотя TSOP даже не выдавал сигнала (опытным
путем понял --- малое напряжение и TSOP даже не запускался). А
уж когда сам контроллер стал сбрасываться (отлаживал через
УАРТ) ... понял надо др источник питания (помощнее).. Взял с УСБ
+5 вольт, теперь никаких косяков. Короче выше описанная
проблема возникала из-зи того, что когда записывал на выход ножки
1-цу (а этот пин был источником напряжения для светодиода), резко
изменялось напряжение питания МК, как следствие частота
тактирования, вот и Глючил УАРТ, ПК то принимал со старой
частотой... Вот ну короче додумывайте сами...
В общем если Вы новичок в микроконтроллерах, советую перед
началом своих экспериментов, навесить на МК Кварц (внешний
генератор), Питать МК исключительно от стабильного источника
(само собой через стабилизатор напряжения) итд итп :Bravo:
AGman
 
Сообщения: 8
Зарегистрирован: 28 дек 2007, 21:05

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение -= Александр =- » 12 янв 2008, 02:48

Вот еще совет: если гонять большие пачки данных - советую использовать правильный кварц: 11.059 или 14.7456 - на 8 и 16 частота постепенно уплывать будет и на каком-то байте выскочит ошибка...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: I/O PORT & UART (Порт забивает УАРТ)

Сообщение Master » 12 янв 2008, 10:37

При 16 МГц на скорости 19200 процент ошибки очень маленький (не 0 конечно).
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8