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



Teraz jest 3 kwi 2026, o 16:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 30 lis 2016, o 13:59 
Offline
Nowy

Dołączył(a): 17 cze 2013
Posty: 6
Pomógł: 0

Witam. Mam problem z czujnikiem ds18b20. Wyświetla on zazwyczaj wartość "16846.000" z tym,że jak dotknę czujnika to obserwuję zmianę tej wartości czyli czujnik tak jakby działał. Dodatkowo sprawdziłem ten czujnik pod arduino i tam wszystko hulało. Podpięcie czujnika również kilkukrotnie sprawdzałem. Rezystor podciągający jest. Problem moim zdaniem jest z konwersją tej temperatury na chara chociaż próbowałem już wielu sposób, min sprintf oraz dodanie do Eclipse parametrów aby możliwe było wyświetlanie liczb zmienno przecinkowych. Proszę o pomoc bo dalej nie mogę już sobie sam poradzić. Poniżej załączam kod :

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



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


ds18b20.c :
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: 30 lis 2016, o 14:17 
Offline
Moderator
Avatar użytkownika

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

Obsługa tych czujników na liczbach zmiennoprzecinkowych w AVR to jakaś gigantyczna masakra amerykańską piłą tarczową - robi się to na liczbach całkowitych i nie dość że masz mega prostotę obsługi to jeszcze zostaje ci KUPA miejsca we FLASH a i same działania są szybsze ....

Szczerze polecam ci zacząć od Bluebooka
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

ale jeśli nie masz to i w internecie znajdziesz miliony przykładów obsługi na liczbach całkowitych

_________________
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: 30 lis 2016, o 20:44 
Offline
Użytkownik

Dołączył(a): 07 gru 2013
Posty: 90
Pomógł: 6

Temperatura jako dwa rejestry w pierwszym temperatura, w drugim reszta temperatury po przecinku
Kod:
void przelicz_temperature(uint8_t *dane_tablica, temperatura *czujnik_temperatury){
uint8_t a=*dane_tablica;
dane_tablica++;
uint8_t b=*dane_tablica;
if((b)&(1<<7)){//temperatura ujemna
//temperatura ujemna
   czujnik_temperatury->znak='-';
a=~a; //negacja
b=~b;
a+=1; //lsb + 1
czujnik_temperatury->temperatura=(b<<4)+(a>>4);
}else{//temperatura dodatnia
   czujnik_temperatury->znak='+';
   czujnik_temperatury->temperatura= b*16+(a>>4);
}
   //po przecinku zostaje
   czujnik_temperatury->po_przecinku=a&0x0F;
   czujnik_temperatury->po_przecinku=(czujnik_temperatury->po_przecinku*6)/10;
}//funkcja


A tutaj temperatura w jednym rejestrze uint16_t np: wartość 356 w rejestrze odpowiada temperaturze 35,6 - przeliczenie i wyświetlenie to już najmniejszy problem.

Kod:
uint8_t pomocnicza = 0;
if (ds_tablica[1] & 1 << 7) {
 //temperatura ujemna
 znak_temperatury = '-';
 ds_tablica[0] = ~ds_tablica[0]; //negacja
 ds_tablica[1] = ~ds_tablica[1];
 ds_tablica[0] += 1; //lsb + 1
 temperatura = (ds_tablica[1] << 4) + (ds_tablica[0] >> 4);
 //obliczenie calkowitej
} else {//temperatura dodatnia
 znak_temperatury = 0;
 temperatura = (ds_tablica[1]) * 16 + (ds_tablica[0] >> 4);
 } //temperatura dodatnia
//po przecinku
pomocnicza = ds_tablica[0] & 0x0F;
pomocnicza = (pomocnicza * 6) / 10;
//temperatura
temperatura = (temperatura * 10) + pomocnicza;

A tutaj temperatura w jednym rejestrze uint16_t np: wartość 356 w rejestrze odpowiada temperaturze 35,6 - przeliczenie i wyświetlenie to już najmniejszy problem.



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: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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