Witam, Tak na oko 0*45 jest 0. Jako unsigned też powinno być 0. Spróbuj zamiast "20" dać "20.". Dodano po 27 20.0f. Bez f będzie double.
Konwersję z liczby całkowitej na string łatwo można Sobie zaimplementować, implementacje funkcji itoa() też są dostępna, wystarczy poszukać w sieci: [url=http://en.wikipedia.org/wiki/Itoa]i... Część po przecinku też można wydobyć za pomocą itoa() wystarczy pomnożyć wynik przez wielokrotność 10 i zapisać go do integer. Warto ogólnie operować na liczbach...
Ale ty nie wysyłasz tam stringa, tylko gołe dane binarne, skanowanie nie działa, bo spodziewa się tablicy znaków w formie np. "3.1415". Wypisz sobie w LabView otrzymane dane, to będziesz miał obraz sytuacji. Albo przekonwertuj w mikrokontrolerze na string za pomocą sprintf(), albo po stronie LabView złóż te wysłane cztery bajty do zmiennej float. Prawdopodobnie...
Aby float działał w printf/sprintf , należy dodać w opcjach linkera dodatkową bibliotekę. Jak to zrobić, opisane jest pod koniec pierwszego posta w temacie http://www.elektroda.pl/rtvforum/topic10...
tylko i wyłącznie dzielenie i odejmowanie. Czyli [0]=liczba/100 (stałoprzecinkowe - pascal - div) [1]=liczba/10-[0]*100 itd. oczywiście do wykonania w pętli.
Na pewno nie brakuje mi pamięci flash (64KB) Na pewno. Komunikat błędu mówi, że kod (sam kod!) zajmuje 0x11b3b (72kB), a dane stałe - rodata - 0x1443 (5kB). Do tego jeszcze kilka sekcji tak naprawdę jest potrzebnych - choćby inicjalizacja sekcji data. W typowym kompilatorze gcc na ARM (używającym newlib) funkcja sprintf zajmuje 20kB kodu i kilka kB...
Zrób rzutowanie dzielonych liczb na floaty.
The total number of bytes that may be passed to this function is limited due to the memory restrictions imposed by the 8051. A maximum of 15 bytes may be passed in SMALL or COMPACT model. A maximum of 40 bytes may be passed in LARGE model. Taki sam komentarz jest przy funkcji scanf. W Twoim przypadku po przygotowaniu napisu przez sprintf wypisuj go...
A dlaczego nie skorzystasz z ftoa? Nawet jeśli chcesz ją zmienić to warto zajrzeć do źródeł i je zmodyfikować do swoich potrzeb. A ogólnie to naprawdę potrzebujesz float? Jestem skłonny się założyć, że nie :)
Przedewszystkim zrób to inaczej... po prostu... main() { char bufor[20]; ... funkcja(bufor, ...); } funkcja(char* bufor, ...) { } I w ogóle nie ma problemu. Zmienna tmp w ogóle jest nieporozumieniem. Przecież wewnątrz funkcji możesz sobie zadeklarowac tablicę o dowolnym wymiarze... funkcja(...) { char tablica[1000]; } A pamięć możesz zwalniać gdzie...
Oto odpowiedź: http://mikrokontrolery.blogspot.com/2011...
Float:=StrToFloat(String(PChar));
Witam! krzychoocpp napisał: Nie jestem pewny czy obydwa rzutowania są potrzebne, chyba wystarcza tylko jedno. Masz rację wystarczy jedno rzutowanie: float f = (float)a / liczby; albo float f = a / (float)liczby; daje ten sam wynik; Pozdrawiam
Przeczytaj ten artykuł: http://mikrokontrolery.blogspot.com/2011...
1. Co ci się ukazuje jak zamienisz to co podałeś na to: [syntax=c]float fl; fl = va_arg(args, float); ftoa(fl, 3, temp);[/syntax] ? 2. Owszem nie działa bo wywaliłeś zmienną oraz wywaliłeś znak &, czyli ma być przez zmienną: [syntax=c]uint32_t u32; u32 = va_arg(args,uint32_t); ftoa(*((float*)&u32), 3, temp);[/syntax]
Mała sugestia odnośnie pomiaru i wahania odczytów. Nie tak dawno robiłem odczyt z czujnika temperatury (termistora 5%), irytowała mnie strasznie szalejąca wartość pomiaru. W pierwszej chwili zrobiłem na szybko uśrednianie na podstawie zwykłej średniej arytmetycznej postaci: wynik = (N_0+N_1+...N_n)/n, ale nie dało mi to zadowalającego efektu. Aby w...
Tablica Bufor() jest typu Byte więc to nie Stringi i konwersja Hexval do niczego się nie przyda. Bajty są zamieniane niejawnie we Frame tylko na potrzeby wyświetlania na LCD. Coś w ten deseń powinno działać. Ogólnie to można to mocno poskracać, ale nie chciałem zaciemniać. [syntax=vbnet]Dim Arr(4) As Byte Dim Test As Single At Arr(1) Overlay Dim Bufor(9)...
Sprawdzałem u mnie na symulatorze i wszystko ok. Dodałeś stdlib? Jakieś warningi?
Napisz co ma dokladnie robic ten program, podaj dane we i dla przykladu dane wy. Wtedy postaramy sie cos zrobic. Jesli chodzi o twoj kod wyglada na nieco nieprzemyslany, wiec nie bede go poprawial.
Witam a może tak: [syntax=cpp] uint16_t liczba; uint8_t calkowita, ulamkowa; liczba = 1234; calkowita=liczba/100; ulamkowa=liczba%100; [/syntax] wtedy w oddzielnych zmiennych mamy cześć całkowita i cześć ułamkową. a obcinamy ostatnią liczbę instrukcją [syntax=cpp]ulamkowa=ulamkowa/10;[/synta...
Ale jemu nie brakuje całego retarget, tylko sbrk, bo w newlib większość funkcji które robi coś z liczbami float alokuje dynamicznie pamięć. Dobrze, ale skoro mówimy o atoi i atof, to kolega bimbarabam pewnie nie wie, że może używać printf - powiedzmy z portem COM w roli głównej, albo zrobić sobie dostęp przez systemowe funkcje w stylu fopen/fread.......
Dołączyć libm. Z drugiej strony, po co ci float?
Już wszystko wiem. Midlety w wersji CLDC 1.0 nie posiadaja wbudowanej klasy Float i Double i nie jest możliwe operowanie na tych zmiennych. Aby temu zaradzić trzeba użyć pakietu henson.midp.Float Klasa ta jest darmowa i można ją pobrać ze strony http://henson.newmail.ru/j2me/Float.htm Mam nadzieje, że w przyszłości komuś się to przyda, gdyż CLDC 1.0...
(at)ditomek Niestety operacje na float są bardzo kosztowne nie tylko czasowo, ale także zajmują sporo miejsca. Pełna obsługa float to może być i 5 kB, tyle, że kompilator do spółki z linkerem są dosyć inteligentne i nieużywane fragmenty kodu są usuwane. Sens konwersji temperatury na float jest żaden, bo raz, że czujnik zwraca temperaturę w postaci...
Moja funkcja lcd_str to to samo co u Ciebie LCD_WriteText. Wstawiłem ją tylko po to by można było się zorientować co ona robi a nie byś ją stosował.
Przy zamianie ośmiocyfrowych liczb long do postaci float pojawiają mi się zaokrąglenia na ostatniej pozycji. Czasem o jedną, czasem o kilka jednostek. Na przykład: Zmienna long przed konwersja: 88888889 Zmienna float po konwersji: 88888888.00 Nie dokopałem się do powodów takiego stanu rzeczy. Jakieś pomysły jak z tym walczyć?
Po pierwsze - jaki język programowania? Po drugie - najlepiej sprawdź sam, co zostanie. Po co zgadywać?
odczyt Wystarczy EEPROM.get(10, Val_PWM_eeprom) I zapisuje nowe wartości po ustawieniu Wystarczy EEPROM.put(10, Val_PWM) jest do liczb duble i ciężkie dla AVR Nie ma typu double w AVR, tylko tak się nazywa i jest synoninem float.
Odpowiedź na pytanie z 1 postu: int val = 123; printf("U=%d.%d", val / 100, val % 100); Co do meritum: czy kod float nap1; nap1 = 257 * 0.0048; także obcina po przecinku? Jesteś w stanie sprawdzić jaki kod generuje kompilator?
Spróbuj temp8E.setText("1234"); Jeśli to zadziała to buffer0 zawiera złe dane (brak znaku null kończącego text). W poście #62 pisałem też: Jeszcze konwersja float to ascii Kod: c
Dziękuję za link, z pewnością przybliży mi to problem. Można wiedzieć co kolega miał na myśli? Nie robiłby tego w jaki sposób? 16-bitowej organizacji nie mogę już zmienić a konwersja float->half-float to pierwsze co przyszło mi do głowy.
(at)m72 "Zakłócenia" są wprowadzane przez Serial.print(), a nie sposób konwersji. Jeżeli Serial.print() dostanie, jako argument wartość typu float, to nie jest w stanie wyświetlić poprawnie więcej niż 7 cyfr przed przecinkiem. Tak jak pisał kol. (at)_jta_ - zapis liczby float wprowadza ograniczenia ze względu na wielkość reprezentacji mantysy. print...
witam, mam problem z konwersją float'a na tablice charów. char tablica[4]; sprintf(tablica, "%G", temp_in); USART_Transmit(tablica[0]... USART_Transmit(tablica[1]... USART_Transmit(tablica[2]... USART_Transmit(tablica[3]... w terminalu pokazuje się tylko znak zapytania...
nie rozumiem na czym problem... przesłać 4 bajty tworzące floata (bajt po bajcie), odebrać 4 bajty i poskładać je w owego floata (bajt po bajcie)... wysyłanie: float data; ... for(i=0;i<4;i++) send(((uint8_t*)&dat... odbiór: float data; ... for(i=0;i<4;i++) ((uint8_t*)&data) ...
W skrypcie linkera muszą być zadeklarowane symbole o nazwach jak wyżej wyznaczające obszar pamięci przeznaczony dla sterty (heap). Proponuję ściągnąć projekt dla lpc2103 i przystosować postawowe pliki (startup, Makefile, skrypt linkera, tablica wektorów: lpc2103_rom.ld, Makefile, startup.S, vectors.S, hdr\hdr_cpsr.h) do swojego projektu, a większość...
Ok. Dokonałem konwersji na zmienną typu float - program działa. Tylko teraz nie wiem jak sprawdzić czy konwersja się powiodła. Jak mogę ją wyświetlić ? np. jako = label.caption... ?
Troszkę monolog z mojej strony ale - zostawię rozwiązania dla potomnych. Przyczyna wyświetlania tylko 2 cyfr dość banalna jak się okazało: - zmienna Sensor1Data była zadeklarowana jako int - zmieniono na float - konwersja Sensor1Data = atoi(Sensor1CharMsg); w prawidłowej postaci powinna wyglądać Sensor1Data = atof (Sensor1CharMsg); Śmiga - trzeba rozbudowywać...
Witam U mnie ta funkcja dtostrf zabiera sporo pamięci, napisałem własną, która zabiera 5 razy pamięci programu: //Konwersja float to str void ToString(char *dest, float value) { //format A.BB long A=0; long B=0; A=value; B=value * 100; B=B-A*100; char sA[3]; char sB[6]; itoa(A,sA,10); itoa(B,sB,10); strcat(dest,sA);...
Opis dla AVR Studio [url=http://mikrokontrolery.blogspot.com...
Masz 256kB pamięci flash i rezygnujesz z float bo konwersja zajmuje 1.8kB? 4\/3!!
Zgodnie z Gdzie dokładnie w tej dokumentacji to wyczytałeś? 64-bitowa liczba całkowita bez znaku ma 20 cyfr znaczących, więc nie wiem, jak chcesz ze zmiennoprzecinkowej wyciągnąć 40? W dokumentacji metody The precision parameter specifies the precision of the given value. It should be 7 or less for values of type float, 15 or less for values of type...
Uzyj funkcji sprintf.
Potem, jak chcesz to dziel przez 10 i na float ... Float? O zgrozo 1,5kB w plecy :) Tak to się robi: http://mikrokontrolery.blogspot.com/2011...
Zagadnienie, o które pytasz, nazywa się formatowaniem wewnętrznym. string pi_string("3.1415926")... istringstream we(pi_string); float pi; we >> pi; if( we ){ cout << "Konwersja poprawna, pi = " << pi << endl; }else{ cout << "Błąd konwersji!" << endl;...
Float o wartości 0x3E6872B0 to dokładnie 0.226999998093. Ta wartość float jest zapisana na 32bitach w formacie IEEE 754.
To może ci wcale float nie jest potrzebne, można użyć fixed point? Ew. jak pisałem - rozbij proces konwersji, tak, że najpierw robisz zaokrąglenie, a potem konwersję. Musi być float, wartości muszą być wyświetlane z różną precyzją (poprzednio podałem tylko przykład dla formatu "0.00"). W jaki sposób zrobić zaokrąglenie, powiedzmy to 2-ch miejsc po...
Juz bol znaleziony. Wlasnie wczoraj po kilku godzinach meki znalazlem problem. Mimo ze w przykladzie CV jest uzyta funkcja sprintf do konwersji float na lancuch char to sama funkcja nie obsluguje float (moze mam jakas stara wersje stdio. Musialem zrobic najpierw konwersje float na int i pozniej skorzystanie z funkcji sprinf do zamiany int na lancuch.
To nie ma związku z typem procesora - dane z DS18B20 i sposób ich obróbki są zawsze takie same. Kodo powyżej jest przekombinowany i błędny. Poprawnych przykładów znajdziesz na tym forum sporo - wystarczy poszukać.
Problem był z inna zmienną. Wszystko jest ok.
To nie ma znaczenia czy float czy double. Jeśli zmienna jest typu float to dodatkowo dochodzą jeszcze konwersje float->double double->float fpu_enable() jest wywoływane wcześniej - to jest Twój kod. Problem i tak jest w tym, że nie ma obsługi sprzętowego fpu - kompilator wszystkie operacje na zmiennoprzecinkowych wykonuje programowo.
Ja bym się jeszcze przyczepił do porównywania ze sobą zmiennych typu float - powinno się tego unikać. W tym konkretnym przypadku można porównywać wartości całkowite, przed konwersją na float. https://4programmers.net/Forum/C_i_C++/2...
That's why atof() nie działało: zabrakło: #include <stdlib.h>
Udało się to wykonać, jestem na etapie konwersji zmiennej string na float. I teraz po konwersji mam zmienną A=27.500, chciałbym aby zmienna A miała postać i była wyświetlana jako A=27.5, czyli bez tych dwóch zbędnych zer. Jak można je usunąć?
Sądzę, że są jeszcze do poprawienia poniższe linijki kodu:[syntax=c] avrCoordx = avrCoordx / i; avrCoordy = avrCoordy / i; avrCoordz = avrCoordz / i;[/syntax] Spróbuj też sprawdizć wynik konwersji do float, zamiast long:[syntax=c] Serial.println(fp64_ds(avrCoordx), 5); Serial.println(fp64_ds(avrCoordy), 5); Serial.println(fp64_ds(avrCoordz), 5);[/syntax]
Na końcu artykułu o USART napisałem: Problem liczb i znaku zapytania w terminalu Jeżeli wysyłasz do terminala liczby w postaci kodów ASCII, możesz się natknąć na problem pojawiającego się w zamian jedynie znaku zapytania. Rozwiązanie problemu znajdziesz tutaj: Problem znaku zapytania podczas konwersji float do znaków ASCII
Tutaj znajdziesz coś dla siebie ;) http://mikrokontrolery.blogspot.com/2011...
Poczytaj: http://mikrokontrolery.blogspot.com/2011...
Że tak zapytam - po co Ci wogóle ta konwersja z float na uint32_t? nie prościej zrobić to tak jak powiedział np michalm?
Nigdzie na LCD nie wyświetlasz łańcucha "katy". Poza tym, żeby korzystać z sprintf dla float trzeba dokonać pewnych zabiegów: http://mikrokontrolery.blogspot.com/2011...
Jak ze zmiennej float wyciągnąć części dziesiętne, całości i połówki? Czy po tej konwersji wyniku będę miał dokładność 0,5 stopnia(jest to konieczność)? Po prostu nie rób konwersji, zobacz w dokumentacji czujnika jaki jest format danych i będziesz wiedział.
Na floatach wykonuje obliczenia predkosci oraz przejechanej drogi, konwersji float na char z uzyciem sprintf potem konwersja cyfry na bitmape i na LCD. Tak wiec mapy do lcd to tylko kawalek z prezentacja wynikow. Uzywam sdcc gdy daje --model-small a wiec data i idata wywala mi sie ze za malo pamieci w segmencie DATA wiec segment CODE mysle ze jest OK.
miałem podobny problem (z tym że nie na '51 a na procku sygnałowym). Wyjściem okazała się metoda tablicowa. Nie potrzebowałem dużej dokładności konwersji float->fixed więc brałem sam wykładnik liczby zmiennoprzecinkowej do indeksowania tablicy z wartościami stałoprzecinkowymi. Możesz spróbować tej metody i dopasować ją do swoich potrzeb - jest to chyba...
http://mikrokontrolery.blogspot.com/201... Zrobiłem tak jak w tym algorytmie, ale nie chce działać. Dodano po 13 Mam same znaki zapytania i ten sposób nie przejdzie, bo nie mam takich opcji. http://mikrokontrolery.blogspot.com/2011...
ok. sprawdzę to. Pytanie tylko dlaczego tu szwankuje mi funkcja do konwersji liczb float na char?? EDIT: Niestety nic to nie pomogło - w sumie nic się nie zmieniło
Nie, przerobi tą całkowitą najpierw na float. Stąd często przy dzieleniu przez stałe zapisuje się np. 2.0 zamiast 2, co wymusza wcześniejszą konwersję na float.
1.Po pierwsze zrób tablicę int, a nie float - konwersja jest niepotrzebna, a i w pamięci będzie to zajmować 2x mniej miejsca. 2.Zmienna x jest wykorzystywana jako indeks wyłącznie w przerwaniu ADC, nie musi być więc globalna, ani volatile, zrób ją jako static uint8_t x; w ramach ISR. 3. Trybu free running nie musisz zatrzymywać, niech sobie sampluje...
Nie analizowałem poprawności tego fragmentu kodu. Jednak jest to bardzo dobry pomysł. Zrób sobie funkcję, która w argumencie przyjmuje np. liczbę milisekund. Po napisaniu takiej funkcji sprawdzisz sobie jej dokładność na symulatorze i ewentualnie skorygujesz inkrementowaną/dekrementowaną wartość. Funkcje biblioteczne opóźnień, np: _delay_ms przyjmują...
Funkcja ładnie działa dopóki nie wpiszę więcej niż 2 cyfry, wtedy pomniejsza lub powiększa ostatnią cyfrę o 1, pomyślałem że to może coś z licznikiem bufora, to jego kod: void dodaj_bufor(char znak) { //znak='a'; if (licznik_buf<17) licznik_buf++; bufor[licznik_buf-1]=znak; bufor[licznik_buf]='\0'; }
Cecha EA = -22 Cecha E6 = -26 wg algorytmu który podałem w moim pierwszym poście 0100 0000 0000 0000 0000 0000 * 2^(-22) 01,00 0000 0000 0000 0000 0000 = 1.0 kg -1kg 1100 0000 0000 0000 0000 0000 * 2^(-22) wniosek: najstarszy bit określa znak liczby, 1 - ujemna, 0 - dodatnia 0.1 kg 0110 0110 0110 0110 0110 0110 * 2 ^ (-26) 0,00011001100110011001100110...
Witam! Wiersz z if: Przede wszystkim, zmienna x jest zmienną typu float (zmiennoprzecinkowa) a znaki reprezentowane są przez liczby typu int, zatem x powinno być zadeklarowane jako int. Pamiętaj, że przy operacjach arytmetycznych, typ char rozszerzony jest "z urzędu" do typu int a po ich wykonaniu przykracany do typu char! Dalej: w tym samym wierszu...
szukaj pod: notacja łukasiewicza (notacja polska)
Tak jak napisałem, teraz zrób konwersję tego str na float lub double (za pomocą atof lub strtod ).
W Atmel studio pewnie można gdzieś wyklikać to myszką. Zgadza się: http://mikrokontrolery.blogspot.com/2011...
Witam, sam jakiś czas temu "walczyłem" z podobnym tematem i nie do końca FB Moellera spełniał moje warunki odczytu. Poradziłem sobie w CoDeSys po obejrzeniu poniższego obrazka. Nie znam możliwości Twoich urządzeń ale dzięki obrazkowi powinieneś zrozumieć zasadę przedstawiania i możliwości konwersji float.. pozdrawiam http://obrazki.elektroda.pl/7485419700_1...
Panowie a jak sobie poradzić z tym że moją zmienną jest float? Z tego co widzę nie da się jej użyć w funkcji switch. Nie można. Trzeba użyć if-else, ale unikać operatorów ==, >= oraz <=. Alternatywnym sposobem jest konwersja zmiennych float np. po przemożeniu ich wartości do całkowitych long.
Hmm dziwne, debugg avrStudio pokazuje poprawną wartość. Może błąd jest gdzieś dalej?
Arduino standardowo dołącza biblioteki wyswietlajace float, bo AVR Studio nie? Autorowi nie chodzi o to aby wyświetlać floata jako takiego, tylko o to aby wyświetlić go przez kontroler ft800. Lepiej będzie zatem jak przekonwertuje float do stringa i wyświetli go jako napis. Zatem podałem krótki zapis ów konwersji i tyle. Autor tematu tekst wyświetlać...
Izolacje termiczna realizuje sie przez ogranicznie kontaktu poprzez miedz z innymi elementami generujacymi cieplo - i to zaleca producent. Duza powierzchnia miedzi IMHO nie zwiekszy inercji ukladu, bo... ma duza powierzchnie. W efekcie kazda roznica pomiedzy ta plaszczyzna a temp. otoczenia bedzie blyskawicznie niwelowana. Poza tym faktycznie te czujniki...
Zapewne ograniczeniem jest funkcja lcd_int, która sądząc po nazwie wyświetla wartości typu int, a te nie mogą zawierać części ułamkowej. Możesz to ominąć wyłuskując część ułamkową i wyświetlając ją osobno, lub używając funkcji sprintf do konwersji float na string, który potem wyświetlicz na LCD.
Co to ma być, to powyżej? Dlaczego bufor zadeklarowny jest jako float No to co tam znalazłeś to pozostałości po moich bezskutecznych próbach rozwiązania tego problemu. Oczywiście były to skrajne nieporozumienia :) Ale faktycznie zastosowanie ltoa zamiast itoa rozwiązało problem. Dzięki wielkie i pozdrawiam !
Jestes pewien, ze *TEN* kod dzialal? Pomijajac samo wyswietlanie to zmienne pomiar masz zadeklarowane jako char, prowadzisz na nich obliczenia typu float (niektore stale np. 9/5 wcale automatycznie nie ulegaja konwersji do float) i na koncu do zmiennej char uzywasz funkcji dtostrf, ktora jako pierwszy argument wymaga double (float na AVR)?
Zacznij od: int16_t tr = byte_0 | byte_1 << 8; Potem już jakoś pójdzie. Wynik mnożenia przez stałą zmiennopozycyjną jest już typu zmiennopozycyjnego, więc konwersja go do float nie ma sensu.
operuj na zmiennych typu uint8_t (osobno część całkowita, osobno dziesiętna), wówczas nie będziesz musiał marnować kodu na float i jego konwersję, co jest " trochę nieoptymalne". poszukaj w sieci bibliotek Petera Danneggera - będzie szybciej. poszperaj w postach na forum, było już chyba wszystko na temat tego czujnika.
Tak jak radzi atom - nie potrzebujesz arytmetyki zmiennopozycyjnej, stałopozycyjna ci wystarczy. Możesz też najpierw zapisywać cyfry jako string, a dopiero potem robić konwersje do float. Będzie ciut lepiej.
Mam dwa bajty w hex o wartościach 0xB5 0x00 i wiem tylko tyle, że w zapisie dziesiętnym powinno mi to dać 12,36. Tak jak koledzy wyżej piszą, potrzeba więcej informacji. Z tych dwóch bajtów sposobów na przełożenie na owe dwanaście z kawałkiem jest milion i każdy zły. Albo to nie jest dwa bajty a osiem, wówczas to będzie zapis float, wykladnik i mantysa....
Witam. To: [syntax=c]temp=(float)((temp1+(temp2*256... było prawie dobrze, ale konwersję jawną trzeba wykonać przed operacją, gdzie będzie wykorzystywana, a nie na sam koniec, czyli: [syntax=c]temp=((float)(temp1+(temp2*256... a najlepiej dodatkowo rozdzielić te obliczenia na kilka linijek, bo czasem GCC ma problem ze skomplikowanymi...
Czy pojechałem? Nie mogę użyć obliczeń zmiennoprzecinkowych A czy ja cos pisałem o floatach ?
Potrzebuję zrobić na płytce startowej z tytułu, wyposażonej w procesor texas'a 6317 pewien filtr. Program piszę w C. O ile algorytmy splotu itd. zrealizowałem, to problem stanowi konwersja zmiennych. Jestem w stanie odczytać wartości z przetwornika a/c w formacie Int16 , gdzie wartości wejściowe są zapisane w kodzie U2. Potrzebuję je przekonwertować...
Wziąłem kod z tego artykułu http://mikrokontrolery.blogspot.com/2011... i na wyświetlaczu mam zamiast wyniku to znak ? Najprawdopodobniej przyczyną był brak poprawnego ustawienia środowiska projektu: http://mikrokontrolery.blogspot.com/2011...
Witam, Dziwne ale po sprawdzeniu działa tak samo i dla "^" i dla "|". Natomiast konwersja na float, w taki sposób jak podałeś niestety nie działa. Dla przykładu zrobilłem wartość, float a = 19.785461 co daje unsigned char test[4]={160, 72, 158, 65} - tak mi przychodzi z urządzeania. Rzutowanie takie jak w mojej funkcji daje 19.785461. Pozd
Przypisuję poprzez format, ponieważ – Days jest typu –int i żeby uzyskać zmienną przecinkową przypisuję ją do funkcji –float, która bez konwersji jej nie rozpoznaje. Traktuje tą zmienną jako typ –char. Ćwiczę ten kod na BCB 6 Presonal i być może tak już to jest w tym środowisku zaimplementowane. W każdym bądź bez konwersji kod...
Niestety nie można operować na liczbach zmiennoprzecinkowych ( chodzi o funkcje matematyczne). Ale można np. pobrać liczbę zmiennoprzecinkową w formacie IEEE574 (konwersja automatyczna) z urządzenia zewnętrznego np. przez modbus RTU i przekazać ją do scady np przez modbus TCP , która potrafi odkodować format IEEE574 aby przedstawić wartość liczby z...
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...
(at)-psiak- Znowu zgoda, dzisiaj mam dzień "pomroczności jasnej". :wink: (at)Damian7546 Standardowe rzutowanie z typu całkowitego na float zrobi zwykłą konwersję liczbową tzn. tak, aby wartość była jednakowa, a nie reprezentacja bitowa w pamięci. Stad konieczność użycia "po drodze" typu wskaźnikowego, aby wskazać, że trzeba inaczej interpretować zawartość...
tzn nie jest to równe 63 ale ok -63.563. i jak bardziej grzeje tym temp maleje i jest ujemna Dodano po 3 ok ..już wszystko jasne...niepotrzebna konwersja z float do double dla dodatnich liczb....
zapewne trzeba to jakoś logarytmicznie przekształcić, tylko jak? Sam sobie odpowiedziałeś. A tak: // kwadrat długości wektora (spierwiastkuje się potem, w domenie logarytmicznej) v = r*r + i*i; // sprawdzenie, czy nie jest poniżej dolnej granicy (FFT_RANGE - zakres dynamiki w dB) if(v < (pow(10.0, (float) -FFT_RANGE...
są to belki na power ledach ,drivery itp.Do tej pory wszystko pracowało przez kilka lat na jednym kanale PWM kótry rozjasniał belki ledowe w ciągu 60 min.Chciłbym to teraz przerobic na 4 niezależne kanały z potencjometrami abym mógł sobie regulować różne pasma Dodano po 21 Chciałbym uzyskać coś takiego[syntax=arduino]// Definiowanie pinów const int...
Nie bo chciałem zrezygnować z liczb zmiennoprzecinkowych bo sam7s nie mają jednostki fpu.Gdy bym miał pod ręką jakąś ATMege to z chęcią bym też zobaczył jak na niej te algorytmy się spisują;) Przesadzasz trochę. Liczby stałoprzecinkowe jeszcze bardziej pokazywałyby ten problem o którym piszesz. Stały przecinek ma stałe "ziarno" i tam gubiłbyś stałą...
Pod jakie adresy w pamięci Flash chcesz zapisywać te dane? Wyrzuć bezsensowną tablicę "TablicaStron" - przecież każdy jej element to indeks mnożony przez stałą z dodaną stałą. Niepotrzbnie zajmujesz pół kilobajta RAM. Zamęczasz też procesor zbędnymi konwersjami z int do float i z powrotem. Po co?
258,03 realny odczyt z licznika D733 - 17281 D734 - 1114 W karcie stanu jak gdzieś wyczytałem przy wywołaniu DR733 powinien być prawidłowy odczyt a tu są cyfry "z kosmosu". Testowałem bezpośrednio z licznika programem Mbus.exe i tam dopiero odczyt był poprawny jak wybrałem "data format" nie float tylko swapped float
konwersja float konwersja string float konwersja float stringi
termistor oznaczenie blaupunkt pobór prądu hormann instrukcja rotamatic
Schemat modułu wyświetlacza LED w telewizorze Philips Nastawnik turbiny Siemens VDO w Vito 111 2.2 - styki i materiały