| Ваш IP: 3.230.1.126 | Online(8) - гости: 6, боты: 2 | Загрузка сервера: 1.37 ::::::::::::


Плата Digispark с Arduino Attiny85

Плата Digispark с микроконтроллером ATtiny85 который является младшим  в линейке микроконтроллеров Atmel. Плата Digispark предназначена для разработки уст-в с минимальными требования к периферии. Плата подключается непосредственно в USB разъем.

Питание на плату поступает от USB разъема, но так же можно использовать внешний источник +5 В при подключении к контакту 5V или от 7 до 12 В при подключении к контакту VIN. На плате Digispark расположено всего 6 цифровых выводов (помимо GND 5V и VIN). Каждый вывод в зависимости от настроек может иметь разное назначение:

  • P0 — ARef, SDA, DI, PWM
  • P1 — DO, PWM
  • P2 — D/A, SCK
  • P3 — D/A, USB+
  • P4 — PWM, D/A, USB-
  • P5 — D/A

Характеристики платы довольно скромные, но тем не менее для многих проектов этого будет достаточно:

  • Микроконтроллер: ATTINY85
  • Внутренний генератор: 8 МГц
  • Встроенный умножитель частоты: 8
  • Объем памяти программ: 8 Килобайт (из низ 2 Килобайт — загрузчик)
  • SRAM 512 байт
  • EEPROM 512 байт
  • 2 таймера
  • Аппаратные интерфейсы: SPI, I2C
  • ШИМ: 3 канала
  • АЦП: 4 канала
  • Индикаторы: Питание Состояние (Pin0)

Для того чтобы начать программировать в среде Arduino IDE необходимо добавить плату Digispark:

  • Файл > Настройки > Дополнительные ссылки для менеджера плат

Добавьте строчку: http://digistump.com/package_digistump_index.json

Далее откройте менеджер плат:

  • Инструменты > Платы > Менеджер плат

Выберите платы: Digistump AVR Boards by Digistump

Далее выбираем плату Digispark (Default — 16,5mhz):

После выбора платы можно загружать скетчи. Перед загрузкой скетча плата Digispark должна быть удалена из USB разъема, после нажатия на кнопку «Загрузка» необходимо в течении 60 секунд вставить плату Digispark в USB разъем, после чего начнется загрузка скетча. Такая процедура загрузки скетчей связана с тем, что при старте контроллер он ждет загрузки кода через USB порт в течение 5 секунд, а потом переключается в режим исполнения имеющегося в памяти контроллера кода.

Для примера загрузите тестовый скетч, после загрузки которого начнем мигать светодиод расположенный на плате Digispark.

void setup(){
  pinMode(1,OUTPUT);
  }

void loop(){
  digitalWrite(1,HIGH);
  delay(1000);
  digitalWrite(1,LOW);
  delay(1000);
  }

Для примера использования платы Digispark можно собрать простые часы, в которых будет использован LCD1602 c I2C модулем. I2C модуль на базе микросхем PCF8574 позволяют подключить символьный дисплей 1602 к плате Arduino всего по двум проводам SDA и SCL (А4 и А5), что дает возможность не использовать цифровые выходы Arduino при подключении дисплея. Так же в часах используются часы реального времени DS3231 (модуль). Корректировка времени может быть по времени компиляции, а так же при помощи двух кнопок.

http://forum.rcl-radio.ru/uploads/images/2020/07/d7e756b785e4cdd47d2b4bd92e63f439.png

Подключение кнопок

#include <TinyWireM.h>  
#include <TinyRTClib.h>                
#include <LiquidCrystal_I2C.h> // for LCD w/ GPIO MODIFIED for the ATtiny85      
//#include <EEPROMex.h>  // https://github.com/thijse/Arduino-EEPROMEx.git
 
 LiquidCrystal_I2C lcd(0x27,16,2);
 RTC_DS1307 rtc;  
 byte d1,d2,d3,d4,d5,d6,e1,e2,e3;
 byte v1[8] = {7,7,7,7,7,7,7,7};
 byte v2[8] = {7,7,0, 0, 0, 0, 0, 0};      
 byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
 byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
 byte v5[8] = { 28, 28, 0, 0, 0, 0, 28, 28};
 byte v6[8] = {28,28,28,28,28,28,28,28};
 byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
 byte v8[8] = { 31, 31,0,0,0,0,0, 0};
 int a[6],hh,mm,ss,seting,w,x;
 
void setup(){
  TinyWireM.begin();                     
  lcd.init();                           
  lcd.backlight();  
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
  lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);                    
 //rtc.adjust(DateTime(2018, 6, 29, 9, 33, 0));
 
  pinMode(4,INPUT); // SET
  pinMode(1,INPUT); // +++
}
 
 
void loop(){
  DateTime now = rtc.now();
     hh=now.hour();mm=now.minute();ss=now.second();
 
     if(digitalRead(4)==HIGH){seting++;delay(200);if(seting>3){seting=0;}}
 
     if(seting==1&&digitalRead(1)==HIGH){hh++;w=1;delay(200);if(hh>23){hh=0;}}
     if(seting==2&&digitalRead(1)==HIGH){mm++;w=1;delay(200);if(mm>59){mm=0;}}
     if(seting==3&&digitalRead(1)==HIGH){ss=0;w=1;delay(200);}
 
     if(w==1){w=0;rtc.adjust(DateTime(2018, 6, 29, hh, mm, ss));}
 
     a[0]=now.hour()/10;
     a[1]=now.hour()%10;
     a[2]=now.minute()/10;
     a[3]=now.minute()%10;
     a[4]=now.second()/10;
     a[5]=now.second()%10;
 
    for(x=0;x<4;x++){
      switch(x){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=3,e2=4,e3=5;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
 
        }
      switch(a[x]){
        case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
        case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
        case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;
        case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
        case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
        case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
        case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
        case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
        case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
        case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
    }
 
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
 
 }
   lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");
   lcd.setCursor(14,0);lcd.print(a[4]);lcd.print(a[5]);
   lcd.setCursor(14,1);
 switch(seting){
   case 0:lcd.print("  ");break;
   case 1:lcd.print("HH");break;
   case 2:lcd.print("MM");break;
   case 3:lcd.print("S0");break;
   }
  delay(100);
}//loop

Для корректировки времени нажмите кнопку SET, во второй строке справа индикатора появится надпись HH (часы), далее нажатием кнопки ++ установите часы, аналогично устанавливаются минуты. Установка времени секунд предусматривает только обнуление в режиме SS при нажатии кнопки ++.
http://forum.rcl-radio.ru/uploads/images/2020/07/df496c25e399022ec1953c49eb39aaac.pnghttp://forum.rcl-radio.ru/uploads/images/2020/07/bb1796645c964a52b0370982937c598b.pnghttp://forum.rcl-radio.ru/uploads/images/2020/07/b8f72179b05c96ac80db5b61602dad4e.pngПеред загрузкой скетча удалите библиотеку LiquidCrystal_I2C из папки библиотек, эта библиотека входит в конфликт с библиотекой LiquidCrystal_I2C от  Digispark. LiquidCrystal_I2C и другие библиотеки указанные в скетче устанавливать не нужно, они уже находятся в Arduino IDE после добавления платы Digispark.

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=182

Комментарии

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Генератор на LM566

    Генератор на LM566

    Управляемый напряжением генератор на ИМС LM566 фирмы National Semiconductor относится к классу функциональных генераторов и обладает возможностью генерации сигнала прямоугольной формы (меандр) и треугольной формы (линейнонарастающего и спадающего напряжения). Отличительной особенностью микросхемы является высокая линейность регулировочной характеристики и минимальное количество внешних элементов. LM566 может работать при питании от однополярного и …Подробнее...
  • Микрофонные усилители на ОУ

    Микрофонные усилители на ОУ

    Ниже показана схема микрофонного усилителя на ОУ которая имеет следующие параметры: Номинальное входное напряжение Номинальное выходное напряжение Отношение сигнал\шум Рабочий диапазон частот Коэффициент гармоник Максимальное выходное напряжение Входное сопротивление Минимальное сопротивление нагрузки 1мВ 100мВ 56дБ 30…30000Гц 0,05% 7В 1кОм 10кОм   ОУ включен по схеме инвертирующего усилителя. Коэффициент усиления определяется …Подробнее...
  • STM32 + TM1637 (Arduino)

    STM32 + TM1637 (Arduino)

    Модуль TM1637 представляет собой 4-х разрядный семисегментный дисплей на базе драйвера TM1637. Дисплей имеет десятичные точки в разрядах. Для подключения используется всего 2 цифровых контакта (помимо питания от 3.3 до 5 В) отладочной платы на STM32 (базе микроконтроллера STM32F103C8T6). Для работы с дисплеем TM1637 можно использовать простую в применении библиотеку …Подробнее...
  • Двух-полярный источник питания от напряжения 9В

    Двух-полярный источник питания от напряжения 9В

    При  питании уст-в от элементов питания иногда возникает необходимость в двух полярном источнике напряжения. Можно конечно применить два элемента питания, но так же можно сделать простой преобразователь одно полярного напряжения в двух полярное. Предложенная схема позволяет от одного элемента напряжением 9 В (Крона) получить отрицательное напряжение -9 В. Схема преобразователя …Подробнее...
  • Датчик температуры на 1N4148 (Arduino)

    Датчик температуры на 1N4148 (Arduino)

      Кремниевый диод в прямом включении — это практически линейный температурный датчик, падение напряжения на кремниевом диоде линейно зависит от температуры, причем температурный коэффициент практически одинаков для любых типов диодов и составляет около −2 мВ/°С (т. е. с ростом температуры напряжение уменьшается). Диапазон измерения температуры при помощи кремниевого диода может …Подробнее...