плавное включение порта (ШИМ)

ALEXHEX
Offline
Зарегистрирован: 12.12.2013
int value = 0;                  //здесь храним значение яркости
int ledpin = 13;                 //светодиод подключим к 13 контакту
 
void setup() 
{ 
  pinMode(ledpin, OUTPUT);
  Serial.begin(9600);  //устанавливаем 9 контакт в режим вывода
}

void loop()
{
  for(value = 0 ; value <= 255; value+=1) //плавно зажигаем светодиод
  { 
    analogWrite(ledpin, value); 
Serial.println(value);    //выставляем значение
    delay(30);    //небольшая пауза
    if (value == 255) analogWrite(ledpin, HIGH); 
  
  }
}

Хотел плавно включать порт, но он потом зацикливается и порт в 0 уходит.
Что не так делаю? как установить 1 на порту, когда value будет равным 255?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

#3 - boolean start;

#6A - start = 1;

#11A - if ( start )

#11A -   {

#19A -   }

#17 - if (value == 255) start = 0;

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

SU-27-16

немного не понял, 

пробовал так

int value = 0;                  //здесь храним значение яркости
int ledpin = 13;                 //светодиод подключим к 9 контакту
 
void setup() 
{ 
  pinMode(ledpin, OUTPUT);
  Serial.begin(9600);  //устанавливаем 9 контакт в режим вывода
}

void loop()
{
  if (value == 0)
  for(value = 0 ; value <= 255; value+=1) //плавно зажигаем светодиод
  { 
    analogWrite(ledpin, value); 
Serial.println(value);    //выставляем значение
    delay(30);    //небольшая пауза
    if (value >= 255) analogWrite(ledpin, HIGH);

  
  }
}

но порт тухнет после 255.

vvadim
Offline
Зарегистрирован: 23.05.2012

ALEXHEX, Вам истребитель показал как сделать.

Только пин светодиода меняем на другой, с шимом, чтоб насладиться красотой

int value = 0;  
int ledpin = 10;                
boolean start;

void setup() 
{ 
  start = 1;
  pinMode(ledpin, OUTPUT);
  Serial.begin(9600); 
}

void loop()
{
  if (start == 1)
  {
    for(value = 0 ; value <= 255; value+=1) 
    { 
      analogWrite(ledpin, value); 
      Serial.println(value);    
      delay(30);    
      if (value == 255)  start = 0;  
    }
  }
}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ALEXHEX,  хоть вам и подсказали правильное решение, но главное понять в чём ошибка. Как вы считаете, когда вы  даёте команду analogWrite (ledpin, HIGH) , что происходит с ledpin ?

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

Спасибо!

Насчёт номера порта, это я пока с кодом разбираюсь. Потом к 9 пину транзистор добавлю, в качестве ключа.

А в целом - собираю схемку плавного включения вентилятора охлаждения. В схемке будет драйвер мосфета, сам силовой транзистор, ну и атмега8.
 

Datak
Offline
Зарегистрирован: 09.10.2014
const int ledpin = 10;                

void setup() 
{ 
    pinMode(ledpin, OUTPUT);
    Serial.begin(9600); 

    for(int value = 0 ; value <= 255; value+=1) 
    { 
      analogWrite(ledpin, value); 
      Serial.println(value);    
      delay(30);    
    }
}

void loop()
{
}

Предлагаю так, чтоб над самим сабой не издеваться. :)

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

dimax, я Вас понял.
При той команде просто включится порт. 

 

ALEXHEX
Offline
Зарегистрирован: 12.12.2013
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ALEXHEX,  не включится. Если вы читали про HIGH и LOW, то должны помнить, что это просто соответствие 1 и 0.  Стало быть равнозначно команде analogWrite (ledpin, 1), т.е. шим с самой малой широтой импульса.

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

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

 

axill
Offline
Зарегистрирован: 05.09.2011

ALEXHEX пишет:

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

запутался, а не разобрался) максимальное вращение вентилятора будет при analWrite(fanpin, 255), что на самом деле равносильно digitalWrite(fanpin, HIGH). Вентилятор питается постоянным напряжением?

 

axill
Offline
Зарегистрирован: 05.09.2011

dimax пишет:

шим с самой малой широтой импульса.

применительно к ШИМ все же корректно говорить про скважность, а не про ширину импульса

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

Вентилятор, будет через мосфет питаться 12 вольт. Сам мосфет транзистор будет открываться другим транзистором через ШИМ микросхемы.

 

axill
Offline
Зарегистрирован: 05.09.2011

А что так сложно если мосфет можно напрямую в аналоговому выходу МК подключить?

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

нельзя мосфет током управляется.

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

А что так сложно если мосфет можно напрямую в аналоговому выходу МК подключить? >>> вы имели ввиду ....к выходу МК с ШИМом...... ?

....нету у МК аналоговых выходов, ибо нет ЦАПа

 

нельзя мосфет током управляется. >>> ЗЯ и нужно , током управляется биполяр :) , а полевик - ПОЛЕМ электрическим, он же мосфет !

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

http://easyelectronics.ru/upravlenie-moshhnoj-nagruzkoj-postoyannogo-tok...

это

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

и далее вам не нужно пока

axill
Offline
Зарегистрирован: 05.09.2011

ALEXHEX пишет:

нельзя мосфет током управляется.

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

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

Я не писал глупостей. Ардуинка даёт 5в 40 мА с порта. Мой мосфет требует на открытие не менее 10 вольт и 450мА. Потому драйвер и требуется

axill
Offline
Зарегистрирован: 05.09.2011

Что у вас за мосфет? И какая схема? Вы заблуждаетесь насчет тока необходимого для управления мосфетом. Сопротивление затвора измеряется мегаомами, при всем желании такой ток туда не закачать. Ток может быть только в импульсе при перезарядке емкости затвора. Драйвер вам требуется для раскачки до 10в, ибо ваш мосфет имеет высокое напряжение для открытия. И вы писали не про драйвер, а про биполярный транзистор. Но тем не менее есть мосфеты которые имеют логический уровень на затворе, их можно подключать к МК напрямую

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

У меня из бельгийской стационарной армейской станции. На изделии указаны 10в-450мА на ключе.