Jump to content
alxm

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

Recommended Posts

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

#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(). Почему так?

Share this post


Link to post
Share on other sites
24 минуты назад, alxm сказал:

Почему так?

потомушта даташит.

Share this post


Link to post
Share on other sites

Вебинар «МЭМС-датчики ST для работы со звуком – новые возможности» (28.10.2020)

28 октября все желающие приглашаются для участия в вебинаре, посвященном семейству МЭМС-датчиков STMicroelectronics для акустических приложений. Предметом детального рассмотрения на вебинаре станут микрофоны, их топологии применения и возможности. Вы услышите о новых мультирежимных широкодиапазонных микрофонах с нижним портом и PDM-интерфейсом для систем с батарейным питанием.

Подробнее

Криво написан основной цикл

Дурной тон использовать while в основном цикле без RTOS

чо взять от ардуинщика ......

Share this post


Link to post
Share on other sites

STM32L562E-DK – первая отладочная платформа ST на ядре ARM Cortex-M33

STMicroelectronics представляет демонстрационно-отладочную платформу на базе ядра Cortex-M33 – STM32L562E-DK. Данная платформа основана на микроконтроллере нового семейства – STM32L5. STM32L562E-DK позволяет разработчику в полной мере раскрыть и опробовать новые возможности микроконтроллеров STM32L5 с тщательно проработанным функционалом для обеспечения высокого уровня безопасности и защиты.

Подробнее

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

Share this post


Link to post
Share on other sites

Тест уровня кондуктивной помехи электронного устройства

Электромагнитная совместимость (ЭМС) является важным параметром электронных устройств, особенно это актуально в современном мире, насыщенном разнообразными гаджетами. Специалисты компании Mornsun подготовили видеоролик по тестированию одной из составляющих ЭМС – кондуктивной помехи.

Подробнее

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

 

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

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

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

 

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

 

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

Share this post


Link to post
Share on other sites
1 час назад, alxm сказал:

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
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;

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

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

Edited by El-Shang

Share this post


Link to post
Share on other sites
1 час назад, El-Shang сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
Posted (edited)

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

2 hours ago, IMXO said:

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

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

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

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

Edited by El-Shang

Share this post


Link to post
Share on other sites
3 часа назад, El-Shang сказал:

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

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

 

 

 

Share this post


Link to post
Share on other sites

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

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


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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Posted (edited)
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: Может быть даже навсегда и мы никогда не узнаем, что же у него там приключилось на самом деле.

Edited by El-Shang

Share this post


Link to post
Share on other sites
47 минут назад, El-Shang сказал:

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

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

 


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

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

Share this post


Link to post
Share on other sites
45 минут назад, El-Shang сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
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)

 

Edited by El-Shang

Share this post


Link to post
Share on other sites
3 минуты назад, El-Shang сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
41 minutes ago, IMXO said:

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

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

Оффтоп.

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

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

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

Edited by El-Shang

Share this post


Link to post
Share on other sites
1 час назад, El-Shang сказал:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
Posted (edited)
2 hours ago, alxm said:

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

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

 

2 hours ago, alxm said:

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

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

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

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

Успехов!

Edited by El-Shang

Share this post


Link to post
Share on other sites
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 раз.

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения


  • Мультиметр ANENG Q1

×
×
  • Create New...