Повышение быстродействия программы

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Добрый вечер. У меня проблема. Нужно организовать считывание сигнала длительностю 0,001 с. С частотой 100 Гц. Привожу скетч программы. Считывание и запись идут норамльно, пока не появляются другие команды в программе. Увеличивается время цикла программы и считывание начинает срываться и сбоить. Как можно увеличить быстродействие и написать программынй текст.

 

Vadim0312
Offline
Зарегистрирован: 27.11.2016
int valTemp1 = 0; // переменная для хранения значения потенциометра
int valTemp2 = 0; // переменная для хранения значения потенциометра
int Imp1 = 0 ;
void setup()
 { 
    
           pinMode(3, INPUT); // установка порта на PIN 3. Счетный вход.
                           pinMode(6, OUTPUT); // управление выходной сигнал
     }
 
 
void loop() {
 
 
Imp1 = digitalRead(3);//опрос порта 
digitalWrite(6,Imp1); // выдача в порт принятого значения
valTemp1 = analogRead(A0) ;
 valTemp2 = analogRead(A1) ;
 
}
b707
Offline
Зарегистрирован: 26.05.2017

напишите пример, с которым начинаются проблемы. так как то, что у вас написано, должно исполнятся явно быстрее 1 мс

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вам надо её переписывать, а не повышать быстродействие. 

Vadim0312
Offline
Зарегистрирован: 27.11.2016

В смысле переписывыть ??? В ассемблер или в коды ???

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, нет, просто нормально написать считывание сигналов когда они приходят, а не когда до них loop доберётся.

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Мне требуется считывать синхроинпульсы бытовой сети 100 Гц и в зависимости  от условий выдавать импульсы с задержкой.

int valTemp1 = 0; // переменная для хранения значения потенциометра
int valTemp2 = 0; // переменная для хранения значения потенциометра
int Imp1 = 0 ;
void setup()
 { 
    
           pinMode(3, INPUT); // установка порта на PIN 3. Счетный вход.
                           pinMode(6, OUTPUT); // управление выходной сигнал
     }


void loop() {
 
 
Imp1 = digitalRead(3);//опрос порта 
delay(5);//задержка импульсов на выход
digitalWrite(6,Imp1); // выдача в порт принятого значения
}

 

Vadim0312
Offline
Зарегистрирован: 27.11.2016

интересно....может попробовать в цикле while {} ???

 

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

Так я и думал, что delay гадит. "Blink без delay" читайте.

b707
Offline
Зарегистрирован: 26.05.2017

Vadim0312 пишет:

Мне требуется считывать синхроинпульсы бытовой сети 100 Гц и в зависимости  от условий выдавать импульсы с задержкой.

 

диммер, что ли, делаете? только сегодня обсуждали... Поищите поиском в гугле, как делать диммер с помощью ардуино, там и примеры кода есть, поучитесь.

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Ммммм....!!!!

bwn
Offline
Зарегистрирован: 25.08.2014

b707 пишет:

Vadim0312 пишет:

Мне требуется считывать синхроинпульсы бытовой сети 100 Гц и в зависимости  от условий выдавать импульсы с задержкой.

диммер, что ли, делаете? только сегодня обсуждали... Поищите поиском в гугле, как делать диммер с помощью ардуино, там и примеры кода есть, поучитесь.

Мдя, поциент похоже и неграмотный.(((

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vadim0312 пишет:

интересно....может попробовать в цикле while {} ???

Попробуйте! И в операторе if заодно :)))

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Слышал про прерывания... как их можно применить к данной теме ???

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Посолить, поперчить, варить до готовности.

bwn
Offline
Зарегистрирован: 25.08.2014

То есть гугла не признаем принципиально. В предыдущей теме даже сайт написал, правда по русски. 
Можно и нужно, вот только, сумеете ли?

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Читайте про прерывания. http://arduino.ru/Reference/AttachInterrupt вам в помощь.