Termometr Uniwersalny


9.28571
Ocena: None Średnia: 9.3 (14 głosujących)

Termometr ten pracuje w zakresie temperatur od -50.0 do +99.9 stopni lub w drugiej wersji oprogramowania aż do +125 stopni. Układ został zaprojektowany do mierzenia temperatury w akwarium ale z powodzeniem można dla niego znaleźć wiele innych zastosowań. Na płytce znajduje się miejsce na dwa przyciski oraz dodatkowe złącze ogólnego przeznaczenia. 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 DS18B20 i mikrokontroler AT89C2051 co znacznie uprościło jego konstrukcję i zmniejszyło wymiary. W układzie można też bez większego trudu zastosować mikrokontroler ATTiny2313, wymaga to tylko wprowadzenia kilku prostych modyfikacji.

Działanie:


Schemat termometru przedstawia poniższy rysunek:

Sercem urządzenia jest mikrokontroler U2 (AT89C2051) wraz z rezonatorem kwarcowym X1 (12MHz) i dwoma kondensatorami C4 (33pF) i C5 (33pF). Kondensator C3 (1uF) resetuje procesor po włączeniu napięcia zasilającego, a C1 (220uF) filtruje to napięcie. Do złącza zas podłączamy napięcie zasilające o wartości 5V. Rezystory R9 - R16 (330R) ograniczają prąd wyświetlaczy. Tranzystory T1 - T3 (BC557B) wraz z rezystorami R1 - R6 (3,3k) sterują anodami wyświetlaczy.

Budowa:


Termometr można zbudować z wykorzystaniem dostępnej tutaj płytki drukowanej. Wersja płytki w odbiciu lustrzanym dostępna jest tutaj. Montaż elementów można dokonać w dowolnej kolejności, najlepiej od najmniejszych do największych. Pod wyświetlacz dobrze jest wlutować kawałek podstawki DIP40, natomiast pod mikrokontroler podsatwka jest bezwzględnie konieczna. Od strony druku należy wlutować rezystor 4,7k podciągający magistralę 1-Wire (nóźka 9 układu U2) do plusa zasilania. Złącze GP1 w wersji podstawowej służy do podłączenia diody sygnalizującej ujemną temperaturę (katodą do portu procesora, anodą do VCC) gdyby miało być wykorzystywane w inny sposób należy usunąć z kodu programu linijkę: P3.7 = Not Minus. Przód obudowy można z powodzeniem wykonać z kawałka laminatu. Płytkę termometru mocujemy do panelu przedniego za pomocą dwóch przylutowanych do niego śrub. Pomocą przy konstrukcji może okazać się schemat montażowy dostępny tutaj.

Jeżeli w układzie będzie zastosowany mikrokontroler ATTiny2313 zamiast AT89C2051, nie należy montować kondensatora C3, a kondensatory C4 i C5 powinny mieć wartość 22pF.

Wykaz Elementów:

8x 330R
6x 3,3k

2x 33pF
1x 1uF
1x 220uF

1x Rezonator Kwarcowy 12MHz
1x AT89C2051 (lub ATTiny2313)
3x BC557B
1x DS18B20
1x AT5636BG-B Pb-free (TOT-5362BG-B) Wyświetlacz potrójny

Programowanie:


Oprogramowanie do termometru zostało napisane w wersji demo programu BASCOM 8051 firmy MCS Electronics (http://www.mcselec.com/). Program w całości przedstawiony jest poniżej:

'****************************
           'Konfiguracja
'****************************
$crystal = 12000000                                           '12MHz
$regfile = "89C2051.DAT"
 
Config 1wire = P3.5
 
Config Timer0 = Timer , Gate = Internal , Mode = 2
On Timer0 Przerwanie0
Load Timer0 , 250
Enable Timer0
Start Timer0
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Tempa As Word
Dim Mux As Byte
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
'****************************
      'Petla glowna
'****************************
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                             'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Incr Co4ms
 If Co4ms = 16 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     'ew flaga obslugi przyciskow
     Incr Co1s
     If Co1s = 7 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt
 
       Disable Interrupts
       1wreset
 
       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
       Else
        If Err = 0 Then
 
          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
 
          Minus = Msb.7
 
          Tempa = Msb * 256
          Tempa = Tempa + Lsb
 
 
          If Minus = 1 Then
            Tempa = Not Tempa
            Tempa = Tempa + 1
          End If
 
          Tempa = Tempa * 10                                  'temperatura *10
          Tempa = Tempa / 16
 
          If Ur = 0 Then Ur = 1
 
        Else
          Tempa = 10000                                       'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
 
Return
'****************************
      'Inne Etykiety
'****************************
Przelicz:
 If Wysw < 1000 Then
   Wysw1 = Wysw Mod 10
   Wysw = Wysw / 10
   Wysw10 = Wysw Mod 10
   Wysw = Wysw / 10
   Wysw100 = Wysw Mod 10
 
   If Wysw100 = 0 Then Wysw100 = 10                           'wygaszenie zera wiodcego
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
 
 Else
   Wysw1 = 175                                                'r
   Wysw10 = 175                                               'r
   Wysw100 = 134                                              'E
 End If
 
Return
 
Wyswietl:
  Incr Mux
  If Mux = 3 Then Mux = 0
  P3.7 = Not Minus
 
  Select Case Mux
    Case 0:
     Set P3.0
      P1 = Wysw100
     Reset P3.2
 
    Case 1:
     Set P3.2
      P1 = Wysw10
     Reset P3.1
 
    Case 2:
     Set P3.1
     P1 = Wysw1
     Reset P3.0
  End Select
Return
 
                         'Tabele do wyswietlania na wyswietlaczu
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak:    0     1     2     3     4     5     6     7     8     9     pusty
 
Tabela2:
    Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak:    0.    1.  2.    3.   4.   5.  6.   7.   8.  9.    pusty

Ustawienia Fusebitów dla mikrokontrolera ATTiny2313:

Zdjęcia Projektu:

ZałącznikWielkość
Schemat87.5 KB
Płytka11.03 KB
Płytka (odbicie lustrzane)11.01 KB
Płytka (6 na stronie)61.72 KB
Montowanie15.44 KB
Kod źródłowy (wersja podstawowa)4.46 KB
Program po kompilacji (BIN) (wersja podstawowa)1.03 KB
Program po kompilacji (HEX) (wersja podstawowa)2.96 KB
Kod źródłowy (obsługuje temperatury powyżej 100 stopni)4.91 KB
Kod Źrodłowy (wersja z termostatem) (jeszcze nie testowana)7.57 KB
Program po kompilacji (wersja z termostatem) (BIN)1.72 KB
Program po kompilacji (wersja z termostatem) (HEX)4.85 KB
Kod Źródłowy (dla ATTiny2313, Bascom AVR)4.43 KB
Kod Źrodłowy (wersja z termostatem, dla ATTiny2313, Bascom AVR) (jeszcze nie testowana)7.28 KB
Program po kompilacji (BIN) (dla ATTiny2313, Bascom AVR)1.59 KB
Program po kompilacji (HEX) (dla ATTiny2313, Bascom AVR)4.49 KB
Kod źródłowy (dla ATMega8, Bascom AVR)4.6 KB
Nadruk na obudowę64.22 KB



Portret użytkownika arek1996

Witam. Mirku chciałbym

Witam. Mirku chciałbym zamienić wyświetlacz LCD na lampy nixie. Musiałbym zastosować 74141. Z kodu BCD steruje lampami. Ale co między niego a procesor musiałbym kod 7-segmentowy zamienić na BCD. Są układy dekodujące z BCD na 7-seg. Są odwrotnie działające? Dobrze myślę?

Portret użytkownika EDC

7 SEG_LED na NIXIE

Chyba udało mi się nareszcie rozszyfrować Twoją wypowiedź :D
Na to co chciałeś zrobić jest nawet określenie : "Przez Moskwę na Berlin"
Jeśli możesz sterować czymś w kodzie BCD to po prostu zostaną Ci jeszcze cztery wolne piny procesora bo wystarczy że odpowiednio "uformujesz" Tabele która ustawia port. Zamiast ośmioma, będziesz sterował czterema.
Otwórz PDF`a do tego układu SN74141 i masz w niej tabelke jaki stan powinien się pokazać na danym wyprowadzeniu dla danej wyświetlanej cyfry. Łączysz jak Ci wygodnie i potem takie wartości wpisujesz do tabelki żeby ustawić pożądane piny.

Miłego majsterkowania ;)

-

BARTek
Moja strona

Portret użytkownika Kondziu gosc

Wracając do tematu dużego

Wracając do tematu dużego wyświetlacza prosiłbym o sprawdzenie poprawności schematu i wprowadzenie ewentualnych poprawek. Chciałbym dodać, iż zamiast tych wyświetlaczy siedmiosegmentowych wykonam poszczególne segmenty z taśmy ledowej.
http://fotozrzut.pl/zdjecia/3b7564a179.png

Portret użytkownika EDC

Odp. Duży wyświetlacz

W kwestii wielkości obrazka sie nie wypowiem bo oberwie Ci się pewnie od kogos innego.
BC557 - 0.1A
BC327 - 0.8A

-

BARTek
Moja strona

Portret użytkownika Kondziu gość

Bardzo przepraszam za

Bardzo przepraszam za wielkość, ale jak rysowałem projekt w eaglu to robiąc konwersję do jpg mniejszego rozmiaru wszystko wychodziło rozmazane. I tak zrobiłem błąd z tymi tranzystorami a chciałem się spytać czy reszta jest ok. ma to szansę działać?

Portret użytkownika EDC

Duży wyświetlacz.

Przecież możesz sobie prototyp zrobić na jakiejkolwiek płytce albo pająku.
Zamiast tych świetlnych pasków podłaczyć jakieś diody, albo jak masz małe
wyświetlacze, tylko przez 1kOhm (tak jakbyś diode w samochodzie pod 12V montował)

Co do Eagle to on może bezpośrednio do PDF drukować. Jeśli nie, to można
zainstalować wirtualną drukarkę PDF Creator. Pdf Reader ma za to opcję
"Edycja - Wykonaj zdjęcie". Zaznaczasz interesujący Cię kawałek schematu
i jest on kopiowany do schowka. W Paint możesz ten kawałek Ctrl + V (lub myszką
wklej) i zapisać jako GIF zmieniając na interesujący Cię rozmiar w pikselach
(przełączasz kropke z procent na piksele).
Sam widziałem te rozmazanie w Eagle i DesignSpark - PDF wychodzi ostry ;)

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika Kondziu gość

Duży wyświetlacz

Jeszcze raz przepraszam następnym razem się poprawię, ale robiłem to po nocach a już nie myślę normalnie. A wyświetlacz robię z taśmy ledowej, bo musi być duży i widoczny z daleka a z taśmy ledowej łatwiej go zrobić tak myślę . Czy te rezystory to tych tranzystorów BC327 zamiast BC557 są dobrze dobrane czy należałoby dać inne?

Portret użytkownika mirley

Re: Wysw

Tranzystory Q2-Q4 będą cały czas włączone... dla 5V na wyjściu procka i tak tranzystor będzie włączony bo baza będzie miała odpowiednią polaryzację w sytuacji gdy na źródłach jest 12V. Trzeba dać 3 tranzystory NPN sterowane z procka, które dopiero zewrą do masy (przez rezystory) bazy Q2-Q4, lub pozostawią je wiszace i wtedy zadziałają pullupy R2 R4 i R6 wyłączając tranzystory

-

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 EDC

Odp. Wysw

I to są "święte słowa" :D Tak to było zrobione w tym wyświetlaczu kościelnym, ale jakoś mi do głowy nie przyszło żeby o tym napisać.

-

BARTek
Moja strona

Portret użytkownika kondziu gość

Wyświetlacz

Panowie a co myślicie aby zamiast tych tranzystorów dać układ UDN2981A ?

Portret użytkownika mirley

Re; UDN

Układ ten powinien załatwić sprawę..... będzie mozna zasilać wyzszym napięciem bez problemu.... trzeba tylko pamiętac o negacji w programie, ale o tym była juz mowa

-

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 Doctore.

-

Kiedy będzie dostępny program z obsługą przycisków na attiny?

Portret użytkownika Laikk

Pomoc z wyświetlaczem

Jak zaprogramowac wświetlacz ? Jestem laikiem jesli chodzi o elektronike , dopiero się ucze. Wyzej przeczytalem ze za pomocą mikrokontrolera , ale i tak nic mi to nie mowi.
I dodatkowo mam pytanie czy wyswietlacz potrójny dokladnie ten - AT5636BG-B - jest konieczny , czy moze byc inny?

Bardzo dziekuje za każdą pomoc

Portret użytkownika EDC

Odp. Pomoc z wyświetlaczem

Wyświetlacza się nie programuje. Wyświetlacz taki jak w tym temacie to poukładane w cyfry diody LED. Zapalenie określonych na przykład dwóch spowoduje że zobaczysz cyfrę jeden. Ale to tylko dwie diody zapalone obok siebie. Do zapalania diod można użyć właśnie mikrokontrolera. Mikrokontroler znowu to taki układ scalony który można zaprogramować tak by robił to co chcesz. Program pisze się w komputerze ale potem potrzebujesz jeszcze urządzenia które przeniesie program z komputera do mikrokontrolera.
Sam mikrokontroler bez programu nic nie potrafi. Musisz go nauczyć, ale musisz mieć wiedzę i programator :)
Musisz trochę poczytać jeszcze.

-

BARTek
Moja strona

Portret użytkownika Kamcio

Witam, zbudowałem termometr

Witam, zbudowałem termometr wg. ww. schematu, wgrałem hex standardowy do attiny2313, dodałem led jako minus. Niestety minus się zapala dla temperatur dodatnich, a przy ujemnych gaśnie. Jeśli ktoś ma jakieś pomysły chętnie poczytam. Pozdrawiam.

Portret użytkownika Kamcio

Witam, zrobiłem układ wg.

Witam, zrobiłem układ wg. schematu i zgrałem hex standardowy bez termostatu dla attiny2313, dodałem led jako minus, tylko zamiast zapalać się przy ujemnych temperaturach zapala się przy dodatnich, a przy ujemnych gaśnie. Czy ktoś ma jakieś pomysły co z tym zrobić? Pozdrawiam.

Portret użytkownika Kamcio

Witam, zrobiłem układ wg.

Witam, zrobiłem układ wg. schematu i zgrałem hex standardowy bez termostatu dla attiny2313, dodałem led jako minus, tylko zamiast zapalać się przy ujemnych temperaturach zapala się przy dodatnich, a przy ujemnych gaśnie. Czy ktoś ma jakieś pomysły co z tym zrobić? Pozdrawiam.

Portret użytkownika EDC

Odp. Termometr

Tak. Nie całe złącze GP służy dla tej diody. W tekście pisze że dioda ma być z jednej strony podłączona do Plusa, a w złączu jest Masa. Musisz podłączyć diodę do 5V a jej sygnał brać z jednego z wyjść GP. To pomoże bez zmian w programie.

Miłego dnia

-

BARTek
Moja strona

Portret użytkownika Kamcio

Witam ponownie. Wieeeeelkie

Witam ponownie. Wieeeeelkie dzięki za pomoc. No faktycznie teraz działa, kłania się czytanie ze zrozumieniem:) Termometr działa już z 2 paluszków AA. Fajny i prosty projekt, może kiedy spróbuje wersje smd z 2 czujkami. A może ktoś ma w planach zrobić wersję na lampach nixie? Miłego wieczoru. Pozdrawiam.

Portret użytkownika Rico

proble z wyświetlaczem

witam mam problem z termometrem a mianowicie po zmontowaniu wszystkich elementów nie działa wyświetlacz nawet się nie podświetla
czo może być nie tak ??

z góry dzięki za odpowiedź

Portret użytkownika mirley

Re: Termometr

Sprawdź opis tutaj, http://mirley.firlej.org/budowa_ukladow_elektronicznych a szczególnie punkt 7 dotyczący wyswietlacza LED

-

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 Rico

sprawdzone żaden z segmentów

sprawdzone
żaden z segmentów wyświetlacza się nie zaświecił ;/

Portret użytkownika mirley

Re: Termometr

Możliwe problemy widzę takie:
1) masz wyswietlacz ze wspólną katodą a nie anodą i nic nie będzie świeciło
2) wyświetlacz ma inne wyprowadzenia i poprostu nie pasują do płytki
3) tranzystory są uszkodzone albo nie takie jak trzeba (np NPN zamiast PNP)

Proponuje sprawdzić sam wyświetlacz. Potrzebny będzie rezystor np 470R i zasilacz 5V. Musisz znaleźć tez model swojego wyświetlacza aby poznać jego kartę katalogową i sprawdzić wyprowadzenia.... Jak napiszesz ten model wyświetlacza to będzie można więcej pomóc

-

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 Rico

jeśli chodzi wyświetlacz to

jeśli chodzi wyświetlacz to posiadam AT-05636BG-B
sprawdzę również te tranzystory

Portret użytkownika marekszy

wyświetlacz

wyświetlacz masz właściwy (tzn.wyprowadzenia są zgodne).Zobacz czy na pewno masz +5V na tranzystorach i wtedy podaj przez opornik 150-330 ohm minus na nóżki segmentów wyświetlacza przy wyjętym procku (segmenty powinny zaświecić).Jakie wstawiłeś tranzystory?Zobacz czy nie wlutowałeś wyświetlacza do góry nogami.Płytka orginalna ze wzorem Mirley-a czy też własna konstrukcja.

Portret użytkownika Rico

jeżeli chodzi o płytkę to

jeżeli chodzi o płytkę to oryginał, tranzystory takie same jak u autora
a mam pytanie przy 6V wyświetlacz mógłby się uszkodzić ??

Portret użytkownika marekszy

wyświetacz

nie powinien,pod warunkiem ,że sprawdzałeś przez opornik,w układzie na pewno nie.
A,jeszcze jedno,podaj na stałe + na nóżkę wyświetlacza 8,9 lub 12 bo jak nie wysterujesz tranzystora to nic tam nie będzie,a minus tak jak wcześniej pisałem.

Portret użytkownika marny_kłopot

Wyświetla mi jeden zsumowany znak na 3 segmentach

Witam !
Mam taki kłopot : po złożeniu tego termometru wyświetla mi 3 zera i dwa przecinki przy wsadzonym DS18 a po jego wyjęciu 3x E (tyle że widać że na tle E jest jeszcze małe r ) . Co takiego jest źle i na co zwrócić uwagę by finalnie cieszyć się termometrem jak należy? 3 segmenty są 3 calowe więc musiałem samodzielnie połączyć A-G i DP by sterować anodami (tak jak na schemacie). Pozdrawiam.

Portret użytkownika EDC

Odp. Termometr

Wydaje mi się że możesz mieć nie wyłączony bit CKDIV8 w mikrokontrolerze. To powoduje że pracuje on osiem razy wolniej.
Wnioskuję dlatego że jak nie zgadza się prędkość to najczęściej wynikiem temperatury z czujnikami 1Wire jest -1 lub zero. Do tego "duchy" na wyświetlaczach też pewnie spowodowane zbyt wolnym multipleksowaniem.
Zobacz ten krótki artykuł jak to sprawdzić i zmienić. Tak często się to powtarzało że zrobiłem o tym podstronę Link
Na pierwszym obrazku już jest ATtiny2313 ;)

-

BARTek
Moja strona

Portret użytkownika marny_kłopot

Dzielenie przez 8 mam wyłączone

Do tego mam podłączone 3calowe wyświetlacze. Napięcie wychodzi 12v . A-g przez rezystory 100 OHm , na anody 3x D772 (pnp) ale nie ma r2 r4 r6 , na bazy rezystory 8k2. Wyświetla jakby był jeden segment. Podejrzewam że powinienem dać mosfety P-ch zamiast nich. Zmodyfikowałem soft i wyszło że a-g podłączyłem dobrze. Jakieś sugestie ?

Portret użytkownika EDC

Odp. Termometr

Widziałeś te rozwiązanie? http://mirley.firlej.org/timer_serwisowy

-

BARTek
Moja strona

Portret użytkownika marny_kłopot

Zaraz zerknę. Co zmieniłem :

Zaraz zerknę.
Co zmieniłem : oporniki ze 100 OHm zmieniłem na 330 OHm , B772 bazy mają sterowaną z tranzystorów npn a nie jak wcześniej tylko przez rezystor.
Dodatkowo w kodzie zmieniłem w Case Mux na set PortD.5 , Reset PortD.4 , Reset PortD.3 (podobnie zmodyfikowałem Case 1 i Case2).
Niestety nadal się borykam z brakiem odczytu z DSa.

Portret użytkownika marny_kłopot

Nowy ds i 0,0 :(

Nowy ds i 0,0 :(

Portret użytkownika marny_kłopot

Dolutowałem 4k7 między DQ DSa

Dolutowałem 4k7 między DQ DSa a Vcc i... temperatura się pokazała. Ten rezystor MUSI BYĆ.

Portret użytkownika EDC

Odp. Termometr

No i gitara. Nie pomyślał bym że go nie ma :P Na schemacie go nie widać ale w tekście jest żeby go przylutować od spodu.

-

BARTek
Moja strona

Portret użytkownika marny_kłopot

No i teraz mam "pływanie" pomiaru

Objawia się to tym że temperatura przeskakuje 2-3 stopnie celcjusza co czyni pomiar mało dokładny. No i zawyża. Mam kupione 5 DSów i na każdym jest tak samo. Miał tak ktoś ? Co należy zrobić ?

Portret użytkownika marny_kłopot

Jeszcze jedno pytanie dotyczy

Jeszcze jedno pytanie dotyczy sterowania przecinkiem. Palą mi się w sumie wszystkie a powinien tylko przy środkowej. Gdzie jest "ukryte" sterowanie tym przecinkiem ? Można nim sterować PortD.7 niezależnie przy Case Mux ?

Portret użytkownika marny_kłopot

Wszystko już gra :)

Po prostu zamieniłem 2 i 3 cyfrę miejscami i już się zgadza. Oczywiście poza zawyżonym pomiarem.Kod do mojej wersji

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 12000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B10111111 : Portd = &B11111111
 
Config 1wire = Pind.6
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
 
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
'****************************
      'Petla glowna
'****************************
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
 If Co4ms > 2 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms > 24 Then
     Co100ms = 0
     '*************************************** co 100 ms
     'ew flaga obslugi przyciskow
     Incr Co1s
     If Co1s > 6 Then
       Co1s = 0
       '*************************************** co 1s
       Pomiar_odczyt = Not Pomiar_odczyt
 
       Disable Interrupts
       1wreset
 
       If Pomiar_odczyt = 1 Then
        1wwrite &HCC
        1wwrite &H44
 
       Else
        If Err = 0 Then
 
          1wwrite &HCC
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
           1wreset
 
 
 
          Tempa = Msb * 256
          Tempa = Tempa + Lsb
 
 
 
          Tempa = Tempa * 10                                'temperatura *10
          Tempa = Tempa / 16
 
          If Ur = 0 Then Ur = 1
 
        Else
          Tempa = 10000                                     'Er wyswietli wyswietlacz potem
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
 
Return
'****************************
      'Inne Etykiety
'****************************
Przelicz:
 If Wysw < 1000 Then
   Wysw_pomoc = Wysw Mod 10
   Wysw1 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw10 = Wysw_pomoc
   Wysw = Wysw / 10
   Wysw_pomoc = Wysw Mod 10
   Wysw100 = Wysw_pomoc
 
   If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodšcego
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela1)
   Wysw100 = Lookup(wysw100 , Tabela)
 
 Else
   Wysw1 = 175                                              'r
   Wysw10 = 175                                             'r
   Wysw100 = 134                                            'E
 End If
 
Return
 
 
Wyswietl:
 
  Incr Mux
  If Mux = 3 Then Mux = 0
 
 
  Select Case Mux
    Case 0:
     Set Portd.5
     Reset Portd.4
     Reset Portd.3
      Portb = Wysw100
 
    Case 1:
     Set Portd.3
     Reset Portd.4
     Reset Portd.5
      Portb = Wysw1
 
    Case 2:
     Set Portd.4
     Reset Portd.5
     Reset Portd.3
     Portb = Wysw10
 
  End Select
 
Return
 
'****************************
 
'****************************
 
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela1:
    Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 127
'znak:    0     1     2     3     4     5     6     7     8     9     pusty
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
'znak:    0     1     2     3     4     5     6     7     8     9     pusty

Schemat ma wprowadzone zmiany : sterowanie anodami - najpierw tranzystor npn który steruje PNP (oporniki to tylko między tranzystorami 8k2).
Nie udało mi się sterować przecinkiem to odłączyłem z pierwszej i ostatniej cyfry. Teraz co by się nie działo to jest od 0,0 do 99,9 .
Jest już dobrze :)

Teraz mam pytanie : jak odczytywać 4 DSy ? No jeden jest :) I teraz tak by pokazywało na dwóch pinach (chyba zrezygnuję ze sterowania DP - skoro marnie idzie sterowanie) który jest w danej chwili odczytywany. Czyli po kolei za pomocą w prawdzie jednego dodatkowego układu - dekodera z BIN na 1z8. No i by nie pokazywało na nich "Err" jeśli by ich nie było tylko wyświetlało tylko zmierzone wartości z "obecnych" czujników. Taki termometr chcę wykorzystać w pomieszczeniu gdzie byłby takie wyświetlacz umiejscowiony a w 4 rogach/filarach czujniki.
Tak myślę jak odchudzić ten kod bo zajęte już 75% i mój pomysł z 4 czujnikami mógłby się nie zmieścić.

Portret użytkownika EDC

Odp. Termometr

Naciśnij tu u góry na "Odpowiedzi i zmiany" to wejdziesz na liste wszystkich tematów. Tych termometrow już trochę było i szkoda się powtarzać. Coś na pewno doczytasz. Tutaj pisałem taki czterokanałowy. Jest tez na mojej stronie w "Kody różne". Kod tam jest króciutki i prosty.

-

BARTek
Moja strona

Portret użytkownika marny_kłopot

No u Ciebie na stronie jest.

No u Ciebie na stronie jest. Warto zajrzeć.

Portret użytkownika misiekzpulaw

Syrena piezo

Witam
Budując wersję z termostatem gdzie należy podłączyć jakiś przekaźnik lub syrenę piezo?Chciałbym aby po przekroczeniu ustawionej temperatury włączała sie syrena.
Dziękuje

Portret użytkownika mirley

Re: Termostat

Wyjściem termostatu jest złącze GP1, stan niski to włączony odbiornik a stan wysoki jest w spoczynku. Aby dołączyć przekaźnik (lub cokolwiek innego) nalezy dodac tranzystor PNP (BC558) z rezystorem 3,3k na bazie, emiter do +5V a między jego kolektrem a masą przekaźnik na 5V. Nalezy pamietać o diodzie zabezpieczającej do przekaźnika

-

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 misiekzpulaw

Termostat

Witam
Dzięki za odpowiedź.Mam jeszcze jedno pytanie.Zbudowałem wersję z termostatem.Nie wiem czy jest to zamierzone czy nie ale po odłączeniu zasilania resetuje się nastawa termostatu.Oryginalnie z tego co zauważyłem była ustawiona na 30 stopni oraz histereza 2.Po podłączeniu i ustawieniu temperatury wszystko działa jednak po wyłączeniu zasilania nastawiona temperatura (ustawiona prze ze mnie na 65 stopni) wraca na 30.Jest jakaś możliwość aby procek pamiętał to czy po prostu zmienić temperaturę w kodzie źródłowym?

Portret użytkownika mirley

Re: Eeprom

Da się zapisac temperaturę, nie wiem jednak czy zmieści sie to w procku po skompilowaniu..

Trzeba użyć Writeeprom aby zapisac temperaturę a na początku programu można ją przeczytać za pomoca readeeprom. poczytaj w helpie bascoma aby poznać składnię. Pamiętaj aby program nie zapisywał ciągle zmian do epromu bo ma on ograniczoną żywotność. Trzeba zrobić zapisywanie np po kilku sekundach od braku zmian ustawień, co pozwoli na dłuższą pracę układu.

-

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 gosc1111111111

Zasilanie

Mam pytanko - jak zasilamy taki układ ?
Pozdrawiam

Portret użytkownika mirley

Re: Termometr

Trzeba wykonac dedykowany zasilacz np z transformatorem, mostkiem i stabilizatorem.... patrz do projektu minizasilacze

Można tez kupić zasilacz wtyczkowy w internecie o napięciu wyjściowym stabilizowanym 5V, koszt to ok 6-20zł zależnie od jakości. Jak układ ma być blisko kompa to można podłączyć pod 5V z zasilacza komputerowego, lub poprostu do USB

-

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 gosc_1234554321

A jest jeszcze możliwość

A jest jeszcze możliwość zasioania z baterii 4,5 V
Pozdrawiam

Portret użytkownika mirley

Re; Termometr

Bez kłopotu powinno działać na baterii o ile będzie miała faktycznie 4.5V, jeśli napięcie zacznie spadac to już nie można być taki pewien. Ponadto wyświetlacz LED pobiera dość dużo prądu więc pewnie układ nie bedzie działał długo na baterii

-

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 DonPatus

Problem z dokładnością

Stworzyłem dwa identyczne termometry, oba zaprogramowałem w tym samym czasie tym samym programem dla attiny2313. Jeden termometr wyświetla temperaturę z dokładnością do 0,5stopnia a drugi do 0,1stopnia. Proszę o pomoc jak przeprogramować mikrokontroler aby czujnik zawsze wysyłał temperaturę z dokładnością do 0,1stopnia

Portret użytkownika mirley

Re: Termometr

Zamień czujniki miejscami i zobacz czy jest ten sam efekt w drugim układzie - nie ma tu po co programować procesor bo kod zawsze powinien prezentować temperature co do 0.1 stopnia. Czujnik może być skonfigurowany na mniejsza dokładność jednak przy fabrycznym czujniku zawsze powinno być dobrze...

-

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.