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 danio

przyciski

po co te przyciski S1, S2 na schemacie??

Portret użytkownika mirley

przyciski

S1 i S2 są potrzebne jeśli wykorzystujemy opisywaną płytkę w roli termostatu. Konieczne jest wtedy ustawienie temperatury i ewentualnie histerezy. Gdy chcemy zbudawać zwykły termometr to przyciski te są na nic nie potrzebne :)

-

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

dziwne znaki

dlaczego wyswietlaja mi sie dziwne znaki na wyswietlaczach ( H, c l )??
zmieniłem czujnik i mikrokontroler i nadal to samo, wyświetlacze są dobrze podłączone.

Portret użytkownika mirley

dziwne znaki

Na początek wyjmij procesor z podstawki. Sprawdź czy wszystkie segmenty wyświetlacza działają, zwierając w podstawce nóżki P3.0, P3.1 i P3.2 do masy a następnie wszyskie piny portu P1 do masy. Jeżeli nie zaświecą się po kolei wszystkie segmenty na wszystkich wyświetlaczach to znaczy że nie ma połączenia z mikrokontrolerem albo wyświetlacz jest uszkodzony. Jedyny znak który może pojawić się opróch wskazywanej temperatury to napis Err gdy brak jest czujnika temperatury. Termometr ten działa u mnie już rok. Mikrokontroler zaprogramowany jest dokładnie tym samym kodem co na stronie. W razie dalszych problemów proszę pisać :)

-

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

Dzięki za info. Problem

Dzięki za info.

Problem rozwiązany.

Portret użytkownika gosc

Pomoc

Czy ktoś mógłby mi w prosty sposób wyjasnić w jaki sposób zaprogramować/ wprowadzić w/w program?
Z góry dziękuję.

Portret użytkownika mirley

Pomoc

Żeby zaprogramować mikrokontroler AT89C2051 lub AT89C4051 wymagany jest programator na przykład [url=http://www.sklep.avt.com.pl/p/pl/48061/programator+procesorów+89cx051.html]http://www.sklep.avt.com.pl/p/pl/48061/programator+procesorów+89cx051.html[/url]. Jeżeli nie chcesz programować więcej mikrokontrolerów w przyszłości to prostszym rozwiązaniem jest znalezienie kogoś znajomego posiadającego programator do AT89CX051. Można także zastosować mikrokontroler AVR ATTINY2313 co ułatwi programowanie ale będzie wymagało przeróbek programu. Napisz co chcesz zrobić co coś się wymyśli :)

Pozdrawiam

-

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

Mam pytanie odnośnie,

Mam pytanie odnośnie, temperatur ujemnych? jak wyswietlany minus ?

Portret użytkownika gosc PK

problem z wyświetlaniem temperatury powyżej 60*C

Witam
Zmontowałem kiedyś podobne urządzenie tylko na dwóch wyświetlanych cyfrach z DS18B20. Napisałem też soft (bascom) ale zauważyłem, że przy wyższych temperaturach (>56*C) zaczyna wyświetlać głupoty, przerobiłem Twój program żeby sprawdzić jaki będzie efekt i troszkę lepiej bo 60*C wyświetlało ale wyżej już migało na przemian Er -> 62 -> Er itd. Nie wiem co jest grane. Dodam,że ds podłączony przez dwa przewody o dł. ok. 4-5m. Co może być przyczyną?
Z góry dziękuję za pomoc. Pozdrawiam
PK.

Portret użytkownika mirley

Ujemne temperatury i problem 60*C

Odnosnie ujemnych temperatur to jest to sygnalizowane stanem niskim na wyprowadzeniu P3.7 (można tam dołączyć diodę z rezystorem sygnalizującą minus). Jest to dodatkowa funkcja bo ja potrzebowałem temperatur dodatnich. Jest to opisane w dziale "Budowa"

Odnośnie problemu z temperaturą 60*C to należy przede wszystkim sprawdzić czy DS18B20 podłączony na krotkich przewodach (trojżyłowo) działa poprawnie, testowalem układ z czujnikiem w zamrażarce ale nie pamiętam czy na wysokie temperatury też. Napewno zawsze stosuję połączenie trojprzewodowe. Proszę napisać o wynikach testow dla trzech przewodow i krotkiego kabla, to prawie napewno problem z DS18B20. Tak na marginesie od strony druku ma byc wlutowany rezystor 4,7k między magistralą 1-Wire a +5V (Opisane w dziale "Budowa")

-

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 PK

problem 60*C

Płytkę projektowałem sam, dlatego mam kilka zmian w programie, rezystorek był. Sprawdzałem to na dwóch krótkich przewodach i trochę lepiej bo 62 nawet było ale też lipa, dopiero jak dołożyłem zasilanie to pokazało ponad 80. Teraz Twój i mój program wyświetlają dla wyższych temp. Sprawdzę jeszcze na długich.. ale już nie dziś
Dziwne, bo kiedyś miałem na trzech przewodach długich i było gorzej niż na dwóch teraz. Dlatego zmieniłem koncepcję..ale trzeba będzie powrócić
Przy trzech to już nawet ten rezystor 4,7K nie potrzebny chyba.
Dziwne te DSy.
Pozdrawiam i dzięki za pomoc

Portret użytkownika gosc

problem 60*C cd..

I lipa z tymi długimi trzema przewodami ale zauważyłem jedno,że wyświetla dopóki nie załączy przekaźnika (układ wykorzystuję do sterowania pompka co) dodam ,że przekaźnik jest na całkiem osobnym przewodzie sterowany przez tranzystor.

Portret użytkownika mirley

Problem 60*C

A jak daleko masz przekaźnik od mikrokontrolera? Dałeś diodę rownolegle do przekaźnika tłumiącą przepięcia z cewki? Rezystor 4,7k jest napewno podłączony? Już miałem wielokrotnie problemy z przekaźnikami zawieszjącymi mikrokontrolery (gdy są za blisko) ale jeszcze nigdy żeby DS się coś zawieszał. W moim projekcie obrotnicy do kolektora jedną skrętką idą sygnały od DS18B20, sterowanie dwoch przekaźnikow, sygnały wykrywania faz, klawiatura i czujniki krańcowe. Wszystko na kablu 25m i nie ma problemu

-

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 PK

Problem 60*C

Pisałem już, że przekaźnik jest na osobnym przewodzie, długość ok. 4,5m, dioda jest, podobnie rezystor. Już chyba wiem co jest przyczyną: napięcia siadała do ok. 4,7V po załączaniu przekaźnika (dwa tranzystory do tego użyłem), zwiększyłem opornik między nimi i jakąś poprawę widzę. Na stabilizator podaję 7,3V to troszkę za mało (też stabilizowane..) w przyszłości to poprawie jak już zacznie wszystko działać poprawnie. Przy 61* załączyło przekaźnik i brak efektu ubocznego, jak napalę mocniej to sprawdzę przy wyższych temp.
Dzięki za pomoc.

Portret użytkownika slawek

pomiar sredniej dobowej

Czy da sie przerobic układ by pokazywal dodatkowo srednią dobową i jeszcze najlepiej trend dobowy ???

Portret użytkownika gosc p

ŚREDNIA DOBOWA

Da się to zrobić w bardzo prosty sposób, tylko zależy jaka dokładność CIę interesuje, im dokładniej tym więcej pamięci potrzeba.

Portret użytkownika slawek

srednia temp

Najlepiej 0.1 ale ile sie da to bedzie i tak super wazne zeby byla dobowa i trend prosze o pomoc

Portret użytkownika slawomir

pomiar sredniej dobowej

ile bedzie pomiarow na dobe to nie mam powiedziane ważne by wskazywał temperature średnią dobową i trend dobowy (dodatni czy ujemny) a zrobić to mogę w dowolny sposób np, dodatkowy przycisk do zmieniania funkci itp pozdrawiam

Portret użytkownika mirley

Pomiar średniej

Witam

Spróbuje zająć się tym dzisiaj wieczorem. Czy bardzo ważne jest żeby np doba która ma być brana pod uwagę była zawsze np od godziny 0:00 przez kolejne 24 godziny, czy jak się pomyli o minutę to bedzie problem w tym zastosowaniu?

-

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 slawek

myślę że nie bedzie to

myślę że nie bedzie to problem
Pozdrawiam

Portret użytkownika slawek

pomiar sredniej dobowej

Mam jeszcze jedno zapytanie: jaką dokładność ma ten pomiar temperatury??? jak wyswietla on temperature ujemna???
Proszę o pomoc w tym pomiarze temperatury uniwersalnym albo w domowym w którym jest łatwiej do zrobienia
pozdrawiam

Portret użytkownika mirley

Dokładność to 0,5

Dokładność to 0,5 stopnia. Wyświetlanie ujemnych temperatur-> patrz opis w dziale budowa

-

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 PK

menu

Potrzebuję do tego programu zrobić menu (mam swój program ale nie jest na przerwaniach i nie podoba mi się wyświetlanie podczasa zmiany ustawień), chodzi mi o to,żeby wyświetlał temp, a po naciśnięciu p3.1(alias ok) pojawiło się menu przewijalne tz. po naciśnieciu p3.0 (alias up) wyświetlało CO->up->HI->SP->CO.. i dalej do każdej z tych opcji można wejść ->OK i tam z kolei ustawić temperaturę i na końc ->ok ->wyjście do wyświetlania temp.+autopowrót.
Ewentualnie prośba o wskazówki jak to tu dołożyć, kombinuję i plącze mi się to już.
Pozdrawiam

Portret użytkownika mirley

menu

W miejscu:

If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                             'co 4ms
 
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If

należy zastąpić linijkę Wysw = Tempa casem:

 Select Case Poz_menu
    Case 0: 
       Wysw = Tempa
    Case 1:
       Wysw = 'Inna temperatura
    Case 2:
      .......'itd
 End Select

W zależności od tego ile w menu ma być pozycji tyle w Casie będzie linijek a każda z nich ma wpisywać do zmiennej Wysw inny parametr. W procedurze obsługi przyciskow będziesz ustawiał parametry lub zwiększał wartość zmiennej Poz_menu zależnie od tego jaka jest jej wartość aktualna (w zależnosci od tego gdzie jestes w menu)

Odnosnie obsługi przyciskow to ja zastosował bym jeden przycisk jako + drugi jako - a dwa naraz jako menu. Powiedz jeszcze co oznaczają te CO, HI SP itp? ile ma byc tych pozycji w menu?

-

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 PK

CO (temperatura załączania

CO (temperatura załączania pompy centralnego ogrzewania), HI(histereza do wyłączania pompy), SP(Stan pracy i tam kolejno Au((automat) On(włączona non-stop),OF(wyłączona nonstop)oczywiście pompy). ma być taka struktura menu

wyświetlanie aktualnej TEMP.
naciśnięcie OK-> CO ->[(up lub down) wyświetla HI..-> SP]
powiedzmy wyświetla się CO naciskając OK wyskakuje nastawa temp np 50*C i teraz (up lub down) ustawiam taką jaka potrzebna dalej -> Ok i wychodzi z menu i pokazuje aktualną Temp.

Sterownik już mam działa, zamontowany w taki sposób jak opisałem tylko to wyświetlanie w menu nie takie) Trzy przyciski wydaje mi się bardziej czytelne do obsługi dla innych..
Chciałem tylko soft zmienić.

Portret użytkownika mirley

Sterownik zrobiłeś na

Sterownik zrobiłeś na podstawie mojego schematu czy masz swój na innym mikrokontrolerze?

Mówiąc o naciskaniu dwóch naraz miałem na myśli dodanie dwóch diod i trzeciego przycisku zwierającego dwa poprzednie do masy.

-

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 PK

Sterownik miałem swój.

Sterownik miałem swój. Twój sposób z diodami oszczędza nóżkę procka ale ja już mam płytkę.
Trzy osobne przyciski to większy problem w takim rozwiązaniu (z przerwaniami)?

Portret użytkownika mirley

Trzy osobne przyciski to

Trzy osobne przyciski to zaden problem, myslałem że chcesz to zrobic na mojej płytce z AT89C2051 i wtedy brakowało by pinów. W takim razie możesz mi wysłać jeszcze schemat tego co zrobiłeś (mirley(at)op.pl) albo napisać linka jeśli jest gdzieś w internecie. Napisz typ mikrokontrolera jeszcze, bedzie bardzo pomocne

-

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 PK

W sumie i na Twojej płytce

W sumie i na Twojej płytce by się dało zrobić wykorzystując P3.7. Wysłałem na maila schemat. Procek to AT89c2051.
Pozdrawiam. Dzięki za zainteresowanie

Portret użytkownika gosc

Pytanie

Witam !
Czy jest możliwe przeobienie tego programu na procesor AVR np. ATMega8 i dołożenie między innymi sterowania za pomocą PWM-a pracą wentylatora w funkcji temperatury. Wyświetlanie temperatury bez części ułamkowej tylko dziesiątki i jedności. Niestety nie jestem jeszcze mocno obeznany w bascomie a zależy mi na zastosowaniu wyświetlacza LED. Z góry dziękuję za odpowiedź.
Pozdrawiam
Piotr

Portret użytkownika mirley

A do czego to jest

A do czego to jest potrzebne? Ten wentylator to jest na 12V? Bo jeśli tak to robiłem już cos podobnego do mojego wzmacniacza, opis znajduje się tutaj. Zapoznaj się z kodem źrodłowym, przerobienie pod ATMEGA8 nie powinno sprawić problemu, kod w większości jest taki sam. Nie mogę się szybko tym zająć i napisać całości (ze względu na brak czasu), ale pytania możesz zadawać.

-

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

Potrzebne to jest do

Potrzebne to jest do zasilacza 30V 3A. Wentylator od zasilacza do PC na 12V. Chodzi o to że multimetr na Atmega8 na LED-ach już mam zrobiony(pomiar prądu i napięcia) skorzystałem z gotowca w sieci. Tylko do pełni szczęścia brakuje wyświetlania temp radiatora stopnia końcowego na wyświetlaczu LED 2cyfry i 2 cyfry znaki o C w multipleksie. Do tego sterowanie PWM wentylatora od 30 do 60 C. Pełne obroty przy 60 C. Przy temp 80 C załączenie ograniczenia prądowego w zasilaczu na minimalną wartość i wyłączenie go dopiero przy spadku temperatury do 30 C. Sprawa by nie była uciążliwa gdybym zastosował wyświetlacz LCD alfanumeryczny. Uparłem się jednak na wyświetlacz LED gdyż pomiar napięcia i prądu jest na LED. Przerobiłem program na atmege i przy próbie robienia własnych wstawek procek głupieje tzn. nic nie wyświetla, a program kompiluje się bez błędów. Nie znam się dobrze na obsłudze przerwań i podejrzewam że robię swoje wstawki nie w tym miejscu gdzie trzeba. Z tego co wyczytałem na forach jest pewien problem przy obsłudze 1-wire i wyświetlaniu multipleksowanym i wykonywaniu jeszcze innych dodatkowych procedur. W takim razie proszę o poradę czy jest sens próbować uparcie dalej czy zastosować po prostu wyświetlacz LCD alfanumeryczny.

Portret użytkownika gosc PK

menu

Witam
Długo się nie odzywałem. W końcu znalazłem trochę czasu i przerobiłem program jaki mi był potrzebny(nie jest zoptymalizowany ale wystarcza). Dzięki wszystkim za pomoc. Pozdrawiam. Oto kod:
(jeśli ktoś zauważy błędy to śmiało pisać)

'****************************
'Program do Sterowania Piecem
'wersja: 27.12.2008
 
'****************************
           'Konfiguracja
'****************************
'$crystal = 12000000                                           '12MHz
$regfile = "89C2051.DAT"
 
Config 1wire = P3.4
 
 
Config Timer0 = Timer , Gate = Internal , Mode = 2
On Timer0 Przerwanie0
'Load Timer0 , 250
Enable Timer0
Start Timer0
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Temp1 As Byte
Dim Temp2 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 Tempu As Word
Dim Histereza As Byte
Dim Mux As Byte
Dim Poz_menu As Byte
Dim Sw_licz(3) As Byte
Dim Tempp As Word                                             'zmiena pomocnicza
Dim Autopowrot As Byte
 
Dim Zezw_wysw As Bit , Zezw_przyciski As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
Dim Miganie As Bit
Dim Z As Bit
Dim Stan As Byte
Dim Mig As Byte
Dim Pk As Bit                                                 ' pomocnicza do migania
 
 
Up Alias P3.0
Down Alias P3.2
Ok Alias P3.1
Pk = 0
'****************************
      'Wartosci Poczatkowe
'****************************
P3 = 32
P1 = 0
   Reset Z
'Reset Up
'Reset Down
'Reset Ok
Reset Pomiar_odczyt
Reset Ur
Poz_menu = 0
Tempu = 50
Histereza = 10
Wysw1 = 191
Wysw10 = 191
'Wysw100 = 191
 
   Stan = 1
 
'****************************
      'Petla glowna
'****************************
Do
 
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw
 
    If Miganie = 1 And Stan = 1 Then Pk = 1 Else Pk = 0       'p1 = P1 Or 128 Else P1 = P1 And 127
    If Stan = 2 Then Pk = 0                                   '0p1 = P1 Or 128
    If Stan = 3 Then Pk = 1                                   'P1 = P1 And 127                          'co 4ms
 
  Select Case Poz_menu
    Case 0:                                                   'aktualna temperatura
    Reset Z
      Wysw = Tempa                                            'CO
    Case 1:
      Set Z
      Wysw = 30
    Case 2:                                                   'HI
     Set Z
      Wysw = 25
      Case 3:                                                 'SP
     Set Z
      Wysw = 94
        Case 4:                                               'nastawa CO
    Reset Z
      Wysw = Tempu
       Case 5:                                                'nastawa HI
    Reset Z
      Wysw = Histereza
       Case 6:                                                'mastawa SP
    Set Z
    If Stan = 1 Then Wysw = 18                                'AU
    If Stan = 2 Then Wysw = 7                                 'ON
    If Stan = 3 Then Wysw = 6                                 'OF
  End Select
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If
 
If Zezw_przyciski = 1 Then
  Reset Zezw_przyciski                                        'co 100ms
'----------------------------UP---------------------
   If Up = 1 Then                                             'plus
    Incr Sw_licz(1)
      If Sw_licz(1) = 10 Then
        Sw_licz(1) = 5
 
         If Poz_menu = 6 Then
            Incr Stan
            If Stan = 4 Then Stan = 1
          End If
 
       If Poz_menu = 1 Or Poz_menu = 2 Or Poz_menu = 3 Then
         Incr Poz_menu
         If Poz_menu = 4 Then Poz_menu = 1
       End If
 
       If Poz_menu = 4 Then
       Incr Tempu
       If Tempu = 91 Then Tempu = 90
       End If
       If Poz_menu = 5 Then
       Incr Histereza
       If Histereza = 16 Then Histereza = 15
          End If
 
        Autopowrot = 0
 
      End If
  Else
    Sw_licz(1) = 8
  End If
'-------------------DOWN--------------------------------
  If Down = 1 Then                                            'minus
    Incr Sw_licz(2)
      If Sw_licz(2) = 10 Then
        Sw_licz(2) = 5
 
          If Poz_menu = 6 Then
            Decr Stan
            If Stan = 0 Then Stan = 3
          End If
 
 
          If Poz_menu = 1 Or Poz_menu = 2 Or Poz_menu = 3 Then
            Decr Poz_menu
            If Poz_menu = 0 Then Poz_menu = 3
          End If
 
          If Poz_menu = 4 Then
          Decr Tempu
          If Tempu = 0 Then Tempu = 1
          End If
          If Poz_menu = 5 Then
          Decr Histereza
          If Histereza = 0 Then Histereza = 1
          End If
        Autopowrot = 0
 
      End If
  Else
    Sw_licz(2) = 8
  End If
'----------------------OK---------------
 If Ok = 1 Then                                               'menu
    Incr Sw_licz(3)
      If Sw_licz(3) = 10 Then
        Sw_licz(3) = 5
            Autopowrot = 0
        If Poz_menu = 4 Or Poz_menu = 5 Or Poz_menu = 6 Then Autopowrot = 49
        If Poz_menu = 3 Then Poz_menu = 6
         If Poz_menu = 1 Then Poz_menu = 4
         If Poz_menu = 2 Then Poz_menu = 5
         If Poz_menu = 0 Then Poz_menu = 1
 
 
 
      End If
  Else
    Sw_licz(3) = 8
  End If
'-----------------------------------
  Gosub Sterowanie
 
  If Poz_menu <> 0 Then                                       'jezeli jest w menu
   Incr Autopowrot
   If Autopowrot = 50 Then Poz_menu = 0                       'wraca do wysw. temperatury po 50* 0,1s (5sekund)
  End If
 
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Incr Co4ms
 If Co4ms = 15 Then
   Co4ms = 0
   '***************************************  co 4ms
   Set Zezw_wysw
   Incr Co100ms
   If Co100ms = 25 Then
     Co100ms = 0
     '*************************************** co 100 ms
     Set Zezw_przyciski                                       'zezwolenie obslugi przyciskow
 
     Incr Mig
     If Mig = 8 Then
     Mig = 0
      Miganie = Not Miganie                                   'umozliwia miganie cyfr podczas wyswietlania menu
 
 
    End If
 
     Incr Co1s
     If Co1s = 10 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():
 
 
 
         ' Tempa = Msb * 256
         ' Tempa = Tempa + Lsb
         '
 
         ' Tempa = Tempa * 10                                  'temperatura *10
         ' Tempa = Tempa / 16                                  'wartosc 123 dla 12.3 stopnia itp.
 
 
             Temp1 = 1wread(1)
   Temp2 = 1wread(2)
 
   Temp1 = Temp1 And 240
   Rotate Temp1 , Right , 4
 
   Temp2 = Temp2 And 7
   Rotate Temp2 , Left , 4
 
   Tempa = Temp1 Or Temp2
 
          If Ur = 0 Then Ur = 1
 
       Else
          Tempa = 10000                                       'Err 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 wiodacego
   If Z = 0 Then
   Wysw1 = Lookup(wysw1 , 7seg)
   Wysw10 = Lookup(wysw10 , 7seg)
'   Wysw100 = Lookup(wysw100 , 7seg)
   Else
   If Z = 1 Then
   Wysw1 = Lookup(wysw1 , Znak)
   Wysw10 = Lookup(wysw10 , Znak)
'   Wysw100 = Lookup(wysw100 , Znak)
   End If
   End If
 
 Else
     Wysw1 = 175                                              'r
     Wysw10 = 134                                             'E
End If
 
Return
 
 
Wyswietl:
 
  Incr Mux
  If Mux = 2 Then Mux = 0
 
 
  Select Case Mux
 
     Case 0:
      Set P3.7
         If Pk = 1 Then
         P1 = Wysw10 Or 128
         Else
         P1 = Wysw10 And 127
         End If
    'P1 = Wysw10
      Reset P3.3
 
    Case 1:
      Set P3.3
         If Pk = 1 Then
         P1 = Wysw1 Or 128
         Else
         P1 = Wysw1 And 127
         End If
    '  P1 = Wysw1
      Reset P3.7
  End Select
 
Return
 
 
 
Sterowanie:
 If Stan = 1 Then
' If P3.5 = 1 Then                                             'jezeli jest wlaczony przekaznik
   If Tempa >= Tempu Then P3.5 = 0                            'jezeli tempa dochodzi do ustawionej to wyl przekaznik
 'Else                                                         'jezeli wyl przekaznik
   Tempp = Tempu - Histereza                                  'punkt wylaczenia
   If Tempa < Tempp Then P3.5 = 1                             'jezeli tempa mniejsza niz ustawiona temp. - histereza to wlacz przek.
 'End If
  End If
  If Stan = 3 Then P3.5 = 1
 If Stan = 2 Then P3.5 = 0
Return
'****************************
 
'****************************
 
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
7seg:
Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
'znak:0    1     2    3    4    5   6    7    8    9    pusty
 
Znak:
'     0 , A , h ,   C , P ,   I ,  F ,  N ,  U ,  S         L
Data 64 , 8 , 9 , 70 , 12 , 79 , 14 , 43 , 65 , 18 , 255 , 71
 
'*******************************************************************************
 
'*******************************************************************************

Portret użytkownika gosc

Było by świetnie gdyby

Było by świetnie gdyby ktoś przerobił kod pod attiny2313:)

Portret użytkownika gosc PK

to nie problem mam gdzieś

to nie problem mam gdzieś to na atmege8, ale i tak będziesz musiał przerabiać na konkretną płytkę

Portret użytkownika mirley

Re: Termometr Uniwersalny

Nie mam niestety na tyle czasu aby przerobić to w niedługim czasie. Jeśli któryś z kolegów przerabiał kod pod jakiś z AVR'ów proszę o nadesłanie kodu na mirley(at)op.pl

Naszczęście to jest jeden ze starszych projektów, teraz już większość robię na AVR'ach

-

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

pod atmegę, też było by

pod atmegę, też było by świetnie, gdybyś mógł udostępnić schemat, płytkę bym już zaprojektował. W razie czego wyślij proszę

Portret użytkownika gosc

Czy stanie się coś po

Czy stanie się coś po przekroczeniu zakresu? np. jeżeli temp. dojdzie do 110C

Portret użytkownika gosc

A jakby zamienić tego

A jakby zamienić tego mikroklocka na atmega16 i dać w programie żeby pracował na oscylatorze wewnętrznym to będzie chodził poprawnie?

Portret użytkownika gosc PK

Mogę udostępnić program i

Mogę udostępnić program i płytkę na 2051, na atmegę8 nie mam płytki tylko program pisałem na taką płytkę tymczasową ale jakby ktoś bardzo chciał. Mogę przerobić program na AVR na konkretną płytkę ale trzeba by mi przysłąć chociażby schemat
Oczywiście że na wewnętrzym RC powinno działać.
Pozdrawiam

Portret użytkownika gosc PK

w jednej wersji programu

w jednej wersji programu zrobiłem alarm jak przekroczy zadaną temperaturę, w powyższym nic się nie stanie po przekroczeniu.. tylko już nie nie będzie miała sie gdzie jedynka wyświetlać

Portret użytkownika mirley

Re: Termometr

Czujnik DS18B20 mierzy do około 120 stopni a nie uszkodzi się nawet w większej temperaturze

-

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

Witam! Który fragment kodu

Witam!

Który fragment kodu odpowiada za sterowanie stanami na pinach P1.0 - P1.7?

Portret użytkownika mirley

Re: Termometr

Odpowiada za to procedura Wyswietl

Wyswietl:
  Incr Mux
  If Mux = 3 Then Mux = 0
  P3.7 = Not Minus
 
  Select Case Mux
    Case 0:
     Set P3.0
      P1 = Wysw100    '<<<<<<<<<<tu ustawiamy stan na P1
     Reset P3.2
 
    Case 1:
     Set P3.2
      P1 = Wysw10    '<<<<<<<<<<tu ustawiamy stan na P1
     Reset P3.1
 
    Case 2:
     Set P3.1
     P1 = Wysw1     '<<<<<<<<<<tu ustawiamy stan na P1
     Reset P3.0
  End Select
Return

Wcześniej wykonywana jest procedura Przelicz, która zamienia liczbę 3 cyfrową na trzy zmienne Wysw100 ... Wysw1 i koduje w ich wartościach odpowiednie znaki wyświetlacza za pomocą tabel przeliczeniowych (na samym dole programu)

-

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 Robert Bar

Zpytanie o przeróbkę

Witam

Chciałbym wzbogacić ten program o dwie funkcje, a mianowicie
opcja 1 --- temperatura przekracza (xx ) włancza się buzer i cyklicznie pika do momentu obniżenia temperatury (xx) o (x) stopni.
opcja 2 --- powiązana jest z pierwszą tylko dodatkowo można ten sygnał wyłączyć ręcznie.

Jeżeli jest to operacja prosta to prosił bym Cię o wskazówki w modyfikacji tego kodu.

Pozdrawiam
Robert

Portret użytkownika gosc PK

Na jaki procek chcesz to

Na jaki procek chcesz to wgrać? 2051 to trzebaby się już pobawić żeby to upchać albo zrezygnować np z migania na rzecz dźwięku.
To nie jest wcale skomplikowane żeby to dodać.
wystarczy pare if-ów w odpowiednim miejscu i po problemie

Portret użytkownika mirley

Re: Przeróbka Termometru

Jak napisał już kolega wcześniej nie powinno to sprawić problemu z tym że może to pociągnąć za sobą konieczność zmiany 2051 na 4051 gdy kod źródłowy za bardzo się rozrośnie. Czy wymagane jest ustawianie tych progów temperatury czy mogą one być na stałe zapisane w pamięci programu? Jeśli musi być konieczność ustawiania tych temperatur to bedzie problem z ich zapisem aby po wyłączeniu zasilania nie zgubiły się wartości. Ponadto konieczność ustawiania zabierze dwa przyciski i przez to aby podłączyć buzzer trzeba będzie zrezygnować z ujemnych temperatur bo braknie wyprowadzeń. Proszę się zastanowić co jest potrzebne a co nie i wtedy w wolnej chwili pomyślał bym nad tym aby zrealizować taki alarm z możliwością wyłączenia.

-

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 Robert Bar

Zmiany w projekcie

Witam

Układ o którym mowa chce wykorzystać do sygnalizacji przekroczenia temperatury przez piec CO.
W przyszłości będzie to rozbudowany układ sterujący a obecnie ma spełniać podstawową funkcje sygnalizacji .
Procesor mogę zastosować 4051 nie ma to znaczenia natomiast chciałbym wykorzystać jeden z Twoich projektów termometrów.
Temperatura może być przypisana na stałe w niczym to nie przeszkadza dobiorę podczas eksperymentów..
ilość stopni o które zostanie przekroczony próg dopuszczalny też może być na stałe.
Natomiast zależy mi aby można było ręcznie wyłączyć sygnalizacje w taki sposób aby ponowne przekroczenie spowodowało sygnalizacje.
Jeżeli to nie przeszkodzi w projekcie to jedno z wyjść może służyć do sterowania przekaźnika w momencie włączenia buzera ,na zadany czas pojawi się stan wysoki.

Pozdrawiam
Robert

Portret użytkownika mirley

Re: Termometr

Ulepszyłem trochę program. Nowa wersja jest dostępna tutaj. Przycisk S1 włącza i wyłącz alarm. Zamiast S2 należy dać buzzer wraz z tranzystorem i rezystorami tak jak do anody wyświetlacza. Na porcie P3.7 dioda sygnalizacyjna szeregowo z rezystorem 330R podłączona anodą do +5V (sygnalizuje włączony alarm)

Nie mam dostępu do płytki testowej więc program pisałem na ślepo. Jak pójdzie to proszę o info :)

-

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 Robert Bar

dziękuje za szybką reakcję

Proszę jeszcze o podpowiedź czy to te wartości odpowiadają za progi temperatur, które trzeba przypisać na stałe.

W przyszłym tygodniu mam dostać czujniki to zaraz wypróbuje .Płytkę testową też zrobiłem lecz jeszcze nie uruchomiłem.
Jak ukończę Twoje projekty a jest ich kilka to może w przyszłym tygodniu prześle kilka fotek.

'****************************
'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
Alarm = 1
Sygnal = 0

T_max = 900 ' 90 stopni
T_min = 800 ' 80 stopni