11
Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO
5 Комментариев в Arduino & Pi  

В этой статье я постараюсь подробно осветить все моменты, касающиеся прошивки Attiny85 в среде ArduinoIDE, и рассказать и некоторых граблях и трюках, через которые я прошел.



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


Отличия attiny25 от 45 и 85 - объем памяти: 2, 4, 8 кб соответственно. Так же есть 13, 1 кб.

Из функций - пара независимых таймеров для ШИМ, 5(6) портов ввода вывода (6 потому что RESET тоже можно настроить, как порт ввода вывода, но для сброса понадобится специальное устройство), и самое приятное - внутренний кварц на 128 кГц, 1, 8 или 16 МГц, то есть внешний резонатор не нужен, а частоту работы можно изменить прямо в студии ардуино. Так же есть BOD-детектор (вырубает чип, если напряжение питания ниже определенного).


Порезал картинку, чтобы не получить по голове от неразглядевших. Оригинал

Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост

Итак, вы урвали у жадных китайцев себе пяток тинек85, надо их проверить, а то вдруг наебали. Не стушевавшись, втыкаем в бредборд и ищем первую ногу - она помечена точкой. Это сброс или ресет, соединяем ее с 10 портом UNO, ищем четвертую ногу, цепляем к земле, 5, 6, 7 цепляем последовательно к 11, 12, 13 портам. 8 к +5В. Поздравляю, сетап готов. Можно ещё воткнуть конденсатор между RESET и GND у уны, но (меня сейчас закидают) у меня все работает и так. Предполагаю, что кондей - защита от наводок.


Теперь пора навести порядок в студии - зайти в менеджер плат и набрать "attiny", после чего скачать среднюю позицию (больше вариантов и настроек, плюс впитала в себя другие варианты):

Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост

Установили, теперь надо залить в уно скетч из примеров под названием ArduinoISP, после чего уже можно начинать настраивать нашу тиньку к работе:

Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост

С завода все тиньки идут прошитыми на 8 МГц, для того чтобы поменять эту частоту на 16, или изменить что-либо из списка - надо перезаписать загрузчик, обычно занимает секунд 10. После перезаписи можно залить обычный Blink для проверки работоспособности и верности выбранной частоты, только надо поменять номер 13 пина на 3 или 4, поскольку остальные заняты.


Но при перепрошивке очередной тиньки каждый раз городить на бредборде кашу из проводов? Не, я думаю, что есть вариант получше: можно сделать шилд для программирования тинек:

Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост
Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост

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

Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост

Поскольку круглые (на фото ниже) могут плохо держать или терять контакт, хотя за своими такого не замечал пока.

Сжимаем проекты или как запрограммировать AtTiny85/45/25 с UNO программирование, микроконтроллеры, arduino, AtTiny, длиннопост

Остальные содинения точно такие же, как в начале статьи, единственное - светодиод + 220 Ом резистор на 3 пине.

Показать полностью 7
16
Немного о портах и битовых операциях
18 Комментариев в Arduino & Pi  

Многие из вас видели и наверно даже понимают, что такое

DDRB |= (1 << 5);

PORTB |= (1 << 5);

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


Основная опасность и в то же время преимущество управления портами напрямую без прослоек типа digitalWrite() - это то, что вы можете управлять сразу 8 портами всего за 1 строчку кода, которая в свою очередь выполняется достаточно быстро, намного быстрее стандартной функции.

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


Например надо настроить на вывод 11, 12, 13 порт уны, а 8, 9, 10 не трогать. Для этого нужен оператор "ИЛИ", который обозначается '|':

DDRB |= B00111000;

или

DDRB |= (B111 << 3);

Оба варианта делают абсолютно одно и то же. Сдвиг влево (<<) задается количеством бит, на которое сдвигается значение. Сдвигая B111 на три бита, получаем B111000. Можно сказать, что мы добавляем определенное количество значащих нулей.


Теперь разберем, почему оператор | так важен. Для этого надо понять, что делает этот оператор:

0101 (decl 5)  

0011 (deс 3)

OR=

0111 (dec 7)

Если по-простому - при установке единицы меняет 0 на 1, а при установке 0 в бит, где есть единица - не меняется ничего, так же и при установке ноля в 0. То есть мы установили на вывод три бита, не затронув остальные, которые так же могли быть уже назначены выводами.


Но если надо выставить 0 так, чтобы не прибить остальные биты в 0, нужен оператор "И", обозначающийся &. Так же к нему понадобится оператор "НЕ" - обозначается ~.


Итак, выключаем светодиод на 13 пине:
PORTB &= ~(1 << 5);

или

PORTB &= ~B00100000;

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

Итак, ~ переворачивает все с ног на голову:

~B00100000 = B11011111

А оператор & как раз нолем меняет любую единицу на ноль, а единицей не меняет ничего. В итоге - 1 выключенный бит без беспокойства остальных. "И" в двоичной математике - это умножение: умножаем 1 на 0 - и получим 0, а 1*1=1.


Так же есть исключающее "ИЛИ" или XOR в английском варианте - ^. С помощью него можно поменять значение определенного бита. Например:
B11011111 ^= B00110000;
будет иметь в итоге

B11101111.

Вкратце: с помощью единицы меняем бит на противоположный, ноль ничего не делает.


Теперь можно поговорить о цифровом чтении портов. Перед чтением необходимо установить 0 в нужные биты:
DDRB &= ~B00000001;

На чтение выставлен только 8 порт уно с помощью этой конструкции, остальные не затронуты и могут оставаться как вводами, так и выводами.


И благодаря тому, что мы оперируем сразу 8 портами одновременно, можно не городить конструкции типа
if(digitalRead(8) && digitalRead(9) && digitalRead(11) && digitalRead(13)){....}

А сделать небольшую маску сравнения:

if(PINB & B00101011){....}

Работает точно так же, но экономит место в памяти контроллера, плюс выигрыш в быстродействии. Главное от наводок защититься подтягивающими резисторами, иначе даже digitalRead не спасет.



Напоследок расскажу один чит, который подглядел в оригинальных библиотеках для shiftOut, и не сразу смог понять, что же он делает:
!!(val & (1 << i))

Разгадка оказалась на поверхности, но о ней по порядку: '!' - это НЕ в логических операндах, работает так:
!1=0

!255=0

!0=1


В данном случае двойной восклицательный знак позволяет привести 8, 16, 32... битное число с помощью маски в один лишь бит, без всяких нолей, значащих и нет:

0. !!(val & (1 << i))

1. !!(B1110 & (1<<2))

2. !!(B0100)

Поскольку B0100 равно или больше единицы, однократное НЕ приведет к нолю, а двухкратное к единице, переход через 0 позволяет оставить лишь суть:

3. !(0)

4. (1)


Таким нехитрым образом можно разобрать любое число на отдельные биты.

Показать полностью
-19
Официальное такси в Москве
28 Комментариев  

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

Официальное такси в Москве Такси, Москва, разгильдяи
Официальное такси в Москве Такси, Москва, разгильдяи
-10
Slow Mo Guys: Сухой лед в бутылке при ускоренной съемке
0 Комментариев  
10
Как скачать музыку с Яндекс.Музыки
16 Комментариев  

Бывает такая херня, когда хочется скачать трек в оригинале и более-менее хорошем качестве, а не очередной ремикс от гопника васи и не басбуст от какого-нибудь говноеда. Обычно на помощь приходит вк, но там чаще всего даже приписка Original Mix может ничего не дать, кроме кровищи из ушей, а если и гугл тоже не дает ничего выше 128 кбит и прочих радостей, с торрентов тянуть неохота, то на помощь приходит яндекс музыка - там все лежит в 320 кбит и mp3 формате (аудиофилам мимо), кнопки скачать нет, но вытянуть файл можно всего лишь в пару кликов. Покажу на примере Firefox, но метод в принципе универсален и надо только найти папку локального кэша вашего браузера.


0. Лезем в папку, где хранится все содержимое, для упрощения поиска папки надо зайти:

about:cache?storage=disk&context=

Как скачать музыку с Яндекс.Музыки Музыка, скачивание, Пиратство, яндекс музыка, яндекс

1. Скопировать-вставить в проводник, выбрать папку entries и узреть кучу непонятных файлов без расширений. 

2.Чтобы не искать в тоннах старого новые файлы, очищаем кэш:

about:preferences#advanced

Как скачать музыку с Яндекс.Музыки Музыка, скачивание, Пиратство, яндекс музыка, яндекс

Теперь заходим на ямузыку и запустим один трек, дожидаемся пока песня прогрузится до конца, лезем в папку, сортируем по размеру файла, и вот что получается:

Как скачать музыку с Яндекс.Музыки Музыка, скачивание, Пиратство, яндекс музыка, яндекс

Самый жирный файл - и есть трек, дальше надо лишь приписать к нему .mp3 и все воспроизводится, все в нормальном качестве и именно то, что висит на яндексе.

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

-8
Щедрые акции от ситилинка
5 Комментариев  

Перебирал чеки - увидел "щедрый" подарок - БЕСПЛАТНО обновят винду до десятой.

Кто не в курсе - любую лицензионную винду можно обновить бесплатно до 10.

Щедрые акции от ситилинка виндовз, windows, щедрость, халява
Желе против теннисной ракетки в ускоренной съемке
В комментариях ещё
11 Комментариев  
Желе против теннисной ракетки в ускоренной съемке В комментариях ещё
-21
Ворошиловский стрелок
11 Комментариев  
Ворошиловский стрелок
5
Утка плохого не посоветует
30 Комментариев  
Утка плохого не посоветует


Пожалуйста, войдите в аккаунт или зарегистрируйтесь