(10 głosujących) Opisywany tutaj układ jest uniwersalnym termometrem dwukanałowym. Pracuje on w zakresie temperatur od -50.0 do +99.9 stopni. Układ został zaprojektowany do mierzenia temperatury w domu i na dworze ale z powodzeniem można dla niego znaleźć wiele innych zastosowań. Po zmianie oprogramowania urządzenie może pełnić funkcję prostego termostatu, lub bardziej złożonego regulatora temperatury. Układ został zbudowany w oparciu o popularny, często stosowany czujnik/czujniki DS18B20 i mikrokontroler ATTiny2313 co znacznie uprościło jego konstrukcję i zmniejszyło wymiary. Termometr udało się tak skompresować, że prawie wszystkie elementy mieszczą się pod typowym wyświetlaczem 3-cyfry o wysokości rzędu 15mm. Projekt jest rozwinięciem układu dostępnego tutaj z tym że prawie wszystkie elementy zostały zmienione na komponenty SMD. Oczywiście można by było upakować bardziej elementy przewlekane jednak w dobie miniaturyzacji lepiej zrobić jeden krok dalej, budując układ o możliwie najmniejszych wymiarach. Daje to możliwość zamontowania gotowego modułu termometru lub prostego termostatu w już istniejące urządzenie lub zastosowanie obudowy niewiele większej od wyświetlacza. W wersji podstawowej termometr potrafi mierzyć dwie temperatury, wykorzystując dwa czujniki podłączone na niezależnych magistralach. Zmiany wyświetlanej aktualnie temperatury dokonuje się za pomocą dwóch przycisków.
Projekt został opublikowany w Elektronice dla Wszystkich 08/2011 i jest dostępny w postaci kitu AVT2985 Działanie:Schemat ideowy układu znajduje się na rysunku poniżej: Sercem urządzenia jest mikrokontroler U1 (ATTINY2313), który pracuje na wewnętrznym oscylatorze, bez dzielnika częstotliwości. Daje to w efekcie taktowanie 8MHz. Brak rezonatora kwarcowego pozwolił zmniejszyć płytkę a dodatkowo umożliwił wykorzystanie wolnego pinu XTAL jako portu wejściowego PA0, do którego obecnie dołączony jest przycisk S2. Zadaniem mikrokontrolera jest odczyt pomiaru temperatury z dwóch czujników, przeliczanie wskazań do postaci dogodnej dla wyświetlania i obsługa przycisków S1 i S2. Kondensator C1 (100nF), umieszczony blisko mikrokontrolera filtruje jego napięcie zasilania podobnie jak kondensatory C2 (10uF) i C3 (10uF), które są konieczne do prawidłowej pracy stabilizatora U3 (78L05). Prostota układu wynika z zastosowanego czujnika temperatury, którym tym przypadku jest Ds18B20. Stanowi on w typowym ustawieniu 12-bitowy termometr cyfrowy mogący pracować w zakresie -55 do +125 stopni. Czas przetwarzania (konwersji) temperatury do wartości binarnej (liczby) trwa nie dłużej niż 750ms. Odczyt temperatury jest w pełni cyfrowy, a łączność z mikrokontrolerem zapewnia popularna magistrala 1-Wire. Do prezentacji temperatury wykorzystywany jest trój-cyfrowy wyświetlacz LED (AT5636BMR-B) z wewnętrznie połączonymi segmentami, przystosowanymi do multipleksowania. Znakomicie ułatwia to proces projektowania płytki. W tym przypadku zastosowanie trzech pojedynczych wyświetlaczy uniemożliwiło by wykonanie taniej jednostronnej płytki drukowanej. Rezystory R4-R11 ograniczają prąd wyświetlacza LED do wartości maksymalnej rzędu 10-12mA (na segment). Średni prąd będzie jednak mniejszy ze względu na multipleksowanie. Do sterowania anodami wyświetlacza wykorzystywane są trzy popularne tranzystory T1-T3 (BC857). Ich prądy baz ograniczane są przez rezystory R1-R3 (3,3k). Zaświecanie cyfr na kolejnych wyświetlaczach odbywa się poprzez cykliczne podawanie stanu niskiego na bazę jednego z tranzystorów T1-T3. W tej same chwili na porcie B mikrokontrolera powinna pojawić się zakodowana wartość odzwierciedlająca wyświetlany znak. Ważnym komponentem jest tutaj złącze GP1, które stanowi jednocześnie miejsce podłączenia czujników oraz wyjście sterowania (w przypadku budowy termostatu). Nie trzeba tutaj montować złącza goldpin, jak w projekcie modelowym, wystarczy wlutować przewody bezpośrednio w płytkę. W programie termometru stan niski na wyjściu sterowania pojawia się gdy temperatura jest ujemna. Wystarczy dołączyć diodę LED z szeregowym rezystorem 470R między to wyjście a +5V aby mieć sygnalizację znaku "-". Budowa:Układ z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Pomocą w konstrukcji będzie schemat montażowy termometru znajdujący się tutaj, natomiast elementy SMD można z łatwością zamontować posługując się rysunkiem dostępnym tutaj. Płytka została zaprojektowana jako jednostronna, a prawie wszystkie elementy są typu SMD. Wyjątek stanowią tu wyświetlacz, przyciski i złącza. Montaż nie jest skomplikowany ale wymaga niewielkiej wprawy w lutowaniu SMD. Na samym początku dobrze jest przylutować właśnie te elementy, ponieważ brak wystających części z drugiej strony ułatwi montaż. Należy zwrócić uwagę że obwód masy przechodzi w jednym miejscu przez zworkę jaką tworzy przycisk (przycisk ma 4 wyprowadzenia parami zwarte). Gdyby zaszła konieczność rezygnacji z przycisków to zamiast S1 należy wlutować zworkę po stronie masy (kolor czerwony). Wadą małej płytki jest brak wyprowadzonego złącza programującego procesora, więc gdyby zaszła konieczność zmiany programu będzie trzeba przylutować kabelek programujący do pinów mikrokontrolera. W roli złącza zasilania podobnie jak w przypadku GP1 dobrze sprawdzają się kabelki przylutowane bezpośrednio do płytki. Opis pinów złącza GP1 przedstawiony jest na rysunku poniżej: Wyprowadzenia 1 i 2 tego złącza to odpowiednio: zasilanie i masa. Wyjście sterowania (OUT) jest tutaj dostępne na pinie 3. Czujniki należy podłączyć trój-przewodowo wykorzystując wyprowadzone zasilanie, masę i linie sygnałowe 5 i 6. Linia danych czujnika pierwszego ma zostać podłączona do pinu 5, a z czujnika drugiego do pinu 6 złącza GP1. Układ termometru zasilany jest napięciem z przedziału 7-12V dzięki obecności stabilizatora 78L05. Nic nie stoi na przeszkodzie aby pominąć stabilizator a napięcie zasilania 5V podać bezpośrednio na termometr. Wykaz Elementów:2x uSwitch 3x 3,3k SMD/0805 2x 10uF SMD/3216A Tantalowy 3x BC857 Programowanie:Program sterujący pracą termometru został napisany w dobrze znanym programie BASCOM AVR . Zajmuje on około 70% dostępnej pamięci mikrokontrolera i może być z powodzeniem kompilowany w wersji demo BASCOM'a. Działanie programu nie jest skomplikowane i w skrócie wygląda to następująco: cały czas procesor kręci się w nieskończonej pętli Do Loop, czekając na ustawienie jednej z flag taktujących w przerwaniu. Za odpowiednie taktowanie odpowiada Timer0. Co około 4ms wywoływana jest procedura multipleksowania wyświetlacza, z której w odpowiednim momencie następuje skok do odczytu temperatury. Procedura obsługi przerwania Timera0 widoczna jest poniżej: Przerwanie0: Timer0 = 131 Set F4ms Incr Dziel(1) If Dziel(1) = 25 Then Dziel(1) = 0 Set F100ms Incr Dziel(2) If Dziel(2) = 10 Then Dziel(2) = 0 Set F1s End If End If Return Na początku do licznika timera ładowana jest wartość 131, daje to przerwanie po odliczeniu 125 impulsów (256-131). Timer pracuje z dzielnikiem sprzętowym przez 256 co przy częstotliwości taktowania 8MHz daje przerwanie co 4ms. Bezpośrednio po wystąpieniu przerwania ustawiana jest flaga F4ms. Zmienne Dziel(1) i Dziel(2) stanowią dzielnik częstotliwości. Pierwsza odpowiada za podział przez 25 i po przepełnieniu licznika ustawiana jest flaga F100ms (następuje to co 100ms). Druga zmienna jest licznikiem do 10 i zapewnia ustawianie flagi F1s co 1s. Pętla główna widoczna jest poniżej: Do If F4ms = 1 Then Reset F4ms 'co 4ms Wysw = T Gosub Wyswietl_zmierz End If If F100ms = 1 Then Reset F100ms 'co 100ms If Pind.2 = 0 Then Kanal = 1 If Pina.0 = 0 Then Kanal = 0 End If Loop End Działanie jest bardzo proste i zależne tylko od flag: F4ms i F100ms. Przez większość czasu procesor kręci się w nieskończonej pętli Do Loop czekając na ustawienie jednej z flag. Co 4ms wywoływana jest procedura obsługująca wyświetlacz i pomiar temperatury, natomiast co 100ms odczytywane są stany klawiszy. W podstawowej wersji programu wystarczy prosta obsługa klawiatury poprzez bezpośredni odczyt stanu pinów wejściowych. Naciśnięcie S1 powoduje przejście do odczytu drugiego czujnika, natomiast naciśnięcie S2 przechodzi do czytania czujnika pierwszego. Procedura obsługi wyświetlacza i pomiaru temperatury widoczna jest poniżej: Wyswietl_zmierz: Incr Mux If Mux = 5 Then Mux = 0 Portd.3 = Not Minus For I = 1 To 3 Wysw_pomoc = Wysw Mod 10 Ww = Wysw_pomoc W(i) = Lookup(ww , Tabela) Wysw = Wysw / 10 Next I If W(3) = 40 Then W(3) = 255 'wygaszenie zera wiodącego Select Case Mux Case 0: Portb = W(3) Reset Portd.6 Case 1: Set Portd.6 Portb = W(2) And &B11011111 Reset Portd.5 Case 2: Set Portd.5 Portb = W(1) Reset Portd.4 Case 3: Set Portd.4 Portb = 255 Gosub Temp 'Case 4: End Select Return Tabela: Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160 Działanie składa się z 5 kroków zależnych od stanu zmiennej pomocniczej Mux. Przyjmuje ona wartości od 0 do 4 i zmienia się cyklicznie z kolejnym wywołaniem procedury. Na wyjście sterowania (Portd.3) przepisywana jest zanegowana wartość zmiennej Minus. Odpowiada ona za wyświetlanie ujemnych temperatur i tym samym na porcie d.3 mikrokontrolera pojawia się stan niski gdy mierzona temperatura jest ujemna. W dalszej kolejności dzięki pętli for, zmienna Wysw, zawierająca wartość do wyświetlenia, dzielona jest na trzy pojedyncze cyfry. Następnie są one zamieniane na kody wyświetlacza LED za pomocą polecenia Lookup (z wykorzystaniem tabeli przeliczeniowej). Po wyjściu z pętli for uzyskuje się tablicę W(n) z zakodowanymi wartościami, gdzie n=1...3 indeksuje kolejne znaki wyświetlacza. Dalsza część procedury zależy od zmiennej Mux. Dla wartości 0 do 2 zaświecane są kolejne cyfry poprzez wyłączenie poprzedniej anody, wystawienie na Portb wartości kolejnego znaku i włączenie odpowiadającej mu anody. Wyjątkiem jest tutaj znak W(2) gdzie dodatkowa operacja (And &B11011111) zapewnia dodanie kropki dziesiętnej po drugim znaku. Dla wartości Mux=3 wywoływana jest procedura pomiaru temperatury, a stan Mux=4 jest fazą oczekiwania na spokojne zakończenie pomiaru temperatury. Procedura pomiaru temperatury widoczna jest poniżej: Temp: If F1s = 1 Then Reset F1s 1wreset Pind , Kanal 1wwrite &HCC , 1 , Pind , Kanal 1wwrite &HBE , 1 , Pind , Kanal T = 1wread(2 , Pind , Kanal): Minus = T.15 T = Abs(t) T = T * 10 T = T / 16 1wreset Pind , Kanal 1wwrite &HCC , 1 , Pind , Kanal 1wwrite &H44 , 1 , Pind , Kanal End If Return Procedura ta wywoływana jest co okoł0 20ms, jednak wykonywanie pomiaru odbywa się co 1s dzięki sprawdzaniu stanu flagi F1s. Występuje tutaj typowa obsługa magistrali 1-Wire dla przypadku obecności tylko jednego układu na magistrali. Wszystkie rozkazy 1-Wire wywoływane są z parametrem Kanal, który odpowiada za to z której magistrali temperatura ma być odczytana (pind.0 czy pind.1). Po wykonaniu resetu następuje wysłanie rozkazu pominięcia sprawdzania ROM oraz wysłanie rozkazu odczytu rejestru DS18B20. Następnie odczytywane są dwa bajty temperatury do zmiennej T (integer), określany jest znak temperatury i wykonywane są proste przeliczenia. W efekcie zmienna T przyjmuje postać temperatury w stopniach pomnożonej przez 10 (np. 13 to 1.3 stopnia). Na samym końcu wysyłany jest rozkaz konwersji temperatury aby w kolejnym odczycie uzyskać aktualną jej wartość. Fusebity mikrokontrolera powinny być ustawione na pracę z wewnętrznym oscylatorem RC o częstotliwości 8MHz, co w praktyce sprowadzi się do wyłączenia jedynie dzielnika sprzętowego (Bit CKDIV). Ustawienia fusebitów, zrzut z programu burn-o-mat znajduje się poniżej: Układ da się przerobić na termostat niewielkim nakładem pracy. Rezygnujemy wtedy z dwukanałowego pomiaru temperatury oraz ujemnych temperatur na koszt sterowania wyjściem. Do wyjścia sterowania (Portd.3) można dołączyć optotriaka i triaka sterującego dowolnym odbiornikiem prądu przemiennego lub można dołączyć tranzystor MOSFET sterujący odbiornikiem prądu stałego. W pętli głównej trzeba będzie wprowadzić modyfikacje widoczne poniżej: If F4ms = 1 Then Reset F4ms If Ust = 0 Then Wysw = T Else Wysw = Tu Gosub Wyswietl_zmierz End If If F100ms = 1 Then Reset F100ms If Pind.2 = 0 Then Incr Tu Autoret = 20 End If If Pina.0 = 0 Then Decr Tu Autoret = 20 End If If Autoret > 0 Then Ust = 1 Decr Autoret Else Ust = 0 End If H = Tu + 10 L = Tu - 10 If T > H Then Set Portd.3 If T < L Then Reset Portd.3 End If Taki kod wymaga zadeklarowania zmiennych Tu, H oraz L jako Integer oraz Ust jako Bit i Autoret jako Byte, na początku programu. Dodatkowo zmienna Tu powinna mieć wartość początkową, gdyż stanowi wartość temperatury ustawianej. W procedurze wyświetlania i mierzenia należy usunąć linijkę odpowiedzialna za sygnalizację ujemnych temperatur, gdyż portd.3 służy teraz jako wyjście sterowania. Przedstawione rozwiązanie nie jest idealne, nie ma żadnego ograniczenia na ustawiane wartości ani nie potrafi zapisywać ustawień do pamięci EEPROM ale w wielu sytuacjach znakomicie się sprawdzi. Może działać z powodzeniem jako termostat do trawiarki po ustawieniu domyślnej wartości Tu na 40 stopni. Zdjęcia Projektu:
|
|||||||||||||||||||||||||||||||||||
re:
Niestety ale dalej rośnie. Dużo wolniej niż przedtem. Ale z 21,5 st. na starcie (to prawidłowa temperatura) zrobiło się 25,5 st. po 10 min. Czyli dalej się grzeje.
U mnie nie występowały takie
U mnie nie występowały takie problemy i normalnie pokazywał temperaturę otoczenia. Sprawdź czy DS nie jest na pewno uszkodzony lub nie ma jakiegoś zwarcia.
Sprawdziłem na dwóch różnych
Sprawdziłem na dwóch różnych układach i z trzema różnymi dsami. Dokładnie ten sam efekt. Teraz obydwa termometry pokazuja mi 26 st. w domu! Do tego dla pewności podłączyłem te same dsy do sterownika domowego i pokazują prawidłową temperaturę, więc dsy są dobre na 100 procent.
Re: Ds
Spróbuj na końcu procedury odczytu Ds. Napisac jeszcze raz rozkaz resetu
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
A częstotliwość taktowania
A częstotliwość taktowania dobrze ustawiona?
re
Dopisanie procedury resetu powoduje ciągłe wyświetlanie 85stC. Czestotliwość i inne fusy ustawione zgodnie z opisem. Podaje link do filmiku pokazującego jak temperatura rośnie sukcesywnie po włączeniu termometru http://jajen.dyndns.org/daniel/ds.avi
Zwracam też uwagę, że m.in. wpis #18 w projekcie termometru uniwersalnego opisuje identyczny problem. Raczej mało prawdopodobne żeby popełnić ten sam błąd albo użyć tak samo wadliwych komponentów. Ale skoro innym działa poprawnie to co może przyczyną? Zwłaszcza , że u mnie dwa termometry zachowują się identycznie.
Zasilanie z baterii
Witam
Co sądzisz żeby ten termometr zasilać z baterii?? 3,7V lit-jon, 200mA do tego włącznik.Tylko czy Attiny2313 ruszy przy takim napięciu?.
Pozdrawiam
J.I.
Re: Tiny
Jest taktowane 8Mhz z wewnętrznego oscylatora więc powinno działać.... przy większych częstotliwościach są problemy
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Problem z wyświetlaniem
Witam
Mam problem z wyświetlaniem temperatury. Układ zbudowany w oparciu o Twój projekt. Problem polega na tym że nie zapala się górny segment na wyświetlaczu (chyba to jest "A") poza tym wszystko działa temperatura jest mierzona i wysyłana na wyświetlacz tylko ten segment się nie zapala ?? wyświetlacz sprawny, połączenia sprawdzone niestety problem nie zniknął!! Proszę o sugestię jak to można rozwiązać ??
I jeszcze jedno zapytanie. Dołączył bym się do prośby o dodanie do tego termostatu. Czytałem że za mało miejsca w mikrokontrolerze, ale nie dało by się jakoś zoptymalizować tego kodu ?? Jak dużo brakuje miejsca w procesorku ??
Projekt bardzo fajny.
Dzięki
Pozdrawiam J.I.
Re: Rezystor
Może rezystor masz niedolutowany od segmentu A albo po prostu nie przewodzi. Jak układ działa to musi cały wyświetlacz dobrze świecić.
Wersja z termostatem dostępna jest przecież w załącznikach
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re korekta
Problem z rośnieciem temperatury rozwiazany ale nie rozumiem dlaczego tak się działo. Wzrost odczytu dotyczył zawsze przypadku bezposredniego wlutowania czujnika do plytki. Przy polaczeniu czujnika kablem problem nie wystepuje. Myslalem, ze moze , ktorys element sie grzeje na plytce i DS reagowal, ale zasilanie mialem odległe od płytki a attiny przeciez sie nie grzeje, inne elementy tez nie. Wiec nie wiem o co chodzilo, ale te same czujniki wlutowane na kablu 0,5m-3m chodzą dokładnie i stabilnie. Wiec sam program jest oczywiscie ok.
AVRStudio
Witam mam problem odnośnie ustawienia Fus bitów , korzystam z avr studio i nie mogę poradzić sobie z ustawieniami .Wgrywam soft i wyświetlacze migają kwarc wew.8Mhz. Zablokowałem 2 procki. Co tu przestawić by śmigało poprawnie. Pozdrawiam
Re: Termometr
A nie wystarczy ci opis wyżej.... pewnie nawet nie czytałeś. Wystarczy odznaczyć CKDIV (ustawić na 1)
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Automatyczne przełączanie wskazań wew i zew
Witam i chylę głowe.
Czy można tak zmodyfikować program żeby przełączał automatycznie wskazania z jednego czujnika na drugi powiedzmy co 5s?
Re: Termometr
Da się tak zrobić. W obsłudze flgi 1s tam gdzie pomiar temperatury wystarczy zrobić dodatkowy podzielnik i zmienic kanał. Np tak:
auto_sw jest zmienną typu byte, trzeba zadeklarować na początku
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Działa
Wielkie dzięki. Wszystko śmiga. Pozdrowienia i oby więcej tak udanych projektów.
prosba o przejrzystośc
Mozna prosić o wklejanie modyfikacji kodu razem z fragmentem kodu przed i po modyfikacji? Latwiej wtedy zorientowac sie gdzie nalezy dokonac zmian osobom , ktore nie mają do czynienia z programowaniem. Poza tym co oznacza ze auto_sw trzeba zadeklarować na początku? Dziekuję.
automatyczne przełączanie
Przyłączam się do prośby poprzednika o dokładniejsze podanie jak zmodyfikować kod żeby następowała automatyczna zmiana wskazań in/out. Tzn o podanie dokładnie w które miejsce wkleić zmianę oraz co i jak zadeklarowac na początku. Dziękuję bardzo.
Re: Program minitermometr
Napisałem gdzie trzeba wkleić tylko jakby komuś się chciało przeczytać opis to by wiedział jak ma to zrobić....
procedura obsługi pomiaru temperatury ma wyglądać tak
Zmienną deklarujemy na początku to jest tam gdzie pozostałe polecenia Dim, wpisując
w nowej linijce pod innymi deklaracjami
Całych kodów nie wklejam bo nie ma to żadnego sensu i wcale nie ułatwia wyszukiwania
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dzieki. Mnie nie działa do
Dzieki. Mnie nie działa do konca. Przelącza się ale jeden odczyt jest zawsze 00, tak jakby nie było czujnika. Co robie zle?
RE: Termometr
A jak nie ma przełaczania automatycznego tylko ręczne to dwa kanały mierzą temperaturę poprawnie?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re
Przy zmodyfikowanym kodzie, mimo ze automatycznie działa jeden czujnik, to przy recznej zmianie jest ok. Oczywiście na standardowym kodzie również wszystko działa ok.
Dodam, ze mam wlutowane diody identyfikujące czujniki. Przy zmodyfikowanym kodzie swiecą obdwie na raz. Niestety nie mam możliwośći ich wylutowania bo urządzenie jest w zaklejonej obudowie i wystaje tylko ISP. Ale nie sądze, zeby to diody mogły powodowac problem z automatycznym przełączaniem.
Re: termometr
Dobra już wiem co sie stało...... dopisz jeden szczegół i powinno zadziałać:
Zamiast
toggle Kanal
daj:
toggle Kanal.0
albo
jakby nie zadziałała ta konstrukcja z toogle
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Zadziałała pierwsza
Zadziałała pierwsza konstrukcja. Dzięki. A czy da się jeszcze tak, żeby diody identyfikujace czujnik działały przy wersji z automatycznym przelaczaniem?
Re: Termometr
Trochę nie pamiętam tego z diodami identyfikującymi czujnik... może napisz co zostało już ustalone w tej sprawie
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
re termometr
modyfikacja z diodami pogala na:
#Config Porta = &B00000010 : Porta = &B11111111
#If Kanal = 0 then porta.1 = 0 else porta.1 = 1
Na porcie PA1 dwie diody.
Ładnie działały przy ręcznym przełączaniu. Ale auto już nie chodzi (swiecą zawsze dwie)
Obsługa DS18B20
Szanowny kolego.
Od 5 (pięciu) lat wałkuję obsługę wyświetlacza 7segm i DS18B20. Wydaje mi się że wykorzystałem już wszystkie kombinacje odcytu temperatury i nie mogę sobie poradzić z jednym aspektem:
Wszyscy wiemy, że obsługa DS18B20 (wysyłanie słów i odbieranie) wstrzymuje przerwania które wykorzystywane są do obsługi wyświetlacza, czego efektem jest niezwykle denerwujące zatrzymywanie wyświetlania na ułamek sekundy jednego z wyświetlaczy.
Widzę również że kolega obsługę DS'a włożył w tzw "dodatkowy wyświetlacz". Ja w swojej bezsilności próbowałem i tego rozwiązania a także rozbiłem obsługę na pojedyncze słowa co każdy cykl przemiatania jednak bezskutecznie.
Chciałbym tylko zapytać, czy przedstawiony układ jest całkowicie pozbawiony tej przypadłości?
Czy istnieje inny sposób na zapobiegnięcie tego typu objawom, jak wykorzystanie "dodatkowego wyświetlacza" co wydaje mi się nie jest do końca profesjonalnym rozwiązaniem ?
Bardzo proszę o odpowiedź
J.J.
Re: Wyświetlacz LED/termometr
Coś musiałeś jeszcze pozmieniać w programie bo jak zauwazyłeś dido świeci w zleżności od zmiennej kanał, która jest zmieniana w taki sam sposób zarówno w trybie auto jak i manual. może konfiguracja na początku programu została ci w starej wersji i Pa.1 nie jest wyjściem.
---------
Co do wyświetlania i DS'a to mój program nie posiada tej wady.... nie za bardzo da się przeskoczyć ten problem bo do ds'a potrzebny jest określony czas aby go obsłużyć. Więc trzeba dzielić na małe kawałki słowa wysyłane do ds'a albo kombinować różnie z wyświetlaniem. Sam spędziłem na tym z pół dnia zanim przestało migać.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Masz rację, żle to opisałem.
Masz rację, żle to opisałem. Obecnie diody swiecą razem , bo w ogóle modyfikacja dla diod nie została wprowadzona. Natomiast w przypadku modyfikacji takiej, jak podałem wyżej, dioda świeci ale ta , którą włączymy ręcznie. Czyli włącze recznie DS1 - swieci zielona, przelaczy sie automat na DS2, swieci dalej zielona, Przelacze recznie na DS2 - swieci czerwona, przelaczy sie automat na DS1, swieci dalej czerwona. Czyli swieci zawsze dida dla recznie ustawionego DS,a
Re: termometr
To jest fizycznie niemozliwe.... popatrz:
Automat zmienia kanał:
ręcznie zmieniasz:
a dioda zależy od zmiennej Kanal:
w którym miejscu masz umieszczoną powyższą linijke dla diod?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Kurcze, Mirley przepraszam za
Kurcze, Mirley przepraszam za kłopot ale wklepałem wszystko od nowa wg tego co mówiłeś, załadowałem i działa pięknie. Raz jeszcze dziękuję i przepraszam za zamieszanie.
termometr
Witam czy jest możliwość przerobienia tego układu na woltomierz??
Re: Termometr
Nie ma takiej opcji... tiny2313 nie ma przetworników
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Zrobiłem ten układ i mam
Zrobiłem ten układ i mam takie pytanko. Chciałem, aby sygnalizował temperautry ujemne czyli, poniżej 0 stopni zapali się dioda. Do tego celu chciałem wykorzystać PortD.3
Działa to ale tylko dla 0 stopni, poniżej zera dioda znowu gaśnie. Domyśliłem się że to winna zmiennej word, dlatego zmieniłem na zmienną (która przechowuje dane ze znakiem ujemnym) typu Single. Ale też nie zdaje egzaminu. Czy masz może pomysł jak to zrobić żeby poniżej zera zapalała się dioda?
Dobra sorry za pytanie, już
Dobra sorry za pytanie, już ogarnąłem, że w wersji termometru task właśnie zrobiłeś. A co właściwie znaczy:
Minus = T.15
T = Abs(t)
[/code]
Rozumiem, że 16 bit zmiennej T, który jest zerem dla wartości dodatniej, a jeden dla wartości ujemnej pomiaru?
wyświetlacz
Jaki inny wyświetlacz mogę zastosować który jest w ofercie TME(sorry za reklamę)?
2 przewody
Piszesz tu o połączeniu na 3 przewody. Czy można połączyć go na 2? Pytam bo potrzebuję czujnik umieścić na przewodzie 40-50m
Re: Termometr
Z Ds odczytywana jest temperatura do zmiennej integer T. Naturalnie wartosci ujemne zapisywane są w kodzie U2, czyli najstarszy bit jest 0 jak jest + a 1 jak jest -. Wystarczy odczytać MSB i to właśnie robię Minus=T.15 (zmienna jest 16 bit). Polecenie T = ABS(T) robi wartość bezwzględną temperatury żebym wyświetlał cyfry potem
Można dac dowolny wyświetlacz ale musisz sobie odpowiednio podłaczenia zrobić żeby były zgodne z tym co procek wystawia. Jak masz tak długi kabel to szczególnie polecam 3 przewody, żeby pewniej działało
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
jaki kabel
a jaki ten kabel będzie lepszy bo jedni piszą że może być zwykły telefoniczny i a inni że skrętka komputerowa klasy 5e.
Chodzi o transmisje na ok. 50m
Mirley, mam takie nie typowe
Mirley, mam takie nie typowe pytanko. Powiedz co studiujesz, jaki kierunek i specjalizacja?
Re: Termometr
Napewno dał bym lepszy kabel. Myślę że dowolna skrętka sieciowa będzie dobra. Sygnał i masę puść jedną parą a zasilanie i masę jeszcze raz możesz puścić drugą parą. Można tez poszukać czy nie ma kabla 3 żyłowego skrętki.
---------
Studiowałem Fizykę Jądrową na AGH, kształcąc się w kierunku Elektroniki Jądrowej (elektronika odczytu i transmisja danych z detektorów cząstek itp). Obecnie jestem na doktoracie i zajmuje się projektowaniem układów scalonych dla celów transmisji danych z detektorów
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Bardzo ciekawe. Bo niedługo
Bardzo ciekawe. Bo niedługo będę wybierał kierunek studiów, a właśnie mnie bardzo interesują twoje projekty i chciałbym dalej poszerzać swoją wiedzę w stronę elektroniki. Zastanawiam się nad automatyką i robotyką bądź także nad elektroniką i telekomunikacją.
Interesuje mnie elektronika (mikro, programowanie, ukłądy scalone itd.) ale także ciekawe są sterowniki PLC, sterowania, programowanie itp.
Modyfikacja
Witam mam takie nietypowe pytanie: Czy mógłbyś mi pomóc zmodyfikować program tak aby działał z układem który zmontowałem. Znalazłem fajny bardzo stary wyświetlacz w fajnej obudowie. jest w nim znak + i - oraz dodatkowa jedynka. Chodziło by mi o to by dodać do multipleksowania ten dodatkowy wyświetlacz .
1. Gdy temperatura jest dodatnia chciałbym by świecił się + natomiast jak jest ujemna -
2. Gdy temperatura wzrośnie do 100 stopni i wyżej by zapalił się segment jedynki.
3 . Układ miałby mieć tylko 1 czujnik temperatury
4. Gdyby się jeszcze dało to na końcówce PA1 lub PA2 następowała by zmiana stanu po przekroczeniu 90 stopni.
W tej chwili układ działa na delikatnie zmienionym wsadzie twojego autorstwa .
Niestety dopiero rozpoczynam i jest to mój pierwszy układ z mikroprocesorem więc proszę o wyrozumiałość. jeśli chodzi o Tabele do wyświetlania na wyświetlaczu to sobie ją przeliczyłem podług mojego wyświetlacza.
Schemat rysowany na kolanie http://obrazki.elektroda.pl/6243742600_1328573727.jpg
Re: Termometr
jak jest zbudowany dokładnie ten dodatkowy wyświetlacz? Ma wspólną anodę i jakie katody? co zaświecają? Żeby multipleksowanie miało sens trzeba dołączyc te katody dodatkowego wyświetlacza do którychś pinów a-g istniejących wyswietlaczy
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Cały wyświetlacz składa się z
Cały wyświetlacz składa się z 4 pojedynczych wyświetlaczy z czego trzy są to typowe wyświetlacze 7 segmentowe oraz DP z tym że kropka jest przed znakiem. Wyglądają dokładnie tak jak na schemacie którego część wyciąłem z oryginalnej jego dokumentacji. Natomiast czwarty ma zamiast całego znaku "8" segmenty "b" oraz "c" połączone z "bc" pozostałych segmentów oraz znak pionowa kreska oraz pozioma kreska wyprowadzone oddzielnie.
Znaki te czyli " 1 +-" mają wspólną anodę. całość jest zmontowana na dwustronnej płytce drukowanej. Jeśli ułatwiło by to program to mogę odłączyć te segmenty BC tego dodatkowego wyświetlacza i połączyć tak jak na tym schemacie dolnym: http://obrazki.elektroda.pl/6788920900_1328717262.jpg czerwone linie.
cały kod wygląda tak:
Re: Termometr
segmenty b i c od tej 1 napewno podłącz razem z wszystkimi pozostałymi b i c, po co kombinować. Tak samo zastanawiam się czy np tej kreski poziomej i pionowej nie dołączyć do segmentów np d i e. W programie trzeba zwiększyć zakres Mux o 1:
oraz dopisać nowego case:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Udało mi się uruchomić
Udało mi się uruchomić dodatkowy wyświetlacz. Musiałem tylko usunąć end if z tego miejsca.
Nie sprawdziłem tylko czy zapala się ta dodatkowa jedynka do setnych temperatur bo czujnik już mam zamontowany a drugiego jeszcze nie kupiłem. Mam pytanko czy jak będzie temperatura 0,0 to będzie się palił+- czy po prostu w tym momencie będą ciemne?
Jak zrealizować alarm przy przekroczeniu 90 stopni?
Re: termometr
Nie możesz wywalić tego end if... ona tam ma być. Jak cos to wywal całe
to jest obsługa wygaszenia 0 przed wskazaniem. nie świeci 01.0 stopnia tylko 1.0
Dla zera będzie się świecił +
Alarm jest prosty:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
migotanie
Mirley mam problem. Po wgraniu programu (termometr) na wyświetlaczach miga napis 0.0. Zamiast attiny2313 20su dałem 20pu na kabelkach (obudowa dip). To może być problemem? Próbowałem już na 2 prockach i bez żadnych zmian.
RE: Termometr
A ustawiłeś fusebity?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.