roboforum.ru

Технический форум по робототехнике.


Не правильный вывод строки USART atmega32

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Не правильный вывод строки USART atmega32

Сообщение grek » 23 июл 2012, 09:17

Добрый день. Очень мучает вопрос по поводу вывода строки atmega 32 по usart. В кратце о работе программы.Подается команда по RS485 на контроллер и контроллер отвечает строкой , по прерыванию скорость 256000. Для записи в буфер используется функция sprintf,а для вывода используется puts. Так вот,запрос проходит нормально, в течении 10 мкс,и ответ до определенного времени тоже идет нормальный.Но через некоторое время происходит сбой,не понятный из-за чего, вместо ответа например 20 символов выводится 10 или другое количество,а потом остальные 10, и в течении двух циклов передач все восстанавливается.При уменьшении времени запроса 1 мкс запрос идет 20 символов ответ идет 25 потом 10 и так пока не стабилизируется на символ конца строки. Код сгенерирован на Codevision.B что только я не делал не как не могу найти в чем причина. Puts выводит массив b[18] массив всегда равен 18, но выводится разное количество символов и в чем проблема так и не понятно.В интернете вычитал, что не надо использовать sprintf и больше не каких решений.Может кто то поборол данную проблему, подскажите что можно попробовать.Код к сожелению выложить не могу.


Код: Выделить всёРазвернуть
12705   0.00000107   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
12706   0.00000037   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12707   0.01191881   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12708   0.00000039   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1203161172   
12709   0.00058559   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
12710   0.01989159   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12711   0.00000067   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12712   0.00000107   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
12713   0.00000038   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12714   0.01088713   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12715   0.00000039   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1203161172   
12716   0.00030734   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
12717   0.02092554   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12718   0.00000077   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12719   0.00000102   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
12720   0.00000039   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12721   0.01089661   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12722   0.00000038   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1203161172   
12723   0.00105721   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
12724   0.00491715   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12725   0.00000073   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12726   0.00000104   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 11: 31000050000   
12727   0.00000039   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12728   0.01592177   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12729   0.00000092   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12730   0.00000100   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 7: 0000d9.   
12731   0.00000034   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12732   0.00993693   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12733   0.00000040   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1203161172   
12734   0.00083158   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
12735   0.00589604   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
12736   0.00000071   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
12737   0.00000102   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.


Код: Выделить всёРазвернуть
223724   0.00000102   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
223725   0.00000036   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223726   0.01092668   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223727   0.00000037   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1204111444   
223728   0.00097475   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
223729   0.00488052   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223730   0.00000070   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223731   0.00000107   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 19: 310000500000000d9.3   
223732   0.00000036   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223733   0.00989389   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223734   0.00000194   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1204111444   
223735   0.00028885   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
223736   0.00486446   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223737   0.00000110   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223738   0.00000207   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 26: 10000500000000d9.310000500   
223739   0.00000034   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223740   0.00988469   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223741   0.00000037   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1204111444   
223742   0.00070895   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
223743   0.00588003   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223744   0.00000077   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223745   0.00000116   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 26: 000000d9.310000500000000d9   
223746   0.00000042   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223747   0.00990908   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223748   0.00000039   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1204111444   
223749   0.00108969   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
223750   0.00589563   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223751   0.00000071   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223752   0.00000104   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 19: .310000500000000d9.   
223753   0.00000036   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223754   0.00891070   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223755   0.00000038   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1204111444   
223756   0.00046550   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
223757   0.00688917   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223758   0.00000071   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223759   0.00000099   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
223760   0.00000035   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
223761   0.00891543   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
223762   0.00000038   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1204111444   
223763   0.00084176   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: Не правильный вывод строки USART atmega32

Сообщение Madf » 23 июл 2012, 10:48

Критические скорости, пропускает данные. Попробуйте уменьшить и понаблюдать. Видимо накапливается так смешения при передачи.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Не правильный вывод строки USART atmega32

Сообщение grek » 23 июл 2012, 11:23

я так понимаю,мнение что данные при запросе не принимаются.А почему иногда ответ больше положенного.Хотя массив вывода всегда равен например 20,даже если выводит 26 значений. А по скоростям, хотелось бы нормальных ответов на этой скорости. При уменьшении все будет совсем по другому,а мне нужна именно эта скорость.При уменьшении времени запроса до 100 мск ошибка почти исчезает.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: Не правильный вывод строки USART atmega32

Сообщение boez » 23 июл 2012, 12:16

И вообще, уменьши код до такого состояния, что сможешь выложить (все секретное выкинь) и выложи.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Не правильный вывод строки USART atmega32

Сообщение grek » 23 июл 2012, 15:41

Хорошо попробую выложить,что возможно.

Добавлено спустя 2 часа 39 минут 6 секунд:
вот что пока могу выложить

вывод строки по прерыванию
Код: Выделить всёРазвернуть
// USART Transmitter buffer
#define TX_BUFFER_SIZE 124
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

#include <delay.h>

#pragma opt-
// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
//   PORTB.5=1;
#asm("cli")
if (tx_counter)
   {
   --tx_counter;
   UDR=tx_buffer[tx_rd_index];
   if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
   } else
     {
      //  delay_us(600);
  //      PORTB_OUT->bit5 = 0;
         // delay_us(150);
         // PORTB.5 = 0;
     };
#asm("sei")
/*if (!tx_counter)
   {
   delay_ms(1);
   PORTD.5=0;
   }*/
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
   {
   tx_buffer[tx_wr_index]=c;
   if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
   ++tx_counter;
   }
else
   UDR=c;
#asm("sei")
}
#pragma used-
#endif

при принятии команды с компа переходит ответ на эту функцию(на нее переходит 100%)

Код: Выделить всёРазвернуть
void vivod(void)
{

   char b[40];
       int a;
     unsigned char c=0;
     unsigned short CYL = (POSITION_CYL/(unsigned short)30);

     if((CYL>999))
     {
        CYL = 0;
     }
     
     sprintf(b, "%c%c%04u%04u%03u%02x", n1, n2, o1, ((unsigned short)(POSITION/(unsigned short)1)), ((unsigned short)CYL), (UCHAR)(STAT.data[0]));
     for (a=0; a<15; a++)
     {   c=c+b[a];
     }
     sprintf(b+15, "%02x", c);
//   #asm("cli")
      PORTB.5 = 1;//разршение передачи RS485
     puts(b);
     delay_us(400);
  //   #asm("sei")
     tx_counter=0;
     PORTB.5 = 0;

}

ошибки в ответе приведены выше
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: Не правильный вывод строки USART atmega32

Сообщение uni » 24 июл 2012, 05:54

1. Непонятно как работают прерывания. Обычно приём ведётся по RXC, а передача по UDRE, то есть когда возникает это прерывание (putchar() должен быть там ). Таким образом развязываются по временной диаграмме приём и передача, кроме того на время приёма можно отключать передатчик, а на время передачи - приёмник.
2. Какой стоит кварц и как настроены UBRR регистры? Какая ошибка на такой скорости?
3. Никаких задержек в ISR быть вообще не должно. Они должны быть спроектированы так, чтобы выполнять по-минимуму действий: передача или приём байта, т.е. работу с буфером и всё.
4. Никаких sprintf() и прочих тяжёлых функций в ISR также быть не должно.

Вообще, я бы рекомендовал посмотреть как пишутся такие вещи в проекте freemodbus, порт для AVR (ATmega168 там).
А в качестве монитора COM-порта использовать Serial Monitor 3.15
Вложения
Serial Monitor 3.15.zip
Serial Monitor 3.15
(3.23 МиБ) Скачиваний: 0
Россия навсегда!
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

Re: Не правильный вывод строки USART atmega32

Сообщение grek » 24 июл 2012, 09:23

А в качестве монитора COM-порта использовать Serial Monitor 3.15


Serial Monitor я использовал,только бесплатную версию.Спасибо за полноценную.И ответ идет в ней точно такой же как приведен выше.

2. Какой стоит кварц и как настроены UBRR регистры? Какая ошибка на такой скорости?

Кварц стоит 16.000 МГц имп. HC-49SM.
Ошибка на скорости составляет 2.1%. Это меня очень волнует,не из-за нее ли все проблемы.
Код: Выделить всёРазвернуть
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
////UBRRL=0x33;
UBRRL=0x03;


3. Никаких задержек в ISR быть вообще не должно. Они должны быть спроектированы так, чтобы выполнять по-минимуму действий: передача или приём байта, т.е. работу с буфером и всё.

задержек по сути нет,код сгенерирован генератором CV.

Никаких sprintf() и прочих тяжёлых функций в ISR также быть не должно.

По идее sprintf() только записывает в массив значение а выводит puts. Точнее putchar и прерывания по txd

Добавлено спустя 14 минут 3 секунды:
Код: Выделить всёРазвернуть
Запрос:24.07.2012 9:22:07.687500064 (+0.0156250000 seconds)

40 33 31 41 46 46 46 46 46 46 30 32 38 39         @31AFFFFFF0289 

Ответ:24.07.2012 9:22:07.687500064 (+0.0000000000 seconds)

33 31 30 30 30 30 35 30 30 30 30 30 30 30 30 64   310000500000000d
39 0A                                             9.             

Запрос:24.07.2012 9:22:07.703125064 (+0.0156250000 seconds)

40 33 31 41 46 46 46 46 46 46 30 32 38 39         @31AFFFFFF0289 

Ответ:24.07.2012 9:22:07.703125064 (+0.0000000000 seconds)

33 31 30 30 30 30 35 30 30 30 30 30 30 30 30 64   310000500000000d
39 0A 33 31 30 30 30 30 35 30                     9.31000050     

Запрос:24.07.2012 9:22:07.718750064 (+0.0156250000 seconds)

40 33 31 41 46 46 46 46 46 46 30 32 38 39         @31AFFFFFF0289 

Ответ:24.07.2012 9:22:07.718750064 (+0.0000000000 seconds)

30 30 30 30 30 30 30 64 39 0A 33 31 30 30 30 30   0000000d9.310000
35 30 30 30 30 30 30                              5000000         

Запрос:24.07.2012 9:22:07.734375064 (+0.0156250000 seconds)

40 33 31 41 46 46 46 46 46 46 30 32 38 39         @31AFFFFFF0289 

Ответ:24.07.2012 9:22:07.734375064 (+0.0000000000 seconds)

30 30 64 39 0A 33 31 30 30 30 30 35 30 30 30 30   00d9.31000050000
30 30 30 30 64 39 0A                              0000d9.         

Запрос:24.07.2012 9:22:07.750000064 (+0.0156250000 seconds)

40 33 31 41 46 46 46 46 46 46 30 32 38 39         @31AFFFFFF0289 

Ответ:24.07.2012 9:22:07.750000064 (+0.0000000000 seconds)

33 31 30 30 30 30 35 30 30 30 30 30 30 30 30 64   310000500000000d
39 0A                                             9.
Последний раз редактировалось grek 24 июл 2012, 09:24, всего редактировалось 1 раз.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: Не правильный вывод строки USART atmega32

Сообщение uni » 24 июл 2012, 09:23

Ошибка на скорости составляет 2.1%. Это меня очень волнует,не из-за нее ли все проблемы.

У вас же что-то там вроде импровизированного CRC есть в конце посылки? Лучше, конечно, использовать нормальную калькуляцию CRC из того же freemodbus'а для проверки достоверности посылки. Так вот разве она не показывает на нарушения в целостности данных? Если бы это были проблемы в передаче отдельных байт во фрейме, то это сразу бы стало ясно.

Вообще же, чтобы не мучится самописными вещами, можно использовать modbus. В элементарном виде он занимает 7 Кб флеша и около 400 байт ОЗУ. Для 32 меги это не так много. Зато можно пересылать фреймы до 252 байт в длину и со всеми проверками, плюс есть стандартные утилиты для работы с ним.

Вот тут есть хорошее описание с примерами: ModBus AVR. Стандарт против протоколов-самоделок
Там в файле: ModBusAVR.rar
Россия навсегда!
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

Re: Не правильный вывод строки USART atmega32

Сообщение grek » 24 июл 2012, 09:46

Калькуляция crc не показывает, что данные потерялись,а в этой команде передается ответ и сама контрольная сумма.На компьютере это обрабатывается,но и хотелось чтоб ответ был нормальный. Может перед посылкой ответа проверять,что отправляю. Может кто подскажет как это делается?

Добавлено спустя 6 минут 52 секунды:
Мне вообще кажется,что почему то пропускается значения конца стоки и из-за этого происходит сбой.

Добавлено спустя 4 минуты 53 секунды:
И перед посылкой тоже проверить наверное не получится ведь я смотрю из скольки знаков состоит массив их например 18, а ответ в это время 26.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: Не правильный вывод строки USART atmega32

Сообщение uni » 24 июл 2012, 09:49

Ещё могут влиять fuse-биты. Не помню точно как в ATmega32, но та тетрада, что отвечает за настройку работы с кварцем может влиять на работу по USART. У меня в примере на modbus тоже на 16 МГц никак не получалось добиться нормальной работы, пока не установил все единички в эти fuses.
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

Re: Не правильный вывод строки USART atmega32

Сообщение Radist » 24 июл 2012, 10:46

Откуда взялась ошибка в 2%? Каждый битик аппаратным уартом делится именно на 16, проверяются три бита в середине. При таком кварце ошибка обязана быть нулевой. И в даташите (смотрим таблицы содержимого регистра скорости) написано, что ошибка нулевая.

2 uni: Слава, получил ли мое сообщение в личку?
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Не правильный вывод строки USART atmega32

Сообщение uni » 24 июл 2012, 10:51

2 Radist: Женя, неа, не получил, а про 250K ты прав, однако.
Аватара пользователя
uni
 
Сообщения: 23
Зарегистрирован: 11 фев 2007, 21:13
Откуда: Екатеринбург
Skype: viacheslavmezentsev
прог. языки: VB6, C++, OPascal, C#, Java, Win32Asm, ...
ФИО: Мезенцев Вячеслав Николаевич

Re: Не правильный вывод строки USART atmega32

Сообщение grek » 24 июл 2012, 13:02

из datasheet 250k 3 0.0% 7 0.0%,
но у меня скорость 256000 и ошибка составляет 2.1%
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: Не правильный вывод строки USART atmega32

Сообщение Romikgy » 24 июл 2012, 13:48

имхо 2% это много ....
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: Не правильный вывод строки USART atmega32

Сообщение grek » 24 июл 2012, 13:56

Попробовал на 250000 , с 0% все тоже самое,ничего не поменялось.
Код: Выделить всёРазвернуть
2   0.05082215   ATerminal.exe   IRP_MJ_CREATE   VCP0   SUCCESS   Options: Open    
3   0.00000166   ATerminal.exe   IOCTL_SERIAL_SET_QUEUE_SIZE   VCP0   SUCCESS   InSize: 1024 OutSize: 1024   
4   0.00000046   ATerminal.exe   IOCTL_SERIAL_GET_BAUD_RATE   VCP0   SUCCESS      
5   0.00000058   ATerminal.exe   IOCTL_SERIAL_GET_LINE_CONTROL   VCP0   SUCCESS      
6   0.00000039   ATerminal.exe   IOCTL_SERIAL_GET_CHARS   VCP0   SUCCESS      
7   0.00000048   ATerminal.exe   IOCTL_SERIAL_GET_HANDFLOW   VCP0   SUCCESS      
8   0.00293270   ATerminal.exe   IOCTL_SERIAL_SET_BAUD_RATE   VCP0   SUCCESS   Rate: 250000   
9   0.00299279   ATerminal.exe   IOCTL_SERIAL_CLR_RTS   VCP0   SUCCESS      
10   0.00298473   ATerminal.exe   IOCTL_SERIAL_CLR_DTR   VCP0   SUCCESS      
11   0.00299220   ATerminal.exe   IOCTL_SERIAL_SET_LINE_CONTROL   VCP0   SUCCESS   StopBits: ERROR Parity: NONE WordLength: 8   
12   0.00000051   ATerminal.exe   IOCTL_SERIAL_SET_CHAR   VCP0   SUCCESS   EOF:dc ERR:0 BRK:0 EVT:0 XON:11 XOFF:13   
13   0.00297699   ATerminal.exe   IOCTL_SERIAL_SET_HANDFLOW   VCP0   SUCCESS   Shake:0 Replace:0 XonLimit:256 XoffLimit:256   
14   0.00000047   ATerminal.exe   IOCTL_SERIAL_SET_TIMEOUTS   VCP0   SUCCESS   RI:-1 RM:0 RC:0 WM:100 WC:1000   
15   0.00221913   ATerminal.exe   IOCTL_SERIAL_SET_WAIT_MASK   VCP0   SUCCESS   Mask: RXCHAR RXFLAG TXEMPTY CTS DSR RLSD BRK

А вот с тем,что конец строки не видит тоже отпадает
Код: Выделить всёРазвернуть
22409   0.00000075   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22410   0.00000109   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
22411   0.00000039   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22412   0.00688747   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22413   0.00000038   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1288951892   
22414   0.00072869   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
22415   0.02489437   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22416   0.00000073   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22417   0.00000106   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
22418   0.00000041   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22419   0.00588408   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22420   0.00000037   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1288951892   
22421   0.00048010   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
22422   0.00989191   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22423   0.00000076   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22424   0.00000107   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 10: 3100005000   
22425   0.00000037   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22426   0.01592500   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22427   0.00000071   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22428   0.00000114   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 8: 00000d9.   
22429   0.00000034   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22430   0.00490007   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22431   0.00000031   ATerminal.exe   IRP_MJ_QUERY_INFORMATION   VCP0   INVALID PARAMETER   -1288951892   
22432   0.00023137   ATerminal.exe   IRP_MJ_WRITE   VCP0   SUCCESS   Length 14: @31AFFFFFF0289   
22433   0.01089595   ATerminal.exe   IOCTL_SERIAL_WAIT_ON_MASK   VCP0   SUCCESS      
22434   0.00000069   ATerminal.exe   IOCTL_SERIAL_GET_COMMSTATUS   VCP0   SUCCESS      
22435   0.00000100   ATerminal.exe   IRP_MJ_READ   VCP0   SUCCESS   Length 18: 310000500000000d9.   
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17