Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Появилась проблема с COM- ортом при работе с mega16+8МГц кварц.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
TechMike
МК подключена через классическую схему на MAX232 к COM-порту и с определенного момента, не зависит от прошивки или внешний условий, МК перестает принимать команды по USART, хотя МК данные успешно безошибочно отправляет и в терминале это видно.
Закорачиваю перемычкой RX-TX на шнурке от COM-порта, но в терминали (Hyper Terminal, ZOC и т.д.) все равно не приходит посылаемый символ. Тоже самое делаю после MAX-232, результат тот же, от МК при этом RX-TX отключаю.
Пробовал обрабатывать данные от USART не по прерыванию, а просто в цикле, все равно не возвращает посылаемый с терминала символ.
Пробовал сделать шнурок от ПК как нуль-модем: закоротил ножки на COM-разъеме 1-4-6 и 7-8, остальное, как и было: 2-прием, 3- передача, 5-земля.
Осциллограф вешал на прием, там сигнал от МК есть, а на передачу нет (при наборе символов в терминале).
Пробовал подключить внешний модем, он на все команду откликается и работает без проблем, т.е. порт не горелый.

Настройки порта в windows:
скорость - 9600
биты данных - 8
четность - нет
стоп биты - 1
управление портом - нет

USART у МК сконфигурен также.
Пробовал поставить управление портом - Аппаратное, тоже не помогло.
Что посоветуете еще?

Текс программы WINAVR с прерыванием:
Код
void USART_Init(unsigned int baud )
{
#define UBRRVAL ((F_CPU/(baud*16UL))-1)
//Set baud rate
UBRRL=UBRRVAL;        //low byte
UBRRH=(UBRRVAL>>8);    //high byte
//Set data frame format: asynchronous mode,no parity, 1 stop bit, 8 bit size
UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|    (0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);
//Enable Transmitter and Receiver
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
}

void USART_Send( unsigned int Txt )
{
  while (!(UCSRA&(1<<UDRE))){};
  UDR=Txt;        //send number to USART
}

SIGNAL (SIG_USART_RECV)
{
char status,data;
status=UCSRA;
data=UDR;
led2_test_on;
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
led2_test_off;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
    rx_buffer[rx_wr_index]=data;
    rx_wr_index ++; // инкремент индекса
    if (rx_wr_index == RX_BUFFER_SIZE)
     {
      rx_wr_index=0;
     };
  
    ++rx_counter;
    if (rx_counter == RX_BUFFER_SIZE)
     {
      rx_counter=0;
      rx_buffer_overflow=1;
     };
  
   if (data==13){
   EnterPress=1;
   }
   USART_Send(data);
   };
}
int main(void)
  {
// настраиваем порты(ножки)

DDRB=0b11111110; //делаем выходами все порты PINB кроме 0.
PINB=0b00000001; //выводим на все выходы PORTB 0, кроме 0
PORTB=0b00000001; // и подягиваем на +питания.
//задержка для включения
//dial_nums(DialNumber);

sei(); //разрешаем прерывания глобально
//настраиваем UART
USART_Init(9600);
//настроили UART

while(1)
{ //начало бесконечного цикла
};// конец бесконечного цикла
}// конец main

Без прерывания:
Код
int main(void)
  {
// настраиваем порты(ножки)

DDRB=0b11111110; //делаем выходами все порты PINB кроме 0.
PINB=0b00000001; //выводим на все выходы PORTB 0, кроме 0
PORTB=0b00000001; // и подягиваем на +питания.
//задержка для включения
//dial_nums(DialNumber);

sei(); //разрешаем прерывания глобально
//настраиваем UART
USART_Init(9600);
//настроили UART
while(1)
{ //начало бесконечного цикла
/*for (;;) // Loop forever
   {
      while ((UCSRA & (1 << RXC)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
      ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"
led2_test_on;
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
led2_test_off;
      while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
      UDR = ReceivedByte; // Echo back the received byte back to the computer
   }
};// конец бесконечного цикла
}// конец main
Палыч
Цитата(TechMike @ Jul 30 2008, 13:21) *
Закорачиваю перемычкой RX-TX на шнурке от COM-порта, но в терминали (Hyper Terminal, ZOC и т.д.) все равно не приходит посылаемый символ. Тоже самое делаю после MAX-232, результат тот же, от МК при этом RX-TX отключаю.
AVR тогда тут при чём? Смотрите документацию на терминал или внимательно проверьте шнурок...
defunct
Цитата
Закорачиваю перемычкой RX-TX на шнурке от COM-порта, но в терминали (Hyper Terminal, ZOC и т.д.) все равно не приходит посылаемый символ.

Сталкивался с таким буквально вчера. Подвисла предача со всех COM портов у меня их 4 (при этом прием работал со всех). WinXP SP2. Терминалы разные пускал - бестолку.
Помогла перезагрузка компа. Причину не установил.
MrYuran
Hyper Terminal к тому же такое г...
просто удивительно, как можно испоганить такую простецкую програмку...
defunct
Цитата(MrYuran @ Jul 30 2008, 13:44) *
Hyper Terminal к тому же такое г...
просто удивительно, как можно испоганить такую простецкую програмку...

Нормальный терминал. Лично меня в нем все устраивает, плюс это нативный терминал и есть практически всегда.
AHTOXA
Цитата(TechMike @ Jul 30 2008, 16:21) *
Что посоветуете еще?

Меня смущает задержка в целую секунду после приёма байта (особенно в прерывании). За это время компьютер может передать ещё целую кучу символов.
Может от этого сериальный порт компа и виснет.

Цитата(defunct @ Jul 30 2008, 16:47) *
Нормальный терминал. Лично меня в нем все устраивает, плюс это нативный терминал и есть практически всегда.


+1. Есть недостатки, но не смертельныеsmile.gif
defunct
Цитата(AHTOXA @ Jul 30 2008, 13:49) *
Может от этого сериальный порт компа и виснет.

Нет, компу все равно успеет удаленный девайс принять данные или не успеет.
Виснет скорее всего из-за конфликта драверов на компе.

Кстати COM порты родные или используется плата расширения?
TechMike
Цитата(defunct @ Jul 30 2008, 14:51) *
Нет, компу все равно успеет удаленный девайс принять данные или не успеет.
Виснет скорее всего из-за конфликта драверов на компе.

Кстати COM порты родные или используется плата расширения?



com-порт родной, один на мамке безо всяких плат расширения.
ПК перегружал бесчисленное кол-во раз(винда это любит).
Терминалки пробовал тоже разные, даже в t-mail!

Раз модем работает без проблем с com-портом, думаю что то я в шнурке не то сделал, хотя какоето время, все таки, связь с МК была и стабильная, все работало на ура.

Может распаять шнурок к МК как то иначе?
Сейчас
2-прием, 3- передача, 5-земля.
AHTOXA
Цитата(defunct @ Jul 30 2008, 16:51) *
Нет, компу все равно успеет удаленный девайс принять данные или не успеет.


В принципе да, если без контроля конечно. Но я пару раз наблюдал подобный эффект. Именно с гипертерминалом, и именно когда подсоединённое устройство выдавало эхо. Может гипертерминал что-то хитрит там...
_shef_
У нас было, что слетали дрова на COM порт. Я чуть было не разочаровался в своем девайсе. Не общается и все. Хоть ты тресни. Оказалось что просто слетели дрова. Это было видно в диспетчере устройств.
defunct
Цитата(TechMike @ Jul 30 2008, 13:58) *
Сейчас
2-прием, 3- передача, 5-земля.

Все верно, по-другому никак.
TechMike
Цитата(_shef_ @ Jul 30 2008, 15:26) *
У нас было, что слетали дрова на COM порт. Я чуть было не разочаровался в своем девайсе. Не общается и все. Хоть ты тресни. Оказалось что просто слетели дрова. Это было видно в диспетчере устройств.


Нормально все в дровами, попробую переустановить и накрайняк с ноутбука попробую законектиться, может заработает.
Палыч
Цитата(TechMike @ Jul 30 2008, 13:58) *
Раз модем работает без проблем с com-портом, думаю что то я в шнурке не то сделал, хотя какоето время, все таки, связь с МК была и стабильная, все работало на ура.

Может распаять шнурок к МК как то иначе?
Сейчас
2-прием, 3- передача, 5-земля.
Проверьте: не оторвался ли случайно земляной провод в шнурке. А, то при такой неисправности наблюдаются очень интересные эффекты...
mdmitry
Настройки управления потоком (программные и аппаратные) в терминале убраны? Были грабли из-за настроек терминала.
TechMike
Цитата(mdmitry @ Jul 30 2008, 17:12) *
Настройки управления потоком (программные и аппаратные) в терминале убраны? Были грабли из-за настроек терминала.


Пробовал и ставить Аппаратное управление и убирать его вообще, не помогало. Когда все работало, управление стояло - нет.
Сейчас с любым управление не работает.

Цитата(Палыч @ Jul 30 2008, 15:59) *
Проверьте: не оторвался ли случайно земляной провод в шнурке. А, то при такой неисправности наблюдаются очень интересные эффекты...


Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает.
Шевеление и дергание всей платы тоже не помогло.
Nanobyte
У меня были похожие грабли, когда полусдохла микросхема формирователя RS232 на матплате ПК. Причём модем работал нормально, а вот AVR910 отказывался. Перепаял формирователь со старой 486-й матплаты, всё заработало.
TechMike
Цитата(Nanobyte @ Jul 30 2008, 18:48) *
У меня были похожие грабли, когда полусдохла микросхема формирователя RS232 на матплате ПК. Причём модем работал нормально, а вот AVR910 отказывался. Перепаял формирователь со старой 486-й матплаты, всё заработало.


Как определить что сдох формирователь и какой это чип?
мамка еще на гарантии, есть возможность отремонтировать.
fmdost
Цитата(TechMike @ Jul 30 2008, 20:13) *
Как определить что сдох формирователь...

Перемкнуть ножки 2-3 на конце воткнутого шнура. Передать любой короткий текстовый файл через гипертерминал(передача-передать текстовый файл), предарительно сняв галочку аппаратного управлния потоком. Если в окошке терминала ничего не написалоь(ответ) заменить шнурок. Если и потом не работает, или винда или порт сгорел фсётаки. Ищите причину порчи формирователя.
В названии микросхемы формирователя должны быть цифры 232. Микросхему порта без надлежащего опыта заенить проблемно, слишком большая теплопроодность платы, и мелкий шаг.
defunct
Цитата(TechMike @ Jul 30 2008, 19:13) *
Как определить что сдох формирователь и какой это чип?

Померяйте уровень TX (вывод 3). должен быть в пределах (-7..-15V) если ничего не слать.

Цитата
должны быть цифры 232

не обязательно, например есть max202.
проще посмотреть куда идут дорожки от разъема, но лучше самому не менять ничего если на гарантии.
SysRq
Скачайте PortMon (фриварный), и захватите в лог попытку обмена через порт. Наверняка порт висит в break. Нужна софтина, полностью заполняющая структуру DCB и использующая ее при открытии порта, и чтобы потом она не возвращала порт в исходное состояние.
Как и писали выше, должен помочь снос драйверов порта (с перезагрузкой обязательно после удаления). Либо ищите удачный терминал...
sensor_ua
http://www.serial-port-monitor.com/ это чтобы подсматривать
http://braypp.googlepages.com/terminal это чтобы передавать/принимать

IMNHO, встроенный гипертерминал на мусорник. Но если по функциональности, а не сплошному глюкодрому, он нравится больше брей-терминала, то настоящий производитель - http://www.hilgraeve.com/hyperterminal.html, а не мелкософт - раздавал последнюю бесплатную версию HyperTerminal Private Edition 6.3 (глюков не замечено) фтп://ftp.hilgraeve.com/htpe/htpe63.exe
mandrew
Цитата(TechMike @ Jul 30 2008, 17:56) *
Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает.
Шевеление и дергание всей платы тоже не помогло.


Пробовали подключаться к другому компу, может на вашем вышел из строя преобразователь уровней на прием или т.п.
TechMike
Цитата(defunct @ Jul 30 2008, 21:18) *
Померяйте уровень TX (вывод 3). должен быть в пределах (-7..-15V) если ничего не слать.
не обязательно, например есть max202.
проще посмотреть куда идут дорожки от разъема, но лучше самому не менять ничего если на гарантии.


На TX шнурка 11.25В
defunct
Цитата(TechMike @ Jul 31 2008, 19:48) *
На TX шнурка 11.25В

+11.25 или -11.25? (если +11 то - вот она проблема).
TechMike
Цитата(defunct @ Jul 31 2008, 21:34) *
+11.25 или -11.25? (если +11 то - вот она проблема).


-11.25 относительно земли на том же кабеле.

ПРИЧИНА НАЙДЕНА, точнее временное решение: После удаление драйвера COM-порта и перезагрузке, где-то минту 7 все работает, потом опять не посылает ничего в порт, и т.д. приходится перезагружаться постоянно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.