Неочевидная схемотехника: часть вторая. Сопротивление небесполезно

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


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

Неочевидная схемотехника: часть первая. О кусках и эхе.

Для многих слово «СВЧ» означает не только микроволновую печку. Кто-то вспоминает спутниковую связь и вайфай. Но я постоянно вижу, что люди боятся работать с частотами выше нескольких сотен мегагерц. Слышу возгласы «да ты чтоо! Это ж свч, там все по-другому!» Не спорю, на некоторые моменты я до сих пор смотрю как на колдовство, по ходу обучения что-то меня очень сильно удивляло. Решил я наконец поделиться своими знаниями и примерами, мысли зрели с первого курса, то есть четыре года уже этим мыслям.


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

SPI (программный). Память Atmel DataFlash AT45DB081D.

Немного теории с просторов интернета.

SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, разработанный компанией Motorola для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.

SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (процессором, контроллером). Принимающая (ведомая) периферия синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (англ. chip select) на ведомой микросхеме. Периферия, не выбранная контроллером, не принимает участия в передаче по SPI.





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

Схемотехника: Типовые схемы включения Биполярных транзисторов (ОЭ, ОБ, ОК)

Я новичок в схемотехнике, сейчас вдумчиво изучаю цикл статей «Основы на пальцах». И мне также хочется разобраться с особенностями разных каскадов включения биполярных транзисторов (ОЭ, ОБ, ОК). Поэтому, для прояснения, решил промоделировать их в Proteus: «Bipolar transistor cascades modelling (Proteus 7.7).zip»


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

Криптография для эмбеддера. Введение в ассиметричные алгоритмы.



У меня в черновиках «завалялась» небольшая статья по ассиметричной криптографии. Статья коллеги a9d приводит пример использования «модульной арифметики», (правда в другом ключе) но не объясняет «как это работает». Т. к. коллега запретил комментарии к своей статье (ИМХО, зря, в комментариях самое вкусное), я позволю себе опубликовать данную недоработанную статью.


В последнее время в сообществе возрос интерес к вопросам криптографической защиты информации и я решил написать небольшую статью (вернее продолжить предыдущую).



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

Асимметричное шифрование. RSA это очень просто.

Раньше я уже искал либы для микроконтроллера с реализацией Асимметричное шифрования, но ничего путевого не нашел. Я делал главную ошибку. Я искал в рунете! Я постоянно натыкался на посты где трындели, что это очень сложно и микроконтроллер не потянет. Так вот, это П***шь и его потянет даже avr.

И бла бла бла. В общем первые же поиски на англоязычных сайтах увенчались успехом.


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

Расчет среднего и среднеквадратичного значений тока/напряжения

.
.
Вот здесь есть расширенный и углубленный вариант данной заметки
.
.

Будучи в очень недавнем прошлом яростным разработчиком всевозможных импульсных источников питания, интересовался всяким по данной теме. В частности – вычислением среднего (AVG, Average) и среднеквадратичного (действующего, эффективного, RMS) значений напряжений и (особенно) токов, живущих в разрабатываемом источнике. Для тех, кто не помнит/не знает – напомню определение среднеквадратичного значения тока/напряжения из Википедии:

Действующим (эффективным) значением силы переменного тока называют величину постоянного тока, действие которого произведёт такую же работу (тепловой или электродинамический эффект), что и рассматриваемый переменный ток за время одного периода. В современной литературе чаще используется математическое определение этой величины — среднеквадратичное значение силы переменного тока

Посему, хочешь узнать статические потери на ключе флайбэка – будь добр посчитать среднеквадратичное значение тока первички. Надо узнать мощность токосчитывающего резистора – туда же. И про выпрямители во вторичной цепи – та же песня. Даже потери (и приблизительный нагрев) в обмотках трансов и дросселей для хиленьких источников и невысоких частот преобразования в первом приближении можно посчитать при помощи среднеквадратичного значения тока, через эти обмотки протекающего.

Или, например, делаем могучий источник с высоким КПД. Чтобы оптимально спроектировать обмотку магнитного элемента требуются уже среднее значение тока и среднеквадратичное значение переменной составляющей. В общем – куда ни плюнь, везде фигурируют RMS и AVG (среднее значение, а не антивирус, это важно). Поэтому было принято решение сделать себе некий инструмент, упрощающий жизнь разработчика импульсных источников питания. Вот этим инструментом я и хочу поделиться с общественностью – вдруг кому пригодится.





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

Быстрое Преобразование Фурье, java

Решил я вплотную подступиться к Цифровой Обработке Сигналов.
Достаточно долгое время не мог понять, как реализовать алгоритм БПФ. Математика была понятна, но просмотрев готовые решения, понять как они работают не удавалось. На какое-то время необходимость в этом отпала, а потом снова появилась.
Ко второму заходу опыта программирования стало уже немного большое, и, наверно, поэтому мне удалось самому написать программу, выполняющую БПФ на java (код без особого труда можно портировать на C++ или C).
Я не буду выводить основные формулы и доказывать, что они верны — с этим справляются на многих сайтах и во многих книжках (по крайней мере лично у меня это не вызвало трудностей).
Основные формулы1

Я просто расскажу о том, как пользуясь этими формулами я писал саму программу, с какими трудностями столкнулся и как их преодолел.
Статья, по сути предназначена для тех кто:
1. Прочитал и понял математику, стоящую за БПФ.
2. Понял алгоритм бит-реверса.
3. Понял почему граф преобразования выглядит именно так

Первое, что я сделал — поставил основную задачу «Разработать программу быстрого преобразования Фурье на java». Затем приступил ко второму этапу: сбору информации. Прочитав доказательства и поняв математику, стоявшую за алгоритмом, я понял, следующие вещи:
1. Алгоритм можно спроектировать пользуясь парадигмой Divide and Conquer.
2. В данной парадигме задачу можно решить рекурсивно или итеративно.
Рекурсивный подход, как мне кажется, в какой-то мере проще в написании и понимании, но приведет к некоторым потерям в скорости из-за вложенных вызовов методов (функций).

Напомню или расскажу тем, кто не в курсе, что парадигма Divide and Conquer (Разделяй и Властвуй) сводится к трем общим этапам.
1. Этап разделения задачи на более простые задачи меньшего размера.
2. Этап решения всех этих задач.
3. Этап объединения результатов всех меньших задач в общий результат.

БПФ же можно разбить на три основных этапа:

1. Перестановка входных отсчетов (значений в массиве). Почему это нужно много рассказывать не буду, но в общем, как я понял, это позволяет сэкономить память, т.к. в таком случае не требуется массив для хранения промежуточных результатов и в целом упрощает написание программы.
2. БПФ основано на том факте, что если N = 2^n (т.е. 1,2,4,...,1024...2^n), то N-точечное ДПФ (т.е. количество отсчетов исходных данных равно числу n) можно разбить на два ДПФ размером вдвое меньше (2^(n-1)). В этом и заключается второй этап парадигмы. Мы разбиваем ДПФ, пока не приходим к базовому случаю — ДПФ от двух отсчетов, которое сводится к сложению и вычитанию двух элементов массива.
3. Объединение результатов каждого из разбиений.

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

i — целое число, в котором надо переставить t-битов.

private static int reverse(int i, int t) {
		// TODO Auto-generated method stub
	    int Shift = t - 1;
	    int LowMask = 1;
	    int HighMask = 1 << Shift;
	    int R;
	    for(R = 0; Shift >= 0; LowMask <<= 1, HighMask >>= 1, Shift -= 2)
	        R |= ((i & LowMask) << Shift) | ((i & HighMask) >> Shift);
	    return R;
	}


А это, собственно, перестановка значений.

for(int i = 1; i < Nmax-1; i++)
		{
		    int J = reverse(i,powerOfTwo);           // reverse ����������� ���� � I � �������� �������
		    if (i >= J)                     // ���������� ��� ��������������
		    	continue;
		    double S = array[i]; array[i] = array[J]; array[J] = S;  // ������������ ��������� xI � xJ
		}


Т.е. здесь мы берем число i, переставляя в нем биты, получаем число J. i и J — это индексы двух элементов массива, которые нужно поменять местами. Ну и меняем их местами. Повторяем эту процедуру пока не пройдемся по всем элеметам массива, т.е. пока i не станет больше или равно Nmax-1.

А дальше начинается самое интересное.

*************************************************************
Статья пока недописана, но публикую, т.к. интересуют комментарии. О чем написать подробнее, что может вызывать вопросы и пр. Любые мнения и помощь приветствуются!

Raspberry Pi. Работаем с I2C на Python

Наконец-то появилось немного свободного времени и я решил более тщательно поковырять порты GPIO у Raspberry Pi. Если хочется просто подрыгать ногами, помигать светодиодами или пообмениваться данными через уарт, то это достаточно просто и в сети полно мануалов, хотя если кому надо, пишите, проведу небольшой ликбез. Я же решил сразу поиграться с шиной I2C и подключить к Raspberry Pi микромеханический трехосный акселерометр MMA7455 (в свое время купил на ебее уже распаянный на платке с выведенными нужными ногами на штыри, цена вопроса 7-10 баксов).


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

AT91SAM7S для управления станком и сервомашинками с компьютера

Когда-то я сделал маленькую платку на AT91SAM7S. Цели было две: управление станочком PLRA4 и управление простенькими роботами на сервомашинках.
Сначала немного результатов:

Гравировка по плитке
Гравировка по керамической плитке с помощью обычной (ударной ;) дрели и сверла по керамике.


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