Implementowałem prostą sieć neuronową na DSP Texasa, miało się liczyć w czasie rzeczywistym. Sieć była wygenerowana w C przez STATISTICA Sieci Neuronowe. Po wrzuceniu sieci do procesora, okazało się, że liczy się coś koło 6 sekund. Ponieważ procesor był stałoprzecinkowy, a sieć zmienno (nie ja wymyśliłem taką konfigurację), problem rozwiązałem przez...
jak najprościej wykonać obliczenie zmiennoprzecinkowe (z dzieleniem) na liczbach uint8_t, tak aby wynikiem także była liczba uint8_t? Wcale nie musisz wykonywać dzielenia na zmiennoprzecinkowych :wink: wystarczy że zrobisz np: tak: uint8_t a; uint16_t b; b=(20*10)/3; b*=10; a = b/10; Zasada jest taka żeby "przesunąć" przecinek z ilorazu w prawo...
Do prostych operacji, zwłaszcza mnożenia, dzielenia, dodawania i odejmowania polecałbym jakiś format stałoprzecinkowy, nowa avr-libc ma może i szybkie, ale za to strasznie "rozdęte" procedury obliczeń zmiennoprzecinkowych. Ich rozmiar jest wręcz paskudny. Przykład, kod z mnożeniem, dzieleniem, dodawaniem i odejmowaniem zmiennoprzecinkowym w poprzedniej...
Nie podoba mi się bezpośrednie połączenie wejścia ADC do napięcia mierzonego. Mógłbyś zastosować tam jakiś prosty filtr RC. A co, jeżeli jest tam sygnał prostokątny albo podobny? Będziesz miał wyniki pomiarów raz 0, raz 100%, a czasami jakąś przypadkową wartość jeżeli pomiar wypada w momencie narastania lub opadania zbocza. Czas próbkowania przetwornika...
temat wałkowany już kilka krotnie. funkcje delay mają argument typu float jeśli podajesz zmienna jako argument do dodajesz również operacje zmiennoprzecinkowe na tej funkcji które .... dają efekt jaki uzyskałeś
Nie wiem czy to będzie istotne, ale w języku C/C++ istotnym na pewno jest przy jakimkolwiek dzieleniu stosować zapis , dla przykładu : [syntax=c]dodaj=modul_depth/8192.0[/synt... Wtedy kompilator wie że to co dzieli dzieli w sposób dedykowany liczbom zmiennoprzecinkowym, w innym przypadku jako wynik wyjdzie tylko część całkowita. Ale to też zależy od...
Witam. Jestem w trakcie projektowania cyfrowego rejestratora wielokanałowego. Nie ukrywam, że jestem początkujący w tym temacie, dlatego potrzebuje pomocy w kilku kwestiach. Mianowicie, nie do końca wiem jak podłączyć przetwornik ADC0817. Na schemacie, który załączyłem poniżej, już "jakoś" go podłączyłem, ale jestem prawie pewien, że nie wszystkie połączenia...
Czy można jakoś wprowadzić parametr do strtod aby zaczynał z innego miejsca niż początek zmiennej? Użyj sscanf i odpowiedniego ciągu formatującego. No tylko, że domyślnie sscanf nie zawiera obsługi formatów zmiennoprzecinkowych. A włączenie jej "nieco" zwiększy rozmiar kodu wynikowego.
Wydaje mi się, że potrzebujesz dolinkować obsługę liczb zmiennoprzecinkowych w gcc/avr-libc. Niestety nie pamiętam teraz dokładnie jak to zrobić, a chwilowo nie mam na komputerze środowiska do sprawdzenia tego..
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.
Używam wersji 20060421, o nowszej nawet nie słyszałem. może to problem z jakimiś funkcjami zmiennoprzecinkowymi. Czytałem gdzieś, ze w Makefile są opcje kompilacji z tym związane, ale niestety nie bardzo się w nich łapię. Hm.. A linkujesz bibliotekę libm? (-lm w opcjach linkera.. Nie doszukałem się tego w tym co wcześniej wkleiłeś..) Ogólnie używasz...
Programuję procesor Atmega 128 w gcc. Zmontowany układ ma mnożyć zmierzone napięcie przez przekładnię. Przekładnię zmieniam od 1 do 10 z krokiem 0.1. Problem jest w tym że w procedurze zmiany przekładni dodając do przekładni 0.1 lub odejmują na wyświetlaczu wyświetlają się wartości np. 9.3 i 9.5 a 9.4 nie idzie wyświetlić. Dodam że jeśli na stałe w...
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...
Ta linia powinna być w przerwaniu Wtedy będzie miał błędy odczytu termometru gdy DS18B20_STOPINTERRUPTONREAD != 1 a gdy DS18B20_STOPINTERRUPTONREAD == 1 to multipleksowanie będzie działać źle. Ten kod jest słaby. Z najważniejszych błędów to, nie sprawdza crc, zawiesza na długo przerwania a wystarczy na czas transmisji bitu gdy wystawiane jest 0 na...
Witam Nigdy nie działałem za zmiennym przecinku, ale teraz muszę policzyć nie za ciekawy wzór i muszę to zrobić na typie Double Mam funkcję double fp_calc(void) { double fp; double HUMI=55; double TEMP=293.15; fp=((272.186*log(HUMI/100...
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.
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
1. Napisz program od nowa bez wywołań rekurencyjnych 2. Napisz program od nowa bez wykorzystania liczb zmiennoprzecinkowych 3. Napisz program od nowa bez wykorzystania funkcji sprintf 4. Co to jest LCD_CLEAR? Makro czy funkcja? Jeśli funkcja to czegoś brakuje przy jej wywołaniach.
polprzewodnikowy : _delay_ms może ma coś z funkcji, ale więcej to ma wspólnego z makrem niż funkcją. Przy tych makrach zabronione jest (pod rygorem ogromnych opóźnień oraz wzrostu rozmiaru kodu) używanie wyrażeń, których wartości kompilator nie może policzyć podczas kompilowania - wynika to z tego, że czas opóźnienia jest przeliczany na liczbach zmiennoprzecinkowych...
Ten Twój program to, niestety, brak zrozumienia dla sprawy. W pętli Do Loop Until zbierasz 64 odczyty i je uśredniasz, ale tego wyniku w ogóle nie używasz... Zamiast tego robisz jeszcze raz odczyt zamazując poprzedni wynik uśredniania. Gdzie tu sens? :D Spokojnie możnaby też zrezygnować z użycia zmiennoprzecinkowej Single i program byłby mniejszy -...
Po co typ double? Tu w ogóle nie potrzeba liczb zmiennoprzecinkowych, wystarczy int ściślej int16_t. Wydaje mi się,ze poprawienie tak prostego kodu nie ma sensu, szybciej i lepiej napisać to od nowa. Nie wiem jaka precyzja jest potrzebna, jaki zakres temperatur, może lepiej zrobić to na DS18B20?
Zakup książek nie gwarantuje sukcesu jeśli się ich nie czyta. Osobiście przyjmę każdą książkę na temat techniki i chętnie przeczytam... Po wydaniu "takiej" forsy na lekturę powinieneś wiedzieć, że należy unikać w ośmiobitowych mikrokontorlerach typu Float/Single bo to wymaga dołączenia do kodu biblioteki do obsługi zmiennoprzecinkowych...a to wymaga...
Jest to "poprawne rozwiązanie". Poprawne w cudzysłowie ponieważ jak widzę typ SINGLE w Bascomie to aż mnie coś bierze :) Ten sam program napisany bez użycia typu zmiennoprzecinkowego (wykorzystując tylko typ całkowity) wykona się dużo, dużo... szybciej i zajmie mniej pamięci programu i danych.
Może pozbądź się tych zmiennoprzecinkowych operacji. Takie rzeczy można zarobić stałoprzecinkowo a różnica w prędkość i rozmiarze kodu jest kosmiczna. To bardzo proste: 1) Zakładamy 16 bitową rozdzielczość (można 32 jak się chce) 2) Przlieczamy współczynnik, o tak: 65536*0.351=23003 3) deklarujemy: unsigned short a; //16 bitowa bez znaku unsigned long...
NO jak musisz wykonać jakieś modulo, to musisz liczbę zmiennoprzecinkową zrzutować na typ stałoprzecinkowy. Bo nawet w matematyce modulo jest niezabardzo zdefiniowane dla liczb innych niż całkowite ;)
Efekt byłby jeszcze lepszy, gdybyś dodał guziki do ręcznego obracania bryłą Istnieje możliwość ręcznego obracania bryłą względem dowolnej osi w czasie rzeczywistym. Działa też skalowanie i przesunięcia. Można sterować z terminala lub przyciskami. Program to umożliwia choć nie widać tego na nagraniu. Działa jakby w trybie auto dla celów pokazowych....
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...
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...
Pisząc w C, unikając liczb zmiennoprzecinkowych, zakładając programową obsługę 1-wire, sprzętową PWM, oraz bluetooth (UART) powinno się spokojnie zmieścić. Pozdrawiam
Wbudowana biblioteka liczb zmiennoprzecinkowych może zajmować swoje. Najprostszym rozwiązaniem jest zamienić zmienne na stałoprzecinkowe tzn int oraz używanie pewnego czynnika: np liczbę 1,5 zapisywać jako 1500, 0,333 jako 333 itd: ułamek razy 1000 zaokrąglony do liczby całkowitej. Zamiast 1000 można dać coś innego, można też zamiast int dać long long...
do opcji linkera nalezy dodac -lm (myslnik el em) - dolaczy to do linkowania biblioteke libm.a, ktora zawiera definicje funkcji zmiennoprzecinkowych matematycznych z naglowka math.h niemniej jednak nie wiem czemu dolaczasz wprost biblioteki libc i libgcc - zapewne przez to masz problem (też) - usun je z makefile. 4\/3!!
wiem wiem, że tak to się robi mam to napisane w programie dokładniej ten fragment jest za to odpowiedzialny: ................. Tyle, że czujnik ds18b20 nie podaje temperatury tak po prostu do procesora np.: 20 stopni Celsjusza tylko trzeba to troszkę przekonwertować za co odpowiedzialna jest ta część programu: fajnie miło i przyjemnie jeśli temperatury...
Witam, Mam taki problem. Zastanawia mnie, dlaczego ten fragment kodu nie dziala poprawnie: unsigned char Line[17]; sprintf(Line, "%f", 234.0/212.0); LCD_Write(Line); Zwykle dzielenie floatow i wyswielenie ich na LCD [HD44780], za to wynik dziwny: na wyswietlaczu dostaje tylko jeden znak: '?' Pisze to pod ATMega8, wyswietlacz...
Zerknij do załącznika. Jest tam procedura obsługi ADC dająca na wyjściu wartość napięcia ze czterema miejscami po przecinku. Oczywiście BEZ UŻYCIA LICZB ZMIENNOPRZECINKOWYCH... Nie chce mi się teraz sprawdzać z ktorego wejścia korzysta, ale na pewno mogę powiedzieć, że źródłem referencyjnym jest napięcie zasilania procka. Dokładna wartość napięcia podawana...
Dzięki za odzew Szybkość, szybkość, szybkość - jak wspomniałem program wykonuje tylko przeliczanie liczb binarnych 8-bitowych (x8 liczb) (nawet nie zmiennoprzecinkowych)(statystycznie rzecz biorąc najwięcej jest operacji typu przesunięcie bitowe) więc interesuje mnie coś co będzie miało zegar ustawiony na MAX (bo podejrzewam, że wszystkie procesory...
Mam napisany moduł operacji na czasie, ale brakuje mi w nim funkcji obliczenia nr tygodnia w standardzie ISO. Zaproponował być kod w c dla AVR GCC z uwzględnieniem małych ilości RAM na uC Atiny, ATmega oraz oparty na arytmetyce liczb całkowitych (zmienno przecinkowe liczby są nie efektywne na AVR i większości uC) ? Obliczenie numeru tygodnia w standardzie...
Cuda się dzieją i to niesamowite : Watt.c #define F_CPU 1000000UL // 1 MHz #include <avr/delay.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <avr/io.h> #include <inttypes.h> #include <stdlib.h> #include <math.h> #include "Watt.h" #define REP_ADC 64 /*first array element is leftmost...
Ja napisałem Sobie taką implementację vfprintf w wersji full i tiny przełączane flagą, gdzie pierwsza ma wszystko według tego opisu: [url=http://www.cplusplus.com/reference/... oprócz zmiennoprzecinkowych reprezentacji. Reszta sprintf, snprintf, fprintf to pochodne tej funkcji. Wersja tiny 500 bajtów z opcjami left-pads i...
Myślę, że nie. Wiem, że pozbycie się liczb zmiennoprzecinkowych przyspieszyło by obliczenia i myślałem wstępnie o tym. Odstraszała mnie zmiennoprzecinkowa trygonometria i obawa przed "pokaleczeniem" modeli przy zbyt niskiej rozdzielczości liczb. Powinienem gdzieś pomiędzy normalizacją (wstępnym skalowaniem i centrowaniem) a renderowaniem zastosować...
Witam, mam problem tej natury że chciałbym wyświetlić liczbę zmiennoprzecinkową, lecz standardowo wykorzystywana funkcja sprintf w AVR-libc nie obsługuje typów zmiennoprzecinkowych i na wyświetlaczu dostaję znak "?". Problem w tym że nie umiem nigdzie znaleźć informacji jaka biblioteka pozwala na wyświetlanie takich liczb za pomocą funkcji sprintf.
Bardzo dziękuje za tak pozytywne opinie ! :) Niestety moim językiem programowania jest mało finezyjny BASCOM, ale to dlatego że nie lubię dużo myśleć i można łatwo uzyskać zamierzony efekt-ale to kwestia sporna. Dzięki za polecenie gotowych płytek pokrytych warstwa światłoczuła,ale to jednak dla mnie nadal za droga metoda :P W któreś wakacje próbowałem...
Witam, napotkałem w swoim projekcie na dziwny wręcz dla mnie nie wytłumaczalny problem dotyczący mnożenia liczb zmiennoprzecinkowych. Poniżej kod który generuje problem: [syntax=c]float error = ( tutaj podaję różne wielkości z przedziału -100 do +100 ) float dana = error * 4.0f; [/syntax] Następnie zmienną dana wyrzucam sobie rs232 na komputer i otrzymuję...
Witam Ja Odczyt temperatury zrobił bym tak: .... 1wwrite &HCC 1wwrite &HBE Lsb = 1wread(): Msb = 1wread(): Minus = Msb.7 Tempa = Msb * 256 Tempa = Tempa + Lsb If Minus = 1 Then Tempa = Not Tempa Tempa = Tempa + 1 End If Tempa = Tempa * 10 'temperatura *10 Tempa = Tempa / 16 Jest to fragment kodu pozwalający na odczyt ujemnych...
Witam, Zrobiłem VI w Labview do komunikacji z Atmegą32 przez RS-232. Atmega wykonuję obliczenia zmiennoprzecinkowe i wysyła w czterech bajtach dane typu float. Labview zaś po otrzymaniu czterobajtowych danych typy string, powinno konwertować je na dane float przy pomocy funkcji Scan from string. Niestety, ale nie wiem czemu labview widzi gdzieś problem...
rrata : Istnieją co najmniej dwa sensowne powody, aby _delay_ms wsadzić w pętlę: 1/ "The maximal possible delay is 262.14 ms / F_CPU in MHz." Co oznacza, że gdyby opóźnienia były większe niż (tutaj) 16ms, to pojawił by się problem z zastosowaniem tej funkcji 2/ Jeśli jako argument podać zmienną, to do kodu zostanie wkompilowana cała obsługa liczb zmiennoprzecinkowych,...
Powiem tak, ze jeśli działasz swobodnie w BASCOM i umiesz korzystać z not katalogowych procesorów, to przesiadka na C zajmie Ci z dobrą książką (osobiście polecam I. książkę Mirka Kardasia - sam się na niej uczyłem) 2-4 tygodni. A co do pisania programów w C na AVR i PC to powiedzmy sobie szczerze, że jest to jeden i ten sam język - różni się tylko...
Faktycznie zapomniałem dodać, że pracuję na ATMega 16, piszę w asemblerze. Zapoznam sie z problemem i na pewno wrócę z pytaniami, chyba, że ktoś podrzuci inny (bardziej przyswajalny) problem :) Czy "to" można zrobić w ATMegach, bo gdzieś obiło mi sie o uszy, że l. zmiennoprzecinkowe, to raczej trudno zaimplementować. Dzieki. We'll be in touch.
Cześć mam taki kod który ma na lcd wyświetlać napięcie ale nie bazuje on na liczbach zmiennoprzecinkowych co jest żle bo lcd pokazuje U=0,59142V zamiast 2,56 około [syntax=c] //Załączenie pliku nagłówkowego #include"LCD/LCD.h" uint16_t funkcja(void); int main(void) { uint16_t a; uint16_t b; uint16_t zm; //Wywołanie funkcji inicjalizacyjnej initialization();...
Wzory masz na stronie 243 dokumentacji : ADC= Vin*1024 / Vref Przy czym warto pamiętać, że wewnętrzne źródło odniesienia nie ma wartości 2.56V wziętej z kapelusza - ADC*5/2 daje wartość w mV. A użyty dzielnik napięcia usuwa to 2. Po pierwsze kolego dublujesz post który już był. Zacytowałem fragment Twojej wypowiedzi do której dopisałem komentarz -...
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...
Informacje o zmianach dostępne są po zainstalowaniu: Below is just a sample of what's new. Added support for these devices: AT90PWM216 AT90PWM316 ATtiny43U ATtiny48 ATtiny88 AT90PWM2B AT90PWM3B ATmega48P ATmega88P ATmega168P ATmega328P ATmega1284P ATmega32HVB Binutils 2.18 New version. GCC 4.2.2 New version. avr-libc HEAD (Future 1.6.0) New version....
atmega zmiennoprzecinkowy zmiennoprzecinkowy chara bascom zmiennoprzecinkowy
gramofon artur stereo przesunięte kolory projektor uszkodzić element tablet
oscyloskop hantek oscyloskop hantek
Jak ustawić pompę oleju w silniku BMW M47? Alternator nowy nie ładuje, kontrolka ładowania świeci – Fiat, PSA, VW, diagnostyka krok po kroku