Главная » Микроконтроллеры » Digispark ATtiny85 — датчик температуры DS18B20 и 0,96-дюймовый OLED-дисплей

Digispark ATtiny85 — датчик температуры DS18B20 и 0,96-дюймовый OLED-дисплей

Digispark — платформа разработки на базе микроконтроллера ATtiny85. Им можноуправлять и программировать из Arduino IDE напрямую через USB-кабель.

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

Функционал Digispark

  • Питание от USB или блока питания 7 – 35В
  • Встроенный стабилизатор 5В/500мА
  • Поддержка USB (программная)
  • 6 линий I/O
  • 3 линии PWM (аппаратный)
  • 4 линии АЦП (аналоговые входы)
  • 8 кБ флэш-памяти (в том числе ок. 2кБ занято загрузчиком)
  • Интерфейс I2C или SPI с использованием USI
  • Светодиоды — питания и пользовательский, подключенный к выводу P0 или P1 (в зависимости от версии модуля)

Digispark не имеет никаких USB-чипов. Вся работа выполняется программно с помощью встроенного загрузчика под названием Micronucleus. Цена удобства этого решения — потребление около четверти доступной флеш-памяти, то есть около 2кБ. Кроме того, при этом блокируется вывод RESET (PB5), что делает невозможным ISP программирование (внутрисистемное программирование).

 Распиновка платы Digispark

 Распиновка платы Digispark

Контакты, используемые для программирования через USB (3 и 4), во время программирования должны быть свободны (ни к чему не подключены). После программирования вы можете использовать их как обычно, если вам не нужно использовать последовательное соединение, например, для отправки данных на терминал. Ограничения платформы более подробно описаны в wiki-странице продукта, и вам следует ознакомиться с ними перед началом работы с модулем.

 Схема принципиальная платы Digispark

Выше я писал о то, что данная платформа предназначена для простых задач из-за количества памяти и контактов. С другой стороны, в библиотеку включено большое количество примеров, которые показывают возможности платы и облегчают начало работы с ней. Правда на практике это иногда бывает сложно, с чем я столкнулся при попытке подключить датчик HC-SR04.

Программирование

Для использования платы, все, что вам нужно, это кабель с MicroUSB разъемом. Сперва вы должны настроить Arduino IDE и установить соответствующие драйверы (Micronucleus). Все подробно описано на wiki-странице Подключение и программирование вашего Digispark.

Я скачал версию micronucleus-2.0a4-win, но код был написан и работал на 1.8.7 IDE (требуется версия 1.6.5+). В этой версии я импортировал поддержку Digispark через Boards Manager, как описано на упомянутой выше странице.

Я выбрал платформу «Digispark (по умолчанию — 16,5 МГц)». В общем, в меню Файл / Примеры / Digispark есть много интересных примеров. Я выбрал из них два, из которых в дальнейшей части статьи я построю простой монитор температуры.

Стоит также упомянуть о DigisparkExamplePrograms. В каталоге DigisparkExamplePrograms / Python / DigiUSB находятся такие программы, как digiscope.exe или monitor.exe, которые работают с Digispark (если не используются контакты, соответствующие USB-соединению).

Первая программа показывает графики, а вторая — последовательный терминал. Примеры использования доступны в среде IDE в разделе «Файл / Примеры / DigisparkUSB». Они используют файл DigiUSB.h.

Есть еще один способ связи через USB с использованием файла DigiCDC.h (File / Examples / DigisparkCDC), и этот способ имеет то преимущество, что достаточно обычного терминала с Arduino IDE.

Сам процесс программирования выглядит следующим образом:

  • После нажатия кнопки «Загрузить» на информационной панели, в нижней части среды IDE появиться следующее сообщение: «Запуск Digispark Uploader… Подключите устройство сейчас… (время ожидания истекает через 60 секунд)»
  • На этом этапе мы подключаем Digispark и загружаем код.
  • После загрузки загрузчик завершает работу и загруженная программа запускается.

Ввод в эксплуатацию

В качестве демонстрации я написал практический пример в виде мониторинга температуры с помощью датчика DS18B20, работающего по протоколу 1-Wire.

Результат измерения отображается на небольшом OLED-дисплее (драйвер SSD1306), управляемом по I2C шине.

Код программы это, по сути, компиляция кода из двух примеров, касающихся перечисленных систем (DS18B20 и OLED-дисплея). Кроме того, код сделан максимально коротким, чтобы уместить его в память Attiny. Хотя это и так, но использование памяти достигло 100% (6012 байт). Из-за этого, как видите в коде, закомментированной является функция проверки контрольной суммы.

Здесь я столкнулся с двумя проблемами, как и в предыдущем проекте (с датчиком HC-SR04). Во-первых, быстро заканчивается FLASH-память, а во-вторых, это распределение контактов. 1-Wire не хотел работать на контакте P1, помогла замена на контакт на P3.

Код термометра

#include <DigisparkOLED.h>
#include <OneWire.h>
#include <Wire.h>

OneWire ds(3);
byte addr[8];

void setup() 
{
  oled.begin();
}

void loop() 
{
    byte data[12];
    byte i;

    if (!ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }

    /*if (OneWire::crc8(addr, 7) != addr[7]) {
        return;
    }*/

    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1);
    delay(1000);
    ds.reset();
    ds.select(addr);    
    ds.write(0xBE);

    for ( i = 0; i < 9; i++) {
      data[i] = ds.read();
    }

    int16_t raw = (data[1] << 8) | data[0];
    byte cfg = (data[4] & 0x60);

    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;
    else if (cfg == 0x40) raw = raw & ~1;

    oled.clear();
    oled.setCursor(0, 0);
    oled.setFont(FONT8X16);
    oled.print(raw / 16);
    oled.print(".");
    oled.print(raw % 16);
    delay(5000);
}

Из-за удобочитаемости я удалил комментарии. Их можно найти в примерах DS18B20 и OLED.
Еще одно важное замечание — DS18B20 требует подтягивающего резистора (4,7 кОм) между входом и напряжением питания — у моего модуля он уже был. Отсюда его отсутствие на схеме подключения.

3 комментария

  1. Михаил

    В скетче ошибки. По два раза повторения в одной строке

  2. Неопознанное устройство. После заливки скетча

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*