DmitryDI 0 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Усть вопрос - как добиться скорости 1 Мбит на USART для Atmega128? В соответствии с документацией подключил кварц 16 Мгц - выставил все параметры - установил фуз CKOPT. Добиться скорости 1 Мбит не удалось. на 500 кбит работает с кучей ошибок. 250 кбит - не работает. Стабильно только на 76800. К компьютеру подключен через чип USB to UART Bridge с поддержко USB 2.0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Усть вопрос - как добиться скорости 1 Мбит на USART для Atmega128? Надо выяснять, может ли работать переходник на такой нестандартной скорости. Судя по стабильной работе на 76800 - не может. Или неправильно настраивается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasil_Riabko 8 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Покажите код инициализации USART Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tcom 0 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Тактовая частота должна быть кратна скорости обмена по UART. Есть в ДШ табличка с ошибками. U2X = 0 и UBRR=0 должно ровняться скорости 1М А если включить перемычку TX + RX в USB to UART Bridge с поддержкой USB 2.0 то нормально работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryDI 0 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Покажите код инициализации USART // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, Even Parity // USART1 Receiver: On // USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud Rate: 1 000 000 UCSR1A=0x00; UCSR1B=0xD8; // RX и TX включение и прерывания UCSR1C=0x26; UBRR1H=0x00; UBRR1L=0x00; На чипе еще реализованы МЭК-101 и еще куча кода в 2 -х прерываниях от таймеров - может не успевает обработать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasil_Riabko 8 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Инициализация вроде в порядке Запретите все прерывания кроме USART и проверте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 21 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Надо выяснять, может ли работать переходник на такой нестандартной скорости. Ну это легко посмотреть осцилом. А ещё стоит посмотреть исходник, как там байты ловятся. Есть вероятность, что пропуски идут. Хотя, 16х11 тактов вроде должно хватить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба Тактовая частота должна быть кратна скорости обмена по UART. Есть в ДШ табличка с ошибками. U2X = 0 и UBRR=0 должно ровняться скорости 1М А если включить перемычку TX + RX в USB to UART Bridge с поддержкой USB 2.0 то нормально работает? Приммер инициализации USART1 для м128 на 1МГц, работает без ошибок, кварц 16МГц //------------ Инициализация USART1 ----------------------- void MonitorUART :: InitUSART1 (ULONG baudrate, char frame, char stopbits ) { UCSR1B = (1<<RXEN1)|(1<<TXEN1); // Количество стоп битов if ( stopbits == 1) UCSR1C &= ~(1<<USBS1); // 1 bit else UCSR1C |= (1<<USBS1); //2 bit //Устанавливаем фрэйм UCSR1B &= ~(1<<UCSZ12); char tmp = 0; switch (frame) { case 5: tmp = ~(1<<UCSZ10); tmp &= ~(1<<UCSZ11); UCSR1C = tmp; break; case 6: tmp |= (1<<UCSZ10); tmp &= ~(1<<UCSZ11); UCSR1C = tmp; break; case 7: tmp |= (1<<UCSZ11); tmp &= ~(1<<UCSZ10); UCSR1C = tmp; break; case 8: UCSR1C |= (1<<UCSZ10)|(1<<UCSZ11); break; default: UCSR1C |= (1<<UCSZ10)|(1<<UCSZ11); break; } // Скорость обмена UINT ubrr = CPU_F_Hz/ ( 16UL*baudrate) -1; UBRR1L = (char) ubrr; UBRR1H = ubrr>>8; // Разрешаем прерывания RxcIntEnable (); TxcIntEnable (); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yaumen 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба Насколько я помню, ATmega поддерживает только целочисленный коэффициент деления для UART, поэтому для того чтобы работать со стандартными частотами UART-ов необходимо выбирать кварц, который будет делиться точно и без остатка, например 7.3728 МГц, 11.059 Мгц, 14.7486 МГц и т.д. А из-за Вашего 16 Мгц кварца слишком большая ошибка набегает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 21 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба А из-за Вашего 16 Мгц кварца слишком большая ошибка набегает 16М/1М=16 Где остаток, который "набегает"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yaumen 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба MrYuran, действительно я тормознул, привык, что UART-ы используются с корявыми делителями для получения скорости. Ну а для работы 1 Мбитом могу сказать, что скорость для UART-а очень капризная и требовательная, как к длине кабеля, так и к занятости процессора. Возможно он просто не справляется с обработкой данных, поступающей с такой скоростью через UART. При приеме данных, каждый новый байт будет приходить примерно 1 раз в 10 мкс, поэтому процессор должен быть максимально свободен, чтобы успевать обрабатывать с такой скоростью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба UART-ы используются с корявыми делителями для получения скорости. Ага, и по этой причине на встречной стороне от USB->UART переходника мегабит не получится. 9216000 например, получится.... Возможность других частот - тут уже надо изучать, как железо конкретного чипа, так и его драйвера, Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться