Pull to refresh
87
0
Вадим Дерябкин @Vadimatorikda

Инженер-программист

Send message
Периферия не всегда банальная. Взять тот же DMA… (Есть в предыдущих статьях). А так — да. Но никто не мешает позвонить в Миландр и договориться о покупке нескольких чипов. Вам еще их и доставят в любую точку страны.
Разработка — да, но на основе Cortex-m3 купленного. Спор на эту тему был в самой первой статье. Можете изучить при желании.
КДПВ была целым видео к предыдущей статье (в первой части). Это, можно сказать, продолжение. Что не влезло в предыдущую (было бы сложно читать их вместе...). Так что КДПВ для обеих в первой.
Вы правы. Имело ввиду, что пока что данного файла нет в комплекте с библиотекой. Он, предполагаю, сейчас дорабатывается. Точной информацией я не владею.
И тут я осознал, что мне необходим Linux… Огромное спасибо автору. Попробую установить, опробовать на второй OS.
Кстати говоря. Пришла такая шальная мысль. А собираетесь ли вы портировать под вашу ос BOINC клиент? Ваша ОС потребляет мало. Так что она бы по КПД выигрывала (я так думаю) у Linux и тем более у Win. В связи с чем задания бы выполнялись с большим КПД.
Если будет достойный САПР, то я перейду на вашу ОС. Под Windows сижу лишь потому, что под него есть нормальные компиляторы (типа keil-а) и САПР (Altium Designer).
По-поводу САПР-а очень интересно. Где можно почитать о нем или даже попробовать?
Это будет сделано в следующей статье) Сейчас просто разбираюсь с SPI и библиотекой конвертером из MP3 или вообще FLAC.
Не знал наверняка. Решил спросить у тех. поддержки.
вообще-то для работы с аудио нужен сигма дельта ацп
его нет в серии 1986ве9х...
1. А в чем палево? Да, мне безумно нравиться эта мелодия… Она ещё всплывет.
2. Мне ЕГЭ через месяц писать) Часть С буду на паскале делать. Он для меня самый простой.
Хорошая работа. Только вот зачем же такие дорогие МК? Тут вполне хватило бы Atmega 8. У меня он работал, управляя оборотами токарного станка. Один дросель и пара конденсаторов на питание и все было хорошо. На мой взгляд плата с Arduino Mega 2560 слишком дорога для подобных устройств. Но если устройство единично, то ничего страшного. Спасибо за статью.
А таймер1 и передача по одному элементу нужна для того, чтобы управляя периодом таймера1 управлять выходной частотой, да?

Да, для этого.
Я к тому, что можно было, наверное, настроить на передачу всего массива точек сразу, и только таймером2 контролировать момент, когда пора запускать выдачу следующего периода? Но тогда частота синуса была бы жестко привязана к тактовой частоте МК…

Да, технически можно обойтись одним таймером, если сгенерировать синусоиду привязанной к частоте. Но это бред… В следующей статье (то, о чем говорю, уже дописано) мы сделаем небольшую функцию, которая будет меняя частоту таймера играть MIDI мелодию (одно голосую). А после покажу способ (сейчас еще выбираю, как будет проще), как сделать выдачу многоголосой музыки без изменения настроек таймера.
Кода не осталось… Пришлось компоновать из статьи. Пока компоновал — удалил код для следующей статьи… Ну да ладно. Все к лучшему. Переписал. Статью дополнил. Пишите об успехах или вопросах, поясню.
Есть массив структур для параметров для ПДП (почему их 64?).

Каждый канал имеет первичную и альтеранативную структуру (того две). Каналов DMA имеет 32 (0..31). На каждый канал по 2 структуры = 64 структуры. Мы используем всего 1 канал и можем оставить только 2 структуры. Остальную память можно использовать по собственному назначению. НО. Каждая структура имеет свой фиксированный адрес со смещением в 1024. К примеру для канала «0» первичная структура может размещаться в 0x20000000 или 0x20000200, 0x20000400 и т.д… Нельзя разместить структуру для третьего канала (если мы используем только третий канал) по адресу 0x20000000. Он обязательно должен быть 0x20000030, или 0x20000230, или 0x20000430 и т.д.
Таймер1 «магически» (в железе) связан с каналом ПДП, и заставляет ДМА (по одному элементу массива синуса за раз?)

Таймер 1 железно (в чипе) связан с DMA. Когда таймер генерирует сигнал — он «производит процедуру арбитража». Иначе говоря, разрешает передачу. В структуре мы указали, что контроллер должен ждать этого разрешения после каждой передачи. Если бы мы хотели передавать, к примеру, по 128 значений, то в структуре нужно было бы указать «производить арбитраж через каждые 128 передач». Тогда бы за один вызов таймера мы бы передавали 128 значений.
Таймер2 генерирует прерывание каждые четверть периода синуса, в прерывании смотрим, прошли ли мы половину периода, и если прошли, переключаем ПДП на альтернативную управляющую структуру.

Не только половину. Мы проверяем, передал ли DMA первую структуру и хотя бы один элемент из следующей. Потому что есть риск, что мы проверим структуру как раз в тот момент, когда ПДП передал последней элемент структуры, но еще не попытался передать элемент из следующей. Тогда мы «восстановим» структуру и в этот же момент ДМА вместе перехода к новой структуре начнет заново передавать все из восстановленной.
Тут такое есть (сказали ниже).
ЗЫ: а почему один из хабов статьи — Objective C?

Я вроде бы на C пишу… Значит и этот тег тоже выбрать следовало. Разве нет?
Для того, чтобы сделать то, что вы описали — нужно уметь работать с таймером. А пока что у меня не было такого урока. Следующим будет именно он.
Для меня, видимо… Ссылку указал. То, что вы описали, будет представлено в следующей статье. Хочется показать сначала реализацию от «что первое приходит на ум» до «как надо».
Он является частью ядра Cortex-M3, если мне не изменяет память.

Вы меня заставили немного усомниться в своих знаниях. Интереса ради пробежался по описаниям всех достоинств Cortex-M3. Нигде не нашел упоминания о том, что DAC — часть ядра. SysTick — да. Везде об этом пишут. Но про DAC не нашел. Да и лично мне не попадался STM32 с DAC (Из тех, что из F100 и F103). Например в самом часто используемом мной STM32F103C8 — нет DAC (сейчас еще раз пересмотрел в описании). А он на Cortex-m3. Делаю вывод — он не часть ядра.

Information

Rating
10,037-th
Location
Красноярск, Красноярский край, Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Embedded Software Engineer
Lead
From 250,000 ₽
C++
STM32
Linux
Circuitry
Python
Assembler
Programming microcontrollers
Embedded system
Software development
Object-oriented design