Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 gru 2024, o 13:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 16 mar 2014, o 09:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Witam napisałem krótki programik ,który właściwie tylko wyświetla wynik pomiaru do 3 miejsc po przecinku.
Mam jednak problem z zaokrąglaniem końcówki i obcinaniem nieznaczących zer.

Na razie jeszcze nic nie mierzy ,ćwiczę sobie nim wpisując różne wartości zmiennej "wynik".

Przy wartości
wynik=2510000;

mam na lcd 25,100 V

,a chciałbym mieć 25,1 V

jak zrobić by pozostać przy precyzji do 3 miejsc po przecinku ,ale automatycznie ucinać
nieznaczące zera z zaokrągleniem w górę?

kod programu ćwiczebnego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




w bascomie miałem to tak rozwiązane (akurat wersja dla 2 miejsc po przecinku):

Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 11:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Witam
może spróbujesz użyć czegoś takiego

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam na myśli że po wydzieleniu części po przecinku
jeśli liczba dzieli się przez 100 bez reszty
to podzielić ją przez 100 aby obciąć zera na końcu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 12:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Próbuję zacząć od podstaw. Opanować samo dzielenie, problem w tym że C wycina mi resztę.

Odpada zmienna float ,bo nie pasuje AVR GCC ,wyskakuje jakiś konflikt.

Jak to rozgryść, bardzo brakuje mi w tej chwili Bascomowej zmiennej przeciekowej SINGLE

Już niebawem będzie mi to bardzo potrzebne ,gdyż robię miernik indukcyjności ,a tam dojdzie jeszcze pierwiastek ,to dopiero będzie kosmos.


Poniżej prosty program dzielenia ,oczywiście nie działa poprawnie ,dlatego ,że urywa mi resztę z wyniku ,jak to obejść?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Próbowałem też coś z biblioteką math ,ale też nic z tego ,ale za to ile pamięci flash zjadło :) , ma ktoś jakiś pomysł?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 12:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lut 2013
Posty: 84
Pomógł: 8

Zamiast cz_po_przecinku = (wynik/100) % 100; daj cz_po_przecinku = wynik % 100; ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 13:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Nie pomogło na lcd ,pojawił się wynik= 51,0

Nadal nie wyświetla poprawnie.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 13:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Żeby korzystać z biblioteki math i zmiennych float ,bez tak dużego przyrostu kodu
dołącz linkerem tą bibliotekę.
Jak to zrobić przedstawia kolega @Krauser w poscie
http://forum.atnel.pl/post71464.html?hilit=linker#p71464



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 13:56 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

masz to w złej kolejności
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po takim dzieleniu w zmiennej wynik nie masz 51,25 tylko 51
Jeżeli już to spróbuj tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


teraz powinno działać tak jak założyłeś


Autor postu otrzymał pochwałę

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 14:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Nie działa. :(

Zaczynam juz kombinować w stronę funkcji dtostrf() z biblioteki #include <stdlib.h>

Chcę zamienić zmienną typu float na string i wyświetlić na LCD

Tylko jak?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2014, o 17:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Ok już działa ,moja wina lekko się zapętliłem ,leci też pochwała dla Mirko T miałeś rację ,
ja po prostu używam tego w pętli i ciągle mi mnożyło *100 ,że w pewnym momencie się wszystko psuło.

Wystarczyło na końcu pętli przywrócić zmiennej a starą wartość.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Swoją drogą trafiłem też na ciekawy przykład ,ale niestety nie rozumiem zapisu tej funkcji i jak ją tu zastosować :(

char Temp[8];
sprintf(Temp, "%i", Zmienna_int);

tylko że chciałbym zamienić typ float na string i wyświetlić 6 pierwszy znaków na lcd.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO