Самодельный USB микроскоп

Не то чтобы я старенький стал, просто стали у меня уставать глаза от этой мелочи, я решил собрать микроскоп.
Собрал его из того что было под руками, нашел микроскоп контактный 30-Х сохранившийся у меня с детства, прикрутил к нему WEB камеру, и вот что получилось:
(далее…)

Read More »

Партнерство с магазином инструмента Masteram

После поста про паяльную станцию, видимо увидев поток посетителей, магазин Masteram предложил партнерство.

Контора приличная, тем более я там лично затаривался и все всегда было нормально, да и мне дополнительная копейка с сайта лишней не будет :) В общем, теперь если я буду приводить примеры какого либо оборудования, то буду ссылаться на их каталог, благо там есть что повыбирать. Также на сайте в комментариях и форуме теперь будут обитать их техники-консультанты, так что вопросы можно будет им задавать.

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

Да, чуть не забыл. Работают они по России и Украине без проблем. Насчет Беларуси и стран прибалтики не в курсе, ну, а Казахстану, ИМХО, Китая под боком более чем достаточно :)))))

UPD:
О скидках. Пока мы еще не подняли автоматическую авторизацию пользователя с моего сайта, поэтому при заказае сами сообщайте менеджеру в письме о том, что пришли с easyelectronics.ru. Думаю через неделю-две все доведем до автоматики. Размер скидки около 5%, в зависимости от товара (на дешевый стафф, вроде ручного инструмента, скидка побольше, на дорогой, вроде осциллографов, поменьше, но примерно где то так)

Read More »

Звуковая карта в качестве генератора

DI HALT:
Метод извратский, честно говоря, я бы быстрей собрал на R2R генератор сигнала нужной формы. Но бывает, что то одного нет, то другого, а вот завалявшееся комповое барахло есть почти всегда.

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

Мне нужно было отладить одно устройство на AVR микроконтроллере. Точнее сказать приём данных с АЦП. При сигнал этих данных должен быть ультранизкой частоты, порядка 1 Гц. Как ни странно, получить сигнал такой частоты штатными средствами достаточно сложно. Звуковая карта по выходу имеет фильтры, которые не позволяет пробиться столь низкочастотному сигналу. По сему было предпринято решение модернизировать звуковую карту.

Чтобы не рисковать, было решено реализовать это на внешней звуковой карте. Но данный опыт справедлив и для встроенных звуковых карт, но он достоин джедаев.

На молотке была куплена звуковая карта Sound Blaster Live. После беглого просмотра, стало понятно, что разобраться в схемотехнике 4-х слойной платы без хорошей травы нельзя. Но достаточно очевидно, что все выходные и входные аналоговые сигналы сначала идут на ОУ, а потом уже в ЦАП/АЦП. Ну ОУ нагуглиcь быстро. Затем я обратил внимание на микросхему, в которую ориентировочно приходят все сигналы. Она была вторая по величине. Я вбил маркировку в гугл, и о чудо! Нашёлся даташит!
(далее…)

Read More »

Паяльная станция Pro’sKit SS-217

Решил сменить станцию. Критерии были такие:

  • Стандарт под тип Hakko жал, как самые распространенные в данный момент.
  • Доступность в течении двух недель.
  • Цена до 3.5 тысяч за паяльник. Кому то покажется дорого, но агрегат покупается не на один день, а как минимум на год
  • Надежный бренд. Пощупать по инету не получится, а на фотках они все красивые. Так что бы купил, поставил на стол и забыл про проблемы

Вначале ориенитировался на продукцию фирмы GOOT — довелось мне их щупать, отличные японские агрегаты за вменяемые деньги. Например 80ти ваттная GOOT PX-501 стоит где то 2.5тысячи, обалденный агрегат.

Определился, но тут же уперся в сроки. В наличии в России их не было, а ждать месяца другого мне не хотелось. Поэтому подумал, прикинул и решил взять Pro’sKit SS-217. В принципе, можно было и аналоговую 216ю модель взять, она дешевле, но чет мне захотелось фтыкать в красивые циферки на морде :)

Заказал, дождался… вот оно! Итак что же за радость на меня свалилась:
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 4

Теперь глянем на нашу программу, скомпилим, прошьем, поглядим как выполняется.

Зашиваю все через AVR Prog в Pinboard и смотрю на поведение LED1 и LED2.

LED1 мигает как и задумано, но стоит мне попытаться зажечь LED2 отправкой с терминала «1», как первый диод гаснет. И наоборот — зажженый диод LED2 гаснет вместе с первым. Бага! Причем жирная такая. Рассмотрим откуда она взялась.

Вот код мигания первым диодом:

1
2
3
4
LED_PORT=1< <LED1;
_delay_ms(1000);
LED_PORT=0<<LED1; 
_delay_ms(1000);

А вот код работы с вторым диодом:

1
2
3
4
5
6
switch(UDR)
	{
	case '1': LED_PORT = 1< <LED2; break;
	case '0': LED_PORT = 0<<LED2; break;
	default: break;
	}

Как видишь, тут мы пишем в один и тот же порт, но вот только биты разные. Но нельзя вот так просто через операцию «=» изменить один бит! (только если мы используем битовые поля, о них я расскажу позже). Так что операция идет с целым байтом, и в LED_PORT поочередно записывается число 00100000 (1<<LED2) и 00010000 (1<<LED1), перезаписывая друг друга. Поэтому когда происходит запись одного значения мы теряем прердыдущее. А 0<<LED2 это по факту просто 0, потому что как ноль по байту не двигай нулем он и останется .

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

Как быть? Тут нам помогут битовые маски. Помнишь логические операции AND/OR/NOT/XOR?
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 3

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

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

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

Прерывания можно, а часто необходимо запрещать, чтобы посреди критичного участка не ускакать выполнять невесть что. Запрещать их можно глобально, флагом I в регистре SREG, а можно локально — запрещая источник каждого прерывания индивидуально. По дефолту, при сбросе, все прерывания от устройств запрещены, глобальный флаг тоже сброшен. Включем мы их по мере надобности.

Поскольку прерывание приходит ВНЕЗАПНО, а у нас могут быть несохраненные данные, то обработчик их должен сохранить и при выходе в фоновую программу вернуть все как было.

Впрочем, если бездумно подходить к этому делу, то можно огрести адские хаотичные глюки. Особенно при использовании высокоуровневых языков вроде Си, где вся эта процедура скрыта от глаз программиста и если он не волокет в асме и не понимает работу контроллера на уровне машинных инструкций, то ошибку найти не сможет. Но об этом чуть позже, когда буду расписывать отладку и ошибки.
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 2.

Вторая часть марлезонского балета, точнее введения в программирование на Си под микроконтроллеры.

Структура программы
Ну вот, МК у тебя уже кое что сделал. И хоть внешне ничего не видно, но внутри у него произошли изменения — передатчик стал готов к работе! Пора выдавать очередную порцию информации. Касательно того как вообще пишется программа для МК, не обязательно на Си. На чем угодно.

Компоновка любой программы такая:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Фунцкции 
 {
 }
 
Прерывания
 {
 }
 
main()
{
инициализация;
 
 Главный БЕСКОНЕЧНЫЙ цикл.
   {
    собственно программа 
   }
}

(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 1

Я не раз и не два говорил, что изучение МК надо начинать с ассемблера. Этому был посвящен целый курс на сайте (правда он не очень последовательный, но постепенно я его причесываю до адекватного вида) . Да, это сложно, результат будет не в первый день, но зато ты научишься понимать что происходит у тебя в контроллере. Будешь знать как это работает, а не по обезьяньий копировать чужие исходники и пытаться понять почему оно вдруг перестало работать. Кроме того, Си намного проще натворить быдлокода, который вылезет вилами в самый неподходящий момент.

К сожалению все хотят результат немедленно. Поэтому я решил пойти с другой стороны — сделать обучалку по Си, но с показом его нижнего белья. Хороший программист-эмбеддер всегда крепко держит свою железку за шкварник, не давая ей ни шагу ступить без разрешения. Так что будет вначале Си код, потом то что родил компилятор и как все это работает на самом деле :)

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

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

Дальше все будет разжевано буквально по шагам для старта с полного нуля. (далее…)

Read More »