[identity profile] radist-morse.livejournal.com posting in [community profile] engineering_ru
Цифровой осциллограф с красивым цветным экраном окончатильно вытеснил своего аналогового предка из исследовательских лабораторий. Удобный прибор, позволяющий не только посмотреть форму сигнала, но и измерить многие его параметры, а так же записать картинку на флешку, радует современного инженера.
Вот такую картинку синусоиды частотой 1 МГц рисует бюджетный Тектроникс TDS2022.




Сигнал на него поступает с замечательного генератора другой американской фирмы Аджилент.



Как можно заметить наблюдается полное соответствие показаний частоты и амплитуды на обоих приборах.
Сейчас я включу на генераторе амплитудную модуляцию частотой 400 Гц и глубиной 50%. Хотя этот вид модуляции почти умер в радиовещании, прибор позволяет это сделать.



Смотрим на осциллограф. Вместо картинки АМ из учебника на экране наблюдается очень неравномерное заполнение радиочастотой.



Или, несколько изменив уровень синхронизации, вот так.



Древний аналоговый осциллограф показывает при этом правильную картинку АМ сигнала.



Странность картинки на цифровом приборе вызвана кратностью частоты дискретизации осциллографа и частоты генератора. Если чуть изменить частоту генератора, то ситуация меняется и изображение становится правильным.
Даже вполне хорошие и исправные приборы иногда показывают фигню. И этому есть нормальное объяснение.

А сфотографированный мной С1-55 уже отправился в утиль. RIP.


Date: 2015-05-01 06:54 pm (UTC)
From: [identity profile] tnenergy.livejournal.com
А как вы отличаете микроконтроллер от не микроконтроллера? По каким критериям?

Date: 2015-05-01 07:02 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
наверное наличием виртуальной памяти с аппаратной трансляцией(MMU), пайплайнинга и прочих процессорных наворотов.

Date: 2015-05-01 07:30 pm (UTC)
From: [identity profile] tnenergy.livejournal.com
А вот DMA - это рубеж или нет?

Date: 2015-05-01 07:38 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
DMA чего, имеется ввиду обращение устройств к памяти напрямую или каналы дма какие-то?

Date: 2015-05-01 07:44 pm (UTC)
From: [identity profile] tnenergy.livejournal.com
Имеется в виду возможность периферии заливать данные по назначенным адресам в пространстве памяти контроллера. Есть в кортексах-М, например.

Date: 2015-05-01 07:50 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
да, это прцессорная фишка уже и контроллера баса, арбитратора, и т.д. PCI bus mastering например...
DMA уже не относится к микроконтроллерам... и ваш Cortex-M уже процессор, если не верите посмотрите на сайте.

Date: 2015-05-01 07:51 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
без MMU никакой DMA не возможен, либо мне трудно представить как это может быть реализовано...

Date: 2015-05-01 09:55 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Есть куча МК с DMA без MMU - теже STM32 все.

Разница между микроконтроллером и микропроцессором (по моему мнению) - в первую очередь в периферии - микроконтроллер - содержит микропроцессор + память разных фидов + всякие интерфейсы и т.п.

Date: 2015-05-02 03:41 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
и как синхронизация там работает?

Date: 2015-05-02 03:47 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Подробно никогда не подробно не интересовался этим вопросом и не изучал его глубоко. Если не ошибаюсь, там есть некоторый арбитр шины, который и организует совместную работу DMA.

Вот что референс говорит:
The DMA controller performs direct memory transfer by sharing the system bus with the
Cortex-M0 core. The DMA request may stop the CPU access to the system bus for some
bus cycles, when the CPU and DMA are targeting the same destination (memory or
peripheral). The bus matrix implements round-robin scheduling, thus ensuring at least half
of the system bus bandwidth (both to memory and peripheral) for the CPU.

Date: 2015-05-02 06:29 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
ну тогда это уже не микроконтроллер никакой а полноценный SoC..
и даже шина там есть (AMBA) что в обычных микроконтроллерах отсутствует ( именно протокол доступа, транзакции) а просто имплементированна как набор проводов.

Date: 2015-05-02 06:33 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
http://www.st.com/web/en/catalog/mmc/FM141/SC1169?sc=stm32

Производитель с вами не согласен.
Да и никто не согласен - ни разу не слышал чтобы STM32 называли SoC. Разве что W серия со встроенным радио.

Date: 2015-05-02 06:51 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
да подумаешь что они не согласны... ST стоит особняком насколько я помню.классические микроконтроллеры: PIC, Atmrga, MSP...
они самые популяеные и определяют то, что принято называть микроконтроллером.
если подвесить на AMBA в вашем STM32 контролер памяти то он станет вообще полноценным SoC.
т.е. получается что это тупо урезанная версия ARM SoC.

Date: 2015-05-02 06:58 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Что-то я не уверен, что вышеперечисленные на текущий момент самые популярные(популярнее STM32). Все течет, все изменяется. Впрочем данных сходу не нашел. Даже если это и так, то совсем ненадолго.

Date: 2015-05-02 07:01 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
pic и атмега вместе используются чаще всех остальных вместе взятых... один ардвино чего стоит, их миллионы проданы используются повсеместно.. PIC это втоорй лагерь по величине...
они были и останутся классикой микроконтроллеров..

