| Author |
Message
|
Alfax Poziom 18

Joined: 20 Aug 2005 Posts: 489 Location: Warszawa
|
#1
30 Jul 2010 20:00 Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
Witam
W tym poście chcę zaprezentować projekt, który zbudowałem w oparciu o procesor firmy Microchip PIC16F676. Jego zadaniem jest odmierzanie określonego czasu (jednego z dwóch do wyboru) i sygnalizowanie początku i końca jego odmierzania dźwiękiem buzera. Potrzebą dla zbudowania tego urządzenia były kłopoty mojej Żony z porannym mierzeniem temperatury: nigdy nie była pewna, czy trzymała termometr odpowiednio długo. Stąd pomysł zbudowania układu, który będzie spełniał następujące funkcje:
:arrow: powtarzalny pomiar czasu w każdych warunkach (np. w kompletnej ciemności) i niezależnie od stanu osoby obsługującej (można być zaspanym, albo nawet przysnąć na czas pomiaru)
:arrow: maksymalnie prosta obsługa (tylko jeden przycisk)
:arrow: poręczność (możliwie małe wymiary i masa)
:arrow: praktyczna bezobsługowość (czasomierz działa już półtora roku bez wymiany baterii i żadnych napraw, przy codziennym użytkowaniu)
Można oczywiście postawić pytanie: dlaczego mikrokontroler? Dlaczego nie użyć nieśmiertelnego NE555, albo jakichś układów CMOS? Odpowiedzią są podane wyżej założenia: żaden inny układ nie mógłby ich spełnić.
Konstrukcję czasomierza przedstawiają zdjęcia.
Płytkę wykonywałem metoda termotransferu (w jednym rogu podtrawiła mi się nieco, stąd zworka drutem; druga zworka jest zamierzona). Ułożenie elementów SMD było określone przez położenie elementów przewlekanych, a tu elementem którego położenie było najważniejsze, był przycisk.
Koszt całości - nie więcej niż 15 zł, przy czym kupowałem jedynie przycisk, buzer i obudowę - resztę miałem.
O doborze elementów:
:arrow: mikrokontroler: jest w w wersji DIL, gdyż nie miałem podstawki do programowania układów w obudowach SMD, a nie chciałem się bawić w programowanie w układzie - poza tym w obudowie była wystarczająca ilość miejsca, no i na koniec - akurat taki miałem.
:arrow: buzer: tu kierowałem się tylko niskim napięciem zasilania i małymi wymiarami (szczególnie wysokością). Wybrałem więc ten model, bez generatora, co akurat nie jest żadnym problemem, gdyż wszystko załatwia mikrokontroler.
:arrow: przycisk: najistotniejszy element czasomierza, gdyż musiał być odporny mechanicznie, możliwy do użytkowania bez stosowania nakładek, posiadać wyraźny skok i wymagać stosunkowo dużej siły do włączenia (zabezpieczenie przed przypadkowym wciśnięciem). Mój wybór padł na przycisk firmy Mec - multimec 3A.
:arrow: obudowa: niezbyt duża, by wygodnie mieściła się w damskiej dłoni - tu najlepiej sprawdziła się obudowa Z-47
:arrow: zasilanie: bateria litowa CR2032.
Reszta elementów - wybrane z posiadanych zapasów.
Konstrukcja:
Schemat układu przedstawia rysunek poniżej.
Jest to schemat ostatecznej wersji, choć płytka jest od wersji wcześniejszej, stąd niektóre elementy są przylutowane do ścieżek a nie do padów (żółte elektrolity). Działanie układu jest następujące: po włączeniu zasilania kontroler wchodzi w stan sleep i pozostaje w nim do momentu gdy na wejściu RA2/AN2/COUT/T0CKI/INT skonfigurowanym jako wejście przerwania zewnętrznego (nóżka 11) nie pojawi się stan niski. Po wciśnięciu przycisku mikrokontroler najpierw sprawdza stan baterii (zrealizowane za pomocą układu monitorowania napięcia i resetu IC2 - TCM809R). Jeżeli napięcie baterii jest zbyt niskie (stan niski na wyjściu IC2), mikrokontroler generuje dwa długie dźwięki i przechodzi w stan sleep. Gdy napięcie zasilania jest w normie, mikrokontroler sprawdza położenie przełącznika wyboru czasu (jest możliwość odmierzania 3 lub 5 min), generuje trzy krótkie dźwięki i zaczyna odmierzać wybrany czas. Po skończeniu odmierzania znów generowane są trzy krótkie dźwięki i przechodzi w stan uśpienia. Mikrokontroler rozpoczyna pracę w momencie zwalniania przycisku SW1 i podczas wykonywania programu (odmierzania czasu) blokuje możliwość ponownego wyzwolenia i restartu programu - jest to możliwe dopiero po przejściu w stan uśpienia. Szczegółowy diagram działania programu - poniżej.
Poniżej także program mikrokontrolera - w tym miejscu podziękowania dla mojego kolegi Sylwestra Stryjka za napisanie programu.
Czasomierz w trybie sleep pobiera 8 uA przy wybranym czasie 3 min (78 uA przy wybranym czasie 5 min - to skutek połączenia z masą wewnętrznego rezystora podciągającego), 0,5 mA w czasie odliczania czasu i maksymalnie chwilowo 10 mA podczas piszczenia. Jak wspomniałem na początku, układ działa już półtora roku na jednej baterii przy dość intensywnym, codziennym użytkowaniu (Żona stwierdziła, że będzie mierzyła temperaturę przez 6 min, więc odmierza dwa razy czas 3 min).
| Description: |
|
 Download |
