Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 1 Мбит на USART Atmega128
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
DmitryDI
Усть вопрос - как добиться скорости 1 Мбит на USART для Atmega128? В соответствии с документацией подключил кварц 16 Мгц - выставил все параметры - установил фуз CKOPT. Добиться скорости 1 Мбит не удалось. на 500 кбит работает с кучей ошибок. 250 кбит - не работает. Стабильно только на 76800. К компьютеру подключен через чип USB to UART Bridge с поддержко USB 2.0
aaarrr
Цитата(DmitryDI @ Mar 4 2010, 15:10) *
Усть вопрос - как добиться скорости 1 Мбит на USART для Atmega128?

Надо выяснять, может ли работать переходник на такой нестандартной скорости. Судя по стабильной работе на 76800 - не может. Или неправильно настраивается.
V_N
Покажите код инициализации USART
Tcom
Тактовая частота должна быть кратна скорости обмена по UART.
Есть в ДШ табличка с ошибками.
U2X = 0 и UBRR=0 должно ровняться скорости 1М

А если включить перемычку TX + RX в USB to UART Bridge с поддержкой USB 2.0 то нормально работает?
DmitryDI
Цитата(V_N @ Mar 4 2010, 15:18) *
Покажите код инициализации 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 -х прерываниях от таймеров - может не успевает обработать.
V_N
Инициализация вроде в порядке Запретите все прерывания кроме USART и проверте
MrYuran
Цитата(aaarrr @ Mar 4 2010, 15:17) *
Надо выяснять, может ли работать переходник на такой нестандартной скорости.

Ну это легко посмотреть осцилом.
А ещё стоит посмотреть исходник, как там байты ловятся.
Есть вероятность, что пропуски идут. Хотя, 16х11 тактов вроде должно хватить
VladimirYU
Цитата(Tcom @ Mar 4 2010, 15:19) *
Тактовая частота должна быть кратна скорости обмена по 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
Насколько я помню, ATmega поддерживает только целочисленный коэффициент деления для UART, поэтому для того чтобы работать со стандартными частотами UART-ов необходимо выбирать кварц, который будет делиться точно и без остатка, например 7.3728 МГц, 11.059 Мгц, 14.7486 МГц и т.д.

А из-за Вашего 16 Мгц кварца слишком большая ошибка набегает
MrYuran
Цитата(Yaumen @ Mar 9 2010, 15:37) *
А из-за Вашего 16 Мгц кварца слишком большая ошибка набегает

16М/1М=16
Где остаток, который "набегает"?
Yaumen
MrYuran, действительно я тормознул, привык, что UART-ы используются с корявыми делителями для получения скорости.

Ну а для работы 1 Мбитом могу сказать, что скорость для UART-а очень капризная и требовательная, как к длине кабеля, так и к занятости процессора. Возможно он просто не справляется с обработкой данных, поступающей с такой скоростью через UART. При приеме данных, каждый новый байт будет приходить примерно 1 раз в 10 мкс, поэтому процессор должен быть максимально свободен, чтобы успевать обрабатывать с такой скоростью.
zltigo
Цитата(Yaumen @ Mar 9 2010, 15:58) *
UART-ы используются с корявыми делителями для получения скорости.

Ага, и по этой причине на встречной стороне от USB->UART переходника мегабит не получится. 9216000 например, получится.... Возможность других частот - тут уже надо изучать, как железо конкретного чипа, так и его драйвера,
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.