forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Микроэлектроника (http://forum.boolean.name/forumdisplay.php?f=175)
-   -   Arduino (http://forum.boolean.name/showthread.php?t=20542)

Phantom 11.01.2017 18:12

Arduino
 
Я тоже ненавижу паять, поэтому большую часть времени делаю так:


EvilOkta 13.01.2017 00:10

Ответ: Статика
 
О! Ардуинщикам привет =) потом покажу кому интересно, что у меня получилось ))

impersonalis 16.01.2017 15:10

Ответ: Статика
 
Цитата:

Сообщение от Phantom (Сообщение 311321)
Я тоже ненавижу паять, поэтому большую часть времени делаю так:


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

По теме: а что насчёт флешек, внешних HDD?

EvilOkta 16.01.2017 16:54

Ответ: Статика
 
Цитата:

Сообщение от impersonalis (Сообщение 311392)
Н Кстати, arduino как-то защищён от возможности считать прошивку с готового устройства и реверсировать её?

вроде есть возможность извлечь .HEX а потом дизасемблировать, но это изврат ИМХО

impersonalis 17.01.2017 13:30

Ответ: Статика
 
Получается, что после заливики программа будет выполняться всегда при наличии питания. Таким образом, чтобы "успокоить" подключённую плату нужно залить "пустышку" или есть кнопка стенд-бай?

EvilOkta 17.01.2017 14:27

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

St_AnGer 17.01.2017 15:41

Ответ: Статика
 
Ну, на AVR (да и многих других МК, возможно на всех) есть ножка Reset. Дёргая её можно перезагружать МК, а если просто подать постоянную логическую единицу - МК по факту будет в состоянии недо-stand-by. Но лучше программно повесить одну ножку на кнопку и этой кнопкой основную часть программы включать/выключать.

Phantom 17.01.2017 20:01

Ответ: Статика
 
Большинство моих поделок дальше макетки не уходят.
Платы нигде не заказываю и не травлю, если чо-то и паяю, то вот на таких макетках:



Можно залочить кристал, чтобы прошивку нельзя было считать, но я никогда этого не делал, потому что не было такой нужды. Про реализации USB хоста я не слышал, да и USB флешки никто в здравом уме подключать не будет, а вот SD карты без проблем, но опять же без аппаратной поддержки (реализуется программно путём дёрганья ног по специальному протоколу).Ну точнее, есть аппаратный SPI, который обычно и используют для подключения к SD картам, но он отвечает лишь за отправку и приём одного байта по проводам, а сам протокол реализуется программно. Но ничто не мешает и SPI сделать программно (многие, я в том числе, делают так на микроконтроллере ATtiny85, у которого нет аппаратного SPI).

Прошивки пишу на чистом Си, ардуиновские среду и либы не использую.

Программа, если писать на Си, выполняется как обычно, точка входа - функция main, как только она закончилась, контроллер перестаёт что-либо делать (ну кроме прерываний, наверно). Прерывания - это что-то вроде отдельных функций, которые вызываются по определённому событию. То есть если сейчас выполнялся основной поток программы, то он останавливается на текущей инструкции, выполняется прерывание, а потом программа продолжает выполнение с того момента, где остановилась. Нужно постоянно следить за атомарностью и отключать прерывания во время выполнения операций, для которых важна целостность. Если где-то в основном потоке программы делаем counter++; и в то же время где-то в прерывании есть counter = 0; то всё обязательно в какой-то непредсказуемый момент пойдёт не так, потому что инкремент занимает несколько инструкций процессора и прерывание может вклиниться где-то между ними.

Прерывания есть разные, например: через каждые N тактов процессора, приём байта по SPI или UART, при смене логического уровня на ножке (повесь туда кнопку и будешь иметь событие нажатия этой кнопки, которое мгновенно реагирует). Впрочем кнопки обычно обрабатывают в основном цикле программы, потому что кнопки часто объединяют в матрицы (как в клавиатурах) и нужно производить их опрос.

mr.DIMAS 17.01.2017 21:46

Ответ: Статика
 
Кстати реверс прошивки их HEX несложен, ибо инструкций у МК немного и алгоритмы там обычно применяются достаточно простые.

Есть еще один подводный камень с питанием МК. Если плавно снижать питание (например подключив к параллельно кондесатор на 2000 мкФ), то при достижении некоторого напряжения МК не может быть в каком-то определенном состоянии и начинает рандомно выполнять инструкции, иногда дело доходит до того, что повреждается прошивка. Я сам с этим столкнулся несколько раз. Теперь использую схему со стабилизатором напряжения (7805) и парочкой керамических конденсаторов маленькой емкости (1-2 мкФ) - это обеспечивает резкое выключение питания процессора при пропадании напряжения на входе стабилизатора.

Phantom 18.01.2017 00:35

Ответ: Статика
 
Офигеть, не сталкивался с таким. У меня пока только у одной ATtiny85 ножка сгорела.

impersonalis 18.01.2017 12:31

Ответ: Статика
 
Цитата:

Сообщение от Phantom (Сообщение 311434)
Большинство моих поделок дальше макетки не уходят.
Платы нигде не заказываю и не травлю, если чо-то и паяю, то вот на таких макетках:

Можно подробнее? Ссылку?

Цитата:

Сообщение от Phantom (Сообщение 311434)
Нужно постоянно следить за атомарностью и отключать прерывания во время выполнения операций, для которых важна целостность. Если где-то в основном потоке программы делаем counter++; и в то же время где-то в прерывании есть counter = 0;

Ну это знакомо. Это понятно. Тут эдакая "блокирующая многопоточность" получается? (Основной поток прерывается, вторичным, но никогда не выполняется одновременно с ним.) Таким образом из примитивов синхронизации - просто нативные переменные-флаги?

Цитата:

Сообщение от mr.DIMAS (Сообщение 311438)
Есть еще один подводный камень с питанием МК.

Я так понимаю - у того же Arduino и прочих каузальных интерфейсных плат всё уже сделано из коробки?

mr.DIMAS 18.01.2017 13:36

Ответ: Статика
 
Вроде бы там уже есть на плате стабилизатор.

Кстати, платы делать не столько сложно, сколько долго. Сначала рисуешь плату в Sprint Layout, потом печатаешь на лазерном принтере, подготавливаешь текстолит (пошкурить нулевкой, прокипятить в воде со стиральным порошком для обезжиривания). Далее переводишь рисунок на плату утюгом, потом начинаешь химичить по вкусу - хлорид железа (III) или персульфат аммония или лимонная кислота + соль + перекись. Медь травится довольно медленно, поэтому надо подогревать раствор и постоянно перемешивать его. Потом идет сверление отверстий, залуживание платы, и наконец пайка деталей. В итоге только на технологическую часть уходит около двух часов при наличии опыта, а на рисование платы в несколько раз больше (в зависимости от сложности, конечно). Так что да, макетка с пятачками это выход, но собранное устройство выглядит как правило неказисто.

Phantom 19.01.2017 07:41

Ответ: Статика
 
Отвечаю на вопросы Импера.

Вот смотри: Сборка на макетной плате разной степени убогости.

В своё время, когда жил с родителями, купил лазерный принтер с задумкой, что может буду травить платы, но на то время это были только идеи, на деле я электроникой почти не занимался. Сейчас у меня принтера нет и ставить его некуда, поэтому изготовлением плат даже не пытаюсь заниматься. Но даже перед тем как паять что-то на макетке с пятачками, я теперь рисую схему в Sprint-Layout, чтобы более компактно разнести все детали па площади платы и правильно развести землю. Ну а на пластиковой макетке собираю прямо на лету из головы. Написание прошивки занимает гораздо большее время, чем собирание деталек на макетке. Поэтому сначала как лего собираешь, а потом уже сидишь за ноутбуком и кодишь. Последнее время задумываюсь сделать беспроводной программатор и UART, потому что провода USB от ноутбука мешают, так как сижу обычно на диване, а ноутбук на коленях.

Синхронизация осуществляется при помощи манипуляции битов в различных регистрах. Есть бит, которым можно разрешить или запретить все прерывания одним махом, но кроме того есть биты в разных регистрах для манипуляции каждым прерыванием по отдельности. По умолчанию в компиляторах Си предлагается к использованию макрос при объявлении функции-прерывания, который блокирует все прерывания при входе в прерывание и разрешает при выходе. Таким образом все прерывания будут выполняться последовательно (прерывание непрерывно, лол). Но при желании можно добиться поведения, когда прерывания будут вклиниваться в другие прерывания, но говорят, что это может привести к проблемам. Я с ассемблером знаком мало, но вроде бы для компилятора вызов каждого прерывания - это довольно напряжная ситуация, потому что это происходит в непредсказуемый момент времени и нужно правильно эти ситуации разруливать. А при нескольких вложенных прерываниях, то ли регистров общего назначения на всё может не хватить, то ли ещё чо-то там. Может кто-то из булочников разъяснит подробнее.

В ардуиноподобных платах ставят стабилизатор на 3.3 или 5 вольт, смотря что требуется. При 3.3 вольт производителем микроконтроллеров не гарантируется стабильная работа на максимальной частоте. Кстати сказать, если вы не делаете систему управления ракетами, то нефиг делать завести ардуину хоть на 25 мегагерцах, хотя производитель рекомендует максимум 16. А если использовать внешний генератор тактовых сигналов, то мне кажется можно и выше. Только при разгоне учитывайте, что микросхема, реализующая UART (это как COM порт в компе, только с 5 вольтами на контактах), не будет работать с некоторыми значениями скорости (как правило слишком высокими). То есть если разгоняемое приложение предполагает работу с UART на высоких скоростях, то тестируйте заранее - будут проблемы 100%. Хотя может если брать не китайскую ардуину с нормальным UART, может проблем и не будет.

ABTOMAT 19.01.2017 19:26

Ответ: Статика
 


Олсо вот такого типа макетки — малаца, если по-быстрому проверить что-то. Но конечно не может быть и речи, чтобы потом на практике такое устройство юзать.




Можно так ещё, максимум-колхоз.

Phantom 20.01.2017 07:33

Ответ: Статика
 
Ни одна моя поделка не выглядела так страшно :-D


Часовой пояс GMT +4, время: 03:07.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot