Свежие обсуждения
Измерения

измеритель влажности на HIH-4000

1 6 8

Dmitry_177: один кондей между 1-й и 8-й ножкойИменно так. Про Vref Сергей уже ответил.

 

R4,R5 - 0.5 Вт; R6 - 2 Вт.

Dmitry_177: R5 он нужен ли?
если хотите быть увереным, что Ваш сисмистор будет закрываться - тогда -ДА.

Dmitry_177: Но действительно разницы никакой, поставлю ка я все же 1N4004 ..
любые из 1N400x , или отечеств. выпрямительные (дороже) или готовый китайский мостик:
W01- W08 http://doc.chipfind.ru/bytes/w08m.htm
RB151-RB157 http://doc.chipfind.ru/search.htm?t=part&s=RB157&m=0
(по цене - 4шт 4004 = 76коп, 1 шт RB157 = 1,00грн).

 

AlexAlcoa: Dmitry_177: один кондей между 1-й и 8-й ножкойИменно так.

Я просто почему спросил, получается что конденсатор С2 и есть между 1-й и 8-й ножкой..

Сегодня был в Москве, конденсатор 275VAC типа Х2 я не нашел, зато купил К73-17 0.01мкФ*400В и еще купил высоковольтный СВВ-81(аналог К78-2) 0.01мкФ*1кВ на всякий случай Но для начала поставлю я наверно К73-17

 

Dmitry_177: СВВ-81(аналог К78-2) 0.01мкФ*1кВ

Dmitry_177: Но для начала
железо уже "разжевали", а не пора ли переходить к ПО?

 

Cheeeper: железо уже "разжевали", а не пора ли переходить к ПО?

ага, остался только последний штрих, пришла в голову идея все же выводить на циферблате влажность в процентах, подумываю переделать схемку на МК 16F877

 

Dmitry_177: пришла в голову идея все же выводить на циферблате влажность в процентах
Можно применить ЖКИ индикаторы из "стационарных" телефонов (HT1611, помоему), у них там последовательный интерфейс. Выводить можно только цифры и несколько символов, зато цена низкая.

Dmitry_177: подумываю переделать схемку на МК 16F877
Я бы посоветовал вместо древнего PIC16F877 использовать более новый аналог PIC16F887 (если он есть в Ваших краях).

 

Сергей К: Я бы посоветовал вместо древнего PIC16F877 использовать более новый аналог PIC16F887 (если он есть в Ваших краях).

Может и есть, но у меня есть в наличии несколько 16F877, их я и хочу использовать

Итак, сегодня собрал на монтажке пробную схемку на основе МК PIC16F877, в принципе все тоже самое только МК другой и подключение к нему соответственно и добавил генератор на 4МГц т.к. внутреннего у него нет. И попробовал попрограммировать МК под этот датчик, только я не подключал вентилятор на 220В и не подключал циферблат, а результат выводил светодиодами проценты в двоичном виде (PORTB), показания вроде адыкватные: в обычном состоянии влажность 32%, есни на датчик глубоко дыхнуть результат подскакивает до 64%, один раз подскочило до 96%, единственное что меня смущает, так это то что все эти результаты почему-то делится ровно на 32, а других значений он не показывал..

Вот сама программа, компилятор HI-TECH:

#include <pic.h>

__CONFIG(HS & WDTDIS & PWRTEN & BOREN & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);

const float ZeroOffset = 0.830204; // константа показания датчика при нуле
const float OnePrVl = 0.030995; // вольт на 1% влажности
const float ADCoeff = 0.0048828125; // значение Vref / 1024

static bit ReadVl = 0; // флаг можно ли считывать из ADRESH и ADRESL
unsigned char CountTMR1 = 0; // счетчик срабатывание TMR1
unsigned int ValueVl = 0; // цифровое значение влажности приведенное к типу int

void main (void)
{
TRISB = 0;
PORTB = 0;

ADCON1 = 0b10001110;
TRISA = 0b00000001;
PORTA = 0;
ADCON0 = 0b01000001;

T1CKPS1 = 0;
T1CKPS0 = 1;
T1OSCEN = 1;
T1SYNC = 1;
TMR1CS = 0;
TMR1H = 0x3C;
TMR1L = 0xB0;

TMR1ON = 1;
TMR1IF = 0;
TMR1IE = 1;

ADIF = 0;
ADIE = 1;

PEIE = 1;
GIE = 1;

while(1)
{
if(ReadVl)
{
ValueVl = ((unsigned int)ADRESH < 8) + ADRESL; // приводим к int

PORTB = (int)(ValueVl * ADCoeff - ZeroOffset)/OnePrVl; // вычисляем и отображаем в PORTB двоичным видом светодиодами

ReadVl = 0;
}
}
}

static void interrupt isr(void)
{
if(TMR1IE && TMR1IF)
{
CountTMR1++;
if(CountTMR1 == 10)
{
CountTMR1 = 0;

GODONE = 1;
}

TMR1IF = 0;
}

if(ADIE && ADIF)
{
if(GODONE == 0)
{
ReadVl = 1;
}

ADIF = 0;
}
}

эх жаль что здесь нельзя отобразить код в более удобном длячтения виде..

 

Dmitry_177: значение Vref / 1024
1023. Считают от "0", а не от "1"

Dmitry_177: const float ZeroOffset = 0.830204; // константа показания датчика при нуле
const float OnePrVl = 0.030995; // вольт на 1% влажности
const float ADCoeff = 0.0048828125; // значение Vref / 1024

Dmitry_177: PORTB = (int)(ValueVl * ADCoeff - ZeroOffset)/OnePrVl; // вычисляем и отображаем в PORTB двоичным видом светодиодами
В данном случае ADCoeff =0; ZeroOffset=0; OnePrVl = 0;. Как у Вас оно считается?
Теоретически, компилятор должен был сначала привести все к int, а потом проводить вычисленя. Во всяком мой так делает
Для моего компилятора следовало бы писать: PORTB = (float)(((float)ValueVl * ADCoeff - ZeroOffset)/OnePrVl)

 

Сергей К: Dmitry_177: значение Vref / 1024
1023. Считают от "0", а не от "1"

В данном случае Dmitry_177 прав, делить надо именно на 1024 для получения шага на одну дискрету АЦП. Хотя последний уровень и будет иметь номер 1023, но всего уровней то 1024.

 

Сергей К: Dmitry_177: значение Vref / 1024
1023. Считают от "0", а не от "1"

Ага, я тоже думал об этом.. Но т.к. с нулем считают ведь по идее с ним и будет 1024..

Сергей К: В данном случае ADCoeff =0; ZeroOffset=0; OnePrVl = 0;. Как у Вас оно считается?
Теоретически, компилятор должен был сначала привести все к int, а потом проводить вычисленя. Во всяком мой так делает
Для моего компилятора следовало бы писать: PORTB = (float)(((float)ValueVl * ADCoeff - ZeroOffset)/OnePrVl)

Честно говоря не знаю.. Но если компилятор считал бы ADCoeff =0; ZeroOffset=0; OnePrVl = 0; то тогда по идее в PORTB ничего не отображалось бы..

Сделал я вот так:

float ValuePr = 0;

ValuePr = (float)(((float)ValueVl * ADCoeff - ZeroOffset)/OnePrVl);

PORTB = (unsigned char)ValuePr;

и действительно работает.. Только мне не понятно почему внутри скобок еще одно приведение к float.. Что мы им переводим? ValueVl или результат умножения ValueVl*ADCoeff?

Сейчас в комнате влажность колеблится между 40-41% если на него дыхнуть не помню сколько он показывал но видно, что влажность плавно повышается и потом плавно падает.. Интересно, а как бы его проверить поточнее в домашних условиях?