Считаем синус быстро и точно: ч.3 - Практика

Наконец-то переходим к самой важной части — как это вот всё использовать. Здесь я расскажу, как выбрать подходящую комбинацию длины таблицы и степени полинома, как создать эти таблицы и приведу примеры, как посчитать быстро (ну или относительно быстро).
Картинки не будет, не нашёл подходящей…


Читать дальше
  • +6
  • 08 октября 2021, 14:49
  • vix

Считаем синус быстро и точно: ч.2 - Точность вычислений

В этой части наглядно будет показано, как на точность вычислений влияет длина таблицы и размер полинома, а так же будет небольшое сравнение аппроксимаций синуса Полиномами Чебышёва и рядами Маклорена.




Читать дальше
  • +8
  • 08 октября 2021, 14:43
  • vix

Считаем синус быстро и точно: ч.1 - Теория

Хочу поделиться своей статьёй с хабра здесь, думаю пригодится. На хабре всё было одним большим куском, здесь же разобью на несколько статеек.
Поехали!

Если нужно найти синус, или другую тригонометрическую функцию на ПК, это делается просто — в большинство современных процессоров встроен блок для работы с числами с плавающей точкой, который довольно шустро (что совсем не факт) это посчитает.
Если это надо сделать это на МК без плавающей точки — то возникают проблемы. Можно использовать функцию из поставляемой вместе с компилятором библиотеки, будет точно, но очень медленно. Если надо быстрее — то первое, что приходит в голову, заранее посчитать таблицу со значениями, но точность при этом сильно упадёт, и будет зависеть от шага аргумента между смежными значениями. Следующий интуитивно понятный шаг — использовать кусочно-линейную аппроксимацию. Это поможет поднять точность, но несильно. Иногда для достижения нужной точности размер таблицы всё равно превосходит разумные пределы.
Что же тогда делать? Увеличивать степень аппроксимации. Это позволит увеличить точность вычислений и (или) уменьшить размер таблиц. И сделать это совсем несложно.


Читать дальше
  • +2
  • 08 октября 2021, 14:39
  • vix

Практический вебинар «Работа с внешней памятью в STM32H7» (16.09.2021)

Вебинар посвящен особенностям работы высокопроизводительных микроконтроллеров семейства STM32H7.
На вебинаре разберем ключевые особенности линеек STM32H72/3 и проведем практическую работу с оценкой производительности с использованием ускорителей и кэш-буфера при чтении инструкций из внутренней и из зашифрованной внешней памяти. Для отображения результатов будет использоваться программная среда STM32CubeMonitor. Подробнее >>>

Металлизация переходных отверстий печатной платы в домашних условиях

Во первых, это оказалось просто.

Во вторых, зачем? Иногда очень хочется получить печатную плату как можно быстрее. Через 2 часа, ну или завтра и фабричное качество не так важно. В этом случае все делают платы дома. И я делал и делаю. Но каждый раз я понимал, что без металлизации переходных отверстий мне не добиться той же плотности деталей на плате. Контактные площадки под выводные элементы приходится делать больше. Размещать площадки только с задней стороны, что бы не паять деталь с двух сторон. Убирать переходные отверстия из под микросхем. Иначе микросхемы не встанут. Ведь каждое переходное отверстие приходится пропаивать проволочкой. И на это уходит много часов.

Нужна металлизация переходные отверстий! Все окружающие мне 20 лет подряд говорили: это сложно, это не стоит того, ничего не получится и это невозможно.

Я решил, а давай попробую. Ради фана. Если не получится, то я все равно хорошо проведу время. И… получилось. К обычному изготовлению платы в фоторезисте нужно добавить всего 3 этапа.

1 минута — погрузить плату в токопроводящую краску.
1 минуты — отмыть текстолит моющим средством.
45 минут — поместить плату в банку с простым электролитом. Медный купорос, серная кислота и желатин.

Я это сделал и у меня получилось. Поэтому я записал видео. Не ради себя. А что бы передать свой опыт тому, кто хотел бы металлизировать платы дома. Если бы я увидел такое видео, то я бы делал такие платы уже 15 лет назад.



Фоторезист, лазерный принтер и статика (или как извести на говно стопку годной пленки)


Спойлер: нет, речь не про очередной уплотнитель тонера!
Так уж сложилось, что для фоторезиста у меня используется лазерный принтер. Да, немного убегают размеры. Да, изготовление двуслойных плат нередко превращается в квест «совмести несовместимые переходки на отпечатках». Но это всё решаемо, взамен же мы получаем гораздо больший ресурс печати, головки не сохнут, а отпечатки хранятся гораздо дольше (не в пример пленкам с желатиновым слоем для струйных принтеров). Врочем, мы здесь не ради холивора лазерный/струйный принтер, а скорее вот за этим (см. КДПВ ниже).



Знакомо? Тогда добро пожаловать под кат.

Читать дальше

Преобразователь 7-сегментного индикаторного кода в BCD-DEC на GAL16V8. Одинарная и сдвоенная версии.

  В номенклатуре TTL микросхем существует готовый преобразователь с такой функциональностью, это 74915 — 7 Segment to BCD converter. К сожалению это такая редкость, что найти и купить этот чип сложно и дорого.


Читать дальше
  • +3
  • 01 сентября 2021, 18:19
  • anakost
  • 1

LoRa SX1268 E22400-M22S запуск, настройка на максимальную дальность

Хочу поделиться информацией, которую в интернете не нашёл.

Затеяля я тут апгрейд радиоканала своей автосингализации.
До этого был на MRF49 плюс усилители от BLAZE с VTRP, потом (на данный момент) SI4432.
В обоих случаях 400 метров в прямой (ну или почти прямой) видимости. Разница только
в количестве SMD обвеса на плате. Разница, правда радикальная.

Услышал/увидел про LoRa в интернете. Погуглил цены, датшиты. Купил на Али E22400-M22S.
Что то около 500 рублей за штуку. Сбацал два модуля. Рулит трансивером ATtiny84A,
питание от двух АА (3в). Одна антенна — провод 17см, вторая — спираль 5x30мм 20 витков.


Тут и началось… :)
При чтении датшита — трудности перевода… Набор глюков и заплаток… :)
При гуглении — сплошные LoRa + Arduino. «Подключаем библиотеку, и радуемся...»
А я, видите ли, заскорузлый ассемблерщик :) Ну «не вштыривает» (1+1 смотрели?) меня этот C.
Даже в виде Arduino. Ну не нашёл ничего. Может плохо искал…
Короче методом проб нашёл последовательность «запуска» SX1268.
Мож кому пригодится. Я ж искал :)

Настройка трансивера после включения питания:
RESET_SX1268
SetStandby,RC
SetRegulatorMode,1
SetDIO3AsTCXO
SetStandby,XOSC
SetDIO2AsRfSwitchCtrl,1
SetRxTxFallbackMode,$30
SetBufferBaseAddress,$80,$00
SetRfFreqensy,490
SetPacketType,LORA
SetDioIrqParams,$3FF,0,0,0 преывания пока не используем, просто ждём RxDone или TxDone
//
ограничтель тока
$08E7->address
$38->data
WRITE_REG
//
усилитель приёма
$08AC->address
$96->data
WRITE_REG
//
SetPaConfig,4,7,0,1
SetTxParams,$16,0
SetModulationParams,7,BW_10,1,1
SetPacketParams,30,1,9,0,0

Приём:
ClearIrqStatus
SetRx(0)
GetIrqStatus — ждём RxDone (не ненуля IRQ, как я сдуру, а RxDone=1)
ReadBuffer

Передача:
WriteBuffer
REG_0889 (стр.101 датшита)
ClearIrqStatus
SetTx(0)
GetIrqStatus — ждём TxDone

Это что то вроде скрина с программы сделанной в Algorithm Builder.
Последовательность команд, и конкретные цифры настроек, я думаю понятны.
Это как раз то, что я не нашёл.

REG_0889 — одна из «заплаток» датшита.
Ещё там есть обязательная последовательность для настройки приёмника:
SetPacketType(...)
SetModulationParams(...)
SetPacketParams(...)
У меня она соблюдена.
Но в датшите нет про последовательность
SetPaConfig(...)
SetTxParams(...)
Если поменять местами — глюк.

Вроде всё.
Да. Дальность с этими настройками 7км.
Поставил блок с 17см антенной на подоконник (антенна как раз над рамой) одноэтажного дома и поехал.
В машине с собой блок со спиральной антенной. Одноэтажная застройка посёлка. По пути пригорки,
первый в двух километрах. За ними связь пропадала. На макушках восстанавливалась.

