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

Trzeba by było zastosować albo termoparę albo PT100 ale termopara będzie chyba lepsza... do tego całkiem inny układ pomiarowy i mikrokontroler z przetwornikiem.... Trzeba zrobić całkiem nowy projekt

-

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 Frodus

Działa!

Mirley. Poradziłem sobie z termometrem.

2 attiny w tym poległy, albo były trefne, bo praktycznie cały czas robiłem identycznie:)

Portret użytkownika jaro

termostat

Witam,
czym różnią się te dwa kody źródłowe oprócz tego, że są na różne uC?

Kod Źrodłowy (wersja z termostatem, dla ATTiny2313, Bascom AVR) (jeszcze nie testowana)
Kod źródłowy (dla ATMega8, Bascom AVR)

Czy oba mają możliwość ustawiania temperatury i histerezy?

Portret użytkownika mirley

Re: termometr

Tylko wersja na tiny2313 jest z termostatem

-

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 jaro

Re: Termostat

Czy jest możliwość ustawiania w termostacie temperatury i histerezy? Czytałem forum, ale co chwilę było coś zmieniane (raz temp na stałe w programie, a raz, że można ustawiać) i w końcu nie wiem jakie są opcję programu, a nie mam teraz możliwości sprawdzenia analizując program.

Portret użytkownika mirley

Re: Termostat

normalnie histereza i temperatura ustawiana jest na stałe ale w programie jest zakomentowany fragment od obsługi dwóch przycisków. Dwa na raz wchodzą do menu ustawienia temperatury i wtedy + i - kolejny raz 2 na raz wchodzi do histerezy i potem powrót do wskazań

-

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 jaro

Re: Termostat

Dzięki bardzo. Czy wystarczy wyłączyć ustawienie przycisków jako komentarze, czy trzeba zmienić wartość ustawionej temperatury? Chcę, aby np. wartość początkowa wynosiła 30 stopni.

Portret użytkownika mirley

Re: Termometr

Powinno działać bez kłopotu ale najpierw sprawdź wersję bez przycisków. Temperatury zmień na początku:

Tempu = 300     'oznacza 30.0 stopni, 30.5 stopnia to 305
Histereza = 20  'tak samo

-

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 marekszy

Termostat

próbowałem odpalić kiedyś tą wersję z przyciskami,niestety nie mieści się w attiny 2313, zrobilem w końcu układ "Minitermometr Uniwersalny",dopisałem zmiany które tam radzili,jest ustawianie temperatury z przycisków,pamięć ustawień, a histerezę ustawiasz w programie jaką potrzebujesz w dół i drugą w górę.Termostat pracuje od miesiąca bardzo dobrze, naprawdę udany projekcik.

Portret użytkownika jaro

termostat

marekszy jak to ustawiłeś, które linijki trzeba wyrzucić? Kombinuje w programie, aby ustawić histerezę na stałe i ustawianie z przycisku tylko temperatury, ale ciągle program jest za duży.

Portret użytkownika marekszy

termostat

Przestałem z nim kombinować,tylko zrobiłem to jak napisałem na "Minitermometrze Uniwersalnym",dzisiaj wrzuciłem komuś tam cały listing,jest jeszcze w odpowiedziach na stronie głównej.

Portret użytkownika luxus19

Witam, czy można przerobić w

Witam, czy można przerobić w jakiś sposób ten projekt żeby temp. można było uzyskać do 200*C

Portret użytkownika mirley

Re: Termometr

Nie można bo ds tyle nie wytrzyma tylko do 125 *C

-

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

Portret użytkownika luxus19

:( masz może jakiś projekt

:( masz może jakiś projekt który byś udostępnił żeby można było mierzyć temp. do 200*C??

Portret użytkownika mirley

Re: Termometr

Niestety nie mam takiego projektu ale poszukaj czegoś w oparciu o czujnik PT100. Jeśli nie trzeba dużej dokładności to 10 bitowy przetwornik w mikrokontrolerze powinien dać sobie radę z tym czujnikiem i nie trzeba wtedy za bardzo cudować.

-

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 luxus19

hmmm, tylko ze nie bardzo

hmmm, tylko ze nie bardzo potrafię programować. Pozdrawiam

Portret użytkownika gosc-adikus777

zasilanie

Witam, chcę zrealizować ten projekt na ATTiny 2313.
Mam pytanie czy bedzie zasilany ten termometr?

Portret użytkownika jaro

Re: zasilanie

Czy będzie zasilany? Jeśli go nie zasilisz, to go nie włączysz.
Jeżeli pytanie miało brzmieć "czym będzie zasilany", to można odpowiedzieć zasilaczem 5V, bądź po wstawieniu na zasilaniu stabilizatora 7805 może być zasilany napięciem z zakresu 5V do 30V prądu stałego (układ minizasilacza znajdziesz na tej stronie w dziale miniprojekty).

Portret użytkownika QeTli

histereza

Jaka jest histereza tego termostatu?

Portret użytkownika mirley

Re: Termostat

histereza 2 stopnie

-

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 berciak

Witam potrzebuje zainfekować

Witam potrzebuje zainfekować AT89C205 3 termometry :)
Koszt programatora 85 zł możne ktoś tu by mi wykonał taką usługę

Portret użytkownika darek793

Atmega8 i minus

Witam
Poskładałem Twój termometr w wersji oprogramowania na atmegą8. Działa wybitnie. Zastosowałem jednak wyświetlacz poczwórny i chciałbym na wolnym segmencie wyświetlać znak minusa. Przejrzałem forum i znalazłem kilka postów na ten temat ale żaden nie dotyczył bezpośrednio atmegi. Kombinowałem z przerobieniem znalezionego tutaj kodu do attiny ale mi coś nie wychodzi. Mógłbyś mi podpowiedzieć
w których linijkach kodu pomieszać. Czwartą anodę mam podłączoną poprzez tranzystor do portu c.3.

Portret użytkownika Virus

Re: Atmega8 i minus

Witam ! Właśnie zrobiłem już 3 termometr i akurat na atmedze8. Mój kawałek kodu na wyświetlanie minusa podaję poniżej. Wyświetlany jest zależnie od ilości cyfr na 4 lub 3 cyfrze i tak aby nie było go przy temperaturze 0.

   Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
   Wysw1000 = 255
 
   If Wysw100 = 192 Then
     Wysw100 = 255                                          'wygaszenie zera wiodacego
     If Minus = 1 And Wysw10 <> 192 Then Wysw100.6 = 0
   Else
     If Minus = 1 Then Wysw1000.6 = 0
   End If
 
Wyswietl:
 
  Incr Mux
  If Mux = 4 Then Mux = 0
 
  Select Case Mux
    Case 0:
      Set Portc.0
      Portd = Wysw1000
      Reset Portc.3
 
    Case 1:
      Set Portc.3
      Portd = Wysw100
      Reset Portc.2
 
    Case 2:
      Set Portc.2
      Portd = Wysw10
      Reset Portc.1
 
    Case 3:
      Set Portc.1
      Portd = Wysw1
      Reset Portc.0
  End Select

Portret użytkownika darek793

Re. Atmega8 i minus

Witam !
Dziękuję Virus za szybką odpowiedź. Przerobiłem kod wg. twojej propozycji i przyznaje, że minus działa jak należy ale pojawił się inny, dość dziwny problem. Cyfra na pozycji 2 i minus świecą bardzo słabo. Na nieprzerobionym programie to zjawisko nie występuje. Wszystkie cyfry świecą jednakowo. Nie mam pojęcia gdzie leży przyczyna. Masz jakiś pomysł?

Portret użytkownika Virus

Re: Atmega8 i minus

Mój układ na chwilę obecną jeszcze jest nie do końca gotowy więc nie mogę sprawdzić u siebie jak wyświetla znaki. Robiłem również na Attiny2313 i kod był bardzo podobny z tym, że tam są 3 cyfry ale mierzy temperatury powyżej 100 stopni i z dokładnością do 1 stopnia. Nie zauważyłem żadnych problemów z wyświetlaniem przy temperaturach ujemnych.

Portret użytkownika gosc-adikus777

Zasilanie

Czy można zasilić termometr ładowarką do telefonu komórkowego?
Ładowarka do samsunga o parametrach: Output 5.0V 0.7A

Portret użytkownika darek793

Re. Zasilanie

Witaj
Ładowarki z telefonów nadają się do zasilania tego typu układów. Trzeba jednak sprawdzić jak bardzo wiarygodne jest to co napisane na obudowie. Przykład, oryginalna ładowarka z Nokii o parametrach 3.6V 355mA bez obciążenia daje przeszło 7V. Więc trzeba było zastosować stabilizator 5V i działa bez problemu od kilku tygodni. W twoim przypadku sprawdź napięcie ładowarki bez obciążenia. Jeżeli jest stabilne 5V +/-10% to prawdopodobnie będzie dobra, jeżeli wyższe to trzeba zastosować stabilizator. Przy czym należy pamiętać, że stabilizator 5V potrzebuje minimum ok. 7,5V aby poprawnie pracować.Pozdrawiam

Portret użytkownika mirley

Re: Termometr

Odnośnie termometru na M8. Sprawdź czy port C ma wszystkie piny poprawnie ustawione jako wejścia/wyjścia. Te co sterują anodami mają być wyjściami. Ponadto może w innej części programu robisz coś z portem na którym jest ten wyświetlacz słabo świecący. Sprawdź też sam układ sprzętowy np poprzez zamianę w programie kolejności cyfr. Jak zaświeci słabo na innym wyświetlaczu to napewno nie jest wina sprzętu.

-

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

Portret użytkownika darek793

Re: Termometr

Witam!
Konfiguracja pinów jest identyczna jak w twoim programie. Czyli wszystkie porty c ustawione jako wyjścia. Na pinach od c.0 do c.3 podpięte są anody, na c.5 jest DS reszta jest nie używana. Gdy w atmedze jest twój program bez żadnych zmian wyświetlacz świeci ładnie i równo. Natomiast gdy wgrywam kod zmieniony przez kolegę Virus wszystko się psuje. Kombinacja z case'mi powoduje zmianę miejsc świecących słabiej segmentów. Czyli sprzęt działa prawidłowo. Nie wiem czy dobrze zrobiłem ale na początku zmienionego kodu dodałem dimy deklarujące wysw1000 , wysw1000.6 i wysw100.6 jako bajt. Przy czym nic się nie zmienia w problemie wyświetlania jeżeli je usuwam. Cały kod ze zmianami zamieszczam poniżej. Może to pomoże w lokalizacji problemu.

'****************************
           'Konfiguracja
'****************************
'$regfile = "attiny2313.dat"
$regfile = "m8def.dat"
$crystal = 12000000
 
'Config Portb = &B11111111 : Portb = &B11111111
'Config Portd = &B11111111 : Portd = &B11111111
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
 
 
Config 1wire = Pinc.5
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
Dim Wysw1000 As Byte , Wysw1000.6 As Byte , Wysw100.6 As Byte
Dim Wysw_pomoc As Word
Dim Tempa As Word
Dim Mux As Byte
 
Dim Zezw_wysw As Bit
Dim Pomiar_odczyt As Bit
Dim Minus As Bit
Dim Ur As Bit
'****************************
      'Wartosci Poczatkowe
'****************************
Reset Pomiar_odczyt
Reset Ur
Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
Wysw1000 = 191
'****************************
      'Petla glowna
'****************************
Do
 
If Zezw_wysw = 1 Then
  Reset Zezw_wysw                                           'co 4ms
  Wysw = Tempa
 
  If Ur = 1 Then Gosub Przelicz
  Gosub Wyswietl
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 5
Incr Co4ms
 If Co4ms = 3 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
   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
 
 
 
    Wysw1 = Lookup(wysw1 , Tabela)
   Wysw10 = Lookup(wysw10 , Tabela2)
   Wysw100 = Lookup(wysw100 , Tabela)
   Wysw1000 = 255
 
   If Wysw100 = 192 Then
     Wysw100 = 255                                          'wygaszenie zera wiodacego
     If Minus = 1 And Wysw10 <> 192 Then Wysw100.6 = 0
   Else
     If Minus = 1 Then Wysw1000.6 = 0
   End If
   End If
Return
 
Wyswietl:
 
  Incr Mux
  If Mux = 4 Then Mux = 0
 
  Select Case Mux
    Case 0:
      Set Portc.0
      Portd = Wysw1000
      Reset Portc.3
 
    Case 1:
      Set Portc.3
      Portd = Wysw100
      Reset Portc.2
 
    Case 2:
      Set Portc.2
      Portd = Wysw10
      Reset Portc.1
 
    Case 3:
      Set Portc.1
      Portd = Wysw1
      Reset Portc.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
'*******************************************************************************
 
'*******************************************************************************

Portret użytkownika Virus

Re: Termometr

Masz podwójne wygaszanie zera wiodącego więc usuń ten wpis:

If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodącego

Deklaracje
Wysw1000.6 As Byte , Wysw100.6 As Byte

są zbędne i niepotrzebne.

Portret użytkownika darek793

Re: Termometr

Witam!
Rozwiązałem problem nierównego wyświetlania. Wystarczyło dopisać return po if'ach odpowiedzialnych za wyświetlenie minusa. Teraz wszystko ładnie świeci ale jest następny problem. Wbrew założeniom minus nie przesuwa się na czwartą pozycję. Gdy na wyświetlaczu jest temperatura poniżej -10 st. minus znika. Może masz jakiś pomysł jak to naprawić. U góry kod z poprawionym wyświetlaniem.

Portret użytkownika Virus

Re: Termometr

Powyżej napisałem abyś zlikwidował pierwsze wygaszanie zera wiodącego i będzie OK.

Portret użytkownika gosc-adikus777

Stosujac ATtiny 2313 nalezy

Stosujac ATtiny 2313 nalezy wmontowac reyzstor 4,7 k miedzy plus zasilania a 9 nuzke ATtiny_

Portret użytkownika darek793

Re: Termometr

Witam!
Dawno wykasowałem z listingu pierwsze wygaszenie zera wiodącego tylko zapomniałem zaznaczyć tego w poście.
Przepraszam. Niestety nie rozwiązało to problemu. Może inne propozycje?

Portret użytkownika adikus777

Witam, mam pytanie. Jaka

Witam, mam pytanie. Jaka wartosc ma być rezystora miedzy plusem a 9 nóżką układu ATtiny2313? Bo dla AT89C2051 ma on mieć 4,7k .

Portret użytkownika darek793

Re: Witam

Witam!
Ma on mieć tak jak podaje producent DS'a 4,7k. Służy on jako podciągnięcie do plusa zasilania lini sygnałowej czujnika.

Portret użytkownika Virus

Re:Termometr

Jeśli masz temperaturę -9,9 stopnia i przechodzi na -10,0 stopnia to minus Tobie znika ? Sam kod jest poprawny bo sprawdzałem u siebie i działało dobrze. Rozumiem, że 4 cyfrę masz również podłączoną przez tranzystor do Atmegi. Wstaw jedną linijkę aby sprawdzić czy będzie wyświetlać

Wysw1 = 191
Wysw10 = 191
Wysw100 = 191
Wysw1000 = 191

Portret użytkownika darek793

Re: Termometr

Witam!
Dziękuję kolego Virus, o to właśnie chodziło. Dopisałem zasugerowaną linijkę i wszystko jest ok. Minus przechodzi na 4 pozycję w momencie gdy temperatura spadnie poniżej -10.0 st. U góry działający, poprawiony kod ze wszystkimi zmianami. Termometr ma już obudowę więc zamieszczę go w galerii, oczywiście jeżeli Mirley pozwoli i ktoś powie jak tego dokonać. Jeszcze raz dzięki za pomoc. Pozdrawiam

Portret użytkownika Virus

Re: Termometr

Linijka którą dodatkowo wpisałeś powoduje wyświetlanie 4 kresek zaraz po włączeniu i nie ma znaczenia dla wyświetlania minusa ale skoro to pomogło to może być. Ja już zbudowałem 3 takie układy i pierwszy miał wyświetlacz czterocyfrowy ale dałem tylko 3 tranzystory. Pierwsza cyfra od lewej i tak tylko wyświetla minus więc jest bezpośrednio podpięta do Attiny2313. Trzeba tylko w kodzie pamiętać o innych ustawieniach portów dla tego segmentu.

Portret użytkownika darek793

Re: Termometr

Tak też się wyświetliło czyli 4 kreski. Bez tej linijki wyświetlał po włączeniu coś takiego 8---. W każdym bądź razie linijka zrobiła swoje i to jest najważniejsze. Jeszcze raz dzięki. Ja mam wszystkie anody na tranzystorach, bo nigdy nie wiadomo co będzie z termometrem w przyszłości:)

Portret użytkownika Virus

Przyciski

Czy ktoś może mi wytłumaczyć te linie:

Sw_port = Pind And &B11100111
Shift Sw_port , Left , 3
 
If Sw_port <> 255 And Stan_portu = Sw_port Then

Nie bardzo rozumiem działania i w jaki sposób program wie jakie przyciski wciskam. Zrobiłem termostat na Atmedze i wejścia mam pod PB0 oraz PB1. Przerobiłem program ale mi nie reaguje na wciśnięcie klawisza.
Tak wygląda moja przeróbka:
Sw_port = Pinb And &B11111100
Shift Sw_port , Left , 6
 
If Sw_port <> 255 And Stan_portu = Sw_port Then

Oczywiście na początku ustawiłem wejścia na odpowiednich portach.

Portret użytkownika mirley

Re: Sw_port

Sw_port = Pind And &B11100111
Shift Sw_port , Left , 3
 
If Sw_port <> 255 And Stan_portu = Sw_port Then

W pierwszej linii do zmiennej sw_port ma być zapisywany stan portu D z zamaskowaniem pinów na których nie ma przycisków. Ma tam być funkcja or a nie and jak teraz patrzę, dziwne że nikt wcześniej nie zgłosił problemu.

Druga linia przesuwa bity portu tak aby bity tak aby przyciski znalazły się na najmłodszych pozycjach. I tu znów powinno być right a nie left.

W twoim przypadku wystarczy napisać:

Sw_port = Pinb Or &B11111100
 
If Sw_port <> 255 And Stan_portu = Sw_port Then

bo przyciski masz już na najmłodszych bitach

-

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 Virus

Re: Sw_port

No właśnie tak mi wychodziło, że jest coś nie tak ale szukałem i nikt nie zgłaszał problemu. Dlatego myślałem, że to ja źle rozumuje. Teraz poprawię i dam znać czy zacznie działać.

Portret użytkownika Virus

Re: Sw_port

Wracałem z pracy do domu i myślałem nad tym co napisałeś Mirley i nadal mi nie pasowało. Ja użyłem takiego wpisu:

Sw_port = Pinb And &B00000011
 
If Sw_port < 3 And Stan_portu = Sw_port Then

Przy okazji usunąłem znaki których znaczenia nie rozumiem:
'(
')

Wtedy wszystko ruszyło i działa jak należy.

Portret użytkownika mirley

Re: Sw_port

Tak jak napisałeś tez może być. Ważne tylko aby stan który jest spoczynkowy był wykluczony w ifie "If Sw_port < 3 And...." w twoim przypadku to 3, a w moim 255. Inne są też potem stany w case od przycisków.

Te linijki z '( i ') to komentarz blokowy. kod między tymi znakami jest pomijany

-

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 adikus777

ds18b20

Witam,
mam pytanie dotyczące zasady pomiaru temp. przez czujnik DS18B20. Na jakiej zasadzie mierzy temp., bądź jakie zjawisko wykorzystuje czujnik do zmierzenia temp. ?
Proszę o pomoc bądz jakieś linki dotyczące tematu.

Portret użytkownika mirley

Re; DS

Producent nie napisał w karcie co wykorzystuje do pomiaru temperatury. Prawdopodobnie zmianę napięcia przewodzenia złącza półprzewodnikowego wraz ze zmianą temperatury

-

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 Chester

Zabezpieczenie czujnika

Witam :)
chciałem się dowiedzieć w jaki sposób mogę zabezpieczyć czujnik ds'a ponieważ chcę mierzyć temperaturę rury czyli około 100 stopni Celsjusza? Czy bezpośredni go przykleić do rury czy dac do koszulki termokurczliwej? A może jakiś inny sposób :) Z góry dziękuje za odpowiedzi :)
Pozdrawiam!

Portret użytkownika mirley

RE: DS

Osobiście nałożył bym koszulki na nóżki ds'a tak aby sie nie zwarły do siebie. Czujnik natomiast płaską stroną przyłożył bym bezpośrednio do rury i szczelnie przytaśmował do niej taśmą klejącą. Na całość warto nałożyć fragment ocieplenia żeby czujnik nie był chłodzony z zewnątrz

-

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 milczaz

Termometr

Witam właśnie uruchomiłem termometr na AT89c2051 Działa !! ale mam małą prośbę chciałbym termometr używać jeszcze jako termostat i potrzebowałbym wsad w postaci HEX na niego z termostatem ,czy mogę liczyć na pomoc?
Plik hex jest potrzebny ponieważ programuje w programatorze smartProg.
Milczas