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 beginner

2 DS-y

Rozwiązałem to mało elegancko, bo IF-ami:

Quote:

If Kanal = 0 Then 1wreset Sa Else 1wreset Sb

If Pomiar = 1 Then
If Kanal = 0 Then
1wwrite &HCC Sa
1wwrite &H44 Sa
Else
1wwrite &HCC Sb
1wwrite &H44 Sb
End If
Else
If Kanal = 0 Then
1wwrite &HCC Sa
1wwrite &HBE Sa
Lsb = 1wread(Sa):
Msb = 1wread(Sa):
Lsb = Lsb / 16
Msb = Msb * 16
Temp = Lsb + Msb
Temp_a = Temp
Else
1wwrite &HCC Sb
1wwrite &HBE Sb
Lsb = 1wread(Sb):
Msb = 1wread(Sb):
Lsb = Lsb / 16
Msb = Msb * 16
Temp = Lsb + Msb
Temp_b = Temp
End If

Kanal = Not Kanal
If Ur = 0 Then Ur = 1
End If

ale najważniejsze, że działa jak należy. Dziękuję wszystkim (zwłaszcza Mirleyowi) za wskazówki. Pozdrawiam

Portret użytkownika oldboy

2 DS-y na jednej linii

A ja próbowałem odczytywać dwa czujniki (18B20) na jednej linii, bo resztę pinów 89C2051 wykorzystałem do czego innego. Odczytałem Lampomittari numery czujników, przerobiłem program kolegi Mirleya w taki sposób:

Quote:
Dim Ds1(8) As Byte , Ds2(8) As Byte
.
.
Ds1(1) = &HA0
Ds1(2) = &H00
Ds1(3) = &H00
Ds1(4) = &H02
Ds1(5) = &H61
Ds1(6) = &H73
Ds1(7) = &H19
Ds1(8) = &H28

Ds2(1) = &H68
Ds2(2) = &H00
Ds2(3) = &H00
Ds2(4) = &H02
Ds2(5) = &H61
Ds2(6) = &H24
Ds2(7) = &H73
Ds2(8) = &H28
.
.
If Pomiar = 1 Then
1wreset
1wwrite &HCC
1wwrite &H44
Else
1wreset
1wwrite &H55
1wwrite Ds1(1) , 8
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
Lsb = Lsb / 16
Msb = Msb * 16
Temp1 = Lsb + Msb
1wreset
1wwrite &H55
1wwrite Ds2(1) , 8
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
Lsb = Lsb / 16
Msb = Msb * 16
Temp2 = Lsb + Msb

If Ur = 0 Then Ur = 1
End If

i niestety wyświetlacze mam ciemne (a dla jednego czujnika wszytko było OK). Co jest nie tak?

Portret użytkownika mirley

Re: Pomiar DS

Gdzie zmieniasz wartość zmiennej Pomiar?

-

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 oldboy

2 DS-y

Tutaj:

Quote:
Przerwanie:
Incr Co4ms
If Co4ms = 16 Then
Co4ms = 0
'*************************************** co 4ms
Set Zezw_wysw
' Incr Co100ms
' If Co100ms = 25 Then
' Co100ms = 0
'*************************************** co 100ms
'ew. flaga 100ms
Incr Co1s
If Co1s = 250 Then
Co1s = 0
'*************************************** co 1s
Pomiar = Not Pomiar

Disable Interrupts

Portret użytkownika mirley

Re: termometr

A przypisujesz wartości Temp1 i Temp2 do zmiennej Wysw? Rozumiem że wyświetlania w żaden sposób nie zmieniłeś, czyli przypisanie wartości do wysw powinno pokazać tą wartość na wyświetlaczu. Możesz przypisac do wysw jakąś stałą wartość i zobaczyć czy się wyświetla

-

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

Ala ma kota.

No dobra, drugie podejście, innych termostatów na necie niestety nie ma, pcb taka duża bo dostosowana do obudowy.
Czy ktoś może sprawdzić poprawność termostatu?

Z góry dzięki za odpowiedź(nie dłuższą niż 3 miesiące -,-).

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika mirley

RE: Termostat

Schemat wygląda w porządku.... Na płytce to ja bym zdecydowanie oddalił triaka i optotriaka od obwodów 5V.... na pewno to oblewanie masą czy jakimkolwiek innym polygonem optotriaka w odległości ~20milsów od padów 230V jest niebezpieczne.

Procesor przesuń na lewo, rezystor R46 blisko triaka pionowo, zrobi się miejsce żeby obniżyć optotriaka. Jak nie musisz to unikaj wyprowadzenia ścieżek niskonapięciowych pod optotriakiem

-

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 doc

No dobra dzięki, płytka

No dobra dzięki, płytka zrobiona i działa, na nietestowanym programiku bez regulacji temperatury i histerezy więc ponaglam.
Tylko że jeszcze jest problem z sekcją wykonawczą(optotriak, triak itp.) a mianowicie nie następuje zwarcie obwodu 230v, led przy optotriaku świeci kiedy trzeba ale żarówka podłączona na 230v nie świeci się.
Nie ma zimnych lutów, sprawdzone miernikiem, napięcie dochodzi, żarówa normalnie świeci, triak nówka nieśmigana, co jest nie tak??

Portret użytkownika marekszy

Termostat

Z tego co widzę masz pomylone nogi w MOC3041 4 z 6

Portret użytkownika Doctore

więc jakim cudem autor

więc jakim cudem autor potwierdził że jest ok?

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika marekszy

termometr

Pretensje możesz mieć niestety tylko do siebie ,to ewidentnie Twój błąd, a takie drobiazgi wychodzą dopiero w praktyce,
teraz tylko przetestuj czy będzie ok.

Portret użytkownika marekszy

termometr

Pretensje możesz mieć niestety tylko do siebie ,to ewidentnie Twój błąd, a takie drobiazgi wychodzą dopiero w praktyce,
teraz tylko przetestuj czy będzie ok.

Portret użytkownika mirley

Re: Optotriak

Zamiana nóżek 4 z 6 nie powinna nic zmienić.... to tak jakbyś zamienił miejscami przewody przy pradzie przemiennym. Nigdy nie zwracam uwagi jak podłaczam optotriak (na anody optotriaka i nie miałem problemów nigdy) Rozumiem jakby pomylić anody Triaka miejscami to się nie włączy bo prąd musi płynąć przez bramkę do A2 ale optotriak powinien zwierać w dwóch kierunkach. Wyjmij optotriak i zewrzyj jego nózki 4 z 6 powinien się triak właczyć

-

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

Zamiana nic nie dała,

Zamiana nic nie dała, zobaczymy jak ze zwarciem.

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika Doctore

Zwarcie też nic nie daje,

Zwarcie też nic nie daje, zwierałem próbnikiem dolutowane druciki i było napięcie ale żarówka się nie zapalała, a jak normalnie zwarłem oba wyjścia triaka to żarówka oczywiście normalnie zaświeciła.

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika mirley

Re: Triak

Jaka jest wartość rezystora R16 wlutowana? nie pomyliłeś wartości. Jeśli triak się nie włącza to może być uszkodzony? napewno nie pomyliłeś wyprowadzeń i nie wlutowałeś na odwrót triaka? Bramka jest po lewej stronie jak patrzysz na napisy na triaku.

-

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

Triak wlutowany dobrze(tak

Triak wlutowany dobrze(tak jak na schemacie) a R16 to 220R tak ja na schemacie...
Wszystko wskazuje na triak ale on też został wymieniony i dalej to samo.

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika mirley

Re: Triak

Spróbuj wymienić triaka na inny model, przy zwarciu optotriaka musi triak przewodzić

-

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

Dobra już działa, miałem

Dobra już działa, miałem trochę za małą obudowę i musiałem dać triaka pod pcd, i wywaliłem 2 ścieżki idące do triaka z optoriaka zamieniając je na druciki, okazało się że jeden z nich był dolutowany do złej nóżki triaka przez pomyłkę...
Dzięki za pomoc i sorry za problem, ostatnio okazuje się że trzeba pcb bardzo dokładnie pooglądać zanim się ją uruchomi.

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika mirley

Re: PCB

Trzeba poprostu zrobić schemat dobry, narzędzia do robienia PCB zadbają żeby płytka była dobra elektrycznie, a montaż musi być dokładnie tak jak jest na PCB, jak kombinujesz to musisz wiedziec co robisz.

-

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

No właśnie schemat był dobry,

No właśnie schemat był dobry, pcb w miarę też, tylko że przewidywała mały radiatorek, no ale postanowiłem dać coś większego, kombinowałem i tak wyszło.
Mam takie pytanko odnośnie programu, czy dużo trudniej zrobić takie sterowanie tranzystorem, że się otwiera tak by jakaś grzałka ciągle trzymała temperaturę?
Takie nie on/off tylko sterowanie.

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika mirley

Re: Sterowanie

Rozumiem że chcesz płynnie sterować mocą odbiornika.... da się tak zrobić jak sterujesz np grzałką.... bo wtedy można zrobić sterowanie grupowe, albo ja ja to nazywam pseudogrupowe. Stosujesz triaka z optotriakiem włączanym w zerze a na sterowanie optotriaka podajesz przebieg o małej częstotliwości np 0.1Hz i sterujesz jego wypełnieniem.

Czyli dla 0.1Hz okres to 10s, zatem jak włączysz triaka na 1s a 9s będzie wyłączony to uzyskach 10% sterowania. Taki PWM ale na niskiej częstotliwości. Nadaje się to dobrze do grzałek, nie trzeba wykrywać zera sieci jak przy sterowaniu fazowym, nie powoduje zakłóceń i jest proste do implementacji w kiku linijkach 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 Doctore

1s włączone i 9s wyłączone,

1s włączone i 9s wyłączone, to przecież nie jest płynne sterowanie tylko dalej on/off.
Miałem na myśli coś takiego jak sterowniki PID, ustawiasz temperature i SSR tak reguluje moc grzałki że temperatura jest prawie stała.
I czy tak samo nie mogło by być w wypadku uC, optotriaka i triaka, że np. triak otwiera się w 77% co powoduje że temperatura na danej grzałce jest prawie stała(taka jak ustawiona)?

-

Co cie nie zabije to cie wzmocni(nie dotyczy kondensatora 400V w zasilaczu impulsowym).

Portret użytkownika mirley

Re: Grzałka

A myślisz że jak działa to sterowanie 77% mocy.... może być sterowanie fazowe ale to tez jest on/off tylko w krótkim czasie. Uważam że do grzałek jest najlepiej zrobić tak jak podałem - sterowanie grupowe. W mojej trawiarce temperatura waha się o 0.1 stopnia. Pod żadnym pozorem nie jest to klasyczny włącz/wyłącz a realizacja sterownika proporcjonalnego P, trzeba by jeszcze człony I oraz D dopisac ale i tak w efekcie sterowania PID dostaniesz wartość, którą przetworzysz na odpowiednie włącz/wyłącz...

....zawsze możesz zrobić lepsze sterowanie skoro to jest złe, wedle uznania

-

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 doc

No w sumie masz racje. Jak

No w sumie masz racje.
Jak tam prace nad programem w którym działają przyciski?

Portret użytkownika mirley

Re: Program

Niestety dalej nie było kiedy dorobić klawiatury do termostatu.... pracuję nad nową stroną i nie mam kiedy zająć się pytaniami

-

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 Elelelele

Czy aby zastosować Attiny2313

Czy aby zastosować Attiny2313 trzeba zmieniać coś w schemacie? Czy wystarczy zmienić program ?

Portret użytkownika maro

Wystarczy wgrać odpowiedni

Wystarczy wgrać odpowiedni program

Portret użytkownika amnezja

Pobór mA

Witam,
ile ten układ pobiera mA ? Wystarczy trafo 100-150mA ?

Portret użytkownika mirley

Re: Termometr

Tak, takie trafo powinno wystarczyć... albo zasilacz od komórki za 4zł :)

-

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

Jeśli układ zaprogramuję jako

Jeśli układ zaprogramuję jako termostat to gdzie podłączyć przekażnik? Pod które wyjścia trzeba się wpiąć?

Portret użytkownika mirley

Re: termostat

Przekaźnik za pomocą tranzystora PNP możesz dołączyć do portu d.6 ATTINY2313. Sterowanie jest stanem niskim dlatego tranzystor PNP

-

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 Szymon SQ3OPC

inne wyświetlacze

Witam wszystkich. Właśnie zabieram się do budowy termostatu mam jednak problem ponieważ posiadam wyświetlacze
nie ze wspólną anodą tylko katodą i teraz pytanie jak dostosować program do sterowania tymi wyświetlaczami?
Drugie pytanie:
Czy ma może ktoś kod z termostatem na atmega8 łącznie ze schematem podłączenia wyświetlaczy pod odpowiednie porty?
Mam akurat takie wyświetlacze i atmegę i chciał bym stworzyć na tych elementach termostat do bojlera.

Portret użytkownika mirley

Re: termometr

Wystarczy zanegować w programie stany na wszystkich pinach sterujących obecnie katody (najlepiej poprzez zmianę wartości w tabeli przeliczeniowej). Należy tez zmienić stan na sterowaniu tranzystorów i oczywiście dac tranzystory npn od strony masy do sterowania wspólnych katod.... o wiele prościej jest kupic odpowiedni wyświetlacz a te uzyć do czegoś innego.

-

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 Szymon SQ3OPC

2 wyświetlacze

Już poradziłem sobie z wymianą tych wyświetlaczy. Teraz chciał bym wyświetlać temp. na dwóch
a nie trzech wyświetlaczach wrzucam schemat tak do analizy.

Portret użytkownika Szymon SQ3OPC

2 wyświetlacze

Nie mogę opanować wyświetlania na dwóch wyświetlaczach.Pomiar po przecinku nie jest mi
potrzebny. Co trzeba by było zmienic

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
 
   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela)
 
    Else
   Wysw1 = 175                                              'r
   Wysw10 = 175
  End If
 
Return
 
Wyswietl:
    Incr Mux
  If Mux = 2 Then Mux = 0
 
  Select Case Mux
    Case 0:
     Set Portb.1
      Portd = Wysw1
     Reset Portb.0
 
    Case 1:
     Set Portb.0
      Portd = Wysw10
     Reset Portb.1
 
 
  End Select

Mam też problem z menu.
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  Select Case Poz_menu
    Case 0:
      Wysw = Tempa
    Case 1:
      If Miganie = 1 Then Wysw = Tempu Else Wysw = 1000
    Case 2:
       If Miganie = 1 Then Wysw = Histereza Else Wysw = 1000
  End Select
 
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If
 
 If Zezw_przyciski = 1 Then
  Reset Zezw_przyciski                                      'co 100ms
 
Sw_port = Pinc And &B00000011
Shift Sw_port , Left , 3
 
If Sw_port <> 255 And Stan_portu = Sw_port Then
  Incr Licznik_sw
  If Licznik_sw = 4 Then
    Licznik_sw = 0
    Autopowrot = 0
    Select Case Stan_portu
      Case 2:                                               'plus
       Select Case Poz_menu
          Case 0:
           Poz_menu = 1
          Case 1:
           If Tempu < 900 Then Incr Tempu
          Case 2:
           If Histereza < 100 Then Incr Histereza
        End Select
      Case 1:                                               'minus
        Select Case Poz_menu
          Case 0:
            Poz_menu = 2
          Case 1:
           If Tempu > 100 Then Decr Tempu
          Case 2:
           If Histereza > 0 Then Decr Histereza
        End Select
      Case 0:                                               'plus i minus
        Incr Poz_menu
        If Poz_menu = 3 Then Poz_menu = 0
    End Select
  End If
Else
  Stan_portu = Sw_port
  Licznik_sw = 2
End If
 
 
  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
 
   Gosub Sterowanie
 
End If
 
Loop
End

Wchodzę w menu ale wyświetlacz mruga i nic nie mogę ustawic.

Portret użytkownika kakus

Sprzedam płytke pcb

Witam jesli ktos chce kupic gotowa płytke pcb z tego projektu to posiadam jedna sztuke gotowa do lutowania Sprzedaje dlatego ze lezy juz kilka dni i nie ma czasu aby skończyc ten projekt tak ze prosze o kontakt

-

krzys

Portret użytkownika Evgeniy

Help

Please tell me, what the output of the controller, in thermostat mode , controls power on/off of Executive devices.

Portret użytkownika mirley

Re; Termostat

Port P3.7 is thermostat output (active when low)

-

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 w_pepe

Termostat-Pomocy

Zmontowałem układ i śmiga ładnie zauważyłem że zawyża około 2 stopnie ale nie o to chodzi.
Przekaźnik (czy triak) jest załączany po osiągnięciu programu, jak zmienić żeby był włączony cały czas a po osiągnięciu temperatury się wyłączył, i włączył jak temperatura spadnie o wielkość histeryzy

Portret użytkownika RobertS

sterowanie termostatem

Witam. Miesiąc temu podjąłem się zrobienia sobie termostatu z przekaźnikiem do swojego akwarium a powodem tego było przegrzewanie się wody (w cieplejsze dni) przez co moje rybki mogły zdechnąć a glony rozrastały się znacznie szybciej. Schemat zaprojektowałem i zmontowałem zanim trafiłem na to forum ale jak się okazało bardzo się nie różnił a części użyte do jego budowy są prawie identyczne. Jedyną różnicą są wyprowadzenia więc po niewielkich obróbkach programu udało mi się go uruchomić i powiem że jestem pełen uznania dla twórcy. Dodam że używam procka atmega8a-pu a funkcje sterowanie wziąłem z kodu który był napisany pod attiny2313.
1: Kod źródłowy (dla ATMega8, Bascom AVR)
2: Kod Źrodłowy (wersja z termostatem, dla ATTiny2313, Bascom AVR) (jeszcze nie testowana)

temperaturę załączenia przekaźnika do sterowania pompą wody ustawiłem na 27'C a wyłączenia na 25'C dzięki histerezie ustawionej na 2'C dzięki czemu rybki zawsze będą miały w miarę stabilną i optymalną temperaturę

Quote:

If Temp_aktualna >= Temp_ustalona Then
Przekaznik = 1
Else
Tempp = Temp_ustalona - Histereza
If Temp_aktualna < Tempp Then Przekaznik = 0

End If

Problem pojawił się kiedy zauważyłem że pompka którą mam strasznie się grzała po paru minutach chłodzenia dodam że pompka musi przepchnąć wodę przez 20 metrów rury zwiniętej w spirale w zbiorniku chłodzącym co sprawia też nie lada problemy...

Właśnie dlatego chciałem się zapytać czy jest jakiś sposób na przerobienie tego kawałka kodu(bądź innego) w taki sposób żeby przekaźnik włączał się na 5 minut i wyłączał te na 5 minut po przekroczeniu 27'C aż do momentu w którym temperatura wody opadła by do 25'C ? Męczę się już ze 2 tygodnie i próbowałem prawie wszystkiego i znalazłem się w kropce bo już pomysłów zaczęło mi brakować. Bardzo prosił bym o jakąś radę lub podpowiedź jak wybrnąć z tego problemu.

Portret użytkownika RobertS

sterowanie termostatem

aby ułatwić kontakt ze mną dołączyłem do forumowiczów :)

Portret użytkownika mirley

Re: Termostat

Aby zamienic stan staerowania na przeciwny to wystarczy zamienić stan w jednym, dwóch ifach przy ustawianiu pinu wyjściowego

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

CO do przerw w pracy włączonej pompki to nie widze problemu, rozumiem że przekaźnik=0 to przekaźnik wyłączony a zatem, pod tym twoim kodem do przekaznika, który powinien się wykonywac co 100ms dopisujemy:

If Przekaznik=1 Then
 incr licznik
 if Praca_przerwa=1 Then
   'Ustaw tutaj pin przekaznika na 1
   if licznik=3000 Then
     Licznik=0
     Praca_przerwa=0
   End if
 Else
   'Ustaw tutaj pin przekaznika na 0
   if licznik=3000 Then
     Licznik=0
     Praca_przerwa=0
   End if
 End if
Else
 Praca_przerwa=1
 licznik=0
End if

licznik musi być zmienną typu word a praca_przerwa typu bit, Zmienna przekaznik bedzie teraz zmienna bit a nie pinem bo pin steruje sie dopiero w ifie od zmiennje przekaznik

-

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 roboel

Termostat-Pomocy

witam
stan sterowania na przeciwny zamieniłem i śmiga ale zauważyłem że Led wpięty w wyjście słabo świeci zmieniłem procka i to samo jest gdzieś regulacja w programie

Portret użytkownika roboel

Termostat-Pomocy

witam
stan sterowania zmienił na przeciwny i działa, ale zauważyłem jeszcze że dioda podłączona do wyjścia sterowania świeci słabo procka wymieniałem i to samo

Portret użytkownika Kondziu gość

Duży wyświetlacz

Potrzebowałbym do tego projektu zastosować dość duży wyświetlacz, aby go było dobrze widać z kilkunastu metrów pomyślałem, aby poszczególne segmenty wyświetlacza zrobić z pasków ledowych zasilanych 12v.
Teraz pytanie czy dałoby się zrobić coś takiego?

Portret użytkownika EDC

Odp. Duży wyświetlacz

Witam. Bezproblemowo możesz to zrobić dokładając układ ULN2003. Kilka miesięcy temu naprawiałem taki trzycyfrowy wyświetlacz do kościoła. W środku właśnie ULN2003 i trzy moduły AVT-2222 (7 segmentów z 8xLED) zasilane właśnie 14V.

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika Kondziu gosc

Duży wyświetlacz

Zakładając, że metr taśmy pobiera ok. 800mA i dzieląc ten kawałek na siedem segmentów, co daje 114mA na segment. Powiedzcie mi teraz, jaki tranzystor dać na anody poszczególnych segmentów? I czy sterując katodami poszczególnych segmentów układem ULN2003 coś trzeba zmieniać w programie źródłowym czy tylko wystarczy go podłączyć?

Portret użytkownika EDC

Odp. Duży wyświetlacz

Na poczatku uścislijmy że segment to pojedynczy segment, a siedem segmentów to wyświetlacz i masz je trzy (żebyśmy się rozumieli). Zamiast BC557 spokojnie wystarczą BC327. Układ ULN2003 wpinasz pomiedzy procka i wyswietlacze. Jedynie kropke musisz rozwiazać osobno.
ULN2003 włączany jest stanem wysokim. Będziesz musiał zanegować port albo przepisac Tabele.
Jęśli nie wiesz jak to zrobić -> np. dla zera "0"
Bierzesz kalkulator wbudowany w Windows i przełączasz go do widoku Programisty albo Naukowy.
Wpisujesz wartośc z tabeli 192 i naciskasz "kropkę" Bin - czyli przeliczasz na system dwójkowy.
Widzisz 11000000 tam gdzie zera potrzebujesz jedynki a tam gdzie jedynki zera.
Czyścisz więc i wpisujesz 00111111 (dlatego że cyfra "rośnie" jakby od prawej zera są nieznaczace dla kalkulatora da się więc
wpisać tylko sześć jedynek)
Z powrotem naciskasz "kropke" tylko teraz Dec i masz wynik 63 i to wpisujesz zamiast 192.
Z każdą wartością tam zrób analogicznie pamiętając że kalkulator nie wyświetla zer nieznaczących a Ty właśnie zera na jedynki musisz przerobić. Więc gdy dla wartości 64 wyświetli 1000000 to musisz zero dodać "w pamięci" z lewej strony i zamienić je na jedynke. Wynikiem będzie 10111111 = 191.
Napisałem o tym bo można sobie do różnych konfiguracji sprzetowych zastosować. Można też wartości zapisac bezpośrednio jako &B10111111

-

BARTek
Moja strona

Portret użytkownika Kondziu gosc

Duży wyświetlacz

Dziękuje ci kolego za szczegółowe objaśnienie i mam nadzieje, że wiem o co chodzi. Teraz biorę się za ten projekt, ale ze względu na brak wolnego czasu troszkę mi zajmie złożenie tego w całość. Jeszcze raz bardzo ci dziękuje za pomoc.