Собственно настройки, влияющие на дальность/скорость передачи вот:
SetRfFreqensy,490
//
SetPaConfig,4,7,0,1
SetTxParams,$16,0
//
SetModulationParams,7,BW_10,1,1
SetPacketParams,30,1,9,0,0

SetRfFreqensy,490
несущая вроде как сама по себе, но для моих конкретных E22 490Мгц много лучше оказалось чем 433Мгц

SetPaConfig,4,7,0,1
SetTxParams,$16,0
тут просто максимум мощности — 22дб

SetModulationParams,7,BW_10,1,1
SetPacketParams,30,1,9,0,0
а вот тут необъятное поле для экспериментов
в основном SF(7) и BW(10) в SetModulationParams
Увеличение SF снижает скорость и увеличивает дальность.
Уменьшение BW снижает скорость и увеличивает дальность.

Вся наша жисть — поиск компромиссов… :)
  • +2
  • 31 августа 2021, 06:55
  • PANYTA

Аудио-DSP из говна и палок: MSP34x0G, 34x1G, 34x5G

Предисловие
Досталась на днях плата от старого телевизора. Моё внимание привлекла микросхема в корпусе SDIP52, под которой на
шелкографии были надписи связанные со звуком.
Странно, но по запросу «MSP3410G AVR» результата не было. А
значит, прийдется разбираться самому.

Характеристики:

MSP34x0G:

  • 2 цифровых I2S входа(16/32 бит 32 КГц)
  • 1 I2S выход, 3 или 4 стерео входа с программируемым предусилением (зависит от корпуса)
  • 1 моно вход
  • 2 выхода, позиционирующихся для наушников и динамиков
  • У обоих есть:
    • настройка громкости в дб(-114 — +12)
    • настройка баланса в линейном и логарифмическом режиме
    • настройки НЧ/ВЧ(в канале динамиков можно использовать пятиполосный эквалайзер)
  • Программируемый выход для сабвуфера
  • Детектор quasi-peak с помощью которого можно сделать индикатор уровня громкости
MSP34x1G отличается также наличием режима dolby prologic.
MSP34x5G теряет один стерео выход и эквалайзер на канале динамиков(настройка НЧ/ВЧ остается). Выхода для
сабвуфера также нет.


Подключение и управление
Управляется процессор по интерфейсу I2C с максимальной скоростью 1 МГц. Управление стандартное для подобных
микросхем:
адрес устройства, бит R/W, субадрес, два байта адреса и два байта данных. Но есть одна заминка, которая не
страшна если использовать в качестве управляющего какой-нибудь AVR с аппаратным I2C. Дело в том, что после получения
адреса микросхема на 1-1.5мс прижимает SCL и только потом выдает ACK. При использовании софтверного мастера это надо
учитывать.

Монтаж
Так как плату делать не хотелось, собрал схему навесным монтажом и подключил к arduino, чтобы проверить возможности
и работоспособность(готовый проект будет на atmega8).


Особенности
После сборки заметил несколько интересных особенностей:
  1. Если не дернуть RESET микросхемы, на I2C она не определяется и ACK не дает.
  2. Вместо 8 вольт можно подавать 5, возможно только снизится громкость.

  3. Усилитель на TDA7255 начинает свистеть, при уменьшении громкости свистит меньше, при этом дешевый на PAM8403
    играет без сильных шумов.
  4. Нагрев микросхемы не страшен.

Послесловие
Статья, конечно, получилась маленькой, зато я рассказал о том, что можно найти в старом ТВ и куда-нибудь применить.
Если будет интересно, могу выложить свою библиотеку для данных серий.

Умная баня!

AVR
У тестя на даче есть баня это отдельно стоящие здание на крыше которого бак. Насос стоит отдельно на расстояние 100м. Т.к. люди уже старые и часто забывают то воду включить то отключить то тен. Сами понимаете тен без воды… или вода через край… Решено было автоматизировать данную проблему. Врезали концевики герконовые в бак, терморезистор, заказал чехол для термопары из нержавейки (на тен смахивает) и вставил в него терморезистор. Заказал из поднебесной терморегулятор за 500 р. и регулятор уровня, бп 12в какой то китай. Собрал все. Релюхи взял от автоматизации станков 10А.


Читать дальше