Барограф и таймер

Тема в разделе "Arduino & Shields", создана пользователем P.Popov, 11 фев 2020.

  1. P.Popov

    P.Popov Нуб

    Сделал барограф на Piranha Ultra и Trema модуле барометра BMP280.

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

    - Есть сильное подозрение в том, что I2C, по которой подключён BMP280, конфликтует с TIMER1.
    - Есть отрывочные знания о том, что в atmega1284P (Piranha Ultra) существует ещё один 16-разрядный таймер, помимо TIMER1.

    Вопрос в том, можно-ли использовать дополнительный таймер atmega1284P для прерываний, и как к нему добраться?
     
  2. parovoZZ

    parovoZZ Гуру

    что это?

    не зная броду не лезь в воду

    I2C не может конфликтовать вообще ни с чем - аппаратно он ни на что не завязан.

    открыть даташит и почитать религия не позволяет?
    timer.png

    Есть замечательная книжка Евстифеева про МК AVR - там всё описано.
     
  3. P.Popov

    P.Popov Нуб

    - Piranha Ultra - это аналог Arduino Uno на Atmega1284P
    Уже радует
    Позволяет, поверьте! Поменял TIMER1 на TIMER3 - эффект сохранился!
    Спасибо, обязательно почитаю!
     
  4. parovoZZ

    parovoZZ Гуру

    там ведь есть миллис - зачем ломать фреймворк?
     
  5. P.Popov

    P.Popov Нуб

    Работать должно "вечно" и от аккумулятора в автономных условиях. Потому миллисы и дэлэи отмёл. Жрать электричество будут, да и unsigned long не бесконечен.
    К тому-ж DOS-овские пережитки 35-летней давности покоя не дают! ;)
     
  6. KindMan

    KindMan Гик

    А что ещё, кроме
    этого вы предприняли, для экономии электроэнергии? (Не хочу вас расстраивать, но миллис считает, даже если вы его в коде не вызываете)
    Вы тоже из секты свидетелей переполнения миллис?
    У господина @parovoZZ есть тема на этом форуме, про экономию электроэнергии в МК, он здесь, наверное, в этом вопросе самый компетентный.
     
  7. parovoZZ

    parovoZZ Гуру

    А между вызовами прерываний МК чем занят?
     
  8. parovoZZ

    parovoZZ Гуру

    я вот сейчас немного рекламу сделаю.
    Вот здесь я описываю, как отмерять равные промежутки времени (но по факту "не менее, чем ...") и не беспокоиться о переполнении счетчика таймера. Ну т.е. он переполняется (счетчик 16 бит), но на выполнении кода это никак не отражается.
    https://breadboard.ru/607/реализовать-алгоритм-плавного-увеличения-яркости-светодиода?show=700#a700
     
    P.Popov нравится это.
  9. P.Popov

    P.Popov Нуб

    Ну вот! "Напали на свеженького" :confused:
    Наверное, надо объясниться...
    :D
    Ну, тут Вы меня не удивили. Пусть себе считает, но вызов его - жрать будет, или опять не так?
    Вообще, у меня есть стойкое подозрение в том, что loop() или main(), как скажете, должен быть пустым. Нечего его гонять. Всё должно выполняться "с пинка", то есть, по прерыванию. Или опять я, чайник престарелый, не прав?
    Мой опыт программирования 8086 на С и Assembler начался 35, а закончился 25 лет назад, а Ардуину я первый раз взял в руки три недели назад... Наверное, я безнадёжно отстал, потому и "припадаю" к помощи гуру...
     
    Последнее редактирование: 12 фев 2020
  10. P.Popov

    P.Popov Нуб

    Ух!
    Покруче любого даташита будет! Спасибо огромное. Пойду "курить"...
     
  11. parovoZZ

    parovoZZ Гуру

    и если он будет пустым, проц остановится? Нет.

    хотелось бы, чтобы это было так, но современный МК это не древний 8086.
     
  12. P.Popov

    P.Popov Нуб

    Гы-гы! :D
    Вернулся к прежнему скетчу - датчик продолжил выдавать "цены на дрова"!
    А этот скетч у меня работал три дня назад!
    Похоже, что "дело было не в бобине"! :confused::cool:
    Скорее всего, датчик "спёкся". Буду менять!
    Всем огромное спасибо! Узнал много нового.
    Пардон, за беспокойство!
     
  13. b707

    b707 Гуру

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

    Что касается энергии - МК "жрет" абсолютно одинаково, вне зависимости от того, крутите вы бесконечный ЛУП или ждете прерываний.
    ДЛя снижения потребления необходимо переводить МК в режим сна, а для этого надо использовать не основные таймеры 1-4, а таймер ватчдога.
     
    P.Popov нравится это.
  14. P.Popov

    P.Popov Нуб

    Спасибо! Разберусь с датчиком - продолжу изыскания!