Как считать все сигналы низкого уровня от 0 вольт до 0.7вольт? pulseIn (pin, LOW)
- Войдите на сайт для отправки комментариев
Сб, 13/10/2018 - 14:51
Считываю длину сигнала pulseIn (pin, LOW);
Задача считать все сигналы низкого уровня от 0 вольт до 0.7вольт.
LOW (analog pin) - когда срабатывает только если на выходе 0V или 0V - ?v
Задача считать все сигналы низкого уровня от 0 вольт до 0.7вольт. Как считать?
Логические уровни:
https://learn.sparkfun.com/tutorials/logic-levels/all
http://radiomaster.ru/articles/view/342/
krovickiy, если у Вас стандартные значения логических уровней, то все пройдет, как надо, без какого-либо вмешательства с Вашей стороны. Если же уровни нестандартные (например, LOW - от 0.0 до 0.7, а HIGH от 0.9 и выше), то следует дополнить схему компаратором, настроив его на нужный пороговый уровень.
С компоратором интересно. попробую.
К чему веду. Я хочу подключить 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
Пин с PWM не имеет никакого отношения к pulseIn....
Подключайте к любому,
да хоть и к аналоговому ( как к цифровому)
Тогда почему в даташит
Тогда почему в даташит
Почему бы и нет? Захотел производитель и сделал.
1) логика там стандартная для 5В
2) ничего ниже 0.7В ловить не требуется, судя по описанию требуется считывать время этого самого низкого уровня. И пересчитывать в % по формуле.
Тогда почему в даташит
Что Вам непонятно во фразе Output signal? PWM работает на выход, к считыванию никакого отношения не имеет.
Что Вам непонятно во фразе Output signal? PWM работает на выход, к считыванию никакого отношения не имеет.
Есть такое подозрение, что человек пурвый раз встретился с ШИМ кодировкой данных и все.
1) логика там стандартная для 5В
2) ничего ниже 0.7В ловить не требуется, судя по описанию требуется считывать время этого самого низкого уровня. И пересчитывать в % по формуле.
Там даже правее картинки уровни импульсов обозначены:
0.7 low и 4.5 hi.
Как у людей глаза посажены?
Что Вам непонятно во фразе Output signal? PWM работает на выход, к считыванию никакого отношения не имеет.
Есть такое подозрение, что человек пурвый раз встретился с ШИМ кодировкой данных и все.
Да, я первый раз столкнулся ШИМ. Прошу не ругать, я только учусь..
Тогда почему в даташит
Сенсор подключаєтся к пинам Digital PWM на Arduino Uno.
Это фрагмент дэйташита на Arduino Uno?
Что скажете, выше скетче ошибок нету? Просто я не уверен в верном подсчете длины сигнала LOW (10-90мс)