| Filename: |
czas_01.zip |
| Contents: |
|
| Filesize: |
571 Bytes |
| Punkty: |
0 |
|
|
| Back to top |
|
 |
dymbol1992 Poziom 16

Joined: 09 Jul 2007 Posts: 290 Location: Rzędowice
|
#2
30 Jul 2010 23:12 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
Projekt bardzo fajny, a przede wszystkim prostota wykonania. Analogowa zajęło by to o wiele więcej miejsca i nie było by takie bezproblemowe. San PIC mógł też być w smd moim zdaniem. Tylko nurtuje mnie jedna rzecz, codzienne mierzenie temperatury? po co? dlaczego? jeżeli oczywiście można wiedzieć.
|
|
| Back to top |
|
 |
Urgon Poziom 22

Joined: 27 Aug 2008 Posts: 2412 Location: Lublin
|
#3
31 Jul 2010 00:07 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
AVE...
Na 99% chodzi o naturalną metodę planowania rodziny, pewnie w wydaniu brytyjskim(najnowsza moda w KRK jest właśnie na tą odmianę). Skąd wiem? Powiedzmy, że przez prawie dwa lata akademickie to mi wykładano...
Sam układ ciekawy i całkiem pomysłowy. Jedna uwaga: dlaczego użyłeś dodatkowego układu sprawdzania baterii? Nie lepiej użyć wbudowanego ADC do pomiaru napięcia? Możesz też zmienić typ mikrokontrolera na któryś z PICów w technologii NanoWatt XLP, na przykład 16F1823(na razie raczej nie do kupienia u nas) albo PIC24F04KA200...
|
|
| Back to top |
|
 |
Google

|
#
31 Jul 2010 00:07 |
|
|
|
|
|
| Back to top |
|
 |
tamam Poziom 13

Joined: 04 Apr 2004 Posts: 112
|
#4
31 Jul 2010 07:20 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
Piszesz, że sprawdzasz stan baterii, a na płytce drukowanej wyjście "czujnika" Reset_bar nie jest podłączone do kontrolera (pin13 nie jest przylutowany).
A cały układ niezły. Szczególnie ten jeden przycisk do sterowania. Gratuluję wytrwałości (to raczej Twojej żonie).
|
|
| Back to top |
|
 |
abator Poziom 8

Joined: 18 Jun 2010 Posts: 29 Location: opole
|
#5
31 Jul 2010 08:12 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
Układ bardzo prosty i i praktyczny ale czy nie było by lepiej przełącznik ze zmianą odmierzanego czasy umieścić gdzieś na zewnątrz obudowy?
|
|
| Back to top |
|
 |
Urgon Poziom 22

Joined: 27 Aug 2008 Posts: 2412 Location: Lublin
|
#6
31 Jul 2010 08:40 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
AVE...
Trzaby przerobić procedurę, by nie zmieniało czasu, gdy przełącznik zostanie przełączony przypadkiem. Ponadto trzaby brać pod uwagę wytrzymałość i sposób użytkowania. W warunkach porankowo-łóżkowych możnaby przypadkiem nacisnąć na przełącznik i go wyłamać z płytki...
|
|
| Back to top |
|
 |
Google

|
#
31 Jul 2010 08:40 |
|
|
|
|
|
| Back to top |
|
 |
Alfax Poziom 18

Joined: 20 Aug 2005 Posts: 489 Location: Warszawa
|
#7
31 Jul 2010 10:58 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
Witam
:arrow: do kolegi Urgon: tak jest, poranny pomiar temperatury właśnie w tym celu. Owszem, wymaga to nieco wytrwałości, ale po czasie wchodzi w nawyk.
Do pomiaru napięcia baterii nie używałem wewnętrznego ADC, gdyż miałem kłopot z napisaniem programu (to moje początki, jeśli chodzi o mikrokontrolery - nigdy nie jest za późno się uczyć :D ). Co prawda ostatecznie program napisał mój kolega, ale tak już zostało. A PIC16F676 akurat miałem.
:arrow: do kolegi tamam: gratuluję spostrzegawczości :D Generalnie na etapie projektu przewidywałem ten pomiar i nawet (jak widać) odpowiednie elementy są na płytce, jednak zrezygnowałem z niego, gdyż okazało się, że mikrokontroler pracuje poprawnie nawet przy niższym napięciu niż napięcie czujnika.
:arrow: do kolegi abator: ten czasomierz to jest układ do jednego zastosowania i tak naprawdę, po ustaleniu właściwego czasu żaden przełącznik nie byłby potrzebny. Ja jednak dodałem go, by mieć rezerwę możliwości, na wszelki wypadek. Dlatego jest wewnątrz obudowy, a przez cały czas używania nie było potrzeby używania go.
|
|
| Back to top |
|
 |
Urgon Poziom 22

Joined: 27 Aug 2008 Posts: 2412 Location: Lublin
|
#8
31 Jul 2010 11:25 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
AVE...
Pisałeś w C, Basicu czy w Assemblerze?
BTW, wiesz, że ta metoda nie jest zbyt skuteczna(wbrew temu, co nam kłamliwie sugerują)?
W razie problemów z programowaniem PICów, to się polecam na przyszłość...
|
|
| Back to top |
|
 |
~~~pio~~~ Poziom 11

Joined: 14 Aug 2007 Posts: 60 Location: Gorlice
|
#9
02 Aug 2010 11:30 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
Gdzie kupiłeś tą obudowę? bo Z-47 jest dużo wyższa może ja przerobiłeś, ciekaw jestem bo właśnie taka jest mi potrzebna.
|
|
| Back to top |
|
 |
Google

|
#
02 Aug 2010 11:30 |
|
|
|
|
|
| Back to top |
|
 |
Alfax Poziom 18

Joined: 20 Aug 2005 Posts: 489 Location: Warszawa
|
#10
02 Aug 2010 12:47 Re: Czasomierz na mikrokontrolerze PIC16F676 |
|
|
|
| ~~~pio~~~ wrote: |
| Gdzie kupiłeś tą obudowę? bo Z-47 jest dużo wyższa może ja przerobiłeś, ciekaw jestem bo właśnie taka jest mi potrzebna. |
Obudowę kupiłem w sklepie elektronicznym w Warszawie, ale ona jest bardzo popularna i wiele sklepów z częściami ma ją w swojej ofercie (internetowych i "zwykłych"). Nie przerabiałem tej obudowy, ona ma właśnie takie wymiary: 20X40X50 mm.
Pozdrawiam
|
|
| Back to top |
|
 |