• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
MAX31865 - prędkość pomiaru PT100/1000
#1
Hej

W specyfikacji piszą, że maksymalny czas "odczytu" termometru to bodaj 21ms.
Tymczasem moje próby daję wyniki na poziomie <>70ms co niestety jest sporo...

Z jednej strony zależy mi na precyzji, ale z drugiej wolałbym czekać te 20ms
a nie 2.5x dłużej. Czy da się coś z tym zrobić?

PWL
 
Odpowiedź
#2
Odczyt powinien trwać kilka us, komunikacja jest po SPI. Jak zlecasz pomiar i czekasz na koniec to może trwać tyle ile funkcja do "odczytu" ma delay w sobie.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Hej Smile

Nie mylisz przypadkiem z DSami?

Biblioteka do MAXa której używam nie pozwala na "zamówienie z odbiorem później" jak w DS.
Albo ja czegoś nie wiem...

temp_ODCZ += max.temperature(RNOMINAL, RREF); trwa <> 70ms

DSy moge zlecić i iść zająć się swoimi sprawami, tu chyba(?) nie?

Problem jest taki, że PT100x mocno szumi. Chciałem uśrednić kilka pomiarów,
ale to obciąża pętle na tyle, że PID głupieje. Już lepiej działa DS który daje pomiar
przestarzały 0 0.8s Wink ale daje go szybko...

PWL
 
Odpowiedź
#4
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:
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;
}
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?
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Dzięki za trop. Nie spodziewałem się wstawionych delajów Smile

Na początek wywaliłem te opóźniacze i czas pomiaru skurczył sie do <> 4ms Smile
Wygląda na to, że działa normalnie. Będę testował...

PWL
 
Odpowiedź
#6
(24-05-2019, 06:56)PierwszyWolnyLogin napisał(a): Na początek wywaliłem te opóźniacze i czas pomiaru skurczył sie do <> 4ms Smile
Nie możesz zakładać czasu konwersji 4ms gdy przetwornik może to robić nawet 21ms.
Biblioteki dla Arduino, w 90% są pisane na "sztukę". Dobra biblioteka używa przerwań, sprawdza czy konwersja skończyła się i odczytuje wynik. Takie postępowanie nie "zawiesza" CPU na długie ms bez potrzeby.

Pisząc soft, tak jak to robi większość "Arduinowców" można zniweczyć najszybsze uC i 1GHz nie pomoże, gdy CPU będzie kręcił się w kółko przez 70ms.
Jak już ma się problem z pisaniem programów wielowątkowych to trzeba sięgnąć po RTOS, ale tam też obowiązują pewne zasady. Trzeba też pamiętać, że RTOS lubi RAM, na szczęście nie tak jak pseudosytem Windows. Zapotrzebowanie na RAM wynika z konieczności zapamiętywania wszystkich rejestrów uC, jak ma FPU to także tych. Każdy task, musi mieć swój stos (istniej opcja wspólnego stosu ale coś za coś).
Teoretycznie, RTOS można uruchomić na AVR z 2kB RAM, ale to iluzja, bo "na dzień dobry" mnie 2kB nie wystarcza przy wielowątkowości, bo np bufor UART to 256bajtów, LCD 1..150kb a dochodzą bufory dla (nadawcze i odbiorcze) dla SPI czy I2C albo USB.
Jak nie ma LCD to 16..20kB wystarcza, no chyba, ze jest jeden interfejs, np SPI, wtedy i 8kB wystarczy (czasem i mniej). Jak jest LCD to on "narzuca" wielkość RAM. Inne interfejsy, jak SPI, I2C, UART tyle i le potrzebują, to może być kilkanaście bajtów a mogą być i kB. ETH po trochę ponad 1,5kB dla każdego (nadawczy i odbiorczy), USB po 1kB.
 
Odpowiedź
#7
(24-05-2019, 10:04)es2 napisał(a): ...
Nie możesz zakładać czasu konwersji 4ms gdy przetwornik może to robić nawet 21ms.

A skąd pomysł, że to zakładam? Napisałem to gdzieś?

(24-05-2019, 10:04)es2 napisał(a): ...
Biblioteki dla Arduino, w 90% są pisane na "sztukę"....

Nikogo nie interesuje to co masz do powiedzenia -
nie męcz się i po prostu omijaj moje wątki Smile

PWL
 
Odpowiedź
#8
(24-05-2019, 11:13)PierwszyWolnyLogin napisał(a):
(24-05-2019, 10:04)es2 napisał(a): ...
Nie możesz zakładać czasu konwersji 4ms gdy przetwornik może to robić nawet 21ms.
A skąd pomysł, że to zakładam? Napisałem to gdzieś?
Napisałeś, że działa, ale to iluzja. Nie znasz podstaw i w tym kłopot.

(24-05-2019, 11:13)PierwszyWolnyLogin napisał(a):
(24-05-2019, 10:04)es2 napisał(a): ...
Biblioteki dla Arduino, w 90% są pisane na "sztukę"....
Nikogo nie interesuje to co masz do powiedzenia  -
nie męcz się i po prostu omijaj moje wątki Smile
Gdy pisałem programy na systemy wielozadaniowe, większość z użytkowników tego forum nie było Świecie.
Nie chcesz pomocy, więc męcz się sam. Kiedyś (może) rozwiążesz problem, ale to może potrwać a pomoc masz "na wyciągnięcie ręko". Będzie jak chcesz.
 
Odpowiedź
#9
(24-05-2019, 11:24)es2 napisał(a): ...
Nie chcesz pomocy, więc męcz się sam. Kiedyś (może) rozwiążesz problem, ale to może potrwać a pomoc masz "na wyciągnięcie ręko". Będzie jak chcesz.

Baj,baj. Ograniczysz emisję CO2 nie odpowiadając Wink

PWL
 
Odpowiedź
#10
(24-05-2019, 11:41)PierwszyWolnyLogin napisał(a):
(24-05-2019, 11:24)es2 napisał(a): ...
Nie chcesz pomocy, więc męcz się sam. Kiedyś (może) rozwiążesz problem, ale to może potrwać a pomoc masz "na wyciągnięcie ręko". Będzie jak chcesz.
Baj,baj. Ograniczysz emisję CO2 nie odpowiadając Wink
Baj,baj, jak chcesz ograniczyć emisję CO2 to nie pisz nic niewnoszących postów.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości