Siemka! Musisz wziąść pod uwagę fakt, iż zmienna single przechowuje wartości zmiennoprzecinkowe ze skończoną dokładnością i to może być zauważalne przy niektórych operacjach na tego typu zmiennych. Poszukaj w helpie od Bascoma i poczytaj o kodowaniu liczb zmiennoprzecinkowych i wszystko Ci się wyjaśni:) Pozdrawiam!! Widzę że dałeś kod.:) Mi się wydaje...
Mama taki temat - potrzebuję przeliczyć dane z systemu hex na zmiennoprzecinkowy float (IEEE745). dane wejściowe hex np: 43 76 18 BA Po konwersji - wynik float: 246.1 Czy ktoś spotkał się z tym jak dokonać takiej konwersji w bascom. Przy odbiorze danych w PC i aplikacji to już coś innego tu nie ma takiego problemu. Pytanie również czy taka konwersja...
Nie musisz stosować dodatkowych zmiennych pomocniczych Twój przykład: "a = b * (c + d)^2" musisz rozpisać a= c+d a= a*a a= a*b Pamiętaj jednak , że procesory ośmiobitowe nie zostały stworzone do obliczeń matematycznych i staraj się unikać działań na liczbach zmiennoprzecinkowych
Może można to inaczej rozwiązać, ale jako pierwsze do głowy przychodzi coś takiego: [syntax=vbnet] Dim A As Byte Dim B As Byte Dim C As Single A = 123 B = 255 C = A * 1000 ' c=123000 C = C + B ' c = 123255 C = C / 1000 ' c =123,255 [/syntax] ..tylko przemyśl czy nie lepiej dokonywać obliczeń na tych 123255 i na samym końcu wynik podzielić przez 1000....
próbowałem tylko ze to musi być wtedy typu single bo word nie przyjmuje zmiennoprzecinkowej liczby czyli nie da sie pomnoży razy 10 próbowałem tez pozmieniać wszystkie typy na single ale też nie poszło
Poczytaj trochę Wiki Bascoma [url=http://wiki.mcselec.com/bavr/FUSING... bo tam zawsze pod każdym tematem pisze "See also" i po nitce doszedłbyś do kłębka [syntax=vbnet]B = Fusing(b , "#.&")[/syntax] Wszystko zależy co jeszcze ma robić ten kod bo do takich zadań to możnaby chyba zrezygnować z Single ;) ..ale jak ma robić tylko to..
Zainteresuj się poleceniem FUSING. Przeczytaj helpa i zobaczysz, że da się zrobić.
Witam, Jeśli nie musisz nie korzystaj ze zmiennych typu single, lepiej przeskalować int'a kilka razy (np zamiast 1,232 robisz 1232 a przy wyświetlaniu dodajesz przecinek) operacje na liczbach zmiennoprzecinkowych zjadają spora flash i czasu procesora. Pozdrawiam, Marcin
Spróbuj zrobić na liczbach zmiennoprzecinkowych.
Dobrze jest pisać jaka wersja Bascom bo czasem rozmowa jest bezcelowa jak ktoś używa ver 1.1 coś tam spolszczonej. Funkcja Round zaokrągla do najbliższej wartości czyli z 2,4 zrobi 2 a z 2,6 zrobi 3 Jeśli chcesz zwykłą zmienną to wystarczy przepisać wartość z Single i program zrobi automatyczne rzutowanie i obetnie to co po przecinku. Kwestia potrzeb...
Powinien ale cls daj przed petla a w niej zastosuj locate. Po za tym nie operuj warunkami na liczbach zmiennoprzecinkowych. Przelicz sobie jaka wartosc ma zmienna Wart_ac przy napieciu 1V i do niej napisz warunek.
... Może ktoś wie jak to zrobić bez sztucznego sprawdzania i dopisywania końcówek. PL Ja chyba wiem ;) 'dla Frm = 0 , kompiluje Fusing() 'dla Frm = 1 , kompiluje Format() 'teraz mozna porównać "pamięciożerność" Const Frm = 0 Dim A As Single , B As Integer , C As String * 10 A = 1.1625 B = A * 10 #if Frm C = Str(b)...
Źle definiujesz typ zmiennych. Żeby można wykonywać operacje zmiennoprzecinkowe, typ zmiennych powinien być single lub double. Dim Dawka_temp As Single, Dawka As Single
Bascom to nie matlab, spróbuj pozbyć się liczb zmiennoprzecinkowych!
Mnożąc zmienną typu WORD przez stałą CONST wychodzi niedokładny wynik. Np: WORD = 200 x CONST = 0.0025 = SINGLE = 0.499999933. Dokładność obliczeń zmiennoprzecinkowych jest kwestią długości (i formy) reprezentacji liczb zmiennoprzecinkowych. Z oczywistych względów w ośmiobitowych procesorach z małą pamięcią reprezentacja FP nie może być zbyt długa...
Chyba nie czytałeś ostatnio tego rozdziału z Language Fundamentals. W ten sposób sam sobie robisz kuku... Pomijając to myślę, że jeśli te Twoje zmiennoprzecinkowe masz tylko do dwóch miejsc po przecinku, to dlaczego, po prostu, nie pomnożysz tego x100 a na końcu wyniku nie podzielisz /100? Zapewne wszystko się wykona dużo szybciej niż na tych zmiennoprzecinkowych....
Można to zoptymalizować i nie przeliczać na Volty w ogóle, ale tak bedzie prościej zobrazować. Jeśli napięciem odniesienia jest AVCC to znaczy że 5V trzeba teoretycznie podzielić przez rozdzielczośc 1024 i wyjdzie 0.00488 no i to się często zaokrągla do 0.0049 Teraz żeby odczytać napięcie wystarczy pomnożyć odczytany wynik przez te 0.0049, ale to wymusza...
Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej) ... Całość pisana jest w bascomie, w przerwaniu nie mogę zejść z czasem niżej bo dużo czasu zajmują obliczenia na zmiennych zmiennoprzecinkowych. No to nie stosuj zmiennoprzecinkowych obliczeń oraz zrób krok do przodu i zmień język na C. Co do samego...
Nie do końca tak jak myślisz . Jeżeli liczba ma mieć postać xx,x to zamiast np. 12,5 * 3 = 37,5 do obliczeń biorę liczby 125 i 3 . Wynik 125*3 = 375 Jeżeli w programie mam ten wynik porównać z liczbą 35,0 to porównuje z 350 ( napisz program operujący na liczbach zmiennoprzecinkowych a potem na całkowitych i porównaj rozmiar i szybkość działania , wykonując...
To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą? No to w końcu chcesz mieć liczbę całkowitą w zmiennej zmiennoprzecinkowej czy liczbę całkowitą w zmiennej całkowitej? Jak to drugie, no to Round: Dim Co2_w As Single Dim Co2_int As Long ... Co2_int = Round(co2_w) Niezgodnie z Helpem BASCOMa,...
Ale - dla stringu "84.2" otrzymuję wartość zmiennej 84.199996946 Niestety rozdzielczość zmiennych typu Single jest skończona i nie można w nich zapisać każdej liczby zmiennoprzecinkowej. Jak sądzę, jest to problem konwersji do single - czy jest jakiś sposób, aby otrzymać tą wartość dokładnie taką jak w stringu ? Jeśli masz dużo pamięci RAM to zastosuj...
(...) Po stwierdzeniu obrotu kola wykonany zostaje podprogram ”Interrupt” gdzie inkrementuje się zmienna pomocnicza „Przebieg” wielkości bajta, by w wolnym momencie podczas wykonywania pętli, przemnożyć to przez obwód kola. Zabieg ten był wymagany gdyż bascom, nie radzi sobie z bardzo częstym wykonywaniem obliczeń zmiennoprzecinkowych...
Typy się kłaniają, typy danych, jeśli więc zrobisz tak: dim droga as long dim droga1 as single droga1 = droga/12.54 to powinno zadziałać ;) przecież dzielisz nie przez liczbę całkowitą tylko zmiennoprzecinkową, a więc w wyniku też masz dostać zmiennoprzecinkową - dlatego trza wybrać typ single w Bascomie. Ale to z kolei spowoduje ci straszny rozrost...
Użyj języka wysokiego poziomu (C lub Bascom), wtedy nie będziesz miał problemów z arytmetyką zmiennoprzecinkową.
Może jednak zdradzisz mi te niespodzianki? Zaoszczędził byś mi sporo pracy. Teraz tak z rękawa nie posypie, hmm... przykładowo Do...Loop jest mniejsze niż while...wend. Generalnie chodzi o zastępowanie, niektórych instrukcji BASCOM'owych własnymi rozłożonymi na części pierwsze warunkami. O działaniach na liczbach zmiennoprzecinkowych już nie wspomnę,...
Jeśli dałoby się zmusić rejestrami mikrokontroler do liczenia sinusów na liczbach zmiennoprzecinkowych o podwójnej precyzji to faktycznie - same rejestry by wystarczyły... 4\/3!!
Pierwsza sprawa - po Bascomie nie masz się co spodziewać optymalnego programu, to raczej język do zrobienia czegoś na szybko i bez większej znajomości programowania. Niestety, do poważniejszych zadań nadaje się w zasadzie tylko C. Druga sprawa - pewnie jest tak - w C, kiedy tylko zadeklarujesz zmienną, kompilator i tak ją usunie, jeśli jej nie używasz....
Albo w ogóle nie bawić się w liczby zmiennoprzecinkowe, tylko... utworzyć 2 zmienne całkowite, jedna odpowiedzialna za części tysięczne, druga za jedności i wyższe. Dodatkowo zaoszczędzisz nieco flash'a, gdyż operacje na liczbach zmiennoprzecinkowych zajmują dużo pamięci programu. A zabawę w Stringi też odradzam... nie wytaczajmy armaty na muchę :D
Dim T1 As Single Dim T2 As Single A co to? "Przesunięcia bitowe" na liczbach zmiennoprzecinkowych? Zamień single na int i powinno śmigać. Procedury obliczeńna liczbach zmiennoprzecinkowych pożerają mnóstwo miejsca. Dzielenie liczb całkowitych w bascomie AVR robi się za pomocą \, a nie /, ot taka ciekawostka. Użycie / powoduje wykonanie tego dzielenia...
Oto fragment polskiej wersji helpa do bascoma (rozdział Podstawy języka BASCOM BASIC): Komplikacje związane z liczbami zmiennoprzecinkowymi Każda liczba całkowita może zostać zapisana w notacji binarnej. Liczba zmiennoprzecinkowa już nie. Faktycznie, każda liczba niewymierna o podstawie 10, będzie także niewymierna w każdym systemie o podstawie mniejszej...
Myślę, że jest to naturalne. Zmienna typu Long zajmuje 4 bajty a Integer tylko 2. Nie da się ciężarówki zaparkować w garażu dla malucha. W helpie jest informacja, że można dokonywać konwersji typów. Oto fragment: Dim I As Integer, S As Single S = 100.1 'przypisujemy liczbę zmiennoprzecinkową I = S 'ta instrukcja zmieni liczbę typu single na Integer...
Witam serdecznie, bawię się ostatnio zmiennymi w Bascomie. Zadeklarowałem dwie zmienne typu single żeby wykonać pewne obliczenia i po skompilowaniu kodu okazało się że ponad 50% pamieci flash mikrokontrolera zostalo zużyte. Czy to normalne? troche mnie to zaskoczyło. Czy nie da sie wykonywac operacji na liczbach zmiennoprzecinkowych w inny sposób, zeby...
No ale właśnie mówiłem, że zysk na prędkości to wiadomo że jest pomijalny, jednak zysk na objętości kodu to już bardzo istotna sprawa i nie patrz na to w ten sposób, że tu akurat dałeś taki procek w którym masz aż tyle wolnej pamięci, bo po prostu na drugi raz będziesz wiedział że można to zrobić na mniejszym bez problemu ;) ..... a najważniejsze to...
Szczerze mówiąc to prędzej napisałbym program w C który robiłby to samo, niż miałbym debuggować kod wygenerowany przez bascoma. Ja pierdzielę, jak można generować aż tak nadmiarowy kod, nikt przy zdrowych zmysłach nie używa na uC operacji zmiennoprzecinkowych, szczególnie że łatwo można się bez nich obejść w takiej prostej aplikacji.
A bo bascom to taki kaszaniasty trochę jest jeżeli chodzi o wydajność i dzielenie za pomocą '/' wykonuje jako zmiennoprzecinkowe, czyli obie liczby na zmiennoprzecinkowe zamienia, dzili i wynik zamienia na format docelowej wartośc (i tu chyba jest coś skopane). Natomiast dzielenie za pomocą '\' to dzielenie na liczbach całkowitych, o wiele szybsze.
Witam janbernat czas goni :-) wiec siedze calymi dniami nad tym, najwiecej czasu zeszlo nad RS - 3 dni siedziałem i nie mogłem dojść gdzie leży błąd. :-( No mam juz w sumie zrobione nastawy w AT24C04, poczatkowo chcialem zrobic nastawy liczb zmiennoprzecinkowych, ale mija sie to z celem, gdyz nie stosuje ( i raczej nie bede) PID-a więc i tak na sterowaniu...
Sygnał o częstotliwości 10 kHz. Częstotliwość ADC dla 10 Bitów to 100kHz i to dla jednego kanału. Dla 8 kanałów wynosi 100kHz/8 . Czyli masz 10 pomiarów na okres dla pojedyńczego kanału. Względna dokładność. Do takich pomiarów to według mnie lepiej użyć C niż Bascoma. I broń Boże nie stosuj typów zmiennoprzecinkowych. Co najwyżej 32bitowy typ stałoprzecinkowy.
No i mam nastepny problem data nie moze byc zmiennoprzecinkowa bo mi wyrzuca - nan w symulacji. albo 0.0
Więc pytanie zasadnicze. Jak zaokrąglić otrzymany wynik zmiennoprzecinkowy w bascomie AVR? Wykorzystywanie liczb zmiennoprzecinkowych do odczytu temperatury z DS18B20 jest lekko mówiąc mało rozsądne, zwłaszcza że "po przecinku" może być tylko 16 różnych wartości. Takie rzeczy to się zaokrągla na etapie pisania programu, który potem operuje wyłącznie...
Co do języka C to czy zastanawialiście się jakie ma możliwości procedure printf?. Urzycie jej w procesorze x86 to dodatkowe 20kB kodu. Przy programach w C zaleca się korzystanie z procedury iprintf (nie wiem czy na mikrokontrolery jest odpowiednik) która jest pozbawiona obsługi liczb zmiennoprzecinkowych. A co do BASCOMa to ja osobiście nie widze go...
...Program zajmuje 99% gdyż liczy na liczbach zmiennoprzecinkowych. Jakbym pominął przeliczanie i przypisał na sztywno wartości ADC odpowiadające konkretnym napięciom to program by mniej zapewne zajmował. BASCOM'a da się fajnie okiełznać tylko trzeba się nico w niego wgryźć ;-) Na początek pozbądź się wszystkich AND w warunkach i zastąp je IF'ami....
Chodzi o to ze do zmiennej typu integer nie zapiszesz liczby zmiennoprzecinkowej. Co chcesz pozniej z ta zmienna robic?
W nocie do megi8 masz pokazane jak podłączać AVCC (dławik + kondensator). Napięcie zasilania jest za mało stabilne na napięcie odniesienia, tym bardziej, że zależy Ci na dokładności. Wrzucilem kondensatory tylko prosze o sprawdzenie czy wartosci sa dobre... http://obrazki.elektroda.net/79_12163716... W kodzie wyżej kilka wartości i szczegółów...
W czym programować najlepiej w asemblerze, jeżeli masz zamiar robić w przyszłości poważne projekty! To chyba jakieś żarty :D Kto poważny dzisiaj poważne projekty pisze w asemblerze? Kto się w takim olbrzymim kodzie połapie? Kto po przerwie będzie wiedział "co robił ten fragmencik kodu"? Kto w prosty sposób przeprowadzi obliczenia zmiennoprzecinkowe...
Witam. Wyobraźmy sobie takie zadanie: ma być zbudowany generator w.cz. na układzie DDS np. AD8950. Generator miałby byc sterowany z małego Atmela np. 89c4051. Język programowania to Bascom. Zakres częstotliwości to powiedzmy 10-25 MHz z krokiem 1 Hz. I tu pojawia sie problem. Mianowicie typowy system wyliczania słowa jakie ma być wysłane do DDSa to:...
Ale zastanawia mnie jedna rzecz. Czemu piszesz, że bascom jest ok do takiego zastosowania skoro kod zajmuje ci 30 kilo? Dyskwalifikuje to użycie tańszych procesorów. Nie mówię, że bascom nie da rady bo nie zadziała. Zadziała ale z moich praktyk wynika, że jest nieoptymalny w stosunku do C. Może nawet będzie się dało kod zmieścić na dużo mniejszym procku....
Poczytaj o arytmetyce stałopozycyjnej. Liczby zmiennoprzecinkowe (np. float), mimo, że wygodne przy programowaniu na PC niezbyt nadają się do używania w mikrokontrolerach.
Witam. A może ma ktoś sprawdzony program do takiego odczytu cobym popatrzył i zrozumiał? Przestudiuj Notę Applikacyjną AN#111 (mscelec.com) http://www.mcselec.com/index.php?option=... Tam masz bardzo dobry edukacyjny przykład na dwa sensory DS z odczytem pełnego I.D., sprawdzaniem CRC, wyświetleniem pełnych I.D na...
Do autora: czy była by możliwość zaprezentowania tutaj kodu sieci neuronowej - jej nauki i mechanizmu wstecznej propagacji błędu w Bascomie? Czy wagi są przechowywane w zmiennych zmiennoprzecinkowych - tj. Single?Jak jest realizowana funkcja przeliczania wag dla aż tylu - 512 - zmiennych? Jak wygląda algorytm owej sieci (w Bascomie pewnie trzeba było...
Jeśli chodzi o tego typu rzeczy to polecam interpolację Newtona. Całkiem sprawny i dość dokładny algorytm interpolacji wielomianowej. Sam w ten sposób zaimplementowałem funkcje cyklometryczne (popularnie zwane arcusami). Cóż, jeśli chcesz to robić w BASCOMie to powodzenia, polecam C, jak już. W asemblerze z kolei byś się musiał za dużo męczyć. Poza...
atmega zmiennoprzecinkowy zmiennoprzecinkowy chara procesor zmiennoprzecinkowy
iphone schemat gniazdo zaprogramowanie pilota thomson lutownica scalonych
bateria milwaukee rezystor dmuchawy
Samsung BN59-01239A Remote & Wi-Fi Module Guide Zamienniki układu scalonego BM1Q001: BM1Q002, NCP1207A i inne