Adafruit arduino pro mini

Arduino pro mini @ 1MHz — 1.8V

I’m always trying to find the best option for low power consumption projects. Using the Arduino pro mini at 1MHz and 1.8V gives new perspectives!

Jean-Matthieu DECHRISTE

During my water tank project, I realized that even with 3 AAA batteries, the voltage will go below 3.3V quite quickly :


Extract from AAA Energizer datasheet

If I extrapolate, it will remain around 25% of capacity of each battery when the voltage will be at 3.3V (1.1V per battery).

The cut-off voltage of these batteries is 0.8V. With 3 batteries, I will get 2.4V.
The ATmega328P will still work under this voltage, but only at 8MHz (which is the frequency of the Arduino Pro Mini 3.3V).

But why stop here ? With 2 batteries, it will go lower than 1.8V.
For that, we need to have a maximum frequency of 4MHz.

From what I understand, we have two options :

  1. Change the crystal oscillator of the Arduino
  2. Use the internal oscillator of the ATmega chip, and go down to 1MHz

Today, I will try the second option. I think that it is possible to change the crystal of some Arduino Pro Mini (it has to be visible), but I don’t have the pieces for the moment.

Internal RC oscillator

Atmega datasheet: By default, the Internal RC Oscillator provides an approximate 8MHz clock. Though voltage and temperature dependent, this clock can be very accurately calibrated by the user.

I don’t have the equipment to calibrate the oscillator. But as I don’t make a time sensitive device, I don’t think it will ba a problem. The factory calibration accuracy is +/-10% (as the user calibration accuracy is +/-1%).

The oscillator input can be selected through the fuses of the ATmega.
The fuses can be program to configure the chip. Contrary to what the name suggests, the fuses configuration is reversible. However, some of them are used to enable/disable some functionalities used to flash the ATmega (external reset, serial programming. ) so be careful to check your modifications before applying them.

Flashing process

If you don’t already know, the classical way to use the Arduino, is to have a bootloader (small program), started at the reset of the atmega.
The bootloader enable us to change the active sketch through the serial port (write into memory), read memory, get device signature, and so on. It also starts the uploaded sketch when programming mode is not started through the serial port.
On the ATmega328p, the bootloader can have 4 different sizes (256 bytes, 512 bytes, 1024 bytes or 2048 bytes).

With the ATmega328p, two bootloaders are commonly used:

  • ATmegaBOOT (2kB), original Arduino bootloader [GitHub];
  • Optiboot (500 bytes), lighter bootloader, default with Arduino Uno [GitHub].

You will find other bootloaders for Arduino Mega (ATmega1280) for example.

The second way to use the ATmega, is to program it with an ISP programmer , which doesn’t need the bootloader. As such, the bootloader can be removed, allowing a memory gain up to 2kB (depends on the bootloader).

As we want to change the frequency of the ATMega328p, we have two options :

  1. Bypass the bootloader, programming the atmega directly with the ISP programmer;
  2. Flash a compatible bootloader on the Arduino with the ISP programmer.

Whatever option is used, an ISP programmer is required.

Moreover, if you want to use a bootloader, you need to compile it (or find it somewhere on the internet), as the Arduino IDE does not come with a compliant bootloader.
For now, I will bypass the bootloader as I don’t want to install the toolchain required to build it.

Changing the fuses

To change the fuses, you cannot use the serial / USB link. You will need an ISP programmer. Same remark with the Arduino Uno and the Arduino Nano.

Note: if we used the bootloader method with the Arduino IDE, the fuses will be automatically changed during the bootloader flashing process (always through the ISP programmer).

The ATmega328p has 3 fuses (+2 special fuses, not mentionned here), 1 byte each :

Please note:

  • A bit set to «1» is «unprogrammed», and a bit set to «0» is «programmed»;
  • Some numerical values refer to fuses containing undefined bits. Depending on the target device these fuse bits will be read either as «0» or «1». Everything is fine if the values read from the device are either the same as programmed (for AVRdude software, use «1», for Arduino IDE, use «0» for undefined bits with atmega328p).
  • The «default value» column of the datasheet is for standalone chips. For the Arduino chip, the fuses configuration is different.

Datasheet extract

Following paragraphs are extracted from the Atmel datasheet.

Источник

Анатолий Беляев (aka Mr.ALB). Персональный сайт

Да пребудут с вами Силы СВЕТА!

2022-09-23
Добавлено изречение
№117

2022-09-22
Добавлено изречение
№116

2022-09-22
Добавлено изречение
№115

2022-09-22
Добавлено изречение
№114

2022-09-22
Добавлено изречение
№113

2022-09-22
Добавлено изречение
№112

2022-09-22
Добавлено изречение
№111

2022-09-22
Добавлено изречение
№110

2022-09-22
Добавлено изречение
№109

2022-09-22
Добавлено изречение
№108

2022-09-22
Добавлено изречение
№107

2022-09-22
Добавлено изречение
№106

2022-09-22
Добавлено изречение
№105

2022-09-22
Добавлено изречение
№104

2022-09-22
Добавлено изречение
№103

2022-09-22
Добавлено изречение
№102

2022-09-22
Добавлено изречение
№101

2022-09-22
Добавлено изречение
№100

2017-01-19
Добавлен раздел
Веды

Барометр на BMP280, BME280

Продолжаю модернизацию скетча, размещённого на предыдущей странице #4 Тестируем BMP280 . Подключаем графический экран Nokia 5110, на который будем выводить информацию о давлении, температуре и высоте.

В процессе разработки и тестирования базовой программы, добавил пришедший из Китая датчик влажности DHT22. А из-за выявленной капризности дисплея Nokia5110, далее переделал программу для вывода информации на малюсенький дисплейчик типа OLED SSD1306 с разрешением 128*64. Мой вариант – как вывести полную информацию на русском языке .

На странице ниже переделка программы для вывода информации на дисплей типа TFT ST7735 1.8 дюйма с разрешением 128*160 точек.

Пришла посылка с датчиком BME280. Он позволяет измерять давление, высоту, температуру и влажность одновременно. Барометр на этом датчике.

По просьбам читателей у барометра на BME280 применён вывод давления в разных системах измерения (мм рт.ст. или кПа).

Варианты

Использование дисплея Nokia 5110

Для вывода большего количества информации удобно использовать графический дисплей.

Графический экран Nokia 5110 имеет размеры 84 * 84 пикселя (точки). Размер самой платы экрана 43 * 45 мм. Подключение осуществляется через 8 контактов внизу экрана.

Pic 1. Дисплей Nokia5110

Напряжение питания Nokia 5110 составляет 3.3В, как и у модуля BMP280.

Для вывода информации на экран, используются библиотеки и .

Все соединения модуля и экрана с Arduino указаны на схеме. Контакты Arduino можно использовать не обязательно такие как у меня, а любые свободные, при условии соответствующего изменения в скетче, однако, указанные контакты используют аппаратное подключение по SPI, что работает быстрее, чем программное подключение на других контактах.

Pic 2. Схема для скетча #5

На монтажную панельку добавляем ещё одну кнопку SB2, с помощью которой будем управлять яркостью подсветки экрана.

Pic 3. Реализация скетча #5

Вывод информации на экране осуществляется в три строки.

Pic 4. Работа дисплея Nokia5110

Четвёртая строка внизу используется для вывода шага подсветки. Шаг подсветки равен 10%. После 100% яркости подсветки, нажатие кнопки SB2 переводит в отключение подсветки, т.е. яркость равна 0%. Изменение градации подсветки циклическое.

Pic 5. Работа подсветки дисплея Nokia5110

После всех подключений модулей к плате Arduino, переходим к скетчу (программе).

Скетч барометра на модуле BMP280 и
экране Nokia 5110

Особо трудных моментов при подключении дисплея нет. Используя библиотеки, делаем соответствующую настройку.

Ниже скетч барометра:

  • Скачать скетч для : bmp280_Nokia5110.zip
  • Скетч проверки дисплея: Nokia_5110_test.zip

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

Если необходимо уменьшить код, то вывод информации в последовательный порт можно удалить и оставить лишь вывод на дисплей.

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

Возможно сделаю такую модернизацию программы и ниже на странице её размещу, если будет интерес продолжить это направление.

Код закоментирован достаточно подробно и понятно.

P.S. Попользовался таким дисплеем и обратил внимание, что он какой-то капризный. Всё время у него гуляет контакт на индикатор. Всё время плавает контрастность от совсем невидимого до чёрного даже фона. Может быть это мне такой попался экземпляр.

P.P.S. Программу изменил и дополнил. Теперь у меня добавлен датчик влажности DHT22 . На дисплей выводится температура и значение влажности и с него. А яркость подсветки дисплея выводится на чистый экран с дополнительным прогресс баром.

Используемые библиотеки и скетч:

  • Adafruit_BMP280_Library.zip
  • Adafruit_PCD8544_Nokia_5110_LCD_library.zip
  • Adafruit_GFX_Library_master.zip
  • Button.zip
  • Скетч: sketch__5.zip
  • Скетч с датчиком DHT22 : bmp280_nokia5110_dht22.zip
  • Скетч проверки дисплея: Nokia_5110_test.zip

Использование дисплея OLED SSD1306

Из-за капризности дисплея Nokia5110, переделал программу для вывода информации на малюсенький графический дисплейчик типа OLED SSD1306 с разрешением 128*64 точки.

Pic 6. Использование дисплея OLED SSD1306

При использовании библиотеки можно установить шрифт SmallFontRus, который выводит на экран символы 6*8 пикселей, что позволяет вывести на экран 8 строк информации. Мелковато, конечно, лучше бы использовать, больший дисплей, что позволит вывести символы с разрешением 12*16 пикселей. При использовании OLED дисплея есть приятное преимущество – нет необходимости использования подсветки, в итоге используется лишь одна кнопка для обнуления высоты.

  • Скетч: OLED_128_32_bmp280.zip
  • Используемая библиотека: iarduino_OLED_txt.zip
  • Библиотека кнопок: Buttons.zip

Использование дисплея TFT ST7735 128*160 1.8 дюйма

Это уже более качественный графический диспей. Позволяет выводить любые изображения в цвете.

Получил посылку из Китая с новым цветным TFT ЖК-дисплеем. Контроллер обработки дисплея ST7735. Разрешение 128*160 точек размером 1.8 дюйма.

Ниже представлена схема соединений. Контакты Ардуино выбраны для использования аппаратного подключения дисплея для быстроты обновления экрана.

Pic 7. Схема для скетча #5 v3.2

В скетче использую разный цвет при выводе значения влажности. До 30% – красный, от 30% до 60% – жёлтый, от 60% до 75% – зелёный, свыше 75% – синий. Так визуально легко ориентироваться на диапазон влажности..

Pic 8. Использование дисплея TFT ST7735 128*160 Pic 9. Использование дисплея TFT ST7735 128*160

При использовании этого дисплея вернул кнопку подсветки, как с дисплеем Nikia5110. Этой кнопкой можно регулировать подсветку ЖК-дисплея, подавая ШИМ на вывод BL. По умолчанию поставил на 10% – для экономии энергии. При нажатии на кнопку прибавляется 10% яркости, после почти 100%(реальная 98%) яркость выключается (0%) и т.д. по кругу.

Pic 10. Режим регулировки подсветки экрана

Скетч обновлённой программы тут: TFT_128_160_bmp280.zip

Модернизировал скетч под мобильный вариант . Теперь можно собрать конструкцию и получится карманный барометр-погодная станция. Через порт А0 (контакт 14) происходит измерение напряжения питания Li-Ion +3.7В батареи и выводится значение на экран в виде цифрового значения и пиктограммки. Li-Ion батарея питает DC-DC преобразователь выдающий +5В, которым запитывается Arduino с дисплеем и модулями. Скетч обновлённой программы тут: TFT_128_160_bmp280_v3.1.zip

Ещё одна модернизация . Заметил, что не совсем хорошо, когда обновляются все надписи на экране, поэтому в новой версии обновляются только изменяющиеся значения. Дополнительно основные блоки выделены в функции. Ещё, если Arduino подключено к компьютеру, то значение напряжения питания батареи и её пиктограмка не выводятся. Скетч обновлённой программы тут: TFT_128_160_bmp280_v3.2.zip

Барометр на Arduino Pro Mini и датчиках BMP280 и DHT22

Схема этого варианта создана на базе Arduino Pro Mini, она включает в себя стабилизатор на +3.3В, подробнее про который можно посмотреть на странице Ардуино (Arduino). #7. В остальном схема подобна предыдущей.

Pic 11. Схема для скетча #5 v3.3 на Arduino Pro Mini Pic 12. Вариант на Arduino Pro Mini Pic 13. Вариант на Arduino Pro Mini

На фото видно использование самодельного модуля стабилизатора на 3.3В, для питания модуля барометра BMP280.

Так дело пойдёт, то ещё немного и оформлю всю конструкцию в корпус как законченное устройство, пока же идёт тестирование работоспособности и удобства эксплуатации . если дело дойдёт до корпуса, то обязательно опубликую законченную конструкцию.

Барометр на Arduino Pro Mini и датчике BME280

Некоторые читатели просили сделать вариант на датчике BME280. Поэтому купил на Алиэкспрессе такой датчик и построил новый вариант барометра.

Схема этого варианта создана на основе предыдущего. Вместо датчиков BMP280 и DHT22 применён датчик BME280, который позволяет измерять одновременно давление, высоту, температуру и влажность, что очень удобно для создания карманного варианта барометра.

Для правильного управления цветом дисплеев TFT на контроллере ST7735, был создан вычислитель соответствия цветов кодировок RGB888 и RGB565 (Ардуино (Arduino). #9. Вычислитель RGB888 и RGB565), чем и воспользовался при программировании в этом варианте.

Этот барометр построен, как и предыдущий, на Ардуино Про Мини, но можно использовать любую другую плату, без особой переделки схемы.

У моего BME280 напряжение питания от 1.8 В до 5 В, поэтому отпадает необходимость в стабилизаторе на +3.3 В. Схема упрощается.

Ниже на фото видны компоненты барометра: Адруино Про Мини, BME280, DC-DC преобразователь на +5 В, аккумулятор от сотового телефона Li-Ion +3.7 В, две кнопки.

Pic 14. Вариант на Arduino Pro Mini и датчике BME280 Pic 15. Вариант на Arduino Pro Mini и датчике BME280

Ниже публикую скетч, его можно скопировать в ARDUINO IDE, но можно использовать уже готовый файл TFT_128x160_BME280.ino , см. ниже скетча.

Используемые библиотеки (обновлены) и скетч:

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

Барометр c разными системами измерения давления

Некоторые читатели просили сделать вариант, в котором бы давление измерялось не в мм рт. ст. , как в России, а в Европейском варианте, к примеру, в Паскалях или кило Паскалях. Вариант с кПа более удобен.

Библиотеку с опросом кнопок я использую как и прежде, только переименовал, так как среда IDE пытается под именем Button обновить библиотеку от совершенно другого автора. Чтобы не перепуталось, переименовал в Buttons (На мой взгляд предыдущее название Button_2 несколько неудобное) .

Особенностью новой версии является то, что кнопка установки нулевого уровня для измерения высоты применяется и для изменения системы измерения. При нажатии на эту кнопку в течении 2.1 секунды и более происходит смена системы измерения с мм рт. ст. на кПа . Если была система измерения в кПа , то по нажатии на кнопку происходит переход на измерение обратно в мм рт. ст.

При быстром клике на кнопке – происходит обнуление высоты, как и в передыдущей версии.

Модернизированный скетч представлен ниже и для скачивания имеется уже готовый вариант (см. ниже) .

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

Используемые библиотеки (обновлены) и скетч:

Оказывается, что и это ещё не окончание, так как есть мысль добавить внешний датчик измерения температуры, тогда этот барометр станет более универсальным. Позволит измерять не только внутреннюю температуру по датчику BME280, но и внешнюю температуру. Для точных измерений подходит датчик ф. Даллас DS18B20 и ему подобные.

Такой датчик я уже использовал при разработке МТР-1.2 . Его и применим в дальнейшей модернизации этого барометра, который уже превращается в погодную станцию.

Прихожу к мнению, что пора делать конструкцию этого устройства. Как будет свободное время, то займусь разработкой.

Источник

Adblock
detector