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



Teraz jest 30 sty 2025, o 19:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 9 mar 2014, o 11:37 
Offline
Nowy

Dołączył(a): 02 mar 2014
Posty: 3
Pomógł: 0

Witam, postanowiłem zrobić sobie podstawkę pod kufel, która byłaby podświetlana diodami rgb, które zmieniałyby kolor poprzez odczyt temperatury. Docelowym mikrokontrolerem ma być tiny25, więc jestem ograniczony z pamięcią flash. Znalazłem na stronie http://olson-projects.blogspot.com/2012/04/rgb-led-temperature-indicator.html kod i przerobiłem go trochę na swoje potrzeby.

Ogólnie rzecz biorąc, attinka robi 100 pomiarów adc i uśrednia je(zrobiłem tak aby odczyt nie skakał) i przelicza na stopnie celsjusza, a następnie w pętli głównej instrukcje warunkowe sprawdzają, jaka jest temperatura(WAŻNE: W OBECNEJ WERSJI KORZYSTAM Z ZESTAWU ATB, WIĘC ODCZYTUJE POMIAR Z POTENCJOMETRA I ŚWIADOMIE USTALIŁEM TAK WYSOKIE PROGI NAPIĘCIA MIERZONEGO ) i na tej podstawie oblicza stopień wypełnienia impulsu.

Dla przykładu, jeśli mamy temperaturę 8 stopni, to wypełnienie czerwonej jest zerowe, niebieskiej pełne(255), a zielonej 32*temperatura - 256, czyli daje nam to zerowe wypełnienie, a przy górnym progu(troszkę poniżej 16 stopni) około 255, czyli pełne.

Niestety, pojawia się problem przy przejściu przy 16 stopniach, gdy zostaje przekroczony ten próg, wartość wypełnienia diody niebieskiej wynosi 128, a więc połowę tego, czego chciałbym uzyskać, a w efekcie przy 20 stopniach niebieski gaśnie całkowicie i wzwyż dostaje wartość 128. Wywnioskowałem to po dołączeniu wyświetlacza lcd, aby sprawdzać stany wypełnienia.
Zmienna ta zachowuje się, jakby nie była unsigned, czyli ma zakres od 128 do -128, a nie od 0 do 256 jakbym sobie tego życzył.

Byłbym wdzięczny za pomoc :mrgreen:

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 mar 2014, o 12:39 
Offline
Użytkownik

Dołączył(a): 12 paź 2012
Posty: 207
Lokalizacja: Rzeszów
Pomógł: 16

Obsługa LCD w przerwaniu? brrrr ; to przerwanie trwa chyba wieczność - lub niewiele krócej :P
co do problemu to upatruję go w tej linii (oraz dalszych na których operujesz na dużych liczbach).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

zmienna temp jest uint16_t a operujesz tutaj na liczbach znacznie większych i do tego ujemnych.
Warto przeczytać to :
http://atnel.pl/domyslna-promocja-do-typu-int.html
to Ci się rozjaśni.
Ja dodam tylko od siebie, że to wyliczanie kolorów (raz odejmujesz raz dodajesz) jest dla mnie dość niezrozumiale napisane i chyba można by to zrobić łatwiej.


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 07:33 
Offline
Nowy

Dołączył(a): 02 mar 2014
Posty: 3
Pomógł: 0

Zastosowałem jawne rzutowanie typu w obliczeniach i teraz dziala, dzięki!



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 3 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO