|
Появилась проблема с 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)  Проверьте: не оторвался ли случайно земляной провод в шнурке. А, то при такой неисправности наблюдаются очень интересные эффекты... Уже прозвонил все что мог в шнурке и в обвязке МК, ничего не отвалилось. Сейчас смонтировано на макетке без паечной, сделал все соединения надежнее(контакты удлинил), все равно не работает. Шевеление и дергание всей платы тоже не помогло.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|