• 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
Dobre zasady programowania w Arduino...
#21
(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.
 
Odpowiedź
#22
Wdrożyłem prostą politykę priorytetów Wink

W pętli głównej nie wywołuje wszystkich funkcji za każdym przelotem, tylko:
- odpytanie termometru i przeliczenie PID co 250ms,
- obsługa "stycznika" PWM co 10ms,
- wysłanie i odebranie z seriala co 1s.

W efekcie pętla z <> 10000/s przyspieszyła do około 27000/s. Smile

Przypuszczam, że zdąży obsłużyć dowolne menu czy wyświetlacz Wink

PWL
 
Odpowiedź
#23
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.
 
Odpowiedź
#24
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
 
Odpowiedź
#25
[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
 
Odpowiedź
#26
Opisz dokładniej o co chodzi, jakie nan?
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#27
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.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#28
(15-05-2019, 19:37)Robson Kerman napisał(a): 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?

Oj, bo ja początkujący jestem, uczę się Wink
Podziel się tym algorytmem na intach jeśli możesz...

Płytka to Mega 2560

PWL
 
Odpowiedź
#29
(15-05-2019, 17:51)kaczakat napisał(a): Opisz dokładniej o co chodzi, jakie nan?

Not a Number. Takie "uj wie co" - zamiast zwrócić zmienną liczbową
zwraca NAN i baw się dobrze Smile Jest nawet funkcja do sprawdzania
czy akurat dostałeś NANa zamiast to czego się spodziewałeś Wink
Lekka paranoja...

PWL
 
Odpowiedź
#30
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości