Никаких плясок с avrdude и другими сложными штуками - это я гарантирую.
Единственное что, если решите как и я использовать микроконтроллер в SOIC корпусе как и я - понадобится переходник из моего прошлого поста.
Минутка истории
Пол года назад закупая очередную мелочевку на радиорынке я решил купить себе микроконтроллер с мыслью о том, что может быть, когда-нибудь, в лучшие времена я соберусь с мыслями и выйду за пределы Arduino как единственного решения.Мне не хотелось брать что-то большое и мощное, а скорее наоборот - искал что-то очень простое. Одним из таких решений были микроконтроллеры семейства ATtiny. Поспрашивав у продавцов мне удалось найти ATtiny85. Одна проблема - она была только в SOIC корпусе, штука очень мелкая.
Я решил была не была и все равно купил себе одну штучку, просто попробовать. При цене в 2,5$ - это не было большим вложением.
Ну, вот прошло время и заскучав я решил попробовать запрограммировать эту кроху.
Ну, вот прошло время и заскучав я решил попробовать запрограммировать эту кроху.
ATTiny85
Как я уже говорил в моем случае мне попалась ATtiny85, а если быть совсем уж точным, то ATTiny85-20SU. Характеристики у микроконтроллера следующие:
С другой стороны - это конечно не так и много, но что-то сделать все же можно.
Распиновка у чипа следующая
В этот раз все достаточно безобидно:- CPU: AVR 8 бит
- Напряжение питания: от 4.5 до 5.5 В
- Flash: 8 КБайт
- EEPROM: 512 Байт
- RAM: 512 Байт
С другой стороны - это конечно не так и много, но что-то сделать все же можно.
Распиновка у чипа следующая
Понадобится
- Arduino UNO
- ATTiny (если в SOIC корпусе, то еще и переходник)
- Макетная плата
- Проводки
- Конденсатор на 10мкФ 16В
- Светодиод и резистор на 220Ом (если захотите полностью повторить мой опыт, то два резистора и два светодиода, но это скорее для менее скучного видео я сделал)
Все достаточно обыденно и если вы уже пробовали что-то делать, то скорее всего у вас уже где-то все это завалялось.
Подготовим Arduino IDE
Для того, чтобы наша IDE узнала о существовании новых чипов необходимо провести пару нехитрых манипуляций. Для начала нам необходимо скачать один маленький zip файл отсюда http://code.google.com/p/arduino-tiny/ - Google Code группа которая занимается сбором информации под разные чипы семейства ATtiny, за что им огромное спасибо.
На момент написания последним набором был arduino-tiny-0100-0015.zip (на всякий случай скопировал его себе, если что-то случится с группой, то качаем тут).
Теперь необходимо посмотреть где наша IDE прячет от нас скетчбут. Для этого откроем File - Preserences
и там посмотрим поле Sketchbook Location и скопируем его себе.
Перейдем в эту папку и создадим там подкаталог с названием "hardware". После этого скопируем в только что созданный каталог папку из скачанного ранее архива (arduino-tiny-0100-0015.zip) под названием tiny со всем её содержимым.
Перезагрузим IDE.
После этого в разделе Tools - Board у вас должно появится сразу несколько ATTiny. Пока что ничего не выбираем в этом списке. Значение должно быть установлено в Arduino UNO, если у вас выбрано что-то другое - поменяйте.
На момент написания последним набором был arduino-tiny-0100-0015.zip (на всякий случай скопировал его себе, если что-то случится с группой, то качаем тут).
Теперь необходимо посмотреть где наша IDE прячет от нас скетчбут. Для этого откроем File - Preserences
и там посмотрим поле Sketchbook Location и скопируем его себе.
Перезагрузим IDE.
После этого в разделе Tools - Board у вас должно появится сразу несколько ATTiny. Пока что ничего не выбираем в этом списке. Значение должно быть установлено в Arduino UNO, если у вас выбрано что-то другое - поменяйте.
Arduino UNO превращается... В элегантный ISP программатор...
Небольшой ликбез. ISP (In-system programming) - это способность микроконтроллера получать прошивку находясь уже непосредственно в собранной схеме. Другими словами, несмотря на то, что к микроконтроллеру могут быть уже подключены всякие там светодиоды и кнопки, мы все еще будем иметь возможность залить на него новую прошивку.
Программатором (устройством передающим прошивку от компьютера в контроллер) в нашем случае будет выступать Arduino UNO. Чтобы Arduino стала ISP программатором на нее необходимо залить специальную прошивку. Эта прошивка поставляется вместе с Arduino IDE.
Итак, еще без какой-либо периферии Arduino подключаем к компьютеру и загружаем Arduino IDE.
Внимание! Если у вас Arduino IDE версии 1.0, то в полученный код необходимо будет внести изменения, а конкретно в функции heartbeat() найти строчку "delay(40);" и заменить её на "delay(20);". Это известный баг. В Arduino IDE версии 1.0.1 (последней на момент написания статьи) эта проблема уже исправлена и ничего менять не нужно.
Нажимаем кнопку Upload и ждем, пока прошивка не попадет на Arduino. Поздравляю, у вас есть ISP-программатор.
Соберем схему
Для того, чтобы залить код в нашу ATtiny нужно собрать несложную схемку. На картинке я нарисовал вариант с микросхемой в DIP корпусе - так немного нагляднее, но нужно понимать, что разницы с SOIC+переходник никакой.
На первой схеме изображено только соединение с программатором (этого достаточно, чтобы залить код на микроконтроллер, но недостаточно для демонстрации работы), на второй - пример с двумя светодиодами (мне показалось что чтобы хоть как-то развеселить схему, два светодиода + ШИМ будет то, что надо, заодно чуть больше раскрываются возможности).
Особое внимание стоит уделить пожалуй лишь конденсатору между reset и GND на нашей Arduino. Это необходимо чтобы препятствовать программному сбросу контроллера после заливки в него прошивки предназначающейся для нашей ATtiny который автоматически вызывается каждый раз.
Вот что получилось у меня.
Вот что получилось у меня.
Пишем код
Практически все готово, осталось только написать очень простенькую прошивку для нашей ATTiny. Открываем Arduino IDE и пишем
int led1 = 0;
int led2 = 1;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
analogWrite(led1,64);
delay(500);
analogWrite(led1,128);
delay(500);
analogWrite(led1,255);
delay(500);
digitalWrite(led1,LOW);
analogWrite(led2,64);
delay(500);
analogWrite(led2,128);
delay(500);
analogWrite(led2,255);
delay(500);
digitalWrite(led2,LOW);
digitalWrite(led2, HIGH);
delay(100);
digitalWrite(led2, LOW);
delay(500);
}
Код очень простой, в начале включает светодиод на нулевой ножке (соответсвует PB0 в разпиновке) в три этапа, каждый раз увеличивая значение в analogWrite(...), что вызывает увеличение яркости свечения диода, потом гасит его и проделаывает то же самое на первой ножке (PB1). Именно эти выходы способны работать как ШИМ, что и демонстрируется в примере.
Осталось поменять значение в Tools - Board в новое, которое будет соответствовать вашей ATtiny и припиской @ 1 MHz (возможно еще какие-то слова после, нас они сильно не интересуют сейчас). В моем случае это ATTiny85 @ 1 MHz (internal oscilliator; BOD disabled)
Осталось изменить тип программатора на Arduino as ISP, сделать это можно выбрав Tools - Programmer соответствующий пункт.Осталось поменять значение в Tools - Board в новое, которое будет соответствовать вашей ATtiny и припиской @ 1 MHz (возможно еще какие-то слова после, нас они сильно не интересуют сейчас). В моем случае это ATTiny85 @ 1 MHz (internal oscilliator; BOD disabled)
Нажимает кнопку Upload.
Скорее всего в консоли Arduino IDE вы увидите пару ругательств.
Ну и презентация работающей версии, конечно.
Скорее всего в консоли Arduino IDE вы увидите пару ругательств.
Да, признаю, слукавил, мы все же пользовались avrdude, только все за нас делала Arduino IDE, так что думаю вы не в обиде.avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
Ну и презентация работающей версии, конечно.
Приличная штука.
ReplyDeleteСпасибо, надеюсь полезно
DeleteСпасибо! Интересно, а atmega 8 выходит также можно прошить?
ReplyDeleteНашел такой проект (эмулятор rfid пластиковых карт меток),там автор атмегу 8 через ардуино как-то прошивает).
Нужно пробовать, к сожалению сейчас под рукой 8-ки нету. И что-то мне подсказывает, что найти сейчас Atmega8 будет целым делом. А вот прошить какую-нибудь более популярную, типо той, что используется в самой Arduino (ATmega328) - запросто.
DeleteИзвините за глупый вопрос. Я только заказал Andruino UNO и еще не работал с ней. После программного превращения в ISP программатор - как вернуть UNO в прежнее состояние? Я понимаю, что надо снять питание, убрать конденсатор и залить уже другую программу, предварительно выбрав в Tool-Board необходимый контроллер.
ReplyDeleteВсе точно, снять обвязку, изменить настройки IDE и залить любой другой код изменив целевой контроллер.
DeleteЕдинственное - еще изменить Tools - Programmer обратно на AVR ISP.
Спасибо! тоже только что заказал Arduino UNO.
DeleteВОПРОС: По мимо ATTiny85 @ 1 MHz есть также опция ATTiny85 @ 8 MHz и 16 MHz. Я полагаю что это скорость и для надежности лучше прошивать на малой скорости!?
Да, можно назвать это скоростью. Я не углублялся в вопрос, так как на 1MHz и так прошивается очень даже шустренько, но можно поэкспериментировать.
DeleteСпасибо за статью!
ReplyDelete