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

 
 
> Появилась проблема с 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
 
Start new topic
Ответов
mdmitry
сообщение Jul 30 2008, 13:12
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Настройки управления потоком (программные и аппаратные) в терминале убраны? Были грабли из-за настроек терминала.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
TechMike
сообщение Jul 30 2008, 13:56
Сообщение #3


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

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



Цитата(mdmitry @ Jul 30 2008, 17:12) *
Настройки управления потоком (программные и аппаратные) в терминале убраны? Были грабли из-за настроек терминала.


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

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


Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает.
Шевеление и дергание всей платы тоже не помогло.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TechMike   Появилась проблема с COM- ортом при работе с mega16+8МГц кварц.   Jul 30 2008, 10:21
- - Палыч   Цитата(TechMike @ Jul 30 2008, 13:21) Зак...   Jul 30 2008, 10:38
- - defunct   ЦитатаЗакорачиваю перемычкой RX-TX на шнурке от CO...   Jul 30 2008, 10:41
- - MrYuran   Hyper Terminal к тому же такое г... просто удивите...   Jul 30 2008, 10:44
|- - defunct   Цитата(MrYuran @ Jul 30 2008, 13:44) Hype...   Jul 30 2008, 10:47
- - AHTOXA   Цитата(TechMike @ Jul 30 2008, 16:21) Что...   Jul 30 2008, 10:50
|- - defunct   Цитата(AHTOXA @ Jul 30 2008, 13:49) Может...   Jul 30 2008, 10:51
|- - TechMike   Цитата(defunct @ Jul 30 2008, 14:51) Нет,...   Jul 30 2008, 10:58
||- - defunct   Цитата(TechMike @ Jul 30 2008, 13:58) Сей...   Jul 30 2008, 11:28
||- - Палыч   Цитата(TechMike @ Jul 30 2008, 13:58) Раз...   Jul 30 2008, 11:59
|- - AHTOXA   Цитата(defunct @ Jul 30 2008, 16:51) Нет,...   Jul 30 2008, 11:10
- - _shef_   У нас было, что слетали дрова на COM порт. Я чуть ...   Jul 30 2008, 11:26
|- - TechMike   Цитата(_shef_ @ Jul 30 2008, 15:26) У нас...   Jul 30 2008, 11:48
|- - mandrew   Цитата(TechMike @ Jul 30 2008, 17:56) Уже...   Jul 31 2008, 06:16
- - Nanobyte   У меня были похожие грабли, когда полусдохла микро...   Jul 30 2008, 14:48
|- - TechMike   Цитата(Nanobyte @ Jul 30 2008, 18:48) У м...   Jul 30 2008, 16:13
|- - Т.Достоевский   Цитата(TechMike @ Jul 30 2008, 20:13) Как...   Jul 30 2008, 17:02
|- - defunct   Цитата(TechMike @ Jul 30 2008, 19:13) Как...   Jul 30 2008, 17:18
|- - TechMike   Цитата(defunct @ Jul 30 2008, 21:18) Поме...   Jul 31 2008, 16:48
|- - defunct   Цитата(TechMike @ Jul 31 2008, 19:48) На ...   Jul 31 2008, 17:34
|- - TechMike   Цитата(defunct @ Jul 31 2008, 21:34) +11....   Jul 31 2008, 18:47
- - SysRq   Скачайте PortMon (фриварный), и захватите в лог по...   Jul 31 2008, 04:05
- - sensor_ua   http://www.serial-port-monitor.com/ это чтобы подс...   Jul 31 2008, 05:26


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:05
Рейтинг@Mail.ru


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