Сделал барограф на Piranha Ultra и Trema модуле барометра BMP280. Всё работало отлично до тех пор, пока не решил делать замеры по прерыванию таймера. Замеры по таймеру вызываются когда нужно, но датчик стал выдавать "цены на дрова в Конотопе". Давление от замера к замеру скачет чуть не вдвое, вылезают отрицательные температуры... - Есть сильное подозрение в том, что I2C, по которой подключён BMP280, конфликтует с TIMER1. - Есть отрывочные знания о том, что в atmega1284P (Piranha Ultra) существует ещё один 16-разрядный таймер, помимо TIMER1. Вопрос в том, можно-ли использовать дополнительный таймер atmega1284P для прерываний, и как к нему добраться?
что это? не зная броду не лезь в воду I2C не может конфликтовать вообще ни с чем - аппаратно он ни на что не завязан. открыть даташит и почитать религия не позволяет? Есть замечательная книжка Евстифеева про МК AVR - там всё описано.
- Piranha Ultra - это аналог Arduino Uno на Atmega1284P Уже радует Позволяет, поверьте! Поменял TIMER1 на TIMER3 - эффект сохранился! Спасибо, обязательно почитаю!
Работать должно "вечно" и от аккумулятора в автономных условиях. Потому миллисы и дэлэи отмёл. Жрать электричество будут, да и unsigned long не бесконечен. К тому-ж DOS-овские пережитки 35-летней давности покоя не дают!
А что ещё, кроме этого вы предприняли, для экономии электроэнергии? (Не хочу вас расстраивать, но миллис считает, даже если вы его в коде не вызываете) Вы тоже из секты свидетелей переполнения миллис? У господина @parovoZZ есть тема на этом форуме, про экономию электроэнергии в МК, он здесь, наверное, в этом вопросе самый компетентный.
я вот сейчас немного рекламу сделаю. Вот здесь я описываю, как отмерять равные промежутки времени (но по факту "не менее, чем ...") и не беспокоиться о переполнении счетчика таймера. Ну т.е. он переполняется (счетчик 16 бит), но на выполнении кода это никак не отражается. https://breadboard.ru/607/реализовать-алгоритм-плавного-увеличения-яркости-светодиода?show=700#a700
Ну вот! "Напали на свеженького" Наверное, надо объясниться... Ну, тут Вы меня не удивили. Пусть себе считает, но вызов его - жрать будет, или опять не так? Вообще, у меня есть стойкое подозрение в том, что loop() или main(), как скажете, должен быть пустым. Нечего его гонять. Всё должно выполняться "с пинка", то есть, по прерыванию. Или опять я, чайник престарелый, не прав? Мой опыт программирования 8086 на С и Assembler начался 35, а закончился 25 лет назад, а Ардуину я первый раз взял в руки три недели назад... Наверное, я безнадёжно отстал, потому и "припадаю" к помощи гуру...
и если он будет пустым, проц остановится? Нет. хотелось бы, чтобы это было так, но современный МК это не древний 8086.
Гы-гы! Вернулся к прежнему скетчу - датчик продолжил выдавать "цены на дрова"! А этот скетч у меня работал три дня назад! Похоже, что "дело было не в бобине"! Скорее всего, датчик "спёкся". Буду менять! Всем огромное спасибо! Узнал много нового. Пардон, за беспокойство!
можете почитать на досуге, полезно. но для вашего барографа все эти прерывания и таймеры лишние. Ваша программа отлично пишется на миллис. Что касается энергии - МК "жрет" абсолютно одинаково, вне зависимости от того, крутите вы бесконечный ЛУП или ждете прерываний. ДЛя снижения потребления необходимо переводить МК в режим сна, а для этого надо использовать не основные таймеры 1-4, а таймер ватчдога.