|
Появилась проблема с COM- ортом при работе с mega16+8МГц кварц. |
|
|
|
Jul 30 2008, 10:21
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 30 2008, 10:50
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(TechMike @ Jul 30 2008, 16:21)  Что посоветуете еще? Меня смущает задержка в целую секунду после приёма байта (особенно в прерывании). За это время компьютер может передать ещё целую кучу символов. Может от этого сериальный порт компа и виснет. Цитата(defunct @ Jul 30 2008, 16:47)  Нормальный терминал. Лично меня в нем все устраивает, плюс это нативный терминал и есть практически всегда. +1. Есть недостатки, но не смертельные
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 30 2008, 10:58
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302

|
Цитата(defunct @ Jul 30 2008, 14:51)  Нет, компу все равно успеет удаленный девайс принять данные или не успеет. Виснет скорее всего из-за конфликта драверов на компе.
Кстати COM порты родные или используется плата расширения? com-порт родной, один на мамке безо всяких плат расширения. ПК перегружал бесчисленное кол-во раз(винда это любит). Терминалки пробовал тоже разные, даже в t-mail! Раз модем работает без проблем с com-портом, думаю что то я в шнурке не то сделал, хотя какоето время, все таки, связь с МК была и стабильная, все работало на ура. Может распаять шнурок к МК как то иначе? Сейчас 2-прием, 3- передача, 5-земля.
|
|
|
|
|
Jul 30 2008, 11:26
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 19-05-08
Пользователь №: 37 631

|
У нас было, что слетали дрова на COM порт. Я чуть было не разочаровался в своем девайсе. Не общается и все. Хоть ты тресни. Оказалось что просто слетели дрова. Это было видно в диспетчере устройств.
--------------------
|
|
|
|
|
Jul 30 2008, 11:48
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302

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

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(TechMike @ Jul 30 2008, 13:58)  Раз модем работает без проблем с com-портом, думаю что то я в шнурке не то сделал, хотя какоето время, все таки, связь с МК была и стабильная, все работало на ура.
Может распаять шнурок к МК как то иначе? Сейчас 2-прием, 3- передача, 5-земля. Проверьте: не оторвался ли случайно земляной провод в шнурке. А, то при такой неисправности наблюдаются очень интересные эффекты...
|
|
|
|
|
Jul 30 2008, 13:56
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302

|
Цитата(mdmitry @ Jul 30 2008, 17:12)  Настройки управления потоком (программные и аппаратные) в терминале убраны? Были грабли из-за настроек терминала. Пробовал и ставить Аппаратное управление и убирать его вообще, не помогало. Когда все работало, управление стояло - нет. Сейчас с любым управление не работает. Цитата(Палыч @ Jul 30 2008, 15:59)  Проверьте: не оторвался ли случайно земляной провод в шнурке. А, то при такой неисправности наблюдаются очень интересные эффекты... Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает. Шевеление и дергание всей платы тоже не помогло.
|
|
|
|
|
Jul 30 2008, 16:13
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302

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

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

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

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

|
Цитата(TechMike @ Jul 30 2008, 19:13)  Как определить что сдох формирователь и какой это чип? Померяйте уровень TX (вывод 3). должен быть в пределах (-7..-15V) если ничего не слать. Цитата должны быть цифры 232 не обязательно, например есть max202. проще посмотреть куда идут дорожки от разъема, но лучше самому не менять ничего если на гарантии.
|
|
|
|
|
Jul 31 2008, 05:26
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 31 2008, 06:16
|
Участник

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

|
Цитата(TechMike @ Jul 30 2008, 17:56)  Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает. Шевеление и дергание всей платы тоже не помогло. Пробовали подключаться к другому компу, может на вашем вышел из строя преобразователь уровней на прием или т.п.
|
|
|
|
|
Jul 31 2008, 16:48
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302

|
Цитата(defunct @ Jul 30 2008, 21:18)  Померяйте уровень TX (вывод 3). должен быть в пределах (-7..-15V) если ничего не слать. не обязательно, например есть max202. проще посмотреть куда идут дорожки от разъема, но лучше самому не менять ничего если на гарантии. На TX шнурка 11.25В
|
|
|
|
|
Jul 31 2008, 18:47
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302

|
Цитата(defunct @ Jul 31 2008, 21:34)  +11.25 или -11.25? (если +11 то - вот она проблема). -11.25 относительно земли на том же кабеле. ПРИЧИНА НАЙДЕНА, точнее временное решение: После удаление драйвера COM-порта и перезагрузке, где-то минту 7 все работает, потом опять не посылает ничего в порт, и т.д. приходится перезагружаться постоянно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|