Minitermometr Uniwersalny


9.6
Ocena: None Średnia: 9.6 (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 4,7k SMD/0805
8x 330R SMD/0805

2x 10uF SMD/3216A Tantalowy
1x 100nF SMD/0805

3x BC857
1x 78L05 SMD/SOT89
1x ATTINY2313 SMD/SO20
1x LED-AT5636BMR (Wyświetlacz potrójny)

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:

ZałącznikWielkość
Schemat61.36 KB
Płytka10.73 KB
Płytka (odbicie lustrzane)10.7 KB
Płytka (24 na stronie)157.02 KB
Montowanie (warstwa elementów)8.66 KB
Montowanie (warstwa druku)13.73 KB
Opis (warstwa elementów)53.3 KB
Opis (warstwa druku)100.45 KB
Soldermaska96.35 KB
Kod Źródłowy (termometr)3.11 KB
Program po kompilacji (bin) (termometr)1.44 KB
Program po kompilacji (hex) (termometr)4.06 KB
Kod Źródłowy (termostat)3.37 KB
Program po kompilacji (bin) (termostat)1.63 KB
Program po kompilacji (hex) (termostat)4.6 KB



Portret użytkownika oldname

nie działa

Po tej zmianie nie reaguje na inkrementację zmiennej "pomasw" czyli jak w kodzie początkowym. Jak policzy do 10-ciu wykonuje toggle.

-

oldname

Portret użytkownika oldname

Wyłączenie automatycznej zmiany wyświetlania

Trochę pogmerałem i wyszło mi coś takiego:

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
Config Porta = &B00000000 : Porta = &B11111111
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Przerwanie0
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Dziel(2) As Byte
Dim Wysw As Word , Ww As Byte , W(3) As Byte
Dim Wysw_pomoc As Word
Dim T As Integer
Dim Mux As Byte , I As Byte , Auto_sw As Byte               'auto_sw zmienna automatycznej zmiany wartości zmiennej kanal
Dim F1s As Bit , F4ms As Bit , F100ms As Bit
Dim Minus As Bit
Dim Kanal As Byte , Poma_sw As Byte                          'poma_sw zmienna pomocnicza za pomocą której można ustawić czas zmiany zmiennej kanal
'****************************
      'Wartosci Poczatkowe
'****************************
Kanal = 0
'****************************
      'Petla glowna
'****************************
Readeeprom Poma_sw , 10
 
Do
 
If F4ms = 1 Then
  Reset F4ms
 
  Wysw = T
  If Pind.2 = 0 And Pina.0 = 0 Then Wysw = Poma_sw
  Gosub Wyswietl_zmierz
 
End If
 
If F100ms = 1 Then
  Reset F100ms
 
  If Pind.2 = 0 Then Kanal = 1
  If Pina.0 = 0 Then Kanal = 0
  If Poma_sw = 10 Then Poma_sw = 0
 
 
End If
Loop
End
'****************************
   'zapis
'****************************
 Zapispoma_sw:
 
   Disable Interrupts
   Writeeeprom Poma_sw , 10
   Enable Interrupts
 
Return
'****************************
      'Przerwanie timer0
'****************************
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
'****************************
      'pomiar temp
'****************************
Temp:
 If F1s = 1 Then
   Reset F1s
 
   If Pind.2 = 0 And Pina.0 = 0 Then
      Incr Poma_sw
      Gosub Zapispoma_sw
   End If
 
   If Poma_sw > 0 Then
      Incr Auto_sw
   End If
 
   If Auto_sw > Poma_sw Then
     Auto_sw = 0
     Toggle Kanal.0
   End If
 
   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
'****************************
      'wyswietlanie i wywolywanie pomiaru
'****************************
Wyswietl_zmierz:
  Incr Mux
  If Mux = 5 Then Mux = 0
 
  Porta.1 = 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)
     Portb.5 = Kanal.0                                      'zaświeca ostatnią kropkę
     Reset Portd.4
 
    Case 3:
     Set Portd.4
     Portb = 255
     Gosub Temp
 
  End Select
Return
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
    Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160
'znak:    0     1     2     3     4     5     6     7     8     9

Tym kodem można za pomocą jednoczesnego wciśnięcia przycisków s1 i s2, ustawić czas(2sek do 10sek można zmienić w zmiennej poma_sw) zmiany wyświetlania pomiędzy DS1 a DS2. W przypadku ustawienia czasu o wartości 0.0 wyświetlana będzie stale temperatura jednego z Ds-a.Trzymając oba przyciski stale wciśnięte, wartość czasu co sek. rośnie do 10sek po czym przechodzi do zera i tak w kółko.Po ustawieniu wartości 0.0 , to który z czujników będzie wyświetlał, można zmieniać tak jak dotychczas za pomocą przycisków S1 lub S2.
Dodatkowo, wartość czasu przełączania zapisuje się do pamięci eeprom a przy jednym z czujników temperatury pojawia się ostatnia kropka.
Jeżeli ktoś z kolegów zauważy możliwość zmian by poprawić kod to proszę o sugestie.

-

oldname

Portret użytkownika lukpc1

coś nie mam stanu niskiego

coś nie mam stanu niskiego przy minusowej temperaturze na pinie, który podpina się pod led informujacy o ujemnej temperaturze.

Portret użytkownika lukpc1

dobra dałem rade działa

dobra dałem rade działa

Portret użytkownika drowning_man

Termostat i mius.

Witam, możliwe, że ktoś już o to pytał ale postów jest wiele i troche długo byłoby czytać. Mam pytanie czy jest możliwość aby w roli termostatu minus był jednak wyświetlany? Są jeszcze wolne piny w procku więc wydaje sie to realne. Jak trzebaby przerobić program?

Portret użytkownika darek793

Witam Poskładałem sobie

Witam
Poskładałem sobie termometr z tego tematu, w wersji na 2313 z termostatem, i ruszył od pierwszego uruchomienia. Dzięki za projekt. Chciałbym go używać do monitorowania temperatury zasobnika C.W.U i tu pojawia się problem. Nie wiem gdzie i jak w programie ustawić próg zadziałania alarmu przekroczenia temperatury. Nie wiem gdzie ustawić wartość początkową zmiennej Tu na powiedzmy 80st. po przekroczeniu której zadziała alarm oraz wyłączy go po opadnięciu temperatury do 70st. Może mi ktoś pomóc.

Portret użytkownika mirley

Re: Minus

Dioda minus może być jeszcze zrobiona na pinie PA1, wystaczy odkomentować linijkę 'Portd.3 = Not Minus i wstawić tam porta.1. Jeszcze na starcie programu trzeba tylko porta.1 ustawic jako wyjście

---------------

Wartość początkowa zmiennej Tu jest na starcie programu na początku jest Tu=280 wystarczy wpisać Tu=800 aby było 80 stopni. Alarm to można by ustawić tez na pinie pa.1 zamiast minusa. Trzeba dopisać poprostu na sztywno dwa ify:

 If T > 850 Then Set Porta.1
 If T < 750 Then Reset Porta.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.

Portret użytkownika darek793

witam Dziękuję za szybką

witam
Dziękuję za szybką odpowiedź. Jutro przetestuję czy to działa i dam znać

Portret użytkownika darek793

Witam Wszystko oczywiście

Witam
Wszystko oczywiście działa jak należy. Dziękuję.

Portret użytkownika grzesiek

Problem z dużymi wyswietlaczami

Witam serdecznie!

Składam już drugi egzemplarz tego termometru. Pierwszy działa już bez żadnych problemów ponad rok. Ale teraz mam problem ponieważ chcę użyć dużych wyświetlaczy 7segmentowych ponieważ mam takie akurat na stanie. Ze względu na to że procesor nie zapewni im odpowiedniego zasilania użyłem układu ULN2003A. I pojawił się problem - otóż wszystkie segmenty ciągle się świecą i widać tylko delikatne przebłyski przy zmianie cyfry więc sam układ działa prawidłowo tylko jakby nie pozwala gasnąć poszczególnym wyświetlaczom. Tranzystory PNP zmieniłem oczywiście na mocniejsze, wyświetlacze są zasilane 9V. Mają koledzy jakieś pomysły jak temu zaradzić?

Pozdrawiam
Grzesiek

Portret użytkownika mirley

Re: Termometr

No to pomyśl co zrobiłeś? wpakowałeś ULN na cały port procka czyli go zanagowałeś na tranzystorach ULN jest teraz masa kiedy powinien być stan wyski i na odwrót. Trzeba zanegować stany w procedurze wyświetlania. Powinna teraz wyglądac tak:

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
    W(i) = Not W(i)
  Next I
  If W(3) = 215 Then W(3) = 0           'wygaszenie zera wiodącego
 
  Select Case Mux
    Case 0:
      Portb = W(3)
      Reset Portd.6
    Case 1:
     Set Portd.6
     Portb = W(2) Or &B00100000
     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

-

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.

Portret użytkownika grzesiek

No tak,ULN przecież neguje

No tak,ULN przecież neguje sygnały.. Głupi błąd :) a poza tym chyba nie będę potrzebował zmian w układzie sterującym anodami? Chodzi mi o tranzystory T1-T3.
Dzięki wielkie za pomoc!

Portret użytkownika Berni

AT90s2313

Witam zamierzam się do wykonania termometru i stąd moje pytanie czy zamiast attiny moge zastosować AT90s2313 bo takie właśnie mam bez zmian w kodzie. Pozdrawiam.

Portret użytkownika demsy1

Termometr domowy

Portret użytkownika Berni

at90s2313

Kolega chyba żle przeczytał nie chodzi o 2051 tulko o układ ATMEL 90s2313 stary poczciwy z dawnych czasów nie jest to atina stąd było moje pytaie czy te układy się różnią programowo i czy wsad będzie ten sam. Ale nie otrzymałam odpowiedzi tylko zbycie z tematu szkoda.układ na 2051 znam i nie o to mi chodziło szukałam schematu na dwa niezależne czujniki. Pozdrawiam.

Portret użytkownika mirley

Re: 90S2313

Ukłąd powinien działać, ale musisz sobie przekompilowac program aby działał dla tego procka. Nie wiem czy zmieści się w at90s2313 ale warto spróbować. Trzeba by też zrobić jakieś modyfikacje bo do 90s potrzebujesz kwarcu a na nóżce kwarcu obecnie jest przycisk

-

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.

Portret użytkownika drowning_man

24m

Witam, wgrałem sobie program termostatu i na krótkich kablach działa ok ale przy kablu 24m niestety na wyświetlaczu 0.0, jak przerobić układ aby smigał na 24m kabla? Mniej nie mogę zastosować...

Portret użytkownika demsy1

Kabel

Do czujnika 24 m?

Portret użytkownika drowning_man

Tak, w sieci ludziska się

Tak, w sieci ludziska się chwalą, że i na 60m ds'y im działają więc myslałem, że na 24m nie będzie problemu. Zastosowałem skrętkę 6-żyłową alarmową po diwie żyły na każdą noge ds'a (aby zwiększyć przekrój).

Portret użytkownika mirley

Re: DS

Po pierwsze to sprawdź czy sobie nie zrobiłeś zwarcia na tym długim kablu. Zmniejsz rezystor podciągający do 3,3k i zobacz rezultaty. Czy napięcie na czujniku na końcu kabla jest dobre. Ewentualnie daj tam jakiś kondensator. W Ostateczności trzeba by było oscyloskop żeby popatrzeć co na linii danych się dzieje.

-

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.

Portret użytkownika pawel1968

Termostat

Witam. Mam wykonane kilka sztuk tego projektu i oczywiście jak wszystkie inne wykonane urządzenia Mirleya działają bez problemu. Pytanie moje jest następujące: która część programu (termostat) odpowiada za zmniejszenie zakresu regulacji temperatury? Potrzebuję zmniejszyć ten zakres np. 15-30 st C. Z zapisem do eeprom tej wartości sobie poradziłem, ale to mi nie wychodzi.

Portret użytkownika mirley

Re: Termostat

W programie termostatu nie ma ograniczenia na ustawianie Tu ale można wprowadzić ograniczenie:

If F100ms = 1 Then
  Reset F100ms
  If Pind.2 = 0 Then
    if Tu < 300 Then Incr Tu           'zmienić tutaj
    Autoret = 20
  End If
  If Pina.0 = 0 Then
    if Tu > 150 Then Decr Tu           'zmienić tutaj
    Autoret = 20
  End If

-

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.

Portret użytkownika pawel1968

Termostat

Dzięki wielkie. Oto chodziło. Działa.

Portret użytkownika drowning_man

witam, robilem tak jak

witam, robilem tak jak pisales mirley z tym rezystorem i niestety nadal nie dziala na dlugim kablu. Skrócilem go nawet do 15m i nadal nic. Napiszcie na jakich kablch u was to dziala bo juz nie wiem co robic...

Portret użytkownika korfanty33

RE, 30m kabla

Gdzieś w dokumętacji wyczytałem żeby DS najlepiej podłączyć na 4 przewodach ,
sygnał odpowiedzi z masą(GND) na jednej parze przewodów , Zasilanie z GND na drugiej parz przewodów ,skrętka lubi się łamać jak ją żle się rozwija i zaciąga

Portret użytkownika drowning_man

Witam. Problem wydaje mi sie

Witam. Problem wydaje mi sie ze tkwi w programie, podlaczylem ten sam czujnik (razem z tym samym dlugim kablem) do innego układu na atmega32 i wszystko pieknie dziala nawet gdy ds ma wpiete tylko dwa przewody.

Portret użytkownika korfanty

w plikach źródłowych jest to

w plikach źródłowych jest to samo dla termometru i termostatu

Quote:
(definicji portu D )

Config Portd = &B11111011 : Portd = &B11111111
ds2-portD.0- powinny być jako IN ??
ds1-portD.1

czy nie powinno być
Config Portd = &B11111000 : Portd = &B11111111 ' gdzie pd.0-ds2, pd.1-ds1 , pd.2-s3

wiem że bezpieczniej jest ustawić port jako wyjście -
czy jest to celowo zrobione , czy literówka ?

Portret użytkownika mirley

Re: DS

Tak jako wejście powinno być tylko zawsze komendy bascoma dbały o poprawne ustawienie portu, widocznie coś się zmieniło z updatem bascoma..... sprawdźcie co się stanie jak zmieni się port na wejście

-

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.

Portret użytkownika Roberto

Tranzystor ten pod procesorem

Tranzystor ten pod procesorem jest chyba źle wlutowany.

Portret użytkownika Krystian

Witam mam problem nie działa

Witam mam problem nie działa mi ds18b20 w tym termometrze na odległości 20m .Przewód 3x1mm. proszę o pomoc.

Portret użytkownika demsy1

Przy takiej odległości

Przy takiej odległości spróbuj dać skrętkę.

Portret użytkownika emeryt

Temperatura ujemna.

Co trzeba zmienić w kodzie by przy temperaturze -9,9 znak ? był wyświetlany na pierwszej cyfrze ? bez zmian w układzie.

Portret użytkownika mirley

Re: Terometr

w case 0 trzeba zmienić:

    Case 0:
      if Minus = 1 Then W(3).3 = not Minus
      Portb = W(3)
      Reset Portd.6

-

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.

Portret użytkownika Marcin 4

Witam! Czy moglbym prosić o

Witam! Czy moglbym prosić o skompilowany wsad do procka, który włącza alarm po przekroczeniu 85* i wyłącza, jeśli zejdzie do 70* ? Niestety nie mam Bascoma i nie potrafie się nim posługiwać. Z góry dziękuję za pomoc. Pozdrawiam

Portret użytkownika munenori

Attiny 2313A-problem

Witam
Czy ten wsad pójdzie na procku Attiny 2313A?
Udało mi się kupić tylko taki procek,funkcjonalnie są takie same,ale po zaprogramowaniu migają mi tylko ostatnie dwie cyfry.Można to w jakiś sposób skompilować pod Attiny 2313A
Pozdrawiam

Portret użytkownika mirley

Re: Tiny

Pójdzie na tiny2313A? Sam takich używam. Sprawdź sobie czy fusebity dobrze ustawiłeś

-

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.

Portret użytkownika munenori

Witam Skompilowałem na nowo

Witam
Skompilowałem na nowo kod pod Attiny 2313A,w starej wersji Bascoma był tylko Attiny 2313,teraz jest2313A.
Miernik działa bez zarzutu.
Dzięki serdeczne
Pozdrawiam

Portret użytkownika ulade

Mam problem

mam problem z tym termometrem.Całość kupiłem jak gotowy kit na stronie avt z zaprogramowanym mikrokontroler.Problem dotyczy wyswietlacza który mryga po minucie tzn jak jest podczepiony czujnik wskazuje prawidłowa temperaturu i po minucie na wyswietlaczu mrygaja 2 zera i to sam sie dzieje gdy odczepie czujnik.Zauważyłem też ze jak wyswietlacz mryga odłanczam zasilanie i gdy zaraz włacze zasilanie wyswietlacz nadal mryga musze odczekac kilka chwil żeby przestał mrygać

Portret użytkownika EDC

Odp. Mam problem

Czy układ się nie grzeje? Może masz zbyt wysokie napięcie zasilania. Sprawdż na procesorze max 5V. Może np. zła masa do regulatora napięcia. Po odłączeniu zasilania może pracuje dłużej bo w Twoim zasilaczu jest kondensator. Na próbę zresetowac "od strzała" możesz zwierając pierwszy pin procesora przy kropce do masy.

-

BARTek
Moja strona

Portret użytkownika mirley

Re: Zasilanie

A czym to dokładnie zasilasz? Masz stabilizator na napięcie 5V

-

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.

Portret użytkownika ulade

zasilane jest z bateri 9 v

zasilane jest z bateri 9 v

Portret użytkownika EDC

Odp. Minitermometr

Kup nowa baterię :D To tak pół żartem pół serio.
Miernik złap. Nie masz? Pożycz albo kup - najtansze za 20zł :D przyda sie!
Zmierz baterię (w mierniku masz taką samą) a potem zmierz 5V na procesorze (najlepiej przed i za stabilizatorem).
W mierniku jest też amperomierz. Zmierzysz ile całość bierze prądu i się dowiesz na ile wystarczy baterii.

-

BARTek
Moja strona

Portret użytkownika roboel

Termostat-Pomocy

witam
a jak w tym odwrócić działanie termostatu

Portret użytkownika mirley

Re: termostat

Zamien miejscami Reset z Set we fragmencie:

  If T > H Then Set Portd.3
  If T < L Then Reset Portd.3

-

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.

Portret użytkownika damianq

LM35 zamiast DS.

witam panowie idzie jakoś przerobić kod aby układ działał na LM35?

Portret użytkownika mirley

Re: termometr

Nie da się na LM35, LM35 to czujnik analogowy i trzeba ADC i prawdopodobnie jakiś wzmacniacz operacyjny jeszcze aby odczytać z niego temperaturę za pomocą uC.

-

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.

Portret użytkownika  ulade

ma ktos moze pomysł

ma ktos moze pomysł dlaczego po właczeniu układu na wyswietlaczu mryga dosc szybko 0 wszystko posprawdzałem i nie ma zwarc

Portret użytkownika  ulade

ma ktos moze pomysł

ma ktos moze pomysł dlaczego po właczeniu układu na wyswietlaczu dosc szybko mryga 0 wszystko sprawdziłem i nie ma zwarc

Portret użytkownika Kamcio

minitermometr

Witam, fajny projekcik, niestety nawet w tak prostym układzie mam problem. Pierwsza cyfra w wyświetlaczu świeci duuuuużo słabiej od pozostałych cyfr (wyświetlacz dobry - sprawdzony w innym układzie), tranzystor sprawny, podmieniany. Od razu piszę, że rezystory w bazach zastosowałem 4,2k ze względu na to że układ ma pracować z baterii jak najdłużej. Co może być przyczyną? Wlutowałem go jak na fotografii wyżej - czy to aby dobrze? Pozdrawiam.

Portret użytkownika Kamcio

Witam ponownie jednak

Witam ponownie jednak tranzystor jest dobrze wlutowany. Układ już działa poprawnie pozostało tylko dodanie minusa. Pozdrawiam.