Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
imx287 перестает работать АЦП
zhilenkov
Добавлено 29.01.2020 15:00 Редактировалось 29.01.2020 15:16
0
Сообщение: 1
zhilenkov
0

Пункты: 481
Регистрация: 02.06.2019
Здравствуйте.

Столкнулся с непонятным для меня моментом.

Создал класс для считывания данных с АЦП со следующими методами:

Код

#include "readingadc.h"

ReadingAdc::ReadingAdc()
{

}


float ReadingAdc::readingCurrent_1()
{

FILE *fd;
int val = 0;
float voltage = 0.0;
if((fd = fopen("/sys/bus/iio/devices/iio:device0/in_voltage0_raw", "r")) == NULL) do{ exit(1); }while(0);
fscanf(fd, "%d", &val);
fclose(fd);
voltage = (float)val*1.85f/4095.0f;
return voltage;

}


float ReadingAdc::readingCurrent_2()
{

FILE *fd;
int val = 0;
float voltage = 0.0;
if((fd = fopen("/sys/bus/iio/devices/iio:device0/in_voltage1_raw", "r")) == NULL) do{ exit(1); }while(0);
fscanf(fd, "%d", &val);
fclose(fd);
voltage = (float)val*1.85f/4095.0f;
return voltage;

}


float ReadingAdc::readingVoltage_24V()
{

FILE *fd;
int val = 0;
float voltage = 0.0;
if((fd = fopen("/sys/bus/iio/devices/iio:device0/in_voltage6_raw", "r")) == NULL) do{ exit(1); }while(0);
fscanf(fd, "%d", &val);
fclose(fd);
voltage = (float)val*1.85f/4095.0f;
return voltage;

}

Создал в mainwindow.cpp таймер с периодом в 10 мили секунд. По сигналу timeout() вызываю слот:
void MainWindow::slotPowerSypply()
{
if(readingVoltage_24V() <= 1.1){
system("poweroff");
}
}
В нем проверяю напряжение по уровню. И если уровень меньше 1,1 Вольта то выключаю тион. В схеме есть батарея конденсаторов для резервного выключения.

Через некоторое время работы в программе перестает работать тачскрин. Не понимаю как так. В терминал ошибки не пишет.
Могу только предположить, что столь частый опрос АЦП ломает его работу по обслуживанию тачскрина. Версия линукс 4.19.46
Buildroot 2018.11.4
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 29.01.2020 17:47 Редактировалось 29.01.2020 18:15 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

Могу только предположить, что столь частый опрос АЦП ломает его работу по обслуживанию тачскрина.


сделайте опрос реже - сразу ясно станет :) у меня такой платы нет чтобы проверить. Да и как то усложнено у вас c АЦП и програмным монитором - тут какой-нибуть компаратор лучше и выход на GPIO с прерыванием чтобы процессор не грузить постоянным опросом. Возможно подобным образом можно и АЦП запрограммировать - надо смотреть даташит и драйвер.
Спуститься к концу Подняться к началу
Персональная информация
zhilenkov
Добавлено 29.01.2020 18:22 Сообщение: 3
zhilenkov
0

Пункты: 481
Регистрация: 02.06.2019
Делал опрос 1 секунду. Но проблема повторилась. Потом понял, что если вызовется опрос АЦП по таймеру и в этот момент нажал кнопку на тачьскрин, то АЦП зависает.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux