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

 
 
> 1 Мбит на USART Atmega128, как добиться большой скорости
DmitryDI
сообщение Mar 4 2010, 12:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 789



Усть вопрос - как добиться скорости 1 Мбит на USART для Atmega128? В соответствии с документацией подключил кварц 16 Мгц - выставил все параметры - установил фуз CKOPT. Добиться скорости 1 Мбит не удалось. на 500 кбит работает с кучей ошибок. 250 кбит - не работает. Стабильно только на 76800. К компьютеру подключен через чип USB to UART Bridge с поддержко USB 2.0
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tcom
сообщение Mar 4 2010, 12:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792



Тактовая частота должна быть кратна скорости обмена по UART.
Есть в ДШ табличка с ошибками.
U2X = 0 и UBRR=0 должно ровняться скорости 1М

А если включить перемычку TX + RX в USB to UART Bridge с поддержкой USB 2.0 то нормально работает?
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Mar 4 2010, 13:09
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(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 ();  
}
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:28
Рейтинг@Mail.ru


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