Date: 2015-05-02 07:05 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Ардуино - платка для хипстеров :)
Пара серийных изделий какой-нибудь крупной фирмы и ардуине такое количество даже и не снилось :)

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-02 07:10 pm (UTC) - Expand

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-02 07:11 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2015-05-02 07:14 pm (UTC) - Expand

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-02 07:15 pm (UTC) - Expand

Date: 2015-05-04 11:55 am (UTC)
From: [identity profile] mike-rocketproj.livejournal.com
ардуины вполне успешно начали вытесняться олимексинами и прочими нуклео.
впрочем, и сама ардуина разродилась ардуиной дуе на кортексе...
если учесть, что STM32F103C4T6A стоит в рознице 140 рублей, а атмега168 - 130 - смысл использовать в новых разработках 8-битники становится очень неочевидным ...

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-04 07:11 pm (UTC) - Expand

(no subject)

From: [identity profile] mike-rocketproj.livejournal.com - Date: 2015-05-05 04:47 am (UTC) - Expand

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-04 07:14 pm (UTC) - Expand

(no subject)

From: [identity profile] mike-rocketproj.livejournal.com - Date: 2015-05-05 05:02 am (UTC) - Expand

(no subject)

From: [identity profile] mike-rocketproj.livejournal.com - Date: 2015-05-05 05:58 am (UTC) - Expand

Date: 2015-05-02 06:10 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
кстати в STM32 DMA именно канальный, что просто ускоряет пеересылку данных. А тут речь шла о DMA который инициируется переферией.

Date: 2015-05-02 06:14 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
В STM32 можно настроить DMA так, чтобы передача инициировалась периферией.

Date: 2015-05-02 06:18 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
приведите код...

Date: 2015-05-02 06:26 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
void dma_usart_rx_init(void){ // DMA CHANEL 3 USART1_RX

RCC->AHBENR |= RCC_AHBENR_DMA1EN;

DMA1_Channel3->CPAR = (uint32_t)&USART1->RDR; // Адрес регистра перефирии
DMA1_Channel3->CMAR = (uint32_t)&modbus.buffer[0]; // Адрес буфера в памяти
DMA1_Channel3->CCR = DMA_CCR_MINC; // Инкремент адреса памяти

dma_usart_rx_reset(); // Сбрасываем количество данных для обмена
}


void dma_usart_rx_stop(void){
DMA1_Channel3->CCR &= ~DMA_CCR_EN;
}

void dma_usart_rx_reset(void){
DMA1_Channel3->CCR &= ~DMA_CCR_EN;
DMA1_Channel3->CNDTR = 257;
DMA1_Channel3->CCR |= DMA_CCR_EN;
}

Да пожалуйста.
Инициализируем DMA, чтобы переписывал данные из USART в память. Все, после этого забываем.
Когда приходит байтик на USART снаружи он сам вызывает DMA и байтик переписывается в память без участия процессора.

Также можно и АЦП+DMA, например, настроить. Один раз настроили, после этого DMA автоматом после каждого измерения АЦП шлет данные в память.

Date: 2015-05-02 06:43 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
и в чем плюс? можно большой буффер получить? в обычном микроконтроллере есть обычно буффер где осуществляется прием данных, который тупо замаплен в память на уровне железа. поскольку реагировать нужно практически на каждый байт, и мало кто шлет километры данных микроконтроллеру то никакой DMA городить и не мужно.
что происходит потом? вызывается прерывание?
кстати в STM32 еще и большие проблемы с производительностью DMA и обычная memcpy его превосходит раза в 4ре.

Date: 2015-05-02 06:53 pm (UTC)
From: [identity profile] alex-avr2.livejournal.com
Ну вот конкретно в данном примере принимается посылка модбас, которая может быть запросто за сотню байт размером. А потом еще и отправляется, с помощью того же DMA. При этом на полный цикл (приняли сотню байт)-(обработали и подготовили ответ)-(отослали сотню байт) - расходуется целое одно прерывание и все.

С АЦП - тоже загляденье - настроил автоматические бесконечные преобразования АЦП и DMA, чтобы писал их прямо по адресу какой-нибудь переменной. Все, после этого момента в переменной всегда актуальное значение с АЦП, без прерываний вообще, про АЦП фактически можно забыть.

Ну про случаи работы с SD картой, например, где надо килобайты и мегабайты переписывать я вообще молчу.

Date: 2015-05-02 06:55 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
SD карта и микроконтроллер??? фигня какая-то..

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2015-05-02 06:59 pm (UTC) - Expand

Date: 2015-05-02 06:58 pm (UTC)
From: [identity profile] vkorehovisback.livejournal.com
сомневаюсь что вы что-то выигрываете...
прерывания не такие дорогие, кроме того содержимое пакетов нужно както декодировать, это проще делать по прерыванию изменяя state machine. пропуская ненужные данные и т.д.
значения с ACP любой нормальный человек сначала усредняет, потом уже использует, что также принято делать с помощью различных running averages...

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2015-05-02 07:04 pm (UTC) - Expand

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-02 07:06 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2015-05-02 07:09 pm (UTC) - Expand

(no subject)

From: [identity profile] vkorehovisback.livejournal.com - Date: 2015-05-02 07:18 pm (UTC) - Expand

(no subject)

From: [identity profile] alex-avr2.livejournal.com - Date: 2015-05-02 07:24 pm (UTC) - Expand

Profile

engineering_ru: (Default)
Инженерия

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122232425 2627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 7th, 2026 02:09 am
Powered by Dreamwidth Studios