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...
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...
Oto odpowiedź: http://mikrokontrolery.blogspot.com/2011...
Przeczytaj ten artykuł: http://mikrokontrolery.blogspot.com/2011...
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...
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
Zrób rzutowanie dzielonych liczb na floaty.
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...
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ł.
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]
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) ...
Po pierwsze - jaki język programowania? Po drugie - najlepiej sprawdź sam, co zostanie. Po co zgadywać?
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
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...
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ść...
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);...
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)...
Dołączyć libm. Z drugiej strony, po co ci float?
A nie możesz zapisać floata jako 2 liczby 16bit w takim razie?
Sprawdzałem u mnie na symulatorze i wszystko ok. Dodałeś stdlib? Jakieś warningi?
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...
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.
Jeszcze nie spotkałem przetwornika A/D który wystawia dane typu FLOAT. Jest to zawsze ileś tam bitów a do 16 zastosój typ INT. Wtedy jest prosta funkcja "itoa"
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.......
(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...
Float:=StrToFloat(String(PChar));
Opis dla AVR Studio [url=http://mikrokontrolery.blogspot.com...
Oczywiście liczyłem, że dla zmiennej 64-bitowej bez znaku maksymalna wartość wyniesie: 2^64 - 1 = 18446744073709551615, co daje 20 cyfr znaczących. Dla zmiennej 32-bitowej uzyskuje się w ten sposób 10 cyfr. Jednak takie kalkulatory: [url=https://www.binaryconvert.com/resul... [url=https://www.binaryconvert.com/resul...
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...
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...
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.
Tutaj znajdziesz coś dla siebie ;) http://mikrokontrolery.blogspot.com/2011...
Poczytaj: http://mikrokontrolery.blogspot.com/2011...
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... ?
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
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...
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.
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?
W Atmel studio pewnie można gdzieś wyklikać to myszką. Zgadza się: http://mikrokontrolery.blogspot.com/2011...
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...
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ć.
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]
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ć?
That's why atof() nie działało: zabrakło: #include <stdlib.h>
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...
Witam. Próbuję ogarnąć odczyt wagi i nie wiem co robię źle. W instrukcji komunikacji do wagi mam: "Wszystkie rejestry mają postać 2 bajtową (WORD). Dane zmiennoprzecinkowe (jak masa czy tara) przechowywane są w 2 kolejnych rejestrach i mają postać FLOAT. Jeżeli 1-szy rejestr składa się z 2 bajtów AB a drugi z 2 bajtów CD to FLOAT będzie miał postać...
Problem był z inna zmienną. Wszystko jest ok.
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.
Ż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?
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...
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.
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...
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
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...
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.
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ć...
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...
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.
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'; }
Witam. Mam pewien problem związany z konwersją zmiennej short do float. Moim zamiarem jest przeliczenie wartości z przetwornika AD na pewną wartość w postaci float. Schody zaczynają się na początku. Puki wartość ADC_out nie przekroczy 700 wszystko jest OK( ADCoutFLT przyjmuje wartość ADC_out ). Powyżej 700, ADCoutFLT przyjmuje wartość 5130. A dziej...
Ad 1) Typ int na AVR ma długość 2B stąd taki zakres. Proponuje ci zacząć stosować typy z nagłówka stdint.h (uintX_t oraz intX_t, gdzie X to 8, 16, 32 i 64). Które zawsze mają taki sam rozmiar niezależnie od architektury. Ad 2) Zainteresuj się dwoma zagadnieniami: funkcjami opóźnień oraz tłumieniem drgań styków. Ad 3) Np funkcją sprintf(), na elektrodzie...
(at)up Sprawdziłem na stronie atmela ,że ten µC ma 32 kB Flashu i już mi nie szkoda tych 2 kB, bo to nie jest dużo. http://mikrokontrolery.blogspot.com/2011... Nie korzystam z Atmel Studio tylko z Eclipse. A i wywaliłem to z pętli głównej. Obliczanie średniego wyniku(z 1024 pomiarów)...
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;...
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.
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ąć?
szukaj pod: notacja łukasiewicza (notacja polska)
print tego nie przekonwertuje lepiej, bo nie ma we float większej liczby danych potrzebnej do takiej konwersji. Serial.print() konwertuje float do string bez wykorzystania funkcji bibliotecznych typu sprintf() czy dtostrf(). Robi to "na piechotę" przez iteracyjne dzielenie przez 10 i konwersję poszczególnych cyfr do znaków. Błędy, jakie mogą się pojawić...
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)?
No własnie wiem iż w AVR Studio takową funkcje możemy użyć po odpowiednim ustawieniu w pliku makefile w 7 linijce LIBS=-lm. Natomiast jak jest w Keilu. Pisze dla AT89S8252. Czy jest możliwość skorzystania z tej funkcji, a jesli nie to prosze o jakiś(w miare prosty:) algorytm) przekształcenia floata na ASCII=>(wyświetlenie na LCD). Szukałem na forum...
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.
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...
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 !
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
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łą...
Ad1. Znalazłem rozwiązanie mojego problemu. Ad2. Niestety nie znalazłem tego czego szukałem, samo stworzenie tablicy i wyświetlenie tego co napisze nie jest problemem najgorzej z wyświetleniem otrzymanej temperatury poniżej zaprezentuje kawałek kodu. fTemperature=(float)(cTemper... dtostrf(fTemperature,1,1,cStringBuff...
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....
Tak jak napisałem, teraz zrób konwersję tego str na float lub double (za pomocą atof lub strtod ).
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...
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ł.
Masz 256kB pamięci flash i rezygnujesz z float bo konwersja zajmuje 1.8kB? 4\/3!!
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...
Bezpośrednie wywołanie funkcji termf ("double - %d", 1.35); powoduje błędne wyświetlenie. Bo parametr %d nie określa liczby zmiennoprzecinkowej. Trochę pobawiłem się biblioteką (STM32) i jak pisałem wyżej, funkcja termf nie działa prawidłowo gdy brakuje w jej wywołaniu wskaźnika do tablicy (nie wiem dlaczego) Trzeba go dodać: int termf (char *ptr,const...
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...
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.
To wydaje się być ok, chociaż100 us to sporo. Pokaż jak wygląda wysyłanie i odbiór bajtów i przede wszystkim procedura wyświetlania, bo ciekami mnie jak robisz konwersję na float/fixed point, bo podejrzewam, że tu masz błąd. W przypadku problemu z OW magistrala jest w stanie wysokim, a nie niskim, stąd też powinieneś mieć odczyty typu same 0xff, a nie...
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ą...
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ć...
implicit declaration of function 'sprintf' DescriptionResourcePathLocationType incompatible implicit declaration of built-in function 'sprintf'main.c Takie błędy co wypisałem powyżej wywala mi środowisko Eclipse jak chcę używać funkcji sprintf.(a AVR Studio brak błędów)pewnie czegoś brakuje w konfiguracji Eclipse,jak ktoś ma jakiś pomysł to proszę śmiało...
Nie, jest bardzo źle. Po pierwsze po co ci float? Poczytaj o arytmetyce stałopozycyjnej. Po drugie, jeśli byś odwrócił kolejność odczytu czujnika temp. i najpierw odczytywał temp. a potem rozpoczynał konwersję to nie musiałbyś mieć tego delay(750) - tylko pierwszy pomiar byłby zły, co nie jest problemem. Poza tym konwersja z float na text powinna być...
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ć...
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?
ok, a więc jeśli zrobię tak: [syntax=cpp] int main(void) { char bufor_UART1[401]; USART1_Init(MYUBRR); float liczba; int i = 0; while (1) { if (USART1_Receive() == '$') { for (i = 0; i < 400; i++) { bufor_UART1[i] = USART1_Receive(); if (bufor_UART1[i] == '\n' || bufor_UART1[i] == '\r') { break; } } if (memcmp(bufor_UART1, "GPGGA", 5) == 0) { for...
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...
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....
float konwersja konwersja float stringi konwersja string float
ksiazki elektronika pralka candy zapchana pioneer wieża kabel
radio preludium glosnik sansui potecjometr
Wymiana rozrusznika w Citroen Jumper - krok po kroku Licznik gazowy nie działa - co zrobić?