23-05-2019, 23:46
Nie wiem jaki masz kod, jakiej biblioteki używasz. Zajrzałem do pierwszej w google https://github.com/adafruit/Adafruit_MAX...X31865.cpp i jest tam tak:
w sumie 75 ms delay, to nie spodziewaj się, że pykniesz to w 20.
Delay oznacza, że biblioteka nie czeka na żaden sygnał "skończyłem, łap pomiar" tylko stoi tępo w tym miejscu.
Ja bym to próbował rozbić to na 3 funkcje/etapy w switch case, tak by wrócić do rozmowy po kolejnych 10ms i potem po kolejnych 65ms. Lub szukać innej biblioteki.
Nie pomoże to w wyciąganiu średniej 50x/s, ale przynajmniej nie będzie blokować loop.
Natomiast ta linijka t |= MAX31856_CONFIG_1SHOT; sugeruje, ze możesz od razu zlecić więcej pomiarów i przyjść po X wyników, może uśrednionych, może kolejnych zapisanych w pamięci, a najprawdopodobniej zlecenie wykonywania ciągłych pomiarów, potem tylko co jakiś czas czytasz ostatni - nie wiem, bo jej jeszcze nie używałem. Może ten delay jest zrobiony na zapas?
Kod:
uint16_t Adafruit_MAX31865::readRTD (void) {
clearFault();
enableBias(true);
delay(10);
uint8_t t = readRegister8(MAX31856_CONFIG_REG);
t |= MAX31856_CONFIG_1SHOT;
writeRegister8(MAX31856_CONFIG_REG, t);
delay(65);
uint16_t rtd = readRegister16(MAX31856_RTDMSB_REG);
// remove fault
rtd >>= 1;
return rtd;
}
Delay oznacza, że biblioteka nie czeka na żaden sygnał "skończyłem, łap pomiar" tylko stoi tępo w tym miejscu.
Ja bym to próbował rozbić to na 3 funkcje/etapy w switch case, tak by wrócić do rozmowy po kolejnych 10ms i potem po kolejnych 65ms. Lub szukać innej biblioteki.
Nie pomoże to w wyciąganiu średniej 50x/s, ale przynajmniej nie będzie blokować loop.
Natomiast ta linijka t |= MAX31856_CONFIG_1SHOT; sugeruje, ze możesz od razu zlecić więcej pomiarów i przyjść po X wyników, może uśrednionych, może kolejnych zapisanych w pamięci, a najprawdopodobniej zlecenie wykonywania ciągłych pomiarów, potem tylko co jakiś czas czytasz ostatni - nie wiem, bo jej jeszcze nie używałem. Może ten delay jest zrobiony na zapas?
Miło być decenianym https://buycoffee.to/kaczakat