реклама на сайте
подробности

 
 
> Появилась проблема с COM- ортом при работе с mega16+8МГц кварц.
TechMike
сообщение Jul 30 2008, 10:21
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302



МК подключена через классическую схему на 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
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 24)
Nanobyte
сообщение Jul 30 2008, 14:48
Сообщение #16


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



У меня были похожие грабли, когда полусдохла микросхема формирователя RS232 на матплате ПК. Причём модем работал нормально, а вот AVR910 отказывался. Перепаял формирователь со старой 486-й матплаты, всё заработало.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
TechMike
сообщение Jul 30 2008, 16:13
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302



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


Как определить что сдох формирователь и какой это чип?
мамка еще на гарантии, есть возможность отремонтировать.
Go to the top of the page
 
+Quote Post
fmdost
сообщение Jul 30 2008, 17:02
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(TechMike @ Jul 30 2008, 20:13) *
Как определить что сдох формирователь...

Перемкнуть ножки 2-3 на конце воткнутого шнура. Передать любой короткий текстовый файл через гипертерминал(передача-передать текстовый файл), предарительно сняв галочку аппаратного управлния потоком. Если в окошке терминала ничего не написалоь(ответ) заменить шнурок. Если и потом не работает, или винда или порт сгорел фсётаки. Ищите причину порчи формирователя.
В названии микросхемы формирователя должны быть цифры 232. Микросхему порта без надлежащего опыта заенить проблемно, слишком большая теплопроодность платы, и мелкий шаг.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 30 2008, 17:18
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(TechMike @ Jul 30 2008, 19:13) *
Как определить что сдох формирователь и какой это чип?

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

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

не обязательно, например есть max202.
проще посмотреть куда идут дорожки от разъема, но лучше самому не менять ничего если на гарантии.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jul 31 2008, 04:05
Сообщение #20


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Скачайте PortMon (фриварный), и захватите в лог попытку обмена через порт. Наверняка порт висит в break. Нужна софтина, полностью заполняющая структуру DCB и использующая ее при открытии порта, и чтобы потом она не возвращала порт в исходное состояние.
Как и писали выше, должен помочь снос драйверов порта (с перезагрузкой обязательно после удаления). Либо ищите удачный терминал...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jul 31 2008, 05:26
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



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


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
mandrew
сообщение Jul 31 2008, 06:16
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 28-09-05
Пользователь №: 9 021



Цитата(TechMike @ Jul 30 2008, 17:56) *
Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает.
Шевеление и дергание всей платы тоже не помогло.


Пробовали подключаться к другому компу, может на вашем вышел из строя преобразователь уровней на прием или т.п.
Go to the top of the page
 
+Quote Post
TechMike
сообщение Jul 31 2008, 16:48
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302



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


На TX шнурка 11.25В
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 31 2008, 17:34
Сообщение #24


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

+11.25 или -11.25? (если +11 то - вот она проблема).
Go to the top of the page
 
+Quote Post
TechMike
сообщение Jul 31 2008, 18:47
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302



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


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

ПРИЧИНА НАЙДЕНА, точнее временное решение: После удаление драйвера COM-порта и перезагрузке, где-то минту 7 все работает, потом опять не посылает ничего в порт, и т.д. приходится перезагружаться постоянно.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 06:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016