Arduino błąd dzielenia - czy są testy dla

Dec 05, 2018 6 Replies

Witam.



Kupiłem sobie na próbę klona Arduino nano na Allegro. Działa ok, ale przyłapałem go na błędzie. Otóż kombinuję, żeby zrobić programowany generator przez podział częstotliwości zegara. Wysyłałem częstotliwość przez USB i zwrotnie dostawałem obliczony podzielnik. Raz jeden (za pierwszym uruchomieniem) zdarzyło się, że


16000000/0.2 wyszło 80000008

Najpierw pomyślałem, że funkcja nie nadaje się do dzielenia przez niewielkie ułamki, bo inne wyniki były dobre. Ale wpisałem jeszcze raz to 0.2 i dostałem prawidłowy wynik, czyli 80000000. No i zagwozdka, mogło przekłamać przy liczbie binarnej, ale również przy transmisji, znak '0' i '8' tez różni się 1 bitem, podobnie jak wartość binarna. Jestem pewny dobrego podania dzielnika, bo wypisywał zwrotnie dane.



W związku z tym pytanie, czy ktoś napisał może test do testowania atmegi w tym przypadku 328 ? Niekoniecznie rozbudowany, takie podstawowe przetestowanie.


Użytkownik "Cezary Grądys" napisał w wiadomości grup dyskusyjnych:5c081b42$0$485$ snipped-for-privacy@news.neostrada.pl...

Istotnie zagwozdka - czemu 1 raz. Moze i przeklamany bit.

Bo jest jeszcze druga - jak oni/ty to liczysz.

0.2 nie ma dokladnej reprezentacji w binarnym formacie zmiennoprzecinkowym.

Wiec jesli jest jakas biblioteka zmiennoprzecinkowa uzyta, to mamy w pamieci naprawde liczbe

0.199999... i tu juz moze sie 8000008 pojawic :-)

J.

Cezary Grądys snipped-for-privacy@wa.onet.pl> napisał(a):

Czyżbyś chciał testować jednostkę arytmetyczno-logiczną ATmegi? Ewentualnie libc? Stawiam na błąd w kodzie lub przekłamanie podczas transmisji.

Nie rozumiem, jakie przekłamanie na USB? Transmisje USB są zabezpieczone crc. Problem jest raczej w zmiennym przecinku. w

Marek snipped-for-privacy@fakeemail.com napisał(a):

Doświadczenie życiowe mówi, że to USB miało postać FTDI :) ATmega328 nie ma natywnego USB. Zmiennego przecinka bym nie podejrzewał, do omawianej operacji nie zostały wykorzystane liczby przy których zmienny przecinek dałby o sobie znać. Zrobiłem zresztą test i było OK. Poza tym problem był jednorazowy, co wskazuje na błąd w kodzie lub przekłamanie.

W dniu 06.12.2018 o 16:22, Grzegorz Niemirowski pisze:

Błąd był 1 razowy, najprawdopodobniej błąd transmisji. Na razie wszystko działa prawidłowo, ale znalazłem opinie, że te chińskie arduina różnie działają.

W dniu 06.12.2018 o 17:44, Cezary Grądys pisze:

Na podstawie twojego wpisu wyrobiłem sobie opinię, że jesteś totalnym głąbem. Nie mającym pojęcia o tym co to Arduino.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required