Как считать все сигналы низкого уровня от 0 вольт до 0.7вольт? pulseIn (pin, LOW)

krovickiy
Offline
Зарегистрирован: 30.07.2014

Считываю длину сигнала pulseIn (pin, LOW);
Задача считать все сигналы низкого уровня от 0 вольт до 0.7вольт.
LOW (analog pin) - когда срабатывает только если на выходе 0V или 0V - ?v
Задача считать все сигналы низкого уровня от 0 вольт до 0.7вольт. Как считать?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

krovickiy, если у Вас стандартные значения логических уровней, то все пройдет, как надо, без какого-либо вмешательства с Вашей стороны. Если же уровни нестандартные (например, LOW - от 0.0 до 0.7, а HIGH от 0.9 и выше), то следует дополнить схему компаратором, настроив его на нужный пороговый уровень.

krovickiy
Offline
Зарегистрирован: 30.07.2014

С компоратором интересно. попробую.

К чему веду. Я хочу подключить DSM501A Dust Sensor 

Сенсор подключаєтся к пинам Digital PWM на Arduino Uno. 

Мне нужно отловить все уровни LOW с пина 3 (от 0В до 0,7В) длиной от 10мс - 90мс

Не уверен правильно ли сработает pulseIn(pin, LOW); Очень важно что б LOW срабативал не выше 0,7В.


int pin = 3;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
int mintimeratems = 10000; //в мыкросекундах
int maxtimeratems = 90000;

void setup() 
{
    Serial.begin(9600);
    pinMode(pin,INPUT);
    starttime = millis();//get the current time;
    Serial.print("LPO time");
    Serial.println("(ms)  %       pcs/0.01cf");
}

void loop() 
{
 while (1){ 
    duration = pulseIn(pin, LOW);
     //импульсы длиной от 10 до 90 мс, а все остальное - это шум.
    if ((mintimeratems <= duration)&&(maxtimeratems >= duration))
    {
    lowpulseoccupancy = lowpulseoccupancy+duration;
    }

    if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
    {
        ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
        concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
        Serial.print(lowpulseoccupancy);
        if (lowpulseoccupancy != 0){
        Serial.print("     ");
        Serial.print(ratio);
        Serial.print("     ");
        Serial.println(concentration);
        }
        lowpulseoccupancy = 0;
        starttime = millis();
    }
 }
}

DSM501A_SPECIFICATIONS.pdf

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Пин с PWM не имеет никакого отношения к pulseIn....
Подключайте к любому,
да хоть и к аналоговому ( как к цифровому)

krovickiy
Offline
Зарегистрирован: 30.07.2014

Тогда почему в даташит

sadman41
Offline
Зарегистрирован: 19.10.2016

krovickiy пишет:

Тогда почему в даташит

Почему бы и нет? Захотел производитель и сделал.

Гриша
Offline
Зарегистрирован: 27.04.2014

1) логика там стандартная для 5В

2) ничего ниже 0.7В ловить не требуется, судя по описанию требуется считывать время этого самого низкого уровня. И пересчитывать в % по формуле.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

krovickiy пишет:

Тогда почему в даташит

Что Вам непонятно во фразе Output signal? PWM работает на выход, к считыванию никакого отношения не имеет.

Гриша
Offline
Зарегистрирован: 27.04.2014

Jeka_M пишет:

Что Вам непонятно во фразе Output signal? PWM работает на выход, к считыванию никакого отношения не имеет.

Есть такое подозрение, что человек пурвый раз встретился с ШИМ кодировкой данных и все.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Гриша пишет:

1) логика там стандартная для 5В

2) ничего ниже 0.7В ловить не требуется, судя по описанию требуется считывать время этого самого низкого уровня. И пересчитывать в % по формуле.


Там даже правее картинки уровни импульсов обозначены:
0.7 low и 4.5 hi.
Как у людей глаза посажены?

krovickiy
Offline
Зарегистрирован: 30.07.2014

Гриша пишет:

Jeka_M пишет:

Что Вам непонятно во фразе Output signal? PWM работает на выход, к считыванию никакого отношения не имеет.

Есть такое подозрение, что человек пурвый раз встретился с ШИМ кодировкой данных и все.

Да, я первый раз столкнулся ШИМ. Прошу не ругать, я только учусь.. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

krovickiy пишет:

Тогда почему в даташит

krovickiy пишет:

Сенсор подключаєтся к пинам Digital PWM на Arduino Uno. 

Это фрагмент дэйташита на Arduino Uno?

krovickiy
Offline
Зарегистрирован: 30.07.2014

Что скажете, выше скетче ошибок нету? Просто я не уверен в верном подсчете длины сигнала LOW (10-90мс)