Arduino

Материал из First-Leon
Перейти к: навигация, поиск

Железо

Подключение различных видов нагрузок

Проблемы перегрева mosfet при управлении нагрузкой

Мосфеты:

  • IRL3103 30V 64A 94W 47р
  • IRF3205 55V 110A 200W 0.008om подключение N 48р
  • IRF640 200V 18A 125W N 54р

Составные транзисторы Дарлингтона.


Описание Arduino Mega2560 Зарядка аккума, питание - 5В

Работа с прерываниями

Библиотеки для работы с таймером: 1 2

Таблица прерываний

Прерывание по таймеру. В этом примере процедура flash_led будет выполнятся каждый раз по истечению 0,5 сек.

//Выполнение процедуры по прерыванию таймеру. 
#include <MsTimer2.h> 
  static boolean output = HIGH; 
   
void flash_led() //обработчик прерывания 
{ 
  digitalWrite(13, (output==HIGH) ? output=LOW : output=HIGH); 
} 

void setup() { 
  pinMode(13, HIGH); 

  MsTimer2::set(500, flash_led); // 500ms период 
  MsTimer2::start();  //включить таймер 
} 

void loop()  
{ 
//..... 
}

Еще один пример работы аппаратного прерывания. В данном примере при изменении напряжения на ножке D2 каждый раз будет выполнятся процедура int_on. Таких входов в Arduino всего 2 (D2,D3). И несколько вариантов настройки событий:

LOW - to trigger the interrupt whenever the pin is low, 
CHANGE - to trigger the interrupt whenever the pin changes value 
RISING - to trigger when the pin goes from low to high, 
FALLING - for when the pin goes from high to low.
#define PinA  2 
static boolean output = HIGH; 

void setup()  
{    
  pinMode(PinA, INPUT);  
  digitalWrite(PinA, HIGH);     // подключить подтягивающий резистор 
  attachInterrupt(0, int_on, CHANGE);  // настроить прерывание interrupt 0 на pin 2 
}  

void loop() 
{ 
//........ 
} 

// обработка прерывания 
void  int_on() 
{ 
digitalWrite(13, (output==HIGH) ? output=LOW : output=HIGH); 
}

Режим энергосбережения

С прерыванием по поступлению данных

#include <avr/sleep.h>

void wakeupFunction(){
}

void toSleep(){
  attachInterrupt(0,wakeupFunction,LOW);
  sleep_mode();
  detachInterrupt(0);
}

void setup() {
  //Serial.begin(9600); 

  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();//Переходим в спящий режим

}

void loop() {

  if(проверяем()){
  }
  else{
    /* Данныйх нет. Засыпаем. */
    toSleep();
  }
}

Включение сторожевого таймера

Разное

Литература