Minitermometr Uniwersalny


9.6
Ocena: None Średnia: 9.6 (10 głosujących)

Opisywany tutaj układ jest uniwersalnym termometrem dwukanałowym. Pracuje on w zakresie temperatur od -50.0 do +99.9 stopni. Układ został zaprojektowany do mierzenia temperatury w domu i na dworze ale z powodzeniem można dla niego znaleźć wiele innych zastosowań. 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/czujniki DS18B20 i mikrokontroler ATTiny2313 co znacznie uprościło jego konstrukcję i zmniejszyło wymiary. Termometr udało się tak skompresować, że prawie wszystkie elementy mieszczą się pod typowym wyświetlaczem 3-cyfry o wysokości rzędu 15mm. Projekt jest rozwinięciem układu dostępnego tutaj z tym że prawie wszystkie elementy zostały zmienione na komponenty SMD. Oczywiście można by było upakować bardziej elementy przewlekane jednak w dobie miniaturyzacji lepiej zrobić jeden krok dalej, budując układ o możliwie najmniejszych wymiarach. Daje to możliwość zamontowania gotowego modułu termometru lub prostego termostatu w już istniejące urządzenie lub zastosowanie obudowy niewiele większej od wyświetlacza. W wersji podstawowej termometr potrafi mierzyć dwie temperatury, wykorzystując dwa czujniki podłączone na niezależnych magistralach. Zmiany wyświetlanej aktualnie temperatury dokonuje się za pomocą dwóch przycisków.

Projekt został opublikowany w Elektronice dla Wszystkich 08/2011 i jest dostępny w postaci kitu AVT2985

Działanie:


Schemat ideowy układu znajduje się na rysunku poniżej:

Sercem urządzenia jest mikrokontroler U1 (ATTINY2313), który pracuje na wewnętrznym oscylatorze, bez dzielnika częstotliwości. Daje to w efekcie taktowanie 8MHz. Brak rezonatora kwarcowego pozwolił zmniejszyć płytkę a dodatkowo umożliwił wykorzystanie wolnego pinu XTAL jako portu wejściowego PA0, do którego obecnie dołączony jest przycisk S2. Zadaniem mikrokontrolera jest odczyt pomiaru temperatury z dwóch czujników, przeliczanie wskazań do postaci dogodnej dla wyświetlania i obsługa przycisków S1 i S2. Kondensator C1 (100nF), umieszczony blisko mikrokontrolera filtruje jego napięcie zasilania podobnie jak kondensatory C2 (10uF) i C3 (10uF), które są konieczne do prawidłowej pracy stabilizatora U3 (78L05).

Prostota układu wynika z zastosowanego czujnika temperatury, którym tym przypadku jest Ds18B20. Stanowi on w typowym ustawieniu 12-bitowy termometr cyfrowy mogący pracować w zakresie -55 do +125 stopni. Czas przetwarzania (konwersji) temperatury do wartości binarnej (liczby) trwa nie dłużej niż 750ms. Odczyt temperatury jest w pełni cyfrowy, a łączność z mikrokontrolerem zapewnia popularna magistrala 1-Wire.

Do prezentacji temperatury wykorzystywany jest trój-cyfrowy wyświetlacz LED (AT5636BMR-B) z wewnętrznie połączonymi segmentami, przystosowanymi do multipleksowania. Znakomicie ułatwia to proces projektowania płytki. W tym przypadku zastosowanie trzech pojedynczych wyświetlaczy uniemożliwiło by wykonanie taniej jednostronnej płytki drukowanej. Rezystory R4-R11 ograniczają prąd wyświetlacza LED do wartości maksymalnej rzędu 10-12mA (na segment). Średni prąd będzie jednak mniejszy ze względu na multipleksowanie. Do sterowania anodami wyświetlacza wykorzystywane są trzy popularne tranzystory T1-T3 (BC857). Ich prądy baz ograniczane są przez rezystory R1-R3 (3,3k). Zaświecanie cyfr na kolejnych wyświetlaczach odbywa się poprzez cykliczne podawanie stanu niskiego na bazę jednego z tranzystorów T1-T3. W tej same chwili na porcie B mikrokontrolera powinna pojawić się zakodowana wartość odzwierciedlająca wyświetlany znak.

Ważnym komponentem jest tutaj złącze GP1, które stanowi jednocześnie miejsce podłączenia czujników oraz wyjście sterowania (w przypadku budowy termostatu). Nie trzeba tutaj montować złącza goldpin, jak w projekcie modelowym, wystarczy wlutować przewody bezpośrednio w płytkę. W programie termometru stan niski na wyjściu sterowania pojawia się gdy temperatura jest ujemna. Wystarczy dołączyć diodę LED z szeregowym rezystorem 470R między to wyjście a +5V aby mieć sygnalizację znaku "-".

Budowa:


Układ z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Pomocą w konstrukcji będzie schemat montażowy termometru znajdujący się tutaj, natomiast elementy SMD można z łatwością zamontować posługując się rysunkiem dostępnym tutaj. Płytka została zaprojektowana jako jednostronna, a prawie wszystkie elementy są typu SMD. Wyjątek stanowią tu wyświetlacz, przyciski i złącza. Montaż nie jest skomplikowany ale wymaga niewielkiej wprawy w lutowaniu SMD. Na samym początku dobrze jest przylutować właśnie te elementy, ponieważ brak wystających części z drugiej strony ułatwi montaż. Należy zwrócić uwagę że obwód masy przechodzi w jednym miejscu przez zworkę jaką tworzy przycisk (przycisk ma 4 wyprowadzenia parami zwarte). Gdyby zaszła konieczność rezygnacji z przycisków to zamiast S1 należy wlutować zworkę po stronie masy (kolor czerwony). Wadą małej płytki jest brak wyprowadzonego złącza programującego procesora, więc gdyby zaszła konieczność zmiany programu będzie trzeba przylutować kabelek programujący do pinów mikrokontrolera. W roli złącza zasilania podobnie jak w przypadku GP1 dobrze sprawdzają się kabelki przylutowane bezpośrednio do płytki.

Opis pinów złącza GP1 przedstawiony jest na rysunku poniżej:

Wyprowadzenia 1 i 2 tego złącza to odpowiednio: zasilanie i masa. Wyjście sterowania (OUT) jest tutaj dostępne na pinie 3. Czujniki należy podłączyć trój-przewodowo wykorzystując wyprowadzone zasilanie, masę i linie sygnałowe 5 i 6. Linia danych czujnika pierwszego ma zostać podłączona do pinu 5, a z czujnika drugiego do pinu 6 złącza GP1. Układ termometru zasilany jest napięciem z przedziału 7-12V dzięki obecności stabilizatora 78L05. Nic nie stoi na przeszkodzie aby pominąć stabilizator a napięcie zasilania 5V podać bezpośrednio na termometr.

Wykaz Elementów:

2x uSwitch

3x 3,3k SMD/0805
2x 4,7k SMD/0805
8x 330R SMD/0805

2x 10uF SMD/3216A Tantalowy
1x 100nF SMD/0805

3x BC857
1x 78L05 SMD/SOT89
1x ATTINY2313 SMD/SO20
1x LED-AT5636BMR (Wyświetlacz potrójny)

Programowanie:


Program sterujący pracą termometru został napisany w dobrze znanym programie BASCOM AVR . Zajmuje on około 70% dostępnej pamięci mikrokontrolera i może być z powodzeniem kompilowany w wersji demo BASCOM'a. Działanie programu nie jest skomplikowane i w skrócie wygląda to następująco: cały czas procesor kręci się w nieskończonej pętli Do Loop, czekając na ustawienie jednej z flag taktujących w przerwaniu. Za odpowiednie taktowanie odpowiada Timer0. Co około 4ms wywoływana jest procedura multipleksowania wyświetlacza, z której w odpowiednim momencie następuje skok do odczytu temperatury.

Procedura obsługi przerwania Timera0 widoczna jest poniżej:

Przerwanie0:
Timer0 = 131
   Set F4ms
   Incr Dziel(1)
   If Dziel(1) = 25 Then
     Dziel(1) = 0
     Set F100ms
     Incr Dziel(2)
     If Dziel(2) = 10 Then
       Dziel(2) = 0
       Set F1s
     End If
   End If
Return

Na początku do licznika timera ładowana jest wartość 131, daje to przerwanie po odliczeniu 125 impulsów (256-131). Timer pracuje z dzielnikiem sprzętowym przez 256 co przy częstotliwości taktowania 8MHz daje przerwanie co 4ms. Bezpośrednio po wystąpieniu przerwania ustawiana jest flaga F4ms. Zmienne Dziel(1) i Dziel(2) stanowią dzielnik częstotliwości. Pierwsza odpowiada za podział przez 25 i po przepełnieniu licznika ustawiana jest flaga F100ms (następuje to co 100ms). Druga zmienna jest licznikiem do 10 i zapewnia ustawianie flagi F1s co 1s.

Pętla główna widoczna jest poniżej:

Do
 
If F4ms = 1 Then
  Reset F4ms                                                'co 4ms
  Wysw = T
  Gosub Wyswietl_zmierz
End If
 
If F100ms = 1 Then
  Reset F100ms                                              'co 100ms
  If Pind.2 = 0 Then Kanal = 1
  If Pina.0 = 0 Then Kanal = 0
End If
 
Loop
End

Działanie jest bardzo proste i zależne tylko od flag: F4ms i F100ms. Przez większość czasu procesor kręci się w nieskończonej pętli Do Loop czekając na ustawienie jednej z flag. Co 4ms wywoływana jest procedura obsługująca wyświetlacz i pomiar temperatury, natomiast co 100ms odczytywane są stany klawiszy. W podstawowej wersji programu wystarczy prosta obsługa klawiatury poprzez bezpośredni odczyt stanu pinów wejściowych. Naciśnięcie S1 powoduje przejście do odczytu drugiego czujnika, natomiast naciśnięcie S2 przechodzi do czytania czujnika pierwszego.

Procedura obsługi wyświetlacza i pomiaru temperatury widoczna jest poniżej:

Wyswietl_zmierz:
  Incr Mux
  If Mux = 5 Then Mux = 0
 
  Portd.3 = Not Minus
 
  For I = 1 To 3
    Wysw_pomoc = Wysw Mod 10
    Ww = Wysw_pomoc
    W(i) = Lookup(ww , Tabela)
    Wysw = Wysw / 10
  Next I
  If W(3) = 40 Then W(3) = 255           'wygaszenie zera wiodącego
 
  Select Case Mux
    Case 0:
      Portb = W(3)
      Reset Portd.6
    Case 1:
     Set Portd.6
     Portb = W(2) And &B11011111
     Reset Portd.5
    Case 2:
     Set Portd.5
     Portb = W(1)
     Reset Portd.4
    Case 3:
     Set Portd.4
     Portb = 255
     Gosub Temp
    'Case 4:  
  End Select
Return
 
Tabela:
    Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160

Działanie składa się z 5 kroków zależnych od stanu zmiennej pomocniczej Mux. Przyjmuje ona wartości od 0 do 4 i zmienia się cyklicznie z kolejnym wywołaniem procedury. Na wyjście sterowania (Portd.3) przepisywana jest zanegowana wartość zmiennej Minus. Odpowiada ona za wyświetlanie ujemnych temperatur i tym samym na porcie d.3 mikrokontrolera pojawia się stan niski gdy mierzona temperatura jest ujemna. W dalszej kolejności dzięki pętli for, zmienna Wysw, zawierająca wartość do wyświetlenia, dzielona jest na trzy pojedyncze cyfry. Następnie są one zamieniane na kody wyświetlacza LED za pomocą polecenia Lookup (z wykorzystaniem tabeli przeliczeniowej). Po wyjściu z pętli for uzyskuje się tablicę W(n) z zakodowanymi wartościami, gdzie n=1...3 indeksuje kolejne znaki wyświetlacza.

Dalsza część procedury zależy od zmiennej Mux. Dla wartości 0 do 2 zaświecane są kolejne cyfry poprzez wyłączenie poprzedniej anody, wystawienie na Portb wartości kolejnego znaku i włączenie odpowiadającej mu anody. Wyjątkiem jest tutaj znak W(2) gdzie dodatkowa operacja (And &B11011111) zapewnia dodanie kropki dziesiętnej po drugim znaku. Dla wartości Mux=3 wywoływana jest procedura pomiaru temperatury, a stan Mux=4 jest fazą oczekiwania na spokojne zakończenie pomiaru temperatury.

Procedura pomiaru temperatury widoczna jest poniżej:

Temp:
 If F1s = 1 Then
   Reset F1s
   1wreset Pind , Kanal
   1wwrite &HCC , 1 , Pind , Kanal
   1wwrite &HBE , 1 , Pind , Kanal
   T = 1wread(2 , Pind , Kanal):
   Minus = T.15
   T = Abs(t)
   T = T * 10
   T = T / 16
   1wreset Pind , Kanal
   1wwrite &HCC , 1 , Pind , Kanal
   1wwrite &H44 , 1 , Pind , Kanal
  End If
Return  

Procedura ta wywoływana jest co okoł0 20ms, jednak wykonywanie pomiaru odbywa się co 1s dzięki sprawdzaniu stanu flagi F1s. Występuje tutaj typowa obsługa magistrali 1-Wire dla przypadku obecności tylko jednego układu na magistrali. Wszystkie rozkazy 1-Wire wywoływane są z parametrem Kanal, który odpowiada za to z której magistrali temperatura ma być odczytana (pind.0 czy pind.1). Po wykonaniu resetu następuje wysłanie rozkazu pominięcia sprawdzania ROM oraz wysłanie rozkazu odczytu rejestru DS18B20. Następnie odczytywane są dwa bajty temperatury do zmiennej T (integer), określany jest znak temperatury i wykonywane są proste przeliczenia. W efekcie zmienna T przyjmuje postać temperatury w stopniach pomnożonej przez 10 (np. 13 to 1.3 stopnia). Na samym końcu wysyłany jest rozkaz konwersji temperatury aby w kolejnym odczycie uzyskać aktualną jej wartość.

Fusebity mikrokontrolera powinny być ustawione na pracę z wewnętrznym oscylatorem RC o częstotliwości 8MHz, co w praktyce sprowadzi się do wyłączenia jedynie dzielnika sprzętowego (Bit CKDIV). Ustawienia fusebitów, zrzut z programu burn-o-mat znajduje się poniżej:

Układ da się przerobić na termostat niewielkim nakładem pracy. Rezygnujemy wtedy z dwukanałowego pomiaru temperatury oraz ujemnych temperatur na koszt sterowania wyjściem. Do wyjścia sterowania (Portd.3) można dołączyć optotriaka i triaka sterującego dowolnym odbiornikiem prądu przemiennego lub można dołączyć tranzystor MOSFET sterujący odbiornikiem prądu stałego. W pętli głównej trzeba będzie wprowadzić modyfikacje widoczne poniżej:

If F4ms = 1 Then
  Reset F4ms
  If Ust = 0 Then Wysw = T Else Wysw = Tu
  Gosub Wyswietl_zmierz
End If
 
If F100ms = 1 Then
  Reset F100ms
  If Pind.2 = 0 Then
    Incr Tu
    Autoret = 20
  End If
  If Pina.0 = 0 Then
    Decr Tu
    Autoret = 20
  End If
 
  If Autoret > 0 Then
    Ust = 1
    Decr Autoret
  Else
    Ust = 0
  End If
 
  H = Tu + 10
  L =  Tu - 10
 
  If T > H Then Set Portd.3
  If T < L Then Reset Portd.3
End If

Taki kod wymaga zadeklarowania zmiennych Tu, H oraz L jako Integer oraz Ust jako Bit i Autoret jako Byte, na początku programu. Dodatkowo zmienna Tu powinna mieć wartość początkową, gdyż stanowi wartość temperatury ustawianej. W procedurze wyświetlania i mierzenia należy usunąć linijkę odpowiedzialna za sygnalizację ujemnych temperatur, gdyż portd.3 służy teraz jako wyjście sterowania. Przedstawione rozwiązanie nie jest idealne, nie ma żadnego ograniczenia na ustawiane wartości ani nie potrafi zapisywać ustawień do pamięci EEPROM ale w wielu sytuacjach znakomicie się sprawdzi. Może działać z powodzeniem jako termostat do trawiarki po ustawieniu domyślnej wartości Tu na 40 stopni.

Zdjęcia Projektu:

ZałącznikWielkość
Schemat61.36 KB
Płytka10.73 KB
Płytka (odbicie lustrzane)10.7 KB
Płytka (24 na stronie)157.02 KB
Montowanie (warstwa elementów)8.66 KB
Montowanie (warstwa druku)13.73 KB
Opis (warstwa elementów)53.3 KB
Opis (warstwa druku)100.45 KB
Soldermaska96.35 KB
Kod Źródłowy (termometr)3.11 KB
Program po kompilacji (bin) (termometr)1.44 KB
Program po kompilacji (hex) (termometr)4.06 KB
Kod Źródłowy (termostat)3.37 KB
Program po kompilacji (bin) (termostat)1.63 KB
Program po kompilacji (hex) (termostat)4.6 KB



Portret użytkownika Gość1

Niezły projekcik;d A mam

Niezły projekcik;d A mam pytanko, posiadam programator AVRPROG STK500 i pracuje w trybie HID (gdyż pracuje na lapku wind. 7 x64 i nie posiadam coma, a trybu com nie idzie u mnie włączyć dlatego nie mogę programować przez BASCOM AVR Studio itd.) Programuje na AVRDude zakładce GUI. Ściągłem AVRBurn i próbowałęm ustawić fusebity tak jak pokazywałeś, ale niestety nie mogę się połączyć z tym programem, poprostu coś nie gra z portami (mam ustawione usb). W zakładce gui 1.0.5 też mogę ustawić fusebity h,l i efuse tylko nie wiem jakie wartości wpisać. Chciałbym np. wywołaś rezonator 8Mhz lub inny, a nie mogę tego zrobić. Czy wiesz, może jak to zrobić?

Portret użytkownika mirley

Re: Fuses

Skoro działa ci avrdude to nie ma szans żeby burn-o-mat nie działał. Musisz najpierw po włączeniu programu ustawić w konfiguracji ścieżkę do avrdude.exe i conf, potem zapisać ustawienia i wyłączyć program. Włączyć jeszcze raz i ustawić typ programatora i port, powinno działać.

Mogę Ci podać ustawienia w formie liczb szesnastkowych ale na dłuższą metę to nie ma sensu.

-

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 Gość1

Mam ustawione stk500 v2 i

Mam ustawione stk500 v2 i port usb, avrdude. exe i conf. tak jak mówisz. Gdy wgrywam pamięć flash do attiny 2313 to mi wyskakuje "Error veryfing flash" avrdude.exe: usbdev_open(): did not find any USB device "usb"

Portret użytkownika Gość1

Byłbym bardzo wdzięczny za

Byłbym bardzo wdzięczny za forme szesnastkową. Wbije sobie chociaż przez gui. Interesowałaby mnie Attiny 2313 oraz Atmega8. Z góry dzięki. A z tym Burnem to mam wszystko ustawione tak jak mówisz, port usb, stk500v2 i mi wyskakuje błąd "Error veryfing flash" avrdude.exe: usbdev_open(): did not find any USB device "usb". Mam także problem z gui 1.0.5 z wgraniem pamięci eeprom gdyż też jakiś błąd mi wyskakuje.

Portret użytkownika mirley

Re: Minitermometr

Na rysunku z fusebitami powyżej masz wartości szesnastkowe Hfuse=DF i Lfuse=E4

-

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

Sygnalizacja temperatur

Witam !
Czy jest możliwość dołożenia diody [ diod ] sygnalizującej, który termometr w danej chwili pokazuje. Dwie diody fajna rzecz, tylko pytanie czy się da i kto to zrobi. Na mnie nie liczcie :-).

Portret użytkownika mirley

Re: Minitermometr

Można dołożyć jedną diodę na porcie PA.1, tylko trzeba go wczesniej przestawić w konfiguracji na poczatku programu na wyjście.

Zaraz po linijce Portd.3 = Not Minus dopisać trzeba:

If Kanal = 0 then porta.1 = 0 else porta.1 = 1

Można do tego portu w sumie dać dwie diody.....tak żeby jedna świeciła jak jest stan wysoki a druga jak jest stan niski. trzeba podłączyć w szeregu od 5V rezystor szeregowo z diodą led do portu i od portu drugi rezystor szeregowo z diodą do masy. Powinno 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 Gość1

Wpisałem kod taki jaki jest

Wpisałem kod taki jaki jest wpisany w kodzie hexa z twojej stronki i tak jakby się procek zablokował. Nie może się połączyć z programatorem? Co zrobić w takiej sytuacji?

Portret użytkownika mirley

Re: fusebity

Wgrywałaś fusebity? Bo jeśli nie to nic się nie powinno stać

-

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 Gość1

Zrobiłem najpierw read żeby

Zrobiłem najpierw read żeby zobaczeć jaki mam i zmieniłem w systemie hex tak jak podałeś dla attiny 2313 dla 3-8Mhz przy rezonatorze właśnie 8 Mhz i wgrałem to i nie chce się teraz się wogóle połączyć z tym prockiem. Nie mogę nic zrobić. Czy go zablokowałem jakoś czy jak? Ale wpisałem takie fusy jak podałeś dla 2313

Portret użytkownika mirley

Re: Fusebity

Jak wgrałeś takie wartości jak wyżej na rysunku z burn-o-mata to nie mogłeś zablokować .... może ustawiłeś na kwarc 3-8MHz, to wtedy bez kwarcu i kondensatorów nie pójdzie

-

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 Gość1

Ustawiłem na kwarc 3-8Mhz, u

Ustawiłem na kwarc 3-8Mhz, u siebie w układzie mam 8Mhz i teraz nic nie mogę zmienić. Nie mogę się połączyć. Wgrywałem wartości z Burna przez Gui 1.0.5

Portret użytkownika mirley

Re: Termometr

Nie powinieneś ustawiać na kwarc bo kwarca w układzie nie ma. Piny XTAL wykorzystywane są jako wejścia i wyjścia. Nie wiem czy po przestawieniu na kwarc procesor będzie dobrze działał. Masz coś podpięte do pinów 4 i 5 procka? Jak ustawiłeś na kwarc to musisz mieć podłączony żeby procek 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 jajen

diody

Quote:
Można dołożyć jedną diodę na porcie PA.1, tylko trzeba go wczesniej przestawić w konfiguracji na poczatku programu na wyjście.

Zaraz po linijce Portd.3 = Not Minus dopisać trzeba:

If Kanal = 0 then porta.1 = 0 else porta.1 = 1
Można do tego portu w sumie dać dwie diody.....tak żeby jedna świeciła jak jest stan wysoki a druga jak jest stan niski. trzeba podłączyć w szeregu od 5V rezystor szeregowo z diodą led do portu i od portu drugi rezystor szeregowo z diodą do masy. Powinno działać

Nie bardzo chce mi działać. Po podłączeniu jednej diody tj. anody do nożki nr 4 a katody przez rezystor do masy działa, ale dioda ledwo swieci (na nozce 4 jest 1,5v). Natomiast podpiecie drugiej diody tj katody do nozki nr 4 a anody przez rezystor do 5v swiecą obie diody zawsze. Zapewne zle podpinam. Prosze o podpowiedz.

Portret użytkownika robotyka

WOW

Bardzo udana konstrukcja.

Portret użytkownika Czytelnik

Witam, mógłbym prosić o

Witam, mógłbym prosić o podanie źródła gdzie kupie taki wyświetlacz??

Portret użytkownika mirley

Re: wyświetlacz

Można dostać w sklepie AVT lub na allegro.

----

co do diod to jakie rezystory dałeś? Dobrze by było 470R. Jak wygląda twoja linijka z konfiguracją portów? masz coś takiego:

Config Porta = &B00000010 : Porta = &B11111111

-

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 jajen

re:

Rezystory dałem 470ohm. Jedyne co zmieniłem w Twoim kodzie to po linijce "Portd.3 = Not Minus" dopisałem
"If Kanal = 0 then porta.1 = 0 else porta.1 = 1". Nic więcej nie zmieniałem, ale wnioskuję , że jednak trzeba coś jeszcze coś zmienić??? Mam tak jak w Twoim kodzie tj. Config Porta = &B00000000 : Porta = &B11111111 .

Portret użytkownika mirley

Re: Port

No to źle masz.... linijka ma wyglądać tak jak napisałem wyżej. Pin a.1 ma być wyjściem

-

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 jajen

re

Bardzo dziękuję za odpowiedz. Przetestuje dopiero w weekend i dam znać jak w praktyce działa.

Portret użytkownika morswin

termostat

Mam pytanie odnośnie zmiennych H i L nie są modyfikowane co 100ms gdyż każde spełnienie warunku If F100ms = 1 Then powoduje wykonanie operacji?

Portret użytkownika mirley

Re: H i L

Nie są modyfikowane dopóki nie zmieni się Tu, przypisywane jest to samo co cykle. W sumie mogło by to być przy ustawianiu od razu zrobione ale wtedy musiało by byc dwa razy w kodzie. W takim programie to bez znaczenia

-

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 drowning_man

Termostat.

Projekt godny uwagi i zamierzam go wykonać. Mam takie pytanie, czy jest możliwośc zachowania pomiaru dwóch temperatur oraz temperatur ujemnych i dodanie do tego termostatu na jednym z ds-ów? Na schemacie widzę, że jest wolna jeszcze jedna noga z procka. Czy będzie to spore utrudnienie? Taki zestaw byłby bardzo przydatny np. do auta - pomiar temp zewnętrznej oraz wewnętrznej i do tego sterowanie załączaniem klimatyzacji poprzez termostat. Jestem bardzo zainteresowany połaczeniem dwóch termometrów (ze wskazaniami ujemnymi) oraz termostatu.

Portret użytkownika mirley

Re: Program

No to wklej obsługę termostatu do programu z dwoma ds'ami.... wydaje mi się że będzie problem z miejscem w procesorze

-

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 morswin

eeprom

Jak zamieścić prawidłowo zapis ustawionej wartości do eeprom, mam z tym problem gdy umieściłem do tu

If Autoret > 0 Then
    Ust = 1
    Decr Autoret
  Else
    Ust = 0
    writeeeprom
  End If

wyświetlacze zaczęły migać

Portret użytkownika mirley

Re: eeprom

To nie dziwne.... dałeś wykonywac zapis co każdy cykl i temu tak miga. daj tak:

If Autoret > 0 Then
    Ust = 1
    Decr Autoret
    if Autoret = 0 then
      writeeeprom
    end if
  Else
    Ust = 0
 
  End If

-

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 morswin

eeprom

Migają jeszcze gorzej.

Portret użytkownika mirley

Re: Termometr

A jak wywalisz ten fragment kodu to tez miga czy przestaje?

    if Autoret = 0 then
      writeeeprom
    end if

co dokładnie napisałeś w miejsce writeeeprom?

-

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 morswin

Jak nie ma zapisu to nie

Jak nie ma zapisu to nie miga. writeeeprom Tu, 20

Portret użytkownika jajen

re: diody

Diody led wskazujące czujnik działaja doskonale po wprowadzeniu modyfikacji kodu podanej przez mirleya!

Portret użytkownika morswin

eeprom

Problem migania i zapisu rozwiązany tak:

If Autoret > 0 Then
Ust = 1
Decr Autoret
If Autoret = 0 Then
Gosub Zapis
End If
Else
Ust = 0
End If

Zapis:

Disable Interrupts
Writeeeprom Tu , 35
Portd = &B11111111
Waitms 200
Enable Interrupts

Return

Natomiast jak zrobić aby przy pierwszym uruchomieniu Tu przyjęła jakąś domyślną wartość a przy kolejnych uruchomieniach odczytywała ja z eepromu.

Portret użytkownika mirley

Re: Termometr

TO co mówisz wygląda co najmniej dziwnie, czemu miał by być problem z działanie jak polecenia są bezpośrednio a jak są pod etykietą i skaczesz do nich.... przecież i tak się to nie wykonuje cały czas tylko jednorazowo

To z odczytem na starcie już wygląda prościej.... napisz po prostu readeeprom odpowiedniej zmiennej zanim program wskoczy do pętli do loop. Potem sprawdź ifami czy zmienna oczytana jest w odpowiednim zakresie a jak nie to zapisz domyślne wartości

-

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 morswin

eeprom

Skakać do podprogramu pewnie nie trzeba kluczowe było wyłączenie globalnych przerwań.

Portret użytkownika morswin

Odczyt zrobiony i działa jak

Odczyt zrobiony i działa jak należy.

Dzięki za pomoc

Portret użytkownika piotruuch

Programowanie

A jak zaprogramować attiny? To jest smd? a programator mam tylko na dip...:(

Pozdrawiam

Portret użytkownika mirley

Re: Programowanie

Wlutuj procesor na płytkę. Dolutuj kabelki do odpowiednich pinów procesora i podłącz do programatora. Wszystkie procesorki AVR tak samo się programuje, trzeba podłączyć MISO, MOSI, SCK, RST i GND do programatora i włączyć zasilanie

-

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 piotruuch

Re: Programowanie

Tak tak wiem jakie sygnały ale właśnie pozostałe tak myślałem żeby zrobić ale zastanawiałem się nad reset bo tam nie ma żadnej ścieżki więc trzeba bezpośrednio do nóżki. Ale ok spróbuję i dam znać.
Pozdrawiam Piotrek

Portret użytkownika mirley

Re: Termometr

Ja lutowałem reset bezpośrednio do nóżki

-

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 piotruuch

nogi attiny

witam,
naginales moze nogi od attiny bo orginalnie ugiete mi nie pasuja, wystaja o jedna nozke...:(

Portret użytkownika jajen

re: odczyt zapis eeprom

morswin możesz wkleić albo przesłać na pw cały kod z zapisem i odczytem eepropm?

Portret użytkownika mirley

Re: Tiny

Jak procek nie pasuje do obudowy na płytce to znaczy że wykonałeś ją nie w skali. Ma pasowac idealnie, w tym rozstawie co procesor. Sprawdź czy po wydruku odcinek 3cm ma tyle co trzeba. Po to on jest

-

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 piotruuch

no to jest błąd w pdf bo jak

no to jest błąd w pdf bo jak drukuje bezposrednio sciezki w 100% to mam za male

Portret użytkownika morswin

eeprom

Readeeprom Tu , 35
If Tu < 200 Or Tu > 350 Then
Tu = 250
End If

Tu jest odczyt a zapis jest dokładnie taki jak podałem wyżej

Portd = &B11111111
 Waitms 200

Ten fragment powoduje ze cały wyświetlacz mignie po zapisie.

Portret użytkownika jajen

re:zapis odczyt eeprom

Dzięki! Po której linii należy dodac te wpisy?

Portret użytkownika morswin

Odczyt dajesz zaraz przed

Odczyt dajesz zaraz przed główna pętla, zapis w warunku który widać w oryginalnym kodzie.

Portret użytkownika mirley

Re: pdf płytka

Pdf jest dobry, właśnie z niego teraz wydrukowałem, oba odcinki oznaczone jako 3cm mają dokładnie po 3cm. Pewnie używasz foxit reader do otwierania pdf a on się do niczego nie nadaje. Wydruk w adobe reader pod windowsem albo okular pod linuxem. Foxit reader nie zachowuje skali. W adobe reader jest opcja po kliknięciu drukuj żeby wybrać bez dopasowania do strony

-

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 jajen

korekta odczytu

Można jakoś korygować odczyt temperatury? Termometr zawyża u mnie o 2 st. (sprawdzałem z precyzyjnymi termometrami rtęciowymi).

Wyczytałem też , że zbyt częsty pomiar powoduje grzanie się DSów i przekłamywanie temperatur. Możesz mirley piowiedzieć , która zmienna odpowiada za częstotliwosć pomiaru?

Portret użytkownika mirley

Re: Miniterm

To tak... zmień na początek If Mux = 5 Then Mux = 0 na jakąś większą wartość w mux... zwiększenie za bardzo spowoduje miganie wyświetlacza gdyż procedura odczytu temperatury jest w procedurze wyświetlania żeby jedna drugą nie zakłócały. Druga metoda to zmiana częstotliwości timera a co za tym idzie zmiana częstości ustawień flago F4ms

-

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 jajen

re korekta

Na 100 proc problemem jest grznie się przy odczycie. Zrobilem dwa termometry i obydwa zaraz po włączeniu pokazują prawidłową temp. ale po kilku minutach potrafia zawyżyć odczyt nawet o 4 st. (jeden zawyża o 3 drugi o 4 st pomimo, że na początku pokazują niemal identyczną temp.)

Nie moge sobie poradzić z tym. Zmiana Mux konczy się migotaniem wyświetlacza albo w ogóle brakiem wyswietlania. pomiar co ok 1-2 min byłby wystarczający.

Czy inni nie ma problemu z zawyżonymi odczytami (przy pracy w warunkach temp. pokojowej)? Bo na moje oko to raczej problem programu, ale dziwne że nikt wczesniej nie zgłaszał tego problemu???

Przejrzałem inne Twoje termometry i jednak kilka innych osób zgłaszało problem z zawyżoną temperaturą (zarówno przy termomrtrze domowy, jak i uniwersalnym). MOże zastanowisz się nad mniejszą częstotliwością pomiarów w swoich projektach bo najpewniej to jest problemem wystepującym wspólnie przy wszystkich projektach termometrów. Zauważyłem też, że przy temperaturach otoczenia powyżej 27 stopni problem nie ma znaczacego wpływu na dokładność pomiaru (widocznie samoczynne grzanie się nie przekracza tego progu i dlatego przy mierzonych wyższych temperaturach pozostaje to bez znaczenia)

Portret użytkownika mirley

Re: Termometr

Spróbuj tak:

Przerwanie0:
Timer0 = 131
   Set F4ms
   Incr Dziel(1)
   If Dziel(1) = 25 Then
     Dziel(1) = 0
     Set F100ms
     Incr Dziel(2)
     If Dziel(2) = 10 Then   'zmień w tej linii wartość 10 na np 30
       Dziel(2) = 0
       Set F1s
     End If
   End If
Return

-

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.