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



Teraz jest 12 lip 2026, o 10:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 13 gru 2013, o 20:49 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Witam,
Panowie jak wiemy format temperatury sczytywany z DS18b20 ma postać np.
DEC: -25.0625
BIN: 1111 1110 0110 1111
HEX: 0xFE6F
przy czym ostatnie 4 bity odpowiadają za część ułamkową. W moim projekcie nie interesuje mnie część ułamkowa, więc pomyślałem aby się jej pozbyć wykonując przesunięcie bitowe. czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli teraz pozostała część całkowita (???) następnie robię
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tak obliczona wartość tmp =0b0000 0000 1110 0110; jest obrabiana za pomocą poniższego kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dlaczego po takiej konwersji wynik na wyświetlaczu LCD mam -26 a nie -25 :?: Gdzie jest popełniony błąd w moim rozumowaniu :?: Dodam, że dla każdej liczby ujemnej wynik na LCD zaniżony jest o 1. Dla np. f= 0xFF5E = -10,125 na LCD wyświetlane jest -11 :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 21:00 
Offline
Użytkownik
Avatar użytkownika

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

Nie jestem pewny ale po zmianie znaku w linii 3
inkrementujesz zmienną "tmp" w linii 4
i dopiero wyświetlasz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 21:35 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Tak tylko dla przypomnienia: Pamietasz o tym, ze przy takiej operacji jak bedziesz mial temp np. 22.3333 to w wyniku otrzymasz 22oC oraz jak temperatura bedzie 22.9999 to tez bbedziesz mial 22oC
usun tmp++



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 22:09 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

.


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Ostatnio edytowano 6 lis 2015, o 14:22 przez xor, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 23:16 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Generalnie chodzi mi oto jak porównać 2 wartości jedna, to wartość z DSa a druga to wprowadzona przeze mnie, np.
int16_t temp = -25.0625 // format z DS
int16_t x = 6; // moja wartość
Gdyby DS podawał temp w zmiennej float to nie ma problemu, a tak to nie wiem jak najprościej poradzić sobie z tą częścią ułamkową w zmienne int16_t



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2013, o 23:25 
Offline
Moderator
Avatar użytkownika

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

qutrit napisał(a):
Gdyby DS podawał temp w zmiennej float to nie ma problemu


To byłby dopiero problem ;) to byłoby wręcz bez sensu .....


panie kolego czy ciężko ci dwie zmienne pomnożyć razy 10000

int16_t temp = -25.0625 * 10000;
int16_t x = 6 * 10000;

i wtedy porównać ? która jest większa a która mniejsza ?

a poza tym - podejrzyj sobie bibliotekę w środku do 1wire z bluebooka .... ;) zobacz jak do tego można podejść - zamiast wywracać wszystko do góry nogami czyli zamieniać na liczby zmiennoprzecinkowe.


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: 13 gru 2013, o 23:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2013
Posty: 93
Lokalizacja: Piotrków Trybunalski
Pomógł: 1

Nasuwa mi się pomysł, który można wykorzystać w C++, jednak nie mam pojęcia czy istnieje coś takiego w C.
Otóż rozchodzi mi się o rzutowanie. Widzę, że temperatura jest przypisywana do zmiennej typu integer, więc gdyby przypisać ją do float, a potem zrzutować na integer, to liczbę po przecinku by obcięło.
Jednak nie wiem jak to stosuje się do mikrokontrolerów i języka C, jednak miałem pomysł to się dzielę ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 00:06 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Ostatnio edytowano 6 lis 2015, o 14:22 przez xor, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 00:08 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

mirekk36 napisał(a):
qutrit napisał(a):
a poza tym - podejrzyj sobie bibliotekę w środku do 1wire z bluebooka .... ;) zobacz jak do tego można podejść - zamiast wywracać wszystko do góry nogami czyli zamieniać na liczby zmiennoprzecinkowe.


Fakt jest tam to ładnie opisane ale ..... w pliku main.c mamy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a następnie w pliku ds18x20.c odwołujemy się do tych zmiennych poprzez wskaźniki
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Czy to nie jest błąd :?:
Nie powinno być:
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: 6 minutach ]

xor napisał(a):
Owszem, w C jest coś takiego jak rzutowanie. Zostało wprowadzone do języka jakieś 30 czy 40 lat temu. ;-)
Nie trzeba stosować takich karkołomnych kombinacji, wystarczy 16 bitową daną typu int podzielić przez...zaraz, odrzucamy 4 najmłodsze bity...przez 16 i...włala...mamy tylko część całkowitą.


Ale ten sam wynik da przesunięcie >>4, czyli pozbycie się części ułamkowej. Z tym, że przesunięcie jest o wiele szybszym procesem niż /16. Przynajmniej tak mi się wydaje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 02:14 
Offline
Moderator
Avatar użytkownika

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

qutrit napisał(a):
a następnie w pliku ds18x20.c odwołujemy się do tych zmiennych poprzez wskaźniki


a sprawdziłeś jak są przekazywane do funkcji ? o jakim błędzie ty mówisz w ogóle ?

_________________
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: 14 gru 2013, o 02:20 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

TOTALNY OFFTOPIC ;-).
Mirku zróbmy quiz kiedy przekroczysz 10 000 postów na forum.
Może jakaś mała nagroda w postaci wszystkiego ze sklepu w jednej paczce - heheh ale mi się zamarzyło ;-P.

--
Pozdrawiam.
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 02:24 
Offline
Moderator
Avatar użytkownika

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

Grzegorz... napisał(a):
Mirku zróbmy quiz kiedy przekroczysz 10 000 postów na forum


o matko! nawet nie zauważyłem że za niedługo mi się licznik przekręci :lol:

_________________
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: 14 gru 2013, o 02:29 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

Dobra teraz już na poważnie - chłopie kiedy Ty śpisz???
Może podasz innym użytkownikom forum przepis na klony, które piszą książki, robią poradniki i odpowiadają na forum.
No dobra jak to tajemnica firmy/patent to ja po prostu zamówię jakieś 3 szt. za rozsądną cenę ;-).

--
Pozdrawiam.
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 02:41 
Offline
Moderator
Avatar użytkownika

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

Grzegorz... napisał(a):
No dobra jak to tajemnica firmy/patent


nie, po prostu teraz siedzę i montuję pierwszą część ostatniej CZĘŚCI nr.06 poradnika o ADC w AVR. A jeszcze będzie druga część ;) ... no bo jak zwykle się rozgadałem i ciach ... godzina już pękła po zmontowaniu a i tak wyciąłem sporo ... No a wiadomo ... teraz sam montaż i rendering no to trwa ... ci co bawią się montażem wideo to sami wiedzą ile to czasu pochłania.

eeeh a jutro jeszcze do roboty ;)

_________________
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: 14 gru 2013, o 11:47 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Ostatnio edytowano 6 lis 2015, o 14:22 przez xor, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 13:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

W sumie najrozsądniej jest zaokrąglanie do całkowitej - z uwzględnienie matematycznych zasad zaokrąglania. Albo zmiana w konfiguracji na 9 bitowy wynik - Ustawiając bity R1,R2, krótszy czas przygotowania danej. Przeczytaj sobie datesheet:
Składnia: [ Pobierz ] [ Ukryj ]
język c
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: 15 gru 2013, o 23:37 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Dzięki za pomoc.
Próbowałem na wszystkie sposoby. Najbezpieczniej jest (gdy temperatura ujemna) przekonwertować ją, a następnie przesunąć o 4 bity w prawo. Jedyny minus takiej operacji to fakt, że np. temperatura -22.1 i -22,9 jest wyświetlana jako -22. Ale w moim urządzeniu nie przeszkadza mi to.

mirekk36 napisał(a):
qutrit napisał(a):
a następnie w pliku ds18x20.c odwołujemy się do tych zmiennych poprzez wskaźniki

a sprawdziłeś jak są przekazywane do funkcji ? o jakim błędzie ty mówisz w ogóle ?

Sorry późno pisałem tego posta i przeoczyłem parę linijek w kodzie z książki (płyty CD). Wszystko jest w nim w porządku.

P.S. Też jestem ciekaw jak Ty Mirku masz na to tyle siły. PODZIWIAM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2013, o 00:22 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
P.S. Też jestem ciekaw jak Ty Mirku masz na to tyle siły. PODZIWIAM


Staram się jak mogę, pomimo to że co rusz atakują mnie na mailach malkontenci, którzy sami nic nie zrobią żeby komuś grzecznie pomóc - a za to lubią wejść i dowalić , skrytykować jak to modne jest na elektrodzie ;) ... eeeeh

za to miło - gdy ktoś gdzieś czasem doceni to co robię.

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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