Page 17 of 21

Posted: 28 Jul 2016 03:01
by hardlock
Для определения наличия вращения вентилятора, т.е. что он крутится и не заклинил. В софте закоментировано. На практике не проверял.
В первом же посте, прямо под схемой написано
Серым обозначена цепь, которая позволяет контролировать вращение вентилятора.

Re:

Posted: 28 Jul 2016 10:03
by runy
hardlock wrote: В софте закоментировано.
а это как понять, типо не работает? просто не силен в программировании

Posted: 28 Jul 2016 11:09
by hardlock
Да, функция отключена, т.к. не тестировалась. Просто на плате предусмотрел возможность, но не использовал.

Re:

Posted: 28 Jul 2016 15:50
by runy
hardlock wrote:Да, функция отключена, т.к. не тестировалась.
а как ее включить?

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 29 Jul 2016 13:48
by hardlock
runy, Вы первый пост читали? Цитирую:

В прошивке отключен контроль вращения вентилятора. Просто закомментированы следующие строки (97-100):

Code: Select all

    if (!FanStoped & PINB.1)
    { 
    Beep();
    }

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 29 Jul 2016 14:47
by runy
hardlock, я читал первый пост! но если вы не заметили то я писал выше что не разбираюсь в программировании и слово ( закомментированы) мне не о чем не говорит. не могли бы вы выложить прошивку с уже включенными всеми функциями ? Спасибо!

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Jul 2016 16:11
by hardlock
runy, скомпилировал.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Jul 2016 16:43
by runy
Спасибо! я думаю что и другим не сильно подкованным в программировании радио любителям пригодиться при повторении вашей схемы

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Jul 2016 17:09
by hardlock
runy, ещё никто не проверил эту функцию... Если так сложно убрать слеши в программе, то может стоит обратить внимание на схему на 2-х транзисторах, типа той, что применяют в блоках питания?
sch_tl431.GIF
sch_tl431.GIF (9.24 KiB) Viewed 7361 times

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Jul 2016 20:31
by runy
hardlock,я буду значит первым! о результатах отпишусь! убрать в программе мне не сложно!простоя не умею! вы выложили готовую схему с прошивкой, которую потом дорабатывали,так почему бы не выложить и готовые прошивки с этими доработками? просто если бы я разбирался в программировании то меня бы здесь не было и я бы вам не писал, а просто тупо взял бы и сделал прошивку под себя! если вы не хотите помогать форумчанам зачем тогда было создавать свой сайт? а похвастаться своими поделками можно было и на YouTube.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Jul 2016 21:34
by hardlock
runy,
1) прошивку не дорабатывал, а заложил возможность, которую так и не проверил. В прошивке она есть, просто закоментирована.
2) Обычно разбираться в программировании как раз и начинают с таких простых проектах, а вы даже тему прочитать не хотите - уже несколько раз поднимался этот вопрос и скомпилированая прошивка вроде была и инструкция как сделать тоже была.
3) когда создавался этот форум у меня была огромная куча свободного времени. Сейчас же я бОльшую часть постов читаю и отвечаю с телефона - банально нет времени - работа у меня не за компьютером.
4) своими поделками я не хвастаюсь, а БЕСПЛАТНО, без рекламы и СМС :-) делюсь со всеми пользователями интернета. К сожалению много проектов до сих пор не выложено, по озвученой в п. 3 причине. В замен лишь прошу потратить 0,5 - 1 час своего времени на прочтение темы, т.к. большинство вопросов уже обсудили.

ЗЫ: специально достал ноутбук, чтобы ответить.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Jul 2016 22:36
by runy
hardlock wrote:runy,
4) своими поделками я не хвастаюсь, а БЕСПЛАТНО, без рекламы и СМС :-) делюсь со всеми пользователями интернета. К сожалению много проектов до сих пор не выложено, по озвученой в п. 3 причине. В замен лишь прошу потратить 0,5 - 1 час своего времени на прочтение темы, т.к. большинство вопросов уже обсудили.
Большое вам за это спасибо!!! Я не хотел вас обидеть :drink: ! А тему я прочитал и не один раз , я видел где обсуждался этот вопрос даже потом сам читал в инете как это сделать! но так как я не разу не связывался с этими программами да еще и на английском :wall: . попробовав несколько рас переделать нечего не получилось, по этому и обратился к вам за помощью.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 13 Aug 2016 23:39
by runy
hardlock wrote:runy, ещё никто не проверил эту функцию... ]
проверил работает нормально когда вентилятор останавливаешь рукой пищит бузер. только почему то не постоянно а прерывисто! не подскажите почему?

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 14 Aug 2016 07:12
by hardlock
runy, да фуннция "Beep" выполнена очень не удачно - написал скорее для "заглушки" или для проверки, чем для реальной работы. Но так и не проверил (((
Получается каждую проверку датчика, если вентилятор стоит, то включаем порт пищалки, затем здержка 100мс, затем выключаем порт пищалки... Т.е. фактически писк 100мс, как и при перегреве. Если надо больше, то надо переделывать вобще, т.к. сильно увеличивать задержку нельзя.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 27 Aug 2016 22:02
by runy
Здравствуйте! подскажите собрал регулятор все работало отлично, но вот недавно зуммер начал выделываться включаю вентилятор набирает обороты и быстро сбрасывает все как и должно быть зуммер молчит но когда температура поднимается на максимум зуммер начинает пищать и дальше пищит постоянно даже когда температура падает до минимума короче пищит пока не снимешь питание со схемы при повторной подаче питания картина повторяется. все остальное работает как положено! и да чуть не забыл раньше зуммер при повышении температуры до максимума пищал прерывисто а теперь просто пищит постоянно!подскажите в чем может быть причина такого поведения зуммера?

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 27 Aug 2016 22:40
by hardlock
runy, т.к. я зумер вобще не применял то и по его поведению ничего не скажу. Попробуйте перепрошить дэвайс. Если будет возможность - поковыряю прошивку, может что увижу.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 28 Aug 2016 08:14
by runy
дело в том что работало все нормально и вдруг такое :shock: прошивки перепробовал все не помогло! может порт на на 7 ноге выделывается? хотя прошивается нормально и на температуру то же норм реагирует!

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 10 Nov 2016 14:28
by Sergey_202
НЕМНОГО ИЗМЕНЕНЫЙ ОРИГИНАЛ
НЕМНОГО ИЗМЕНЕНЫЙ ОРИГИНАЛ
Здравствуйте, помогите решить проблему: надо на 7 ноге Tiny 13 переконфигурировать порт на измерение напряжения (при напряжении равном или выше 3.3v надо что бы было pwm =255, независимо от измеряемой температуры), а сигнал превышения температуры перенести на 6ногу Tiny 13 сконфигурировав его на выход, так же если использовать светодиод вместо пищалки хотелось бы получить индикацию работы датчика температуры (если датчик неисправен или нет измерения то подается сигнал с частотой 0,5Гц). Для моих условий эксплуатации требуется независимое от регулировки температуры управление вентилятором, (то есть, вентилятор в штатном режиме эксплуатации работает по заложенному Вами алгоритму, а при наличии на PB2 (7нога) заданного напряжения, вентилятор включается на 100% ) помогите решить проблему я сам слаб очень в программировании и пока никак не осилю Ваши исходники для изменения под мои нужды, может еще кого мой вариант эксплуатации тоже заинтересует.
СПАСИБО.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 19 Nov 2016 22:51
by Sergey_202
вот что смог осилить:

добавил:

Code: Select all

 #define PB2 0x01AA   для возможности корректировки значения входного напряжения на PB2 (7нога)
изменил :

Code: Select all

 //DDRB.1 = 1;   из-за переключения PB2 на PB1 (6нога)
  PORTB.1 = 0;
  delay_ms(100);
  PORTB.1 = 1;

PORTB=0b00000010;     переназначение портов
DDRB= 0b00000011;

Code: Select all

#include <tiny13.h>
#include <delay.h>

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=3
#endasm
#include <1wire.h>
#define ADC_VREF_TYPE 0x00

#define MIN_TEMP 30
#define MAX_TEMP 65
#define DT 35
#define U5V 0x014D
#define PB2 0x01AA

int PWM_ = 255;
char FanStoped = 1;
int counter = 0;
//eeprom int V;
//eeprom int D;// = 0;
/*eeprom*/ int Max;// = 0;
/*eeprom*/ int Min;// = 0;
char m;


// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}


void Beep(void)
{
  //DDRB.1 = 1;
  PORTB.1 = 0;
  delay_ms(100);
  PORTB.1 = 1;
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
  char t1, t2, T, dP;
  // Place your code here
  counter++;
  if (counter > 4700)
  {
    counter = 0;

    w1_init();
    w1_write(0xCC);
    w1_write(0xBE);

    t1=w1_read();   //LSB
    t2=w1_read();   //MSB
    //Ff = (t1 & 0x0F);
    t2 = t2 << 4;
    t1 = t1 >> 4;
    T = (t2 & 0xF0) | (t1 & 0x0F);

    w1_init();
    w1_write(0xCC);
    w1_write(0x44);


    /*
    if (!FanStoped & PINB.1)
    {
      Beep();
    }
    */

    if ((T >= MIN_TEMP) & (T <= MAX_TEMP))
    {

      if (FanStoped)
      {
        PWM_ = Max;
        FanStoped = 0;
        goto e1;
      }
      dP = Max - Min;
      T = T - MIN_TEMP;
      PWM_ = ((dP / DT) * T);
      PWM_ = PWM_ + Min;

      goto e1;
    }


    if (T < MIN_TEMP)
    {
      PWM_ = 0;
      FanStoped = 1;
    }

    if (T > MAX_TEMP)
    {
      PWM_ = 255;
      FanStoped = 0;
      Beep();
    }

    e1:
    OCR0A=PWM_;

  }

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
char i, j;
int U;
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

//Разряд DDRx - определяет направление передачи данных (0 - вход, 1 - выход).
//Разряд PORTx - если вывод определен выходом (DDRx = 1), то:
//       если установлена 1 - то на выводе устанавливается лог. 1
//       если установлена 0 - то на выводе устанавливается лог. 0
//       если вывод определен входом (DDRx = 0), то PORTx - определяет
//       состояние подтягивающего резистора (при PORTx = 1 резистор подключен)
//Разряд PINx - доступен только для чтения и содержит физическое значение вывода порта

PORTB=0b00000010;
DDRB= 0b00000011;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x83;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0xFF;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// ADC initialization
// ADC Clock frequency: 600,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: Off, ADC4: On
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;

// 1 Wire Bus initialization
w1_init();
w1_write(0xCC);
w1_write(0x44);

// Global enable interrupts
#asm("sei")



while (1)
      {
      // Place your code here
      if (Max==0)
      {
        #asm("cli")
        delay_ms(1000);

        Max = read_adc(2);

        j = 5;
        for (i=255; i>1; i=i-j)
        {
          OCR0A = i;
          delay_ms(500);
          U = read_adc(2);
          if ((U < Max - 10) /*& (j == 1)*/)
          {
            Max = i + 5;

            break;
          }
          /* if ((U < Max - 10) & (j > 1))
          {
            i = i + 10;
            OCR0A = i;
            delay_ms(500);
            j = 1;
          } */

        }
        //e3:

        for (i=Max; i>1; i--)
        {
          OCR0A = i;
          delay_ms(100);
          U = read_adc(2);
          if (U < U5V)
          {
            Min = i + 1;
            break;
          }
        }
        //e2:

        FanStoped = 1;

        #asm("sei")
      }

      };
}
По добавленному алгоритму работы должно быть:
PB2 назначить входом АЦП, измеряемое напряжение на входе АЦП сравнить с константой PB2 в условиях, и если измеренное значение равно или выше указанного то ШИМ должен работать на 100% независимо от измеряемой температуры.
Но этого мало хотелось бы добавить индикацию исправности датчика температуры (если неисправен, нет обмена данными) на PB1 сигнал 2 импульса с частотой 0.5 Гц и ШИМ должен работать на 50%, а сигнал превышения заданной температуры 1 импульс с частотой 0.5 Гц.
Как этот проект запустить в Протеусе, что бы можно было отладить?

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 24 Nov 2016 14:26
by Sergey_202
Судя по всему надо добавить что то вроде этого:

Code: Select all

while (1)
        {    
          delay_ms(100);
          Q = read_adc(1);
          if (Q >= PB2)
          {
            PWM_ = 255;
            FanStoped = 0;
          }
        }
        //e4:

        FanStoped = 1;

        #asm("sei")
      }
но насколько правильно не знаю, наверное надо еще зациклить для постоянного слежения за изменением напряжения.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 24 Nov 2016 15:25
by hardlock
Код похож на правду, кроме последней строки. Вместо цикла while поместите его в нужное место в обработчике таймера 0.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 25 Nov 2016 11:54
by Sergey_202
Спасибо за ответ, подскажите куда его надо правильно вставить (что бы этот кусок гармонично смотрелся на фоне Вашего кода), по смыслу он должен быть главнее самого цикла регулирования после поиска напряжения равного 5вольтам надо проверять состояние PB2 и если оно меньше установленного то цикл работает по основному алгоритму, если больше то PWM=255 (то есть та часть которую я смог осилить). Подскажите как сделать индикацию неисправности датчика температуры, могу предложить только такой вариант:

Code: Select all

void Beep2(void)
{
  //DDRB.1 = 1;
  PORTB.1 = 0;
  delay_ms(100);
  PORTB.1 = 1;
  delay_ms(100)
  PORTB.1 = 0;
  delay_ms(100);
  PORTB.1 = 1;
  delay_ms(200)
}

но это только индикация (сигнал 100ms, пауза 100ms, сигнал 100ms, пауза 200ms) цикл повторяется, а вот как это условие привязать к сбою измерения температуры.
Если я не ошибаюсь иначе трудно узнать работоспособность датчика температуры, (без значительного изменения температуры) только по меняющимся оборотам вентилятора, но это не правильно.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 29 Nov 2016 10:58
by Sergey_202
Man wrote:Здравствуйте!
Очень хороший проект. Спасибо!
Вот только не хватает возможности принудительно (A/C request) не зависимо от температуры включать вентилятор
на заранее установленную в программе скважность (25-35%) ..необходимо для охлаждения радиатора-конденсатора кондиционера

Соотв. прошу автора доработать программу таким образом
чтобы по 1 или 7 ноге низкий уровень активировал дополнительную нижнюю границу шима ..для начала пусть это будет 30%
и не мешал увеличению шим при дальнейшем росте температуры

..и если не затруднит сразу сделайте:
T min PWM = 94
T max PWM = 101
minPWM = 15%
оказывается я не один такой, как же решить проблему?

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 29 Nov 2016 15:38
by alex-spb
Здравствуйте Все.Повторил проэкт-все ОК.Но сейчас хочу использовать часть схемы для другой нужды.Надо использовать ноги 5-6-7 как выходы на которых при достижении определенной темпиратуры будет лог."1"на 1 сек.Т.Е. +10С-5 нога-(1)-1сек. +14С-6 нога-(1)-1сек.+16С- 7 нога-(1)-1сек. Шим не нужен.В программировании не смыслю.Огромная просьба помочь сделать исхоник и ХЕКС. Заранее премного благодарен.

Re: Регулятор 12V вентилятора на ATtiny13

Posted: 30 Nov 2016 16:40
by IYra
alex-spb wrote:Надо использовать ноги 5-6-7 как выходы на которых при достижении определенной темпиратуры будет лог."1"на 1 сек.Т.Е. +10С-5 нога-(1)-1сек. +14С-6 нога-(1)-1сек.+16С- 7 нога-(1)-1сек.
Это при росте температуры. А какая логика при спаде ?