Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
02-05-2019, 10:08
(Ten post był ostatnio modyfikowany: 02-05-2019, 20:38 przez es2.)
(01-05-2019, 13:27)PierwszyWolnyLogin napisał(a): sensors.getTempC(DS01); zajmuje 12-14ms, a sensors.requestTemperatures() 2ms.
Jeszcze muszę obsługę błędów pomiaru zrobić.
Użyj sprzętu i przerwań, nie będziesz blokował CPU na czas odczytu.
(01-05-2019, 13:27)PierwszyWolnyLogin napisał(a): przydałoby sie 4x20... Następne będzie menu, albo przynajmniej wyświetlanie wyników, o ile samo menu nie będzie potrzebne...
Przy dzisiejszych cenach, używam wyświetlaczy graficznych, często kolorowych. Niestety, Arduino (w domyśle UNO) to ślepa uliczka. Tak jak z monochromatycznymi jest po japońsku (jako-tako) bo 128x64 wymaga bufora 1kB czyli połowę RAM UNO, tak z kolorowymi nie jest już zbyt dobrze. Mały OLED 96x64 to ponad 12kB. Niby Mega1284 da radę (16kB) ale nie ma DMA :-( Zainteresuj się ESP32 albo ARM. Jak już przywiązałeś się do IDE Arduino, to obsługuje ono F1xx, F4xx. Xmega nie polecam, ze względu na niewielką (w stosunku do ARM) ilości RAM, wysoką cenę i drogie debugery.
PS
Arduino UNO to taki Fiat UNO, ma cztery koła, kierownice i jeździ.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
Ale co daje to "przyspieszenie" skoro np obsługa LCD to 100ms? Zamaskowałeś problem, który będzie uwidaczniał się rzadziej.
Aby zrobić dobrze a nie tylko aby działało po japońsku (jako-tako), to:
- Co się da zrób na przerwaniach (pomijam szybkie SPI na AVRmega/tiny, bo nie ma DMA).
- Daj możliwie duże bufory gdzie da to zysk czasowy.
- Maksymalnie używaj sprzętu, np LCD równoległy przez kontroler magistrali (to mają nieliczne AVR, np Mega162, 128, itp), OneWire przez USART na przerwaniach.
Najlepsza rada, najpierw określ co chcesz robić, co jest potrzebne, później dobierz sprzęt a nie odwrotnie - na siłę do kiepskiego sprzętu dorabiasz soft.
Liczba postów: 132
Liczba wątków: 37
Dołączył: Jan 2019
Reputacja:
0
15-05-2019, 10:45
(Ten post był ostatnio modyfikowany: 15-05-2019, 10:57 przez PierwszyWolnyLogin.)
Nadziałem się na dziwny problem.
Wszystkie zmienne float.
a = a + (b * c);
b: 0.00
c: -40.81
a: nan - WTF?
Dostaje a = nan, co mi rozwala algorytm. Powinno być zero...
O co chodzi? Macie pomysł?
PWL
Liczba postów: 132
Liczba wątków: 37
Dołączył: Jan 2019
Reputacja:
0
[quote="PierwszyWolnyLogin" pid='12741' dateline='1557909901']
b: 0.00
c: -40.81
a: nan - WTF?
Ha!
Trafiłem na inny przypadek
a = a + (b * c);
a: nan
b: 0.05
c: 5.44
Zmienne b i c dodatnie, a zwraca a = nan. Help!
PWL
Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
Opisz dokładniej o co chodzi, jakie nan?
Liczba postów: 654
Liczba wątków: 3
Dołączył: Apr 2017
Reputacja:
51
Na jakim kontrolerze pracujesz?
Mimo, że AVR nie ma koprocesora, to nie powinien się wywalać na tych floatach. Jedyny ból, to mała ilość pamięci, a floaty lubią ssać. Jeśli przepełniasz stos lub stertę, to może pokazać NAN, ale sprawdzę to jeszcze u źródeł (no nie sprawdzę dopóki nie napiszesz na jakim kontrolerze pracujesz).
Na moim UNO te równania hulają bez problemu.
Poza tym, zainteresuj się może innym algorytmem. Pisałem niedawno bardzo wydajny PID na liczbach całkowitych, więc czemu brniesz w coś co może usmażyć Twój sprzęt?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.
Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
Jeszcze mi się nie zdarzyło i stąd moje zdziwienie. Jak się już dowiedziałem, coś takiego się pojawia w przypadku gdy wynikiem jest liczba nierzeczywista, np. pierwiastek z -1. Myślałem, że po prostu pojawia się mała czarna dziura i rdzeń wyparowuje.