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 mirley

Re; termometr

W opisie wyżej jest wszystko wyszczególnione:

Quote:
Od strony druku należy wlutować rezystor 4,7k podciągający magistralę 1-Wire (nóźka 9 układu U2) do plusa zasilania

Rezystor 4,7k montujesz od nóżki sygnałowej Ds'a do +5V

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika emilo

Termometr

Dziękuje
Całkowity ukłon w Twoja stronę naprawdę podziwiam Twoja wiedzę.Idę poprawiać układ.Dziękuje pozdrawiam

Portret użytkownika Piotr

cd programowania ATTINY

Używam programu DYBKOWSKIEGO
http://dybkowski.net/pages/pl/electronic-projects/software/2-isp
Waszą podstawkę łączę bezpośrednio z LPT kablem gdzie każda linia ma w szeregu opornik 330R [ nie założyłem tych oporów w podstawce ].
Na tym foto zaznaczyłem na czerwono tylko to co zmieniłem na 1.
http://zapodaj.net/ebea6d390f85.png.html
Reszta była na fabrycznych [ to foto to nie jest mój zrzut ].
W tym programie chyba nie ma SPIEN, SPI Enable.

Portret użytkownika mirley

Re: Fusebity

Fusebity masz dobre, jeśli zmieniłeś tylko to co podałeś. Jeśli zaprogramowałeś to musi się to zrobić drugi raz, w szczególności że mikrokontroler działa.

-

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 Piotr

Teraz to mnie

Teraz to mnie pogrzebałeś.
Termometr działa wyśmienicie, ATTINY włożone do podstawki po wciśnięciu READ SIGNATURE nie wyskakuje ATTINY 2313 tylko NOT FOUND na czerwono [ albo coś podobnego bo już nie pamiętam ].

Portret użytkownika BIGjack

Podmień attiny na nowy i

Podmień attiny na nowy i sprawdź czy się programuje.

Portret użytkownika Piotr

Programowanie ATTINY

No i kiszka niestety programuje się , ale nie ruszyłem jeszcze fusów.

Portret użytkownika mirley

Re: ATTINy

mogło się zdarzyć pechowo że akurat uszkodziłeś poprzedniego attiny. Jeśli ten tez się zablokuje w ten sam sposób to zmień program którym programujesz bo nie wiadomo czego to jest wina

-

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 goscRol

jaka obudowa.??

jaką można zastosować obudowę uniwersalną do tego projektu.? chodzi mi o jakiś konkretny model..

Portret użytkownika mirley

Re: Termometr

Płytka nie jest zaprojektowana pod konkretną obudowę, trzeba udać się do sklepu i zobaczyć co pasuje

-

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 kza

termostat

Witam co trzeba przerobić w kodzie z termostatu żeby układ działał pod attiny?

Portret użytkownika mirley

Re: Termostat

Trochę roboty jest... przede wszystkim trzeba pozamieniać nazwy pinów na takie jakie ma tiny2313, potem przerwanie timera, trzeba ustawić aby flagi w programie ustawiane były z taką samą częstotliwością. Najprościej ściągnąć program do zwykłego termometru bo jest wersja pod tiny2313, potem porównując wersje termometru dla 2051 i termostatu dla 2051 dowiesz się co trzeba dopisać. Nie dam rady tego napisać bo nie mam kiedy... mogę najwyżej drobne pytania i wątpliwości rozwiązać

-

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 kza

termostat

Zaprogramowałem układ 89c2051 za pomocą bascoma 8051 podczas programowania nie wyskoczył żaden błąd jednak gdy chciałem odczytać i zweryfikować to pojawił się komunikat chip not the same as buffer i gdy wkładam układ do płytki termostatu to zaświecają się wszystkie segmenty wyświetlacza. Co robię źle? Co może być przyczyną tego?

Portret użytkownika mirley

Re: Termostat

Kliknij Erse chip a potem dopiero program chip aż nie wyskoczy na dolnej belce lub gdziekolwiek indziej komunikat "program and chip are identical". Zaprogramuj kolejny raz itd. aż nie przejdzie weryfikacji. Jeśli jest komunikacja z procesorem i poprawnie identyfikuje się jego typ w programie to musi się za którym razem zaprogramować, u mnie też tak czasami jest dla 2051

-

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 skiba-26

Atmega32 i kwarc 16MHz

Witam. Mam atmege32 i kwarc 16MHz do których pinów podłączyć mam segmenty wyświetlaczy? (zauważyłem w kodzie dla ATTiny2313, Bascom AVR tylko ze Portd.0 d.1 i d.2 odpowiadają za poszczególne wyświetlacze w danej chili).

na jaką wartość zmienić ustawienia "Prescale = " w konfiguracji Timera przy kwarcu 16MHz ? czy w fusebitach zmieniam coś innego niż na podanym obrazku? (nie chce uszkodzić procesora)

Portret użytkownika mirley

Re: M32 do lampki

Po pierwsze to odznacz bit JTAGEN (fusebity) aby nie był włączony, to znaczy aby interfejs JTAG nie był aktywny, Teraz katody diod podłaczasz do jednego całego portu, a tranzystory od anod tam gdzie wygodniej. Zmiany należy wprowadzić w procedurze wyświetl

Zmiana kwarca z 12 na 16MHz nie powinna przynieść żadnych rażących zmian, timera nie trzeba ustawiać innaczej.

-

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

trmmtr

witam, jakim programatorem trzeba zaprogramowac ten uklad scalony? zlozylem ten termometr, tak jak na schemacie, ale ani rusz bez zaprogramowania:/ pozdrawiam

---------

aha:) jestem poczatkujacym 'elektronikiem' prosze o wyrozumialosc:)

Portret użytkownika mirley

Re: Programowanie

Nie wiem jaki mikrokontroler zastosowałeś, ale zrób sobie wersję gdzie zamiast 2051 jest ATTINY2313, ten pierwszy wymaga złożonego programatora, a attiny zaprogramujesz na podstawie opisu: http://mirley.firlej.org/jak_zaprogramowac_pierwszy_avr

Złożenie układu to połowa sukcesu

-

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 Piotr

Intensywność świecenia wyświetlaczy

Witam ponownie !!!

Termometr w dalszym ciągu chodzi świetnie , tylko mam jedno pytanie techniczne. Wykanałem go na wyświetlaczach wielkości cyfry 25 mm, rezystory segmentów po 10 omów. Reszta schematu bez zmian. Wszystko ok poza tym że środkowa cyfra wydaje się świecić minimalnie słabiej. Nie zwracałem na to uwagi do momentu jak nie przerobiłem wyświetlania innego urządzenia mającego 6 miejsc wyświetlanych [ też z wyświetlaczy 14mm na 25 mm ]. Tam też zauważyłem, że co druga cyfra tak jakby świeciła słabiej. Wychodzi na to, że nie jest to związane np. z gorszym wyświetlaczem w termometrze tylko problem chyba tkwi głębiej. Czy mają na to wpływ tranzystory sterujące anodami. Producent w tym drugim urządzeniu przewidział możliwość zmiany wyświetlaczy [ oryginalne schematy poniżej ].

http://zapodaj.net/0b39f86933de.jpg.html

Ja wykonałem wyświetlacze 25 mm według schematu dla 14 mm [ akurat miałem SMD - BC 337 ].
Napięcie VCC podawane jest z różnych pinów, niższe dla 14 mm i wyższe dla 25 mm.

Jaki wpływ mają te zaznaczone kondensatory na układ.

Dzięki za odpowiedż.
P.

Portret użytkownika mirley

Re: Termometr

W terometrze oprogramowanie zapewnia jednakowy czas świecenia dla każdego wyświetlacza... nie ma powodu czemu któryś miałby świecić słabiej.... Może to wina tego że tranzystory są różne i daje to o sobie znać dopiero przy większych prądach. Można spróbować zastosować mosfety, przynajmniej prąd na bramkę wtedy nie popłynie.

Co do tego schematu z kondensatorami to trudno mi powiedzieć. Prawdopodobnie poprawiają one wyłączenie się tranzystora. Poza tym pytanie w tym miejscu o inny układ jest odejściem od tematu termometru i powinno być na forum -> "Pytania Inne"

-

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 Bezy

Zapis na kartę SD

Witam, czy jest możliwe dodanie do termometru karty SD tak by np co 5 minut rejestrował temperature na karcie. Taki prosty rejestrator temperatury.

Portret użytkownika mirley

Re: Rejestrator temp

Sam nie wiem czy obsługa karty SD jest prosta :)) Dało by rady na pamięci eeprom, lub lepiej bezpośrednio do kompa wysyłać po rs232. Taki projekt jest na liście do zrobienia, więc przerabianie tego jest bez celu. Może trzeba by było jednak pomyśleć o tej karcie SD....

-

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 Bezy

RS232

A mam jeszcze pytanko bo robię już 2 taki termometr, ponieważ jest to bardzo dobra i prosta konstrukcja jak dla początkującego. Ale wiadomo że z każdym projektem czuje się niedosyt i chce czegoś więcej. Przerobiłem odrobinkę i podłączyłem wyświetlacz z P3.0 --> P3.3, oraz P3.1 --> P3.4 i poprawki w kodzie naniosłem i termometr śmiga. Teraz mam wolne nóżki w Attiny2313 nr 2 i 3 TXD i RXD do komunikacji po RS232, Podłączyłem ten układzik dołożyłem 4 kondensatory w komputerze zainstalowałem Hiperterminal i teraz moje pytanie Co w Attiny2313 wpisać w kodzie by odczytywał temperaturę z termometru i przesłał do komputera. Z góry za wskazówki dziękuje.

Marcin

Portret użytkownika mirley

Re: Termometr, rozbudowa

nic prostszego. Na początku programu dajesz:

$baud = 9600

9600 to prędkość, dalej w miejscu gdzie chcesz wysłać piszsz:

Printbin wartosc

jeśli wartość będzie zmienna typu word to zostaną wysłane dwa bajty. Skorzystaj na początku z mojego programu rs232 tester, bo on odbiera liczby a nie znaki jak terminal. Poza tym musisz mieć jeszcze max232 albo chociaż 2 tranzystory do poprawnej komunikacji

-

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 kza

pamięć

Witaj zastanawiam się czy dało by się do termostatu dołożyć pamięć aby bo odłączeniu zasilania zapamiętane zostały ustawienia

Portret użytkownika mirley

Re: Termostat

Nie da się dołożyć pamięci... gdzie byś chciał ją podłaczyć jak nie ma wolnego pinu... Trzeba zrobić wersję termostatu na Tiny2313 bo on ma wewnętrzną pamięć.

-

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 grze

Działa wam minus przy

Działa wam minus przy temperaturach ujemnych?

Portret użytkownika mirley

Re: termometr

Minus zaswieca diodę która ma być podłączona przez rezystor między 5V a pin P3.7 (nózka 11) Na wyświetlaczu się nie zaświeca

-

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 green

Jaką funkcję pełni zmienna

Jaką funkcję pełni zmienna Ur, bo nie bardzo jarzę? Nie można z tego zrezygnować?

P.S. Robię taki termometr ale na dwóch LED-ach z alarmem przy spadku temp. poniżej np. +40C

Portret użytkownika mirley

Re; Termometr

Zmienna ta daje tylko zaświecenie na wyświetlaczu "---" podczas uruchamiania układu, zanim ds18b20 nie zmierzy temperatury po raz pierwszy

-

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 green

Przerobiłem program mirleya

Przerobiłem program mirleya dla 2 wyświetlaczy LED, wykorzystując płytkę NE 197-K (odbiornik RC5). Musiałem w tym celu zmienić linie portów i napisać dwie nowe tabele znaków, bo segmenty wyświetlaczy sterowane są różnymi liniami P1. Oto listing:

'Program dla plytki NE 197-K
 
'****************************
           'Konfiguracja
'****************************
 
$crystal = 12000000			'12MHz
$regfile = "89C2051.DAT"
Config 1wire = P3.2
 
Config Timer0 = Timer , Gate = Internal , Mode = 2
'okres Timera0 250*12*Tosc = 250us
 
On Timer0 Przerwanie
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
Dim Temp As Word
Dim Mux As Bit
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Ur As Bit
 
'****************************
      'Wartosci Poczatkowe
'****************************
 
Reset Pomiar_odczyt
Reset Ur
P1 = 255
P3 = 255
Wysw10 = 120				'o
Wysw1 = 229				'n
 
 
'****************************
      'Petla glowna
'****************************
 
Do
If Zezw_wysw = 1 Then
  Reset Zezw_wysw			'co 4ms
  Wysw = Temp
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If
Loop
End
 
'****************************
      'Przerwanie Timer0
'****************************
 
Przerwanie:
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 = 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():
 
          If Msb = 0 Then
            Reset P3.0
          Else				'jesli temperatura ujemna
            Set P3.0
            Lsb = 256 - Lsb
          End If
 
          Temp = Lsb / 2
          If Temp < 35 Then Set P3.5	'alarm
          If Ur = 0 Then Ur = 1
 
        Else
          Wysw10 = 28			'E
          Wysw1 = 231			'r
        End If
       End If
 
       Enable Interrupts
       '***************************************
     End If
     '***************************************
   End If
   '***************************************
 End If
Return
 
'****************************
      'Inne Etykiety
'****************************
 
Przelicz:
 If Wysw < 100 Then
   Wysw1 = Wysw Mod 10
   Wysw1 = Lookup(wysw1 , Tabela2)
   If Wysw > 9 Then
     Wysw10 = Wysw / 10
     Wysw10 = Lookup(wysw10 , Tabela1)
   Else
     Wysw10 = 255		'wygaszenie wyswietlacza dziesiatek
   End If
 Else
   Wysw10 = 127			'- temperatura ponad 99 stopni
   Wysw1 = 239			'- temperatura ponad 99 stopni
 End If
Return
 
Wyswietl:
  Mux = Not Mux
  If Mux = 1 Then
    Reset P3.1
    P1 = Wysw1
    Set P3.7
  Else
    Reset P3.7
    P1 = Wysw10
    Set P3.1
  End If
Return
 
Tabela1:
 Data 136 , 235 , 76 , 73 , 43 , 25 , 24 , 203 , 8 , 9
'znak: 0     1     2    3    4    5    6    7    8   9
 
Tabela2:
 Data  17 , 125 , 35 , 41 , 77 , 137 , 129 , 61 , 1 , 9
'znak:  0    1     2    3    4    5     6     7   8   9

Termometr działa OK, nie wiem tylko dlaczego po odłączeniu czujnika lewy wyświetlacz jest wygaszony, prawy wyświetla "0" a oba powinny wyświetlać "Er". Może ktoś mnie oświecić co jest nie tak?

Chciałbym też ustawiać temperaturę progową dla alarmu w ten sposób, że po włączeniu termometru wynosi ona np. 35 i za pomocą dwóch przycisków +/- można ją ustawić w zakresie 30-40. Krótkie naciśnięcie jednego z przycisków pokazuje na wyświetlaczu aktualne ustawienie a dłuższe zmienia wartość co 1 w górę (+) lub w dół (-) i ją wyświetla. Pomoże ktoś napisać taki program obsługi 2 przycisków?

Jestem mało wprawiony w Bascomie, więc bądźcie wyrozumiali ...

Portret użytkownika mirley

Re: Termometr

po pierwsze przerobionych kodów źródłowych nie należy umieszczać w tym miejscu tylko na forum... jest tam specjalny dział gdzie można wkleić przerobiony przez siebie kod wraz z opisem co i gdzie zostało zmodyfikowane. Pamiętaj o tym bo następnym razem wpis poleci do kosza

Er nie wyświetla Ci się i nigdy nie wyświetli bo modyfikujesz wartość zmiennych byle gdzie w programie. Specjalnie tak to napisałem żeby wysw10 i wysw1 były modyfikowane tylko w procedurze przelicz i tam musisz sobie to wpisać z odpowiednim warunkiem żeby się ustawiało. teraz ustawiasz te zmienne przy pomiarze temperatury i co z tego jak pierwsze wywołanie procedury Przelicz kasuje te wartości i nadpisuje je wartością temperatury co w tym przypadku jest równe 0

CO do ustawiania temperatury to popatrz na kod z termostatem do 2051, bez trudu sobie przerobisz pod attiny.

-

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

wyłączenie buzera na określony czas

Jak po włączeniu alarmu wyłączyć buzer przyciskiem na określony czas np. 5 min. a jeśli po jego upływie temperatura będzie dalej poza zakresem, to włączy się on znów automatycznie?

Czy program obsługi przycisku wyłączającego ma być w pętli głównej, czy może być np. w podprogramie Sterowanie?

Pozdrawiam

Portret użytkownika mirley

Re; Termostat

nie wiem z jakiego kodu źródłowego korzystasz ale popatrz na kod z termostatem, jest w załącznikach. Masz tam specjalny fragment do obsługi przycisków, w przerwaniu ustawiana jest zmienna bitowa (tak zwana flaga) co 100ms, następnie w pętli głównej program wykonuje obsługę przycisków tylko gdy flaga jest 1 i natychmiast ją zeruje. W taki sposób powinieneś zrobić obsługę przycisków, jak w moim kodzie z termostatem

Co do odliczania tego czasu 5min to polecam zrobić licznik pod tą samą flagą co przyciski, jeśli buzzer został wyłączony to licznik liczy, gdy dojdzie do 3000 (5min *60sek *10 bo co 100ms liczy) to zostanie znowu włączone zezwolenie na alarm, które wcześniej wyłączył przycisk

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

attiny 2313 i 85 stopni

witam mam problem z termometrem otóż zbudowałem go w pełni opierając się na tym projekcie nic nie zmieniałem! po za tym że zastosowałem attiny 2313 zamiast 89c2051
po uruchomieniu termometru najpierw na wyświetlaczu ukazał mi się wynik 0.0 po dodaniu rezystora podciągającego 4,7k
na wyświetlaczu ukazało mi się 85 stopni celsjusza i tak jest cały czas czytałem że może być to spowodowane zbyt krótkim czasem jaki procesor daje d`sowi na odczyt temperatury

Portret użytkownika mirley

Re: termometr

A fusebity ustawiłeś dla mikrokontrolera attiny2313? Jeśli wszystko dobrze podłączyłeś zgodnie z wytycznymi i fusebity są dobrze ustawione to ds ma cała sekundę żeby zmierzyć temperaturę co jest spokojnie z zapasem

-

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

attiny 2313 i 85 stopni

problem rozwiązany jeszcze raz sprawdziłem wszystko i okazało się że zamiast kwarcu 12MHZ włożony jest 12 ale KHZ
po wymianie kwarcu wszystko jest ok mam tylko jeszcze jedno pytanie jak wyeliminować to mrugnięcie wyświetlacza co jakiś czas

Portret użytkownika mirley

Re: Termometr

trzeba napisać program od podstaw aby to wyeliminować

-

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 odpaliłem układ ale mi

Witam odpaliłem układ ale mi nie działa do końca.Na wyświetlaczach pokazują się czasami głupoty(kilka kresek śiwic inne nie)a czasami Err.Co to?Dawałem 2 inne czyjniki ds18b20.Czy jak wyświetla mi sie Err to znaczy że to jest bład na płytce(złożyłem na uniwersalnej) czy w programowaniu.

Portret użytkownika gosc

Dobra z tym problem sobie

Dobra z tym problem sobie poradziłem, DS źle podłączyłem.Ale ma nowy :( Temperatura ciagle mi skacze.Raz 80,70.6,55.3 itd Nie nie wskazuje mi tkaiej tem. jąką mam w pokoju.
Bardzo proszę o pomoc :)

Portret użytkownika mirley

Re: Ds18B20

A rezystor podciągający 4,7k na linii danych ds18B20 masz zamontowany?

-

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, z termometrem dałem

Witam, z termometrem dałem sobie radę.Źle podłączyłem wyświetlacze, nie te anody nie do tych tranzystorów:D Ale teraz zabrałem się za teemostat.Pobrałem kod źródłowy do termostatu.Jedyne co zmieniłem to uc na attinz2313 i jak naciskam F7 to wywala mi błędy,a konkretnie czepia się tej linijki:
If P3.3 = 0 And P3.4 = 1 Then 'plus

Mirley: Edytowałem wpis, po co wklejasz kod do odpowiedzi jak jest w załączniku a dodatkowo jeszcze źle... nie wiesz jak używać znaczników do formatowania tekstu?

Portret użytkownika mirley

Re:termostat

Nie skompilujesz kodu od 2051 bezpośrednio pod attiny. Otwórz w bascomie avr kod od termometru dla tiny2313 i porównaj z kodem termostatu dla 2051 i dopisz odpowiednie procedury w kodzie dla 2313. Nazwy pinów są inne niż w 2051 i program jest trochę inaczej zbudowany.

-

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 boa243

napięcie zasilania

Witam. mam takie pytanie. zasilajac uklad 9V stanie sie cos z controlerem? posiadam tylko taki zasilacz i dlatego pytam?

Portret użytkownika mirley

Re: Zasilanie

Prawie napewno się spali, zasilanie ma być 5V. Zastosuj układ stabilizatora 7805 (popatrz do miniprojektów na schematy minizasilaczy) i będziesz miał z 9V wystabilizowane 5V tak jak jest 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 Mati

Witam i mam takie pytanie...

Witam i mam takie pytanie... pewnie jest to banalne ale jestem początkującym elektronikiem i mam problem z programem
NIE ROZUMIEM TEJ CZESCI:

Przelicz:
 If Wysw < 100 Then
   Wysw1 = Wysw Mod 10
   Wysw1 = Lookup(wysw1 , Tabela2)
   If Wysw > 9 Then
     Wysw10 = Wysw / 10
     Wysw10 = Lookup(wysw10 , Tabela1)
   Else
     Wysw10 = 255		'wygaszenie wyswietlacza dziesiatek
   End If
 Else
   Wysw10 = 127			'- temperatura ponad 99 stopni
   Wysw1 = 239			'- temperatura ponad 99 stopni
 End If
Return
 
Wyswietl:
  Mux = Not Mux
  If Mux = 1 Then
    Reset P3.1
    P1 = Wysw1
    Set P3.7
  Else
    Reset P3.7
    P1 = Wysw10
    Set P3.1
  End If
Return
 
Tabela1:
 Data 136 , 235 , 76 , 73 , 43 , 25 , 24 , 203 , 8 , 9
'znak: 0     1     2    3    4    5    6    7    8   9
 
Tabela2:
 Data  17 , 125 , 35 , 41 , 77 , 137 , 129 , 61 , 1 , 9
'znak:  0    1     2    3    4    5     6     7   8   9

I teraz moje pytanie czy jest ktos w stanie mi to wytłumaczyc
Pozdrawiam Mati

Portret użytkownika mirley

Re: Procedury

Masz tu dwie oddzielne procedury. Przelicz: ma za zadanie zamienic wartość Wysw symbolizującą wyświetlaną wartość na dwie wartości wysw1 czyli jednostki i wysw10 czyli dziesiątki. Pierwsze wartość jest dzielona na cyfrę jednostek i dziesiątek a potem przeliczona na kod wyświetlacza 7-segmentowego za pomocą tabel i polecenia lookup. jest tam trochę if'ów ale one uzupełniają tylko wskazania o specjalne stany takie jak wygaszenie wyświetlacza lub error itp

Procedura Wyswietl: multipleksuje wyświetlacz i tu nie ma co opisywać, co określony czas rzędu 4ms zapalany jest raz jeden a raz drugi wyświetlacz i wystawiana odpowiednia cyfra na odpowiednim miejscu. Bezwładność oka daje efekt ciągłego świecenia obu wyświetlaczy

Ps. Następnym razem poprawnie formatuj tekst albo pójdzie do kosza. Nie zawsze mam czas i chęci aby poprawiać złe wpisy

-

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 Mati

Wielkie dzięki za

Wielkie dzięki za odpowiedz
Tylko dręczy mnie jeszcze jedno pytanie czy czujnik DS18B20 jak połączę go tak ze jego plusowa nóżkę zewre do masy to bedzie on działał gorzej?? i z tego co orientując sie bedzie trzeba przerobic program...

Portret użytkownika mirley

Re: Ds18B20

Gorzej nie będzie działał pod względem pomiaru ale z tego co pamiętam to wydłuży sie czas pomiaru. W tym przypadku nie powinno to mieć znaczenia bo odczyt jest co sekundę. Musisz sobie sprawdzić ale ja zawsze podłączam zasilanie dodatkowym przewodem aby mieć pewność że wszystko będzie dobrze działało.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Mati

Dzieki wielkie za informacje

Dzieki wielkie za informacje
Pozdrawiam Mati