Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

USART и ADC едновременно на AVR
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2336
Страница 1 от 1

Автор:  iko [ Вто Май 09, 2006 9:22 pm ]
Заглавие:  USART и ADC едновременно на AVR

Здравейте,

Трябва да измервам 3 аналогови сигнала с честота 8000Hz и едновременно да предавам стойностите им (достатъчни са дискретите) като ASCII символи по RS232 средноаритметичната стойност от 8 измервания на всяка 1 ms. Проблемът ми е че цялото предване на данните отнема повече от 1 ms (38400bps, при по-висока не иска да се синхронизира хубаво). Ако спра измерването докато се предава изпускам един период на дискретизация, а иначе променливите ми се променят без да са изпратени старите данни. Въпроса ми е леко принципен как е най-добре да стане ? Използвам ATmega8 на 8Mhz вътрешен осцилатор. Реших да пробвам CodeVision за проекта (ако има значение).

Автор:  Реконструктор [ Сря Май 10, 2006 12:38 am ]
Заглавие: 

Хм, при 38400 предаването на 1 байт отнема 0,2083 ms, или се лъжа?

Автор:  paregov [ Сря Май 10, 2006 11:02 am ]
Заглавие: 

Зависи колко бита предава (колко стоп бита, контрол по четност/нечетност и колко за данни), но все пак е доста под една милисекунда.

Автор:  paregov [ Сря Май 10, 2006 11:06 am ]
Заглавие: 

А съм правил нещо подобно със ATmega128 и нямах никакви проблеми. Вземах данните от АЦП 8000 пъти за секунда обработвам ги и ги предавам по UART. Предаването на данните беше на 112500 защото на по-ниска скорост не можех да предавам всичко необходимо и нямах никакви проблеми.

Автор:  Цецо [ Сря Май 10, 2006 11:31 am ]
Заглавие: 

Ами няма как да предаваш нещо циклично на 1 мс, ако самото предаване е повече от 1мс.

Решението е или да предаваш по бързо, или да предаваш по малко данни.

Защо не можеш на по-висока скорост да предаваш. Проблемите може да са от неправилно подбран кварц или от средата за пренасяне - дълги линии, оптрони или нещо от сорта. Но ако искаш да предаваш тия данни - ще ти се наложи да вдигнеш скоростта.

Автор:  iko [ Сря Май 10, 2006 5:44 pm ]
Заглавие: 

Явно единственото решение да е се вдигне скоростта. Не ставаше на по-висока скорост на редаване, защото използвах вътрешния осцилатор на 8Mhz, а той не се дели точно на стандартните скорости на RS-a и се вдигаше процента на грешка. Днес сложих кварц на 11,0592 MHz и ще го карам така на 57600kbs или по-висока. Сега се появиха едни други проблеми, но те не са за тази тема. Принципно въпроса ми беше какво става, ако докато предавам по сериен интерфейс, процесора се прекъсва по таймерни и АЦП прекъсвания ? Трябва ли да пусна проверката по четност или да забраня прекъсванията по време на предаването ?

Автор:  Цецо [ Сря Май 10, 2006 6:25 pm ]
Заглавие: 

iko написа:
Явно единственото решение да е се вдигне скоростта. Не ставаше на по-висока скорост на редаване, защото използвах вътрешния осцилатор на 8Mhz, а той не се дели точно на стандартните скорости на RS-a и се вдигаше процента на грешка. Днес сложих кварц на 11,0592 MHz и ще го карам така на 57600kbs или по-висока. Сега се появиха едни други проблеми, но те не са за тази тема. Принципно въпроса ми беше какво става, ако докато предавам по сериен интерфейс, процесора се прекъсва по таймерни и АЦП прекъсвания ? Трябва ли да пусна проверката по четност или да забраня прекъсванията по време на предаването ?


1. Веднъж влезли в хардуерната машина на UART-а (т.е като си ги записал в регистъра за изпращане), данните се обслужват без намеса на ядрото. Т.е. прекъсванията не пречат.

2. Проверката по четност няма никакво отношение към т.1. По принцип тая проверка има много спорен ефект и масово се отрича във съвремието. По добре е да има софтуерна защита на база цели пакети. Как ще я организираш - ти си реши.

Автор:  bateAz [ Сря Май 10, 2006 7:23 pm ]
Заглавие: 

На 38400 bps и период на повторение 1 ms работата опира до това колко бита ще предаваш за канал. Реално ще ти стигне с излишък за 8 бита, за 10 няма да ти стигне. Пресметни си пак нещата, за 1 байт / канал работата ти направо спи и не би следвало да имаш никакви проблеми. Организирай си нещата в пакети по 100 - 200 байта, за да се синхронизираш културно отсреща.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/