Страница 4 из 5

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:19:46
seval
korob писал(а):На этой плате? Если так, то получается что программа что-то не того... :roll:
Сейчас попробую напрямую подать 5В на транзистор. Потому что щелкать это одно, а надо что бы включенным стояло продолжительно.
Пока суть да дело сходил купил другой блок питания. И пока что работает нормально. 5 минут уже работает.Датчик вместо влажности выдает рандом значение, и реле отрабатывает нормально. Тьфу-тьфу.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:24:16
korob
seval писал(а):И пока что работает нормально.
Значит всё-таки питание. Но кондесатор на 470мкФ. всё равно лучше установить, если ещё не ставили. И да, заметил отсутствующий конденсатор в цепи сброса МК на 0,1мкФ., его тоже крайне желательно установить.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:29:04
seval
korob писал(а):Значит всё-таки питание. Но кондесатор на 470мкФ. всё равно лучше установить, если ещё не ставили. И да, заметил отсутствующий конденсатор в цепи сброса МК на 0,1мкФ., его тоже крайне желательно установить.
Кондеры есть дома а я не дома. Вечером припаяю обязательно. А зачем на входе электролит?

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:33:39
korob
seval писал(а):А зачем на входе электролит?
Как зачем? Для "буферизации" напряжения питания, если питание подаётся по проводникам с некотором сопротивлением, для сглаживания скачков напряжения, неизбежно возникающих при коммутации реле, да и не только.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:36:05
seval
korob писал(а):Как зачем? Для сглаживания скачков напряжения, неизбежно возникающих при коммутации реле, да и не только.
Понял. Спасибки. Я просто только учусь. :)

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:43:36
seval
korob писал(а):
seval писал(а): И да, заметил отсутствующий конденсатор в цепи сброса МК на 0,1мкФ., его тоже крайне желательно установить.
Да уж. Поставил конденсатор и схема перестала вообще запускаться. Чего я не так сделал?

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:47:37
korob
:shock: Конденсатор не пробит? Что на RESETе?

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:50:31
seval
korob писал(а)::shock: Конденсатор не пробит? Что на RESETе?
Не знаю. Как проверить?

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:55:22
Андрей СШ
Да можно просто вольтметром.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 15:56:22
korob
Значит с конденсатором в цепи RESET понятно. Посмотрел, в ардуино используется софтовый сброс для исполняемой программы, а хардварный используется для обновления софта. Не учёл эту особенность ардуино. :facepalm: :oops: Снимайте.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 16:20:44
Мурик
seval писал(а):но нет у меня 0,33 мкФ.
0,33 мкФ это минимально допустимая ёмкость, но ставить выше никто не запрещает. Поставьте на входе и выходе стабилизатора хотя бы по 100 мкф, но можно и больше.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 16:38:07
Андрей СШ
Меня эти "советские" конденсаторы несколько беспокоят. Тип неизвестен. Состояние тоже. Возраст большой. Разновидностей конденсаторов много и не все из них сюда подходят.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 16:43:23
seval
Мурик писал(а):0,33 мкФ это минимально допустимая ёмкость, но ставить выше никто не запрещает. Поставьте на входе и выходе стабилизатора хотя бы по 100 мкф, но можно и больше.
То есть электролиты? Минус к минусу и плюс к плюсу?
Андрей СШ писал(а):Меня эти "советские" конденсаторы несколько беспокоят.
Я понял. Если будут проблемы поменяю их.
korob писал(а):Снимайте.
Убрал его и пока работает. Сегодня поставлю в работу дома. И буду наблюдать.
Андрей СШ писал(а):Да можно просто вольтметром.
У меня нет режима конденсатор

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 16:54:15
Мурик
seval писал(а):То есть электролиты? Минус к минусу и плюс к плюсу?
Да. Сейчас какие стоят?
seval писал(а):У меня нет режима конденсатор
Нужно измерять напряжение, а не емкость конденсатора.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 17:13:43
seval
Мурик писал(а):Сейчас какие стоят?
Керамические 100нФ

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 17:40:16
Мурик
Параллельно им поставьте элекролиты.

Re: Не стабильно работает.

Добавлено: Сб авг 22, 2015 21:41:04
seval
Приехал домой. Поставил, вроде работает. Помылись, вентилятор включился. Потом слышу, через минут 15, опять реле дребезжит. Снял все, проверил. Транзистор не реагирует на сигнал от МК. Сгорел по видимому. Реле рабочее. Электролиты правда еще не поставил. Завтра куплю транзистор. Поставлю электролиты, и опять проверять буду.

Re: Не стабильно работает.

Добавлено: Вс авг 23, 2015 04:16:52
Андрей СШ
У Вас с какой частотой сигнал от датчиков приходит?

Re: Не стабильно работает.

Добавлено: Вс авг 23, 2015 05:53:33
seval
Андрей СШ писал(а):У Вас с какой частотой сигнал от датчиков приходит?
Я не знаю. Там тоже схема на Atmega328
ИзображениеИзображение
У меня по программе идет все по Modbus. Мастер опрашивает датчики. И раз в 10 секунд заносит данные в переменную. С переменной уже анализирует, то есть дребезг в программе по идее не возможен.
Спойлер

Код: Выделить всё

#include <SPI.h>
#include <Wire.h>
#include <ModbusRtu.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

Modbus _modbusMaster(0, 0, 2);
uint16_t _regModSlav_1[4];
modbus_t _modTelegrSend1;
modbus_t _modTelegrRead1;
unsigned long _modbusTimeVar1 = millis();
bool _isNeesdedSinhronizeSlave1 =0;
uint16_t _regModSlav_2[4];
modbus_t _modTelegrSend2;
modbus_t _modTelegrRead2;
unsigned long _modbusTimeVar2 = millis();
bool _isNeesdedSinhronizeSlave2 =0;
uint8_t _modState;
int  _modTlgIndex = -1;
bool  _isModbusRead = 0;
int _gtv1 = 0;
int _gtv2 = 0;
bool _gtv3 = 0;
bool _gtv4 = 0;
int _gtv5 = 45;
int _gtv6 = 40;
int _gtv7 = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
int _bitW1;
void setup()
{
  Serial.begin(9600);
  _modbusMaster.begin(19200);
  _modbusMaster.setTimeOut(1000);
  _modState = 0;
  _modTelegrSend1.u8id  = 1;
  _modTelegrSend1.u8fct  = 16;
  _modTelegrSend1.u16RegAdd  = 0;
  _modTelegrSend1.u16CoilsNo  = 4;
  _modTelegrSend1.au16reg  = _regModSlav_1;
  _modTelegrRead1.u8id  = 1;
  _modTelegrRead1.u8fct  = 3;
  _modTelegrRead1.u16RegAdd  = 0;
  _modTelegrRead1.u16CoilsNo  = 4;
  _modTelegrRead1.au16reg  = _regModSlav_1;
  _modTelegrSend2.u8id  = 2;
  _modTelegrSend2.u8fct  = 16;
  _modTelegrSend2.u16RegAdd  = 0;
  _modTelegrSend2.u16CoilsNo  = 4;
  _modTelegrSend2.au16reg  = _regModSlav_2;
  _modTelegrRead2.u8id  = 2;
  _modTelegrRead2.u8fct  = 3;
  _modTelegrRead2.u16RegAdd  = 0;
  _modTelegrRead2.u16CoilsNo  = 4;
  _modTelegrRead2.au16reg  = _regModSlav_2;
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  pinMode(9, OUTPUT);
  digitalWrite(9, 1);
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.println("VENT ON");
  display.display();
  delay (10000);
  digitalWrite(9, 0);
  display.clearDisplay();

}
void loop()
{
  if((_isTimer(_modbusTimeVar1, 1000 ))&&(!_isNeesdedSinhronizeSlave1)) { 
    _isNeesdedSinhronizeSlave1= 1; 
    _modbusTimeVar1 = millis();
  }
  if((_isTimer(_modbusTimeVar2, 1000 ))&&(!_isNeesdedSinhronizeSlave2)) { 
    _isNeesdedSinhronizeSlave2= 1; 
    _modbusTimeVar2 = millis();
  }
  switch(_modState) {
  case 0:
    { 
      if((_modTlgIndex == -1)&&(_isNeesdedSinhronizeSlave1)){
        _modTlgIndex = 1; 
        _isModbusRead = 1; 
        _modState = 1;  
        break;
      }
      if((_modTlgIndex == 1)&&(_isModbusRead)){
        _regModSlav_1[3] = _bitW1;
        _isModbusRead = 0; 
        _modState = 1; 
        break;
      }
      if((_modTlgIndex == 1)&&( !_isModbusRead)){
        _modTlgIndex = -1; 
        _isNeesdedSinhronizeSlave1 = 0;
      }
      if((_modTlgIndex == -1)&&(_isNeesdedSinhronizeSlave2)){
        _modTlgIndex = 2; 
        _isModbusRead = 1; 
        _modState = 1;  
        break;
      }
      if((_modTlgIndex == 2)&&(_isModbusRead)){
        _regModSlav_2[3] = _bitW1;
        _isModbusRead = 0; 
        _modState = 1; 
        break;
      }
      if((_modTlgIndex == 2)&&( !_isModbusRead)){
        _modTlgIndex = -1; 
        _isNeesdedSinhronizeSlave2 = 0;
      }
      break;
    } 
  case 1:
    { 
      if((_modTlgIndex == 1)&&(_isModbusRead)) { 
        _modbusMaster.query(_modTelegrRead1); 
        _modState = 2;  
        break; 
      }
      if((_modTlgIndex == 1)&&(! _isModbusRead)) { 
        _modbusMaster.query(_modTelegrSend1); 
        _modState = 2;  
        break; 
      }
      if((_modTlgIndex == 2)&&(_isModbusRead)) { 
        _modbusMaster.query(_modTelegrRead2); 
        _modState = 2;  
        break; 
      }
      if((_modTlgIndex == 2)&&(! _isModbusRead)) { 
        _modbusMaster.query(_modTelegrSend2); 
        _modState = 2;  
        break; 
      }
      break;
    } 
  case 2: 
    _modbusMaster.poll();
    if (_modbusMaster.getState() == COM_IDLE) {
      _modState= 0;
    }
    break;
  }




  if (1) {
    if (! _gen1I) { 
      _gen1I = 1; 
      _gen1O = 1; 
      _gen1P =  millis(); 
    } 
  } 
  else { 
    _gen1I = 0 ;  
    _gen1O= 0;  
  } 
  if (_gen1I ) { 
    if (_gen1O) { 
      if ( _isTimer( _gen1P , 100 )) { 
        _gen1P = millis(); 
        _gen1O = 0; 
      } 
    } 
    else  { 
      if ( _isTimer( _gen1P , 10000 )) {  
        _gen1P = millis(); 
        _gen1O = 1;  
      } 
    } 
  }
  if (_gen1O) {
    _gtv1 = (int(_regModSlav_1[0]));
  }
  if (_gen1O) {
    _gtv2 = (int(_regModSlav_2[0]));
  }
  _gtv3 =  ((_gtv1) >= (_gtv5)) && (! ((_gtv1) <= (_gtv6))) ;
  _gtv4 =  ((_gtv2) >= (_gtv5)) && (! ((_gtv2) <= (_gtv6))) ;
  _bitW1 = _gtv7;
  bitWrite(_bitW1, (1), ( (_gtv3) || (_gtv4) ));
  digitalWrite(9,  (_gtv3) || (_gtv4) );
  if ( (_gtv3) || (_gtv4) ){
    display.setTextColor(WHITE);
    display.setTextSize(2);
    display.setCursor(0,0);
    display.println("VENT ON");
    display.display();
  }
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,25);
  display.println("H1 - ");
  display.setCursor(60,25);
  display.println(_gtv1);
  display.setCursor(85,25);
  display.println("%");
  display.setCursor(0,50);
  display.println("H2 - ");
  display.setCursor(60,50);
  display.println(_gtv2);
  display.setCursor(85,50);
  display.println("%");
  display.display();




}
bool _isTimer(unsigned long startTime, unsigned long period )
{
  unsigned long currentTime;
  currentTime = millis();
  if (currentTime>= startTime) {
    return (currentTime>=(startTime + period));
  } 
  else {
    return (currentTime >=(4294967295-startTime+period));
  }
}
https://yadi.sk/d/q__owdFRibpLe

Re: Не стабильно работает.

Добавлено: Вс авг 23, 2015 05:58:06
Андрей СШ
Надо программу глянуть. Похоже это датчик "дребезжит", а реле просто повторяет.