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



Teraz jest 24 sty 2017, o 20:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 80 ]  Przejdź na stronę 1, 2, 3  Następna strona
Autor Wiadomość
PostNapisane: 7 sty 2017, o 08:56 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Witam forumowiczów.

Proszę o pomoc w przeliczeniu zmierzonej wartości ADC i przekonwertowaniu na wartość procentową. Napisałem programik, który ma wykonać to zadanie i
sprawdziłem w exelu, jaki będzie wynik. Wszystko liczy się prawidłowo. Według mnie nie ma błędu, kompilator nie zgłasza czegokolwiek, a działanie programu
na lcd jest błędne. Efekt jest następujący:

Kręcenie potencjometrem o 0 do 655 powoduje prawidłowe wyświetlenie wartości procentowej (0-63%). Po przekroczeniu tej wartości (adc 656) pojawia się
0 % i liczy procenty, jakby od nowa (wskazania adc zmieniają się prawidłowo do 1023). Zastosowałem wzór (ADC*100)/1023 i próbowałem ((ADC*100)/1023)
(czy jest jakaś różnica ?) i powinno działać, a tu nie chce. Tworząc zmienną "procent" uint32_t procent; pisałem uint8, uint16, uint32 (myślałem, że może tu),
ale nic to nie daje. Przecież powinno działać. Co robię źle ?. Proszę o analizę i ewentualną pomoc. Z góry dziękuję.


Obrazek


Obrazek



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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 09:03 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 19973
Lokalizacja: Szczecin
Pomógł: 727

poczytaj o domyślnej promocji do INT w języku C i wtedy inaczej napiszesz tę linię kodu

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


i będzie śmigać


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 09:09 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Dziękuję Mirku za szybką odpowiedź.

Chyba kiedyś czytałem o tym na Twoim blogu. Ciekawy, czy zrozumiem temat, ale zobaczymy. A myślałem, ze to proste :o .
Pozdrawiam.

Znalazłem, przeczytałem i jest git!!!. Jeszcze raz bardzo dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 12:15 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Jest jeszcze jeden efekt, którego nie mogę się pozbyć. Mianowicie maksymalna wielkość procentowa wyświetlana na lcd jest 99%, pomimo,że w exelu
wylicza 100%. W kodzie nie widzę błędu. Maksymalna wyświetlana wartość ADC jest równa 1023. W ostatnim ifie kod wygląda następująco:

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



Procent jest wyliczany na podstawie liczby całkowitej, bez liczenia po przecinku. Może o to chodzi ? Ale exel też liczy z liczby całkowitej:


Obrazek



Obrazek


Nie mam pomysłu, dla czego tak się dzieje. Jest to mój pierwszy raz, gdzie staram się sam robić jakieś wzory i obliczenia do programu, a więc proszę
o cierpliwość i wyrozumiałość za wiele zadawanych pytań. Dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 12:27 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

a w jakikej postaci teraz masz :
Robert_1967 napisał(a):
procent = ((pm_1*100)/1024);
?
czy poza promocją do INT ,poprawiłeś na 1023 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 12:56 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Dzień dobry Daro69
Dzięki za odzew. Przeglądając kod natrafiłem przed chwilą na ten babol i miałem to opisać, a tu mnie wyprzedziłeś. Ale dziękuje za czujność. Jednak to prawda,
że komputery się nie mylą, tylko ludzie. Nie wiem, jak mi się wkradło te 1024, ale jak zwykle moja wina :oops: .
Nie zamykam tematu, ponieważ jest mnóstwo wzorów przy korzystaniu z ADC, a tytuł jest można powiedzieć dość szeroki i uniwersalny. Myślę, że wiele osób
ma podobne problemy, jak ja i ten temat się przyda.

prawidłowy zapis, to oczywiście

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


Teraz wyświetla prawidłowo 100% przy ADC 1023 (plus promocja do INT z blogu Mirka)

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 17:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 19973
Lokalizacja: Szczecin
Pomógł: 727

Robert_1967 napisał(a):
plus promocja do INT z blogu Mirka

No to jak plus promocja to prawidłowy zapis panie wygląda tak:

procent = ((pm_1*100UL )/1023UL );

albo coś źle doczytałeś

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 18:16 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

Zakładam że kolega ujął zmianę w projekcie skoro działa poprawnie,
tylko nam tego nie zakomunikował aktualnym kodem. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 18:52 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Dzięki Mirku.
Przyznam się bez bicia, że nie przestudiowałem dogłębnie postu na temat promocji do INT. Przeczytałem po łepkach i zastosowałem taki zapis (sorry Daro69, że
nie zamieściłem zapisu za pierwszym razem)

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


Kiedy wyniki zaczęły być właściwe, to poszedłem dalej, ponieważ mam dużo do zrobienia, a czasu mało. Wolne się skończy i znów do pracy i po hobby Wiem, że to źle. Zostawiłem to na potem :oops: .

Ty Mirku podałeś inny przykład, ale z tego samego postu. Żeby to dogłębnie zrozumieć, trzeba niestety się tego nauczyć.

Pozdrawiam.

Dodam, że oczywiście zapis, który przed chwilą sprawdziłem działa perfect:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 19:08 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

Wiem jak to jest z tym pośpiechem. ;)
Czasem faktycznie jeżeli coś zadziała to i ja pędzę dalej.
Niestety potem trzeba wrócić i przestudiować zasadę działania,
bo to się odbija dublowaniem problemów. :?
Ważne że pozostawiliśmy wątek z właściwym,
działającym kawałkiem kodu dla potomnych. :)
I chyba też i o to chodzi. ;)
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 22:42 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

I tu się z Tobą zgodzę. Na pewno ktoś skorzysta, jak my korzystamy niejednokrotnie. Ale ja zaczynam coraz częściej sam coś wymyślać i nawet czasami się
udaje :) . Najgorsze w tym wszystkim jest to, że niejednokrotnie muszę zostawić te zabawki na dłużej i potem muszę uczyć się od nowa. Po prostu zapominam.
Ale tak jest ze wszystkim, jak się nie praktykuje :( . Przez ostatnie 3 dni trochę pojąłem nowych rzeczy. Spędziłem dzisiaj wiele godzin nad kolejnym
problemem. Staram się zaadoptować wzór na obliczenie mocy i wyświetlenie na lcd, ale jak na razie lipa. W exelu wszystko działa, a na zestawie nie chce.
Nie wiem, czy podstawiać wartości adc do wzoru, czy też przeliczone na wolty. Tylko, że w drugim przypadku mamy do czynienia z dwoma napięciami (wartościami) vi i v2 po przecinku (np.4,7v). Z kolei wartość adc nazwijmy to, nie pasuje do pozostałych części wzoru, które są liczbami ostatecznymi, całkowitymi, a adc jest cyfrowe. Jutro rano przeoram BB w części o adc i może na coś wpadnę. Na tą chwilę nie mam pomysłu.

Na razie.

Wzór poniżej.


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2017, o 23:18 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

Tak tak,... poczytaj o ADC, a zwłaszcza o pomiarze i przeliczaniu wartości ADC na Volty. ;)
tak dla ścisłości:
P=U* I
I=U/R
z tego wynika że P=U* U/R => P=U^2 / R ;)
Czy Twoje 2R to dwa identyczne rezystory szeregowo. ?
Czy to dzielnik rezystorowy?
i tym samym pomiar i wyliczanie mocy wydzielonej sumarycznej - na dwóch odrębnych identycznych obciążeniach wpietych szeregowo?
Czy może to nie wszystkie założenia do projektu ?
Albo ja nie wszystko załapałem. :?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2017, o 10:33 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Witam.
Trochę poczytałem, pomyślałem i zabieram się do roboty. Z resztą czytałem dokładnie ten rozdział, ale dawno temu i wyszło z głowy. Na szczęście BB leży
na półce i zawsze można zajrzeć,a i uczynnych ludzi takich jak Daro69 i inni nie brakuję, którzy chętnie służą pomocą ;) .
Jest to wzór na obliczenie mocy w.cz. R jest stałe i tylko jedno. Jeżeli R== np. 100, to możemy zapisać od razu 200 (uprościć wzór). Myślę, że pomiar z adc (wartość cyfrową) powinienem podstawić do tego wzoru, a następnie wyliczyć z otrzymanej wartości (będzie duża i trzeba zastosować promocję do int) część
dziesiętną i ułamkową, jak liczymy (konwertujemy) napięcie i jak Mirek opisuje w BB. Tylko czy poradzę sobie praktycznie, to zobaczymy.
Czy moje myślenie jest właściwe?
Pozdrawiam.


----------------------------------------------------------------------------------

Niestety klapa.

Nie mogę sobie poradzić, a wydawało się to w miarę jasne. Być może zbyt dużo czasu się i kompletna pustka w głowie. W exelu jest ok.

Obrazek


Obrazek


Z wzoru otrzymuje prawidłową liczbę 10444, która wyświetla się na lcd (bez liczb po przecinku). Kręcenie potencjometrem zmienia płynnie wartość
od 0-10465.
Przy ustawieniu pr-ka na adc==1022, pokazuje 5,0volt i wyliczone 10444. Jak zrobić, a żeby wyświetlało 0.25, jak to widać z poprzednich fotek?

Obrazek

Obrazek



Nie proszę o gotowca, ale jak dalej do tego się zabrać. Ręce opadają.

Wzór, który zastosowałem:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 13:56 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Witam.

Po wielu perypetiach i godzinach udało mi się osiągnąć taki oto rezultat. Wyliczenie dla napięcia 5 volt (adc==1021). W exelu liczy dokładnie
i pokrywa się z programem do wyliczania mocy dla różnych wartości napięć od 0-1023. Nie mogę w tej chwili pokazać kodu, ponieważ jestem
w pracy. Wieczorem zamieszczę. Mam problem z wyświetleniem przecinka, który powinien być przed cyfrą 2 (0,250), a jest 250...........
Proszę o analizę, czy aby dobrze napisałem funkcję, czy to przedwczesna radość. Większość widać na fotce. W exelu ustawiłem
przecinek dzieląc przez 100 000 000, ale w eklipsie nie mogę tego ogarnąć.

Pozdrawiam.


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 18:53 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

Robert_1967 napisał(a):
W exelu ustawiłem przecinek dzieląc przez 100 000 000, ale w eklipsie nie mogę tego ogarnąć.

Jeżeli dobrze rozumiem, to jeżeli masz wynik np. 25 012 345 ,
a chcesz by wyświetlił się z przecinkiem (0,250)
to wyświetl najpierw "wynik / 100 000 000" ( 0 ),
potem wyświetl "przecinek," ( , )
następnie wyświetl "po_przecinku = ( wynik % 100 000 000 ) / 100 000." ( 250) // reszta z dzielenia przez.../ przez...
I powinno wyświetlić się " 0,250 "

chyba musisz jeszcze zadbać o to by:
jeżeli po_przecinku < 100 to wyświetl najpierw "0",
jeżeli po_przecinku < 10 to wyświetl jeszcze jedno zero,
jeżeli(!po_przecinku) to jeszcze jedno "0".

powinno wyświetlić się " 0,000 ".

Tylko gdzieś przegapiłem miejsce w którym przeliczasz ADC na V, by pasowały jednostki do wzoru :?


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 20:20 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Witaj Daro69
Dziękuję za odpowiedź. Dopiero mogłem zasiąść do eclipsa :) . Długo się nie da, bo wcześnie rano do pracy, ale zawsze to coś.
A więc po kolei.
Zamieszczam kod, który robi to, co opisałem. Jest bardzo mały błąd w liczeniu. Myślę, że odpowiedzialna jest za to następująca sytuacja:

Obrazek

Wynik w exelu jest 10444,84, a wiec jest jeszcze coś po przecinku, czego ja tu jeszcze nie skorygowałem, ponieważ jeszcze nie wiem, jak.(tzn, coś mi tam świta)
Ale jeszcze nie próbowałem. Dlatego wyświetla mi się 250,80...... zamiast 250,09........Wydaje mi się, że taki błąd na moje potrzeby jest do przyjęcia, ale dla
spokoju sumienia i zrozumienia w 100% problemu wolałbym to zrobić zgodnie ze sztuką. Inaczej zostanie jakaś tam luka w wiedzy, a to źle na przyszłość.
Druga sprawa, to sam przecinek. Nawet, jeżeli liczy z błędem, żeby chociaż wyświetlało wynik 0,25080......., a nie 250,80........ Wracając na moment do
liczby z exela 10444,84 , to mój wyświetlacz pokazuje tylko 5 cyfr, tzn 10444. Tych po przecinku 84 już nie widać, ale procek gdzieś tam to przelicza i w efekcie końcowym jest wynik 250,80 , a nie 250,0....i coś tam.
Dodam, że jest to moja prywatna teza niedoświadczonego "programisty" i fajnie by było, gdyby ktoś doświadczony potwierdził, czy mam racje czy nie.
No i czy w ogóle do tej pory te funkcje i wzory z exela zrobiłem dobrze do tej konkretnej sytuacji. Wyliczenia voltów, przecinka itd, przepisałem z innych
przykładów i nie jestem pewny. Tutaj dodałem jedno zero (trochę po omacku) Pc = wynik / 100000;

Tak wygląda na tą chwilę:

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


------------------------ [ Dodano po: 21 minutach ]

No z przecinkiem sobie poradziłem.
Wygląda to następująco:

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


Jeszcze tylko dokładność wyliczeń i byłoby ok :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 20:54 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

witam, :)
Precyzja rozjeżdża się w miejscu przeliczania adc na volty
wg wyliczeń (50 000 / 49 = 1020,408...'adc')
dla 1024 *49 = 50176 (5,0176 V) ? ;)

------------------------ [ Dodano po: 5 minutach ]

:? moment... coś namieszałem. 1023. !

------------------------ [ Dodano po: 6 minutach ]

ile adc wskazuje przy 5V ?

------------------------ [ Dodano po: 8 minutach ]

1023 * 49 = 50127 jednostek = (5,0127 V )

------------------------ [ Dodano po: 19 minutach ]

(1023 * 4887) / 100 = jednostek <---
(4 999 401) / 100 = 49994 (~4,999V).
wynik = ( ((pm_1 * 4887UL ) / 100UL) * ((pm_1 * 4887UL) / 100UL) /100) /10000;
może tak ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 21:19 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Przy 5,0 volt adc ==1021-1022, w zależności o precyzyjnego ustawienia potencjometru.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 21:22 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

wynik = ( ((pm_1 * 4892UL ) / 100UL) * ((pm_1 * 4892UL) / 100UL) /100) /10000;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2017, o 21:59 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Jak byś nie kombinował, to nie jest dobrze.
Nie wiem, czy przyczyna nie tkwi w tym, o czym pisałem wcześniej.

Przykład:
Załóżmy, że napięcie mierzone na pinie adc ma wartość np. 423.

((423*49UL*1UL) * (423*49UL*1UL)) / 100 to się równa 4296085,29

Dalsze obliczenia przemielają te 5,29, z książki Mirka pamiętam o pozbywaniu się przecinka poprzez mnożenie ( w tym przypadku przez 100 ), a potem
ponowne podzielenie przez 100 na jakimś tam etapie "końcowych obliczeń". O tym wcześniej pisałem, że coś mi tam świta, ale być może się mylę.
Niestety nikt więcej nie chce się wypowiedzieć w tej kwestii.
Co o tym myślisz.

Ps.

Wydaje mi się, że zmiana 49UL na inne wartości jest złym posunięciem(sorry), ale to tylko moje skromne zdanie.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 09:19 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Witam Daro69

W tygodniu nie mam zbyt dużo czasu na C. W każdym bądź razie odpuściłem bezmyślną pisaninę. Czytam, dokładnie zagadnienia związane
z wyliczaniem modulo itp. wiadomości, ponieważ bez dokładnego zrozumienia tematu nie ma to sensu. Muszę to wszystko rozpisać na
czynniki pierwsze, liczyć krok po kroku aż uzyskam prawidłowy wynik. Niestety w tym temacie zrozumiałem, że nie da się samemu tworzyć programów bez odpowiedniej wiedzy. Do tej pory bazowałem na gotowych kodach z książki, forum i czasem coś tam zmieniłem, co w zasadzie
nie wnosiło niczego szczególnego do tematu. Prędzej czy później musiało to odbić się czkawką :cry: .

Mam nadzieję, że nie odebrałeś tego negatywnie: cyt: "Wydaje mi się, że zmiana 49UL na inne wartości jest złym posunięciem(sorry), ale to tylko moje skromne zdanie."

Jak tylko ogarnę wiedzę, to będzie cd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 10:17 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

Spoko, nic się nie dzieje. :)
między innymi od tego czy 49 czy 4892/100 zależy precyzja przeliczania.
Niewiem jaka jest potrzebna, dlatego to Twój wybór.
Co do mnie...
Nie widzę najmniejszego powodu do negatywnych emocji z mojej strony.
Poza tym jakby coś - to ja nie jestem obrażalski. ;)
lepiej analizować i rozwiązywać problemy niż je roztrząsać. ;)
Taki mały of topik o mnie. :)
Pozdrawiam. Darek P.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 18:32 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Dzięki Daro69.
Zrozumiałem, o co chodzi z tym 49 czy 4892/100.
Czy może mi ktoś wytłumaczyć jedną rzecz ? Przećwiczyłem temat obliczania modulo %.

ADC == 850

850 * 49UL * 1UL == 41650

liczba całk. == 850 / 10000 == 4,165 // na lcd z lewej strony przecinka wyświetli 4, a co z resztą po przecinku (4,165) ?

liczba po przecinku == ( 41650 / 100 ) % 100

416,5 % 100
416,5 / 100 == 4,165
4 * 100 == 400
416,5 - 400 == 16,5 // na lcd z prawej strony przecinka wyświetli się 16, a co z resztą po przecinku (16,5) ?

Na wyświetlaczu mam wyświetlone dokładnie tak, jak wynika z obliczeń, czyli 4,16 volt ( adc 850 ). wszystko jest ok.
Zrozumiałem, jak wyliczyć modulo i zrobiłem to na kilku przykładach bez błędu. Nie rozumiem tylko dla czego
liczba całk. 4,165 jest widziana tylko , jako 4, a liczba po przecinku, jako 16, chociaż jest po wyliczeniu 16,5.
Co się stało z tymi przecinkami i cyframi. Czy może mi to ktoś objaśnić ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 19:43 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Witam.

I stał się cud. Obliczenia są właściwe. I znów nie komputer się myli, tylko człowiek :) . Byłem tak zajęty męczeniem się nad wzorami, że nie zauważyłem
podstawowego błędu. Dla zmiennych: liczba całkowita i liczba po przecinku napisałem uint8_t, a przecież to są długie liczby. uint16_t naprawiło wszystko.
Jeżeli ktoś morze odpowiedzieć na mój poprzedni post, to byłbym wdzięczny. Niżej dobry kod:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 19:45 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

jeżeli po wyliczeniu jest 16,5 to przecież są to operacje na liczbach całkowitych :)
dlatego to co po przecinku znika.
spróbuj jakoś tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 22:29 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Dzięki Daro69.
Może się wydawać śmieszne, że zadaję takie pytania, ale do szkoły chodziłem na prawdę baardzo dawno temu i wiele rzeczy nie pamiętam, a takie zagadnienia
na co dzień w ogóle nie były mi potrzebne do życia. Teraz zaraziłem się C i widzę, że bez takich problemów się nie obejdzie. Po prostu trzeba się uczyć od
nowa, przypomnieć. Oczywiście, jak gdzieś wcześniej pisałem, na programistę już trochę za późno, ale chciałbym umieć sam zrobić jakieś urządzenie na procku
i napisać do tego program. No może nie w 100% sam, ale w większości :lol: .Dzięki książkom Mirka i wsparciu tego forum jest to jednak możliwe. Mogłem przecież
wybrać bascoma (podobno łatwiejszy i prostszy ???), ale zdecydowałem się na C i tak zostało. Ale dosyć o tym.

"Miernik napięcia" działa prawidłowo. Wyniki na wyświetlaczu są ok. Kiedy uczyłem się liczenia tego %, to przy okazji obliczeń pojawiły się te cyfry po przecinku i
przecinki na kalkulatorze. Zastanawiałem się, gdzie one giną, czy nie mają jakiegoś negatywnego wpływu na działanie reszty kodu, czy obliczeń itd....Wychodzi
na to, że nie. Teraz ciąg cyfr jest prawidłowy zarówno na ekranie, jak i w arkuszu, czy kalkulatorze dla różnych wartości mierzonych przez pin procka
( mówię tutaj o mierzeniu mocy z wzoru z poprzednich postów ). Jedyne, co muszę jeszcze zrobić, to sposób wyświetlania wyniku. Pisałeś o ty wcześniej
(wyświetlanie zera i zamiana wyświetlania mW i Watt) i może jakaś zmiana zakresu mierzonego (dzielenie przez 10, 100 i odpowiedni sposób wyświetlenia tego
wyniku). Pomału do przodu :) .

------------------------ [ Dodano po: 7 minutach ]

Chyba w poprzednim poście podsunąłeś dobrą myśl z tymi zerami. w wolnym czasie przećwiczę. Dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 22:53 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

O... w między czasie widzę post. :) ale co tam.... wysyłam to. Takie pisanie z głowy. :roll:
Robert_1967 napisał(a):
wynik = ((pm_1 * 49UL * 1UL) * (pm_1 * 49UL * 1UL))/100;

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

......................................................................................
może tak jakoś w tę stronę ? :geek:
......................................................................................
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tylko nie sprawdziłem czy działa. :? taka teoria. :? mam nadzieję ze nie pokitrałem za mocno. :roll:
i potem wyświetlać tak jak wcześniej pisałem, lub w inny sposób (to nie jedyny :D ).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 23:31 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

Dzięki.
Ale mnie zasypałeś danymi. "Numer siódmy" (z filmu) miałby problemy z przetworzeniem :lol: ..Trochę czasu mi zajmie ogarnięcie tego, ale zmieniłem taktykę.
Nic nie robię w programie, i na zestawie atb, póki nie zrozumiem zapisu. To jedyna droga. Na dzisiaj wystarczy. Trochę przesadziłem z czasem :o .
Pozdrowionka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2017, o 23:38 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 760
Lokalizacja: okolice Warszawa
Pomógł: 71

No niestety nie da się wszystkiego wchłonąć na raz. :?
Szkoda, bo też mam ograniczony czas a doba ma jak ma. :)
Trzeba by mieć takiego zwierzaczka do wysysania wiedzy :
http://forum.atnel.pl/post179592.html#p179592 :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2017, o 07:30 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 82
Pomógł: 0

A no to dobre :D
Niestety jak piszesz. Doba wiecznie za krótka. Ale wracając na chwilę do tematu, to wcześniej nie zwróciłem na to uwagi, ale woltomierz
również nie wyświetla prawidłowo. Dawniej tego nie wyłapałem, a bawiłem się nim często. ADC w całym zakresie od 0-1023 jest ok, ale
w innej linijce mam wskazania po przeliczeniu na volty i efekt jest taki, że najpierw wyświetla o-0,1 volta, a potem jest 0,11 itd. już prawidłowo.
Tu muszę naprawić to 0.
Pozdrawiam.



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: 80 ]  Przejdź na stronę 1, 2, 3  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


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