Attiny13 и Arduino IDE
- Войдите на сайт для отправки комментариев
Вс, 19/11/2017 - 18:07
Здравствуйте! Помогите написать скетч для микроконтроллера Attiny13 через среду программирования Arduino IDE.
Требуется сделать скетч под ATTiny13 для его будущего использования в качестве шаблона.
Есть рабочий скетч для ардуино УНО.
Алгоритм работы следущий:
//-------БИБЛИОТЕКА--------- #include "LowPower.h" // Библиотека сна #define LED 13 // Светодиод на пин 13 #define button 2 // кнопка "проснуться", она же внешнее прерывание INT0 boolean sleep_flag = true; // флаг, что НЕ спим void setup() { // подтягиваем кнопку pinMode(button, INPUT_PULLUP); // пин как выход pinMode(LED, OUTPUT); // покажем 2-ух секундным свечением светодиода то, что выполняется setup, а не loop digitalWrite (LED, HIGH); delay (2000); digitalWrite (LED, LOW); // подключить прерывание (для ATMega 328 т.е. Arduino UNO - работает. attachInterrupt(0, go, CHANGE); // 0 - это ножка внешнего прерывания ( она же пин 2); go - имя функции, которая выпонится при прерывании; // CHANGE - режим прерывания (если изменения с LOW на HIGH и наоборот) } void loop() { // Если НЕ спим, то.. if (sleep_flag == true) { // помигаем светодиодом. for (int i=0; i<=5; i++){ digitalWrite (LED, HIGH); delay (100); digitalWrite (LED, LOW); delay (100); } // Отмечаемся, что сейчас будем спать sleep_flag = false; // ЗАСЫПАЕМ LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); } } // Функция, которая выполнится если сработает прерывание (изменение на ножке 2 (она же INT0). void go() { sleep_flag = true; delay (50); }
Так же есть код, который работает на ATTiny13 из статьи https://geektimes.ru/post/258862/
#define F_CPU 1200000UL // Частота МК в герцах #include <avr/io.h> #include <avr/sleep.h> // здесь описаны режимы сна #include <util/delay.h> #define led_Yes 0 // grn #define led_No 1 // red #define rand_gen 3 #define wait 5000 // тайм аут перехода в спящий режим void setup() { //pinMode(led_Yes, OUTPUT); DDRB |= (1<<led_Yes); //pinMode(led_No, OUTPUT); DDRB |= (1<<led_No); } void loop() { randomSeed(analogRead(rand_gen)); // не псевдо радном byte randomValue; randomValue = random(0,2); // диапазон генератора случайных чисел от 0 до 1 if(randomValue > 0){ //digitalWrite(led_Yes, HIGH); PORTB |= (1<<led_Yes); } else{ //digitalWrite(led_No, HIGH); PORTB |= (1<<led_No); } _delay_ms(wait); system_sleep(); } void system_sleep(){ //digitalWrite(led_No, LOW); PORTB &= ~(1<<led_No); //digitalWrite(led_Yes, LOW); PORTB &= ~(1<<led_Yes); ADCSRA &= ~(1 << ADEN); // перед сном отключим АЦП ACSR |= (1 << ACD); // и компаратор // для уменьшения энергопотребления во сне set_sleep_mode(SLEEP_MODE_PWR_DOWN); // если спать - то на полную while(1) { sleep_enable(); // разрешаем сон sleep_cpu(); // спать! } }
Как мы можем увидеть, здесь используется стандартная библиотека avr - <avr/sleep.h>.
Этот код для ATTiny13 работает на этом микроконтроллере, МК засыпает. Но просыпается он от RESET, а это значит, что программа запускается заново. Нужно сделать так, чтобы контроллер засыпал на определенном месте, просыпался от внешнего прерывания и продолжал работу с того места на котором уснул.
Как прошивать ATTiny13 из ArduinoIDE?
Для работы с ATTiny13 я использую Arduino IDE 1.0.5., на 1.6.6 ИМХО работает неккоректно и IDE может вообще не запуститься.
Лучше использовать 1.0.5.
Если не заработал способ выше, то вот еще вариант немного другой
(только для Arduino IDE 1.0.5, на 1.6.6 IDE вообще не запускается)
Если всё сделано правильно, то в платах появится ATTiny13 с выбором частоты. Я работаю на 1.2 мГц.
Так же, если всё правильно, то код выше для ATTiny13 на 1.2 мГц компилируется хорошо.
Добавте atachinterrupt на 1 пин и просыпаетесь после sleep_cpu(); по нажатию кнопки.
Не получается. Не компилируется..
Покажите, что вы пытаетесь скомпилировать. И с ошибки при компиляции.
Ошибка:
Внутри функции обработки прерывания не работает delay(), значения возвращаемые millis() не изменяются. Возможна потеря данный передаваемых по последовательному соединению (Serial data) в момент выполнения функциии обработки прерывания. Переменные, изменяемые в функции, должны быть объявлены как volatile.
Спасибо, сейчас буду исправлять!
вапще-то памойму у тини13 нет аппаратного прерывания для ножек 0 и 1, есть PCINT на весь порт В. Тогда надо мануально писать функцию
ISR(PCINT0_vect)
и смотреть состояние вывода 0 вручную.
Поэтому attachInterrupt() у Tiny13 просто нет.
PCINTx-прерывания обслуживают сразу целый порт, поэтому в обработчике необходимо смотреть на записанное и текущее состояние выводов и выискивать, какой же из пинов изменил свое состояние (и в какую сторону). Ну а потом уже решать, реагировать ли на это изменение или проигнорировать.
Надеюсь, мне будет под силу с этим разобраться))
Тут целая тема есть, даже прилепленная, по AtTiny13. Если прочесть ее всю - можно почерпнуть для себя многамнога полезного.
Добавлял Attiny13 от сюда
Arduino iDE 1.6.8
Скомпилировалось без ошибок.
вапще-то памойму у тини13 нет аппаратного прерывания для ножек 0 и 1, есть PCINT на весь порт В. Тогда надо мануально писать функцию
ISR(PCINT0_vect)
и смотреть состояние вывода 0 вручную.
Поэтому attachInterrupt() у Tiny13 просто нет.
По картинке мне показалось, что есть на PB1, надо проверить.
Скачал по вашей ссылке, обновил свои папки в IDE 1.6.6 - всё равно не вышло.. Можно попросить залить на файл-обменник вашу папку с Arduino iDE 1.6.8? Буду очень признателен!
Хотелось бы иметь рабочий IDE, мб я что-то неправильно наделал..
IDE 1.6.8
Если отключать АЦП, то после пробуждения его надо включать, и дать время на включение.
Благодарю!
Понял, буду пробовать!
Что-то не могу .exe найти в папке IDE
Моя вина, у меня меня дебиан.
Моя вина, у меня меня дебиан.
Аа, понял, ничего страшного, всё равно спасибо! ;)
Чуть предистории, выхожу как-то на кухню посмотреть на градусник, а на стекле только квадратики скотча висят, отклеился падлюка.
Задумался сделать радиодатчики. Пока только думаю только о концепции, что-же я хочу.
Вероятно будет датчиков наверное три, по обе стороны дома и комната. Может приемников несколько, но это не важно.
Приемник на про мини, стекляшка Nok 1112 96x68 3 показания темп и меленько сколько прошло с последнего замера.
По датчикам есть вопрос, а почему все используют 1820 ??? есть копеечный вариант LM75 ? вроде по интерфейсу в плане кода, экономии размера кода приятен. Ах, да Аттиньки13 . Будут вопросы только по режимам сна, не приходилось экономить на питании. Помню лм-ки где-то валялись, на материнках попадались, найду буду пробовать или до чипдипа дойти надо.
PS . вроде всё всунул, с редактированиет тут вроде морока.
о, еще и воткнул не туда. хотел в 1001 применение. простите.
А что мешает и приемник и передатчик на attiny? Маленький экран прикрутить - вот и отображение уличной температуры в любой точке комнаты
ну, в прошку можно и графику засунуть. меня в общем только сами выносные датчики интересуют. ваше мнение.
http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=2...
Печалька. Прикупил в чипдипе две LM75-ки, попытался подцепить, не работит.
Распаял на DIP пустышки и вторую, воткнул в макетку с ардуиной, не работит... Прошелся сканером и2с, не находит. повтыкал всё что нашел и2с-шное, находит. Стал рассматривать маркировку под лупой, чтото у меня есть сомненья, не перемаркировка ли это? Буду ждать от китайцев. Уже думаю поставить чтото иное, но уж очень она мне понравилась.
Может кто пользовал, делитесь впечатлениями.
Печалька. Прикупил в чипдипе две LM75-ки, попытался подцепить, не работит.
Распаял на DIP пустышки и вторую, воткнул в макетку с ардуиной, не работит... Прошелся сканером и2с, не находит. повтыкал всё что нашел и2с-шное, находит. Стал рассматривать маркировку под лупой, чтото у меня есть сомненья, не перемаркировка ли это? Буду ждать от китайцев. Уже думаю поставить чтото иное, но уж очень она мне понравилась.
Может кто пользовал, делитесь впечатлениями.
извините, нифига не понял :(
недавно вы писали что нужен тупо выносной датчик на AtTiny - ссылку я дал,
монитор на AtTiny Маленький я тоже подключал - никаких проблем.
Вопрос в чем?
Да, вопроса-то и нет. Пишу что в чипдипе попались не рабочие.
В Чипе за такие деньги attiny не рабочие? Че то не верится
не тиньки, а лмки, читай внимательнее. и маркировка на них лазерная, какая-то доверия не внушающяя. это только на днях завезенная партия из 10 шт. в мой ближайший магазин.
PS: посмотрел, осталось 8 шт. СПб. ул Востания.
На Кронверский ехать не хотелось, а тут на Востания появились 10. Итого 2 у меня, 8 осталось счастливчикам.
ioleg73, такие вещи нужно сопровождать по крайней мере фотографией монтажа. Откуда нам знать, что вы всё правильно включили? По поводу поключения этих датчиков к ардуине уже были темы..
Подтяжки есть. Всё остальное что на шину вешалось, находится сканером шины, эти молчат. 24сХХ даже по цокалевке похожа.