[C++] ds18b20 wyświetlenie wartości na wyśw 7-segmentowych

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

[C++] ds18b20 wyświetlenie wartości na wyśw 7-segmentowych

Post autor: maxxxior » 20 sie 2013, 14:03

Witam
Jak w temacie. Jak już odczytam wartość temperatury z czujnika, to co zrobić, aby temp była wyświetlana na 3 wyświetlaczach 7-segmentowych ???Piszę w języku C. Mikrokontroler to Attiny2313.

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 20 sie 2013, 15:30

Rozbić liczbę na pojedyncze cyfry(operacje dzielenia modulo) i po kolei wyświetlić.

maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 11 wrz 2013, 20:14

hmm, moment. Mam zczytane 2 wartości z DS-a:
temp1 - odczytane LSB
temp2 - odczytane MSB
i wartosc temperatury z tego wzoru:
temp=(float)(temp1+(temp2*256))/16;

i teraz jak mam ją rozbić tak aby wyświetlić ją na 3 wyświetlaczach 7-segmentowych?

maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 13 wrz 2013, 7:25

halo, pomoże ktoś?

janusz17
-
Posty: 7
Rejestracja: 20 gru 2005, 7:15
Lokalizacja: Kraków

Post autor: janusz17 » 13 wrz 2013, 10:32

Zakładam, że do wyświetlenia temperatury będą potrzebne cztery wyświetlacze 7-mio segmentowe - wyświetlenie znaku dla temperatury ujemnej, i trzy cyfry pokazujące wartość temperatury (np. -12.7).
Obliczoną wartość temperatury dzielę przez 100 - to będzie wartość do wyświetlenia na pozycji 2-giej wyświetlacza. Następnie resztę z dzielenia temperatury przez 100 zapisuję w zmiennej pomocniczej. Dzielę ją przez 10 i to bedzie wartość do wyświetlenia na pozycji 1 a reszta z tego dzielenia ma być wyświetlona na pozycji 0. Zakładam kolejność wyświetlaczy: 3-2-1-0.
Oddzielną kwestią jest rozpoznawanie liczby ujemnej.
Przykład:

cyfra2 = temperatura / 100;
temp_pom = temperatura % 100;
cyfra1 = temp_pom / 10;
cyfra0 = temp_pom % 10;

Awatar użytkownika
dondu
Użytkownik
Posty: 211
Rejestracja: 24 maja 2005, 9:47
Lokalizacja: Śląskie
Kontakt:

Post autor: dondu » 15 wrz 2013, 23:18

Możesz się wzorować na tym: http://mikrokontrolery.blogspot.com/201 ... ersja.html
to od razu zarobisz dodatkowo 1,5kB pamięci programu wyrzucając float.

maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 28 wrz 2013, 15:32

hmm, no coś mi nie działa... tą wartość temp mam w float, a tablica z cyframi wyswietlaczy jest na int'ach... nawet jak rzutuje tą wartość temp na int to i tak nic nie wyświetla :/

Awatar użytkownika
dondu
Użytkownik
Posty: 211
Rejestracja: 24 maja 2005, 9:47
Lokalizacja: Śląskie
Kontakt:

Post autor: dondu » 01 paź 2013, 7:41

maxxxior pisze:hmm, no coś mi nie działa... tą wartość temp mam w float, a tablica z cyframi wyswietlaczy jest na int'ach... nawet jak rzutuje tą wartość temp na int to i tak nic nie wyświetla :/
Skoro uparłeś się na używanie liczb zmiennoprzecinkowych typu FLOAT, to musisz jeszcze zrobić to: http://mikrokontrolery.blogspot.com/201 ... lanie.html

maxxxior
Użytkownik
Posty: 210
Rejestracja: 19 mar 2010, 21:27
Lokalizacja: Skierniewice

Post autor: maxxxior » 22 gru 2013, 17:40

odświeżam. Mam problem z tym 'wyłuskaniem' cyfr z liczby. Mam np temperaturę 34,5. i teraz robię tak:
dziesiatki = temperatura/10;
jednosci = temperatura %10;

a cyfra po przecinku? nie mam pojęcia... pomocy
ok, chyba znalazłem rozwiązanie, cyfra po przecinku będzie wynosić (temperatura/0.1)%10, tak?

ODPOWIEDZ