Перейти к содержанию

Attiny13 Потребление в спящем режиме


alxm

Рекомендуемые сообщения

Привет! Подскажите, в чем может быть проблема. Есть следующий код. Он работает. МК уходит в сон, по датчику просыпается, отрабатывает проверку состояния и снова в сон.

#include <avr/sleep.h> 		// здесь описаны режимы сна
#include <avr/interrupt.h> 	// работа с прерываниями

#define   LED         4
#define   Button      1

ISR(INT0_vect) 
{
}
//-------------------------------------------------------------------
void  Beep(int16_t on, uint16_t off, byte num) {
  for(byte i = 0; i < num; i++) {
    digitalWrite(LED, HIGH);  
    _delay_ms(on);            
    digitalWrite(LED, LOW);   
    _delay_ms(off);           
  }
}
//-------------------------------------------------------------------
void setup() {
  pinMode(LED, OUTPUT);
  pinMode(Button, INPUT);

  pinMode(0, OUTPUT);
    digitalWrite(0, LOW);
  pinMode(2, OUTPUT);
    digitalWrite(2, LOW);
  pinMode(3, OUTPUT);
    digitalWrite(3, LOW);
  
  Beep(200, 70, 3);
}
//-------------------------------------------------------------------
void loop() {
  // уходим в сон..
  GIMSK |= _BV(INT0);
  //ADCSRA &= ~_BV(ADEN);                   // отключить ADC; уменьшает энергопотребление
  ADCSRA &= ~(1 << ADEN); 		    // Отключаем АЦП;
  ACSR |= (1 << ACD); 			    // Откл. компаратор;
  
  sei(); 				    // Общее разрешение прерываний
  set_sleep_mode (SLEEP_MODE_PWR_DOWN);
  sleep_enable();   			    // разрешение режима сна
  sleep_cpu();   			    // активация режима сна

  cli();                                    // отключить прерывания; для безопасного отключения PCINT3
  GIMSK &= ~_BV(INT0);
  sleep_disable();                          // запретить режим сна; MCUSR &= ~_BV(SE);
  sei(); 				    // Общее разрешение прерываний
  _delay_ms(10);
  // проснулись..

  ControlDoor();
}
//-------------------------------------------------------------------
void  ControlDoor() {
uint32_t  timer = 0;
bool      flag  = false;

  timer = millis();				// фиксируем начало таймера для открытой двери
  while(digitalRead(Button) == 0) {// пока открыта дверь..
    if((uint32_t)(millis() - timer) >= 10000) {// прошло ХХ сек, т.е. дверь открыта все это время..
      flag = true;
      break;
    }
  }

  while(flag) {// дверь открыта, время таймера вышло, сигнализируем..
    Beep(1000, 2000, 1);
    if(digitalRead(Button) == 1) // дверь закрыта..
      break;
  }
}

Но есть нюанс) Если закомментировать вызов функции ControlDoor() и оставить все остальное, в активном режиме схема потребляем 1.5mA, во время сна - меньше 1мкА. Вроде так и должно быть. С функцией ControlDoor() в спящем режиме потребление становится примерно 400мкА. Пробовал отключать всю периферию светодиод и геркон, вставлял код частями - так и получилось выяснить что потребление начинается после добавления ControlDoor(). Почему так?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Очень хорошо, что здесь собрались великие гуру. Можете дать практические советы, чтобы можно было развиваться дальше, а не кичиться своим эго. Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

За тебя код написать или доки прочитать или все разжевать или опыт в голову вбить - выбрать по вкусу и посолить

 

1. Используй нормальные инструменты для разработки ПО а не это г..о ардуино

2. Сам сказал что эта функция не дает уснуть МК

3. Я тебе также сказал что ты фигню понаписал в основном цикле

 

Берешь  и по кусочку изменяешь код и смотришь на свое потребление если по другому не можешь и не знаешь

 

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

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, alxm сказал:

Можете дать практические советы

данивопрос...  шаг.1  не использовать функции смысла работы которых ты не понимаешь.
шаг.2 найти и изучить  исходный код функции millis()
шаг3 читай пункт1 предыдущего поста

Ссылка на комментарий
Поделиться на другие сайты

3 hours ago, alxm said:

Очень хорошо, что здесь собрались великие гуру. Можете дать практические советы, чтобы можно было развиваться дальше, а не кичиться своим эго. Спасибо!

Не обращай внимания. :-) Я за этим форумом лет десять наблюдаю и едва только появляется элементарный вопрос от новичка или просто человека, который "не в теме", но ему надо решить одноразовую задачу, как его сразу перемешают с экскрементами, пошлют в книжку или порекомендуют Мастера (да-да, именно с большой буквы для пущей важности и самозначимости). Но это все лирика.

Конкретно по твоей проблеме могу предположить следующее. Режим "сна" ты включаешь правильно. И в нем контроллер действительно будет находится до того момента, пока не возникнет внешние прерывание на линии INT0. Как ты и задумал. Но дело в том, что внешнее прерывание само по себе может быть сгенерировано несколькими событиями (а вот про них таки надо читать в соответствующем разделе даташита, раздел 9.2 External Interrupts), а именно:

  1. низкий уровень на линии;
  2. изменение уровня на линии;
  3. по нарастающему фронту;
  4. по спадающему фронту;

Установка конкретного осуществляется в регистре MCUCR (биты ISC01 и ISC00), который у тебя в коде не упоминается. Думаю, что в нем содержится значение по-умолчанию, а именно нули. Это соответствует событию 1. Из кода и описания непонятно, какое именно значение у тебя по умолчанию на INT0. Мне кажеться, что как раз нуль. В таком случае контроллер у тебя после инструкции sleep_cpu() практически сразу же проснется и пойдет исполнять оставшуюся часть кода,  затем вернется в начало loop опять погрузится в сон и вновь из него вывалится. И так до бесконечности.

А разница в энергопотреблении с и без ControlDoor появляется за счет того, что:

  • если последний отсутствует, то после пробуждения исполнение практически сразу же возвращается в начало loop, где вновь пытается уснуть;
  • а если присутствует, то (точно не могу понять), исполнение или совсем зависает в ControlDoor или все-таки пробегает его до конца и вновь возвращается в начало loop;

Я думаю, очевидно, что в последнем случае длительность "активной" фазы  заведомо больше. За счет нее и возникает повышенное потребление.

Понял, в чем оплошность и как ее исправить? :-)

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, El-Shang сказал:

Мне кажеться, что как раз нуль. В таком случае контроллер у тебя после инструкции sleep_cpu() практически сразу же проснется и пойдет исполнять оставшуюся часть кода,  затем вернется в начало loop опять погрузится в сон и вновь из него вывалится. И так до бесконечности.

если бы это было так, МК так бы и потреблял бы свои 1,5мА , ну максимум уменьшилось до 1,2мА , потому шта уход в сон/пробуждение это всего две команды против двух десятков в лупе,

а у ТС без функции ControlDoor() положенные для сна 1мкА , что грит о том что ничего произвольно не просыпается.

еще идеи есть?

Ссылка на комментарий
Поделиться на другие сайты

Ну, я AVR'ы оставил в уже достаточно далеком прошлом, могу в чем-то и ошибаться, тем более в режимах энергопотребления (не доводилось мне работать с батарейными приложениями). Однако утверждение:

2 hours ago, IMXO said:

потому шта уход в сон/пробуждение это всего две команды против двух десятков в лупе

как-бы не совсем верно. В штуках-то да, но при входе в режим "Power Down" производится остановка тактового генератора, соответственно при выходе из него он перезапускается. Время запуска задается во фьюзах и с виду опасений не внушает, так как составляет всего 6 тактов. Плюс еще 4 такта, заявленные для срабатывания прерывания. Вроде как и слезы, но я не уверен, что оно ведет себя именно так. Равно как я не доверяю измерениям автора, где он заявляет об 1 микроампере потребления.

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

Да, и еще одно надо учесть, что в режиме "Power Down" INT0 дететирует только низкий уровень.

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, El-Shang сказал:

как-бы не совсем верно

ай не придирайтесь к словам, наличие задержки в лупе на 10мс полностью перекроит десяток тактов на разгон МК из сна. или нет?

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

От фьюзов зависит. То, что я с ходу углядел в даташите, говорит о 16384 тактах, то есть 2 мс на тактовой 8 МГц.

Меня больше смущает функция Beep. Что если она выставляет порты в какое-то неправильное состояние?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

10 hours ago, IMXO said:

ай не придирайтесь к словам, наличие задержки в лупе на 10мс полностью перекроит десяток тактов на разгон МК из сна. или нет?

Конечно. Но иногда хочется позанудствовать. ^_^

 

7 hours ago, COKPOWEHEU said:

То, что я с ходу углядел в даташите, говорит о 16384 тактах, то есть 2 мс на тактовой 8 МГц.

Право, не знаю, где именно Вы это увидели. Таблица 6-5 в разделе 6.2.2 Calibrated Internal 4.8/9.6 MHz Oscillator говорит о "Start-up Time from Power-down" равном 6CK, т.е. 6-ти тактам. Но лично мне столь быстрый выход из глубокого сна кажется подозрительным. Но, повторюсь, я никогда не использовал столь экзотические режимы работы микроконтроллеров.

 

6 hours ago, IMXO said:

возможно. а может millis включает собаку на время сна.

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

 

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

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

47 минут назад, El-Shang сказал:

Право, не знаю, где именно Вы это увидели.

Таблица 9-4, время старта из различных режимов при различных конфигурациях фьюзов: 16KCK из PowerDown/PowerSave и плюс 14CK+(0-65ms) из ресета.

 

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

45 минут назад, El-Shang сказал:

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

Спасибо, Добрый человек! Я уж думал совсем потерян этот мир. Что за дурацкая привычка сразу отправлять читать даташит. Просто прочитать и осмыслить 100 листов англ.текста для простого хобби по вечерам, ну не знаю. Почему не подсказать в чем конкретно проблема и как просто ее решить, и без всего этого пафоса. Второй раз и спрашивать неохота. Так хочется самоутвердиться за счет того, для кого это просто хобби? Ну ладно, самоутверждайтесь!

Теперь по делу.. Проблема была в millis(). Я посмотрел исходник, ничего не понял)) Немного покурил интернет, что подтвердило что с ней что то не то. В итоге подсчет времени сделал через delay() и вуаля, все заработало как надо.. Засыпает, потребление меньше 1 мкА, ниже мультиметр не дает. Просыпается по низкому фронту. Считаю число задержек по 200мс сколько мне нужно. На этом этапе потребление около 1-1.5мА в зависимости от V питания. И снова засыпаю с потреблением 1мкА. Все просто и работает так как мне нужно! 

Сделать простую сигнализацию открытой двери этого достаточно. Разбираться с числом тактов совсем не нужно для этого. Спасибо всем неравнодушным)) 

Ссылка на комментарий
Поделиться на другие сайты

1 hour ago, COKPOWEHEU said:

Таблица 9-4, время старта из различных режимов

Эм, а Вы в каком даташите такую таблицу видите? В последней версии доступной на сайте микрочипа таблицы из раздела 9 заканчиваются на индексе 9-2... Да и сам раздел 9 про прерывания, а не про тактирование.

 

1 hour ago, alxm said:

Спасибо, Добрый человек!

Да пожалуйста. Все с чего-то начинают. Хвала в небесам в школах и в институтах еще не посылают сразу в учебники, как только у учащихся вопросы возникают. А то совсем худо было бы.

 

1 hour ago, alxm said:

Теперь по делу.. Проблема была в millis(). Я посмотрел исходник, ничего не понял)) Немного покурил интернет, что подтвердило что с ней что то не то. В итоге подсчет времени сделал через delay() и вуаля, все заработало как надо..

Это странно, ибо говорит о том, что прерывание таймера выводит контроллер изо сна, а значит, что режим энергосбережения не "Power Down", а "IDLE" - это режим в котором останавливается только тактирование процессора и флеш-памяти, все остальное продолжает работат в штатном режиме. Как-то это не согласуется с тем что у Вас в коде написано. Надо смотреть в отладчике, что же на самом деле туда записывается, а то это догадки на кофейной гуще получаются. А вот Ваше решение есьм "костыль", коих нужно избегать всем приличным технарям (любителям тоже). Лучше разобраться в природе явления и в будущем подоходить к решению подобных проблем осознанно. B)

 

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, El-Shang сказал:

А вот Ваше решение есьм "костыль", коих нужно избегать всем приличным технарям (любителям тоже).

с этого собственно и начали тему:

23 часа назад, hasl сказал:

1. Используй нормальные инструменты для разработки ПО а не это г..о ардуино

а вы к этому умозаключению только к ее завершению дошли :)

Ссылка на комментарий
Поделиться на другие сайты

41 minutes ago, IMXO said:

а вы к этому умозаключению только к ее завершению дошли :)

Отнюдь. Я всего лишь имел ввиду, что автор до конца не выяснил первопричину своей проблемы и предпочел просто обойти ее. Это в ряде случаев вполне приемлимо, в тех-же одноразовых задачах. В конце-концов если оно работает и выполняет свою функцию, то что еще надо? Лишняя полировка также вредна как и безбожная халтура обмотанная синей изолентой. Кстати, заметка автору. Если Вы пишете на языке скетчей (не знаю, как он точно называется), то старайтесь по максимуму использовать уже готовые средства и не допускать мешанины из функций и регисторовых операций. Оберните последние в выделенную функцию с вменяемым именем. Оно и выглядеть и читаться будет гораздо приятней.

Оффтоп.

Что касается ардуины. Все эти бесконечные метания фекалий в ее сторону по моему мнению происходят либо от недопонимания ее целевого назначения либо из профессионального шовинизма, дескать, вон я какой крутой, пишу сразу в машинных кодах, а ардуинщики в своих скетчиках путаюся. Ха-ха-ха! Балбесы! Но. Давайте не будем забывать, что этот комплекс (а понимать ее надо именно как комбинацию языка, базы ("материнской платы") и переферийных модулей (шилдов) ) изначально разрабатывался как платформа для обучения студентов программированию "железа" и взаимодействию с "реальным" миром, и лишь опосля к ней подтянулись самодельщики и аматоры всех мастей. Получился эдакий "Basic" в мире низкоуровнего программирования, изрядно здавшего свои позиции в конце восьмидесятых - начале девяностых, когда начали уходит со сцены классические 8-ми и 16-ти битные компьютеры и начавшимся повальным переходом 32-х битных на операционную систему Windows, в коей прямой доступ к переферии в отличие от того-же DOS затруднен или вообще невозможен. И это уже не говоря о постепенном исчезновение класических портов, вроде LPT, Game Port, да и того-же RS-232, посредством которых можно было напрямую щелкать реле, зажигать лампочки, что-то читать и прочее.

И вот эту нишу и заняла ардуино. Стандартные модули, простой в освоении язык (вспоминаем basic, ага), широченный набор модулей - бери и пользуйся. И не надо нырять в дебри регистровых модели, системы команд, организации памяти и прочее. В нише "быстренько что-то сбацать" ей равных нет. Что-же в этом плохого? Да и в профессиональной сфере она тоже бывает полезна. Практический пример. Вы - механик-конструктор. Вы разработали прототип какого-то устройства и вам надо провести первоначальные ресурсные испытания, скажем, покрутить двигатель 10 секунд в одну сторону, остановиться, потом покрутить 10 секунд в другую, паралельно запоминая количество циклов. Вы можете пойти в соседний отдел электроники (если он у вас есть) и поставить задачу тамошним парням. А они ее сделают, как только найдут время (если найдут). Или вы можете заказать в первом попавшемся магазине ардуину, шилд с LCD и кнопками и парочку модулей с реле. Потратить полдня, чтоб прикрутить это все к доске, соединить проводами, набросать скетч, который всем этим управляет и запустить. И какой-же вариант предпочтительней?

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

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, El-Shang сказал:

Да пожалуйста. Все с чего-то начинают. Хвала в небесам в школах и в институтах еще не посылают сразу в учебники, как только у учащихся вопросы возникают. А то совсем худо было бы.

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

2 часа назад, El-Shang сказал:

Это странно, ибо говорит о том, что прерывание таймера выводит контроллер изо сна, а значит, что режим энергосбережения не "Power Down", а "IDLE" - это режим в котором останавливается только тактирование процессора и флеш-памяти, все остальное продолжает работат в штатном режиме. Как-то это не согласуется с тем что у Вас в коде написано. Надо смотреть в отладчике, что же на самом деле туда записывается, а то это догадки на кофейной гуще получаются. А вот Ваше решение есьм "костыль", коих нужно избегать всем приличным технарям (любителям тоже). Лучше разобраться в природе явления и в будущем подоходить к решению подобных проблем осознанно. B)

Вы правы насчет костылей. Это скорее разовая проба пера. На Attine85 в гораздо более сложном для меня проекте - такой проблемы не возникло. А этот МК вряд ли я где еще смогу использовать ввиду его характеристик и сложности отладки. А помимо программирования ведь еще сложности с аппаратной частью возникают. В общем невозможно изучить все аспекты одномоментно, потихоньку и двигаюсь вперед. В конце концов моя цель процесс, а не прийти к финишу первым))

Про стиль написания принято. Буду обращать на это внимание. С регистровыми операциями надо разобраться. 

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

Еще раз, Вам огромное Спасибо! Благодаря таким людям хочется двигаться вперед и изучать что то новое для себя. 

Ссылка на комментарий
Поделиться на другие сайты

2 hours ago, alxm said:

А этот МК вряд ли я где еще смогу использовать ввиду его характеристик и сложности отладки.

А это как посмотреть. Мой бывший коллега реализовал на его основе систему управления SRM - двигателем (это разновидность бесколлекторных электромоторов) в составе молочного сепаратора. Управляемый разгон, защита, стабилизация скорости - полный фарш. Программа заняла, если не ошибаюсь 95-98% свободного места. Правда, написана была на ассемблере, едва-ли на Сях получилось бы туда все вписать (ну, у меня не вышло :rolleyes: ). Снимаю перед его мастерством шляпу.

 

2 hours ago, alxm said:

У меня знакомый системотехник убеждает меня сразу начать с STMных МК.

Тоже своего рода религия. Чуть что — так нафиг восьмитки, давайте нам 32-х разрядные армы. И неважно, что у них чудовищная производительность, которая просто не нужна в любительских проектах (да и не во всех профессиональных тоже, но там еще другие факторы оказывают влияние). Неважно что их невероятная гибкость достигается усложнением конфигурирования (сравните, что нужно сделать для того, чтобы запустить кварцевый генератор в AVR и STM32). Неважно, что для четкого понимания их внутренностей надо перелопатить десятки и сотни страниц документации. Главное, что это круто. И точка.

Я Вас уверяю, если Вы поймете, как работает самый простой восьмибитный контроллер, то с легкостью перенесете и дополните эти знания на его старших собратьях. Да и современные AVR-ы ушли далеко вперед в сравнении с классикой. У них давно на борту  есть и цифроаналоговые преобразователи, и процессорно-независимая переферия и конфигурируемая логика и многое другое. Что правда, так это их меньшая распространненость и доступность, но у нас, на Украине, вполне можно заказать AtTiny214/414/814, в которых все это есть.

В общем, учитесь, разбирайтесь и никого не слушайте. Выучите алфавит - научитесь читать что угодно. Дорогу осилит идущий.

Успехов!

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, El-Shang сказал:

Эм, а Вы в каком даташите такую таблицу видите?

В том, который скачал когда-то. Функционал-то они не убирали, значит пользоваться можно. В общем, посмотрите комбинацию CKSEL0=1, SUT[1:0]=10

12 часов назад, alxm сказал:

Что за дурацкая привычка сразу отправлять читать даташит.

Вообще-то, с этого стоит начать. Не тыкаться же вслепую. Ну а если боитесь английского текста, есть отличный перевод-компиляция от Евстифеева "микроконтроллеры AVR семейства Mega".

11 часов назад, El-Shang сказал:

а значит, что режим энергосбережения не "Power Down", а "IDLE"

Что-то маловато потребление для Idle. Мне казалось, должно быть минимум в 10 раз больше.

11 часов назад, El-Shang сказал:

А вот Ваше решение есьм "костыль", коих нужно избегать всем приличным технарям (любителям тоже).

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

10 часов назад, El-Shang сказал:

Если Вы пишете на языке скетчей (не знаю, как он точно называется)

Вроде бы Wiring, но по факту это обычный C++ в понимании avr-g++.

5 часов назад, El-Shang сказал:

Программа заняла, если не ошибаюсь 95-98% свободного места. Правда, написана была на ассемблере

Эх, напомнило "историю одного байта"

5 часов назад, El-Shang сказал:

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

Полностью поддерживаю!

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...