All streams
Search
Write a publication
Pull to refresh
88
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 пишу… Значит и этот тег тоже выбрать следовало. Разве нет?
Для того, чтобы сделать то, что вы описали — нужно уметь работать с таймером. А пока что у меня не было такого урока. Следующим будет именно он.

Information

Rating
Does not participate
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