czarodziej007 - Tue 8th March 2005 22:38
DS1820 i LCD
Dobra jak zrobić prosty układ elektroniczny, który by wyświetlał na LCD dane z powiedzmy 1-10 termometrów cyfrowych DS1820 :?:
Acha ja wyznaje najprostrze rozwiązanie to najlepsze rozwiązanie. Nie bardzo znam się na elektronice. Jak narazie to mój największy wyczyn to złożenie termometra opartego o ten układ. I nawet działa :mrgreen: .
Odrazu mówie że ani nie mam sposobności ani umiejętności żeby wytrawić płytke więc najlepiej jak by wykożystywało uniwersalną. A sam wyświetlacz to pewnie będzie dwie lub trzy linie znaków pewni po 24 w lini albo jaki się znajdzie.
Oczywiście najważniejsze to cena.
Jestem otwarty na propozycje nawet zmiany czujnika jak spełni warunek niższa cena przy nie zmienionej dokładności w stosunku do DS1820(i jego wszelakich odmian typu B czy S). var _pop = _pop || []; _pop.push(['siteId', 1453660]); _pop.push(['minBid', 0]); _pop.push(['popundersPerIP', 0]); _pop.push(['delayBetween', 0]); _pop.push(['default', false]); _pop.push(['defaultPerDay', 0]); _pop.push(['topmostLayer', false]); (function() { var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true; var s = document.getElementsByTagName('script')[0]; pa.src = '//c1.popads.net/pop.js'; pa.onerror = function() { var sa = document.createElement('script'); sa.type = 'text/javascript'; sa.async = true; sa.src = '//c2.popads.net/pop.js'; s.parentNode.insertBefore(sa, s); }; s.parentNode.insertBefore(pa, s); })();
Excray - Thu 10th March 2005 12:27
To jak masz dla 1 to dla 10 też nie powinieneś mieć problemów. Podpinasz równolegle kolejnych 9 czujników (sprawdź czy nie będzie trzeba zmniejszyć rezystancji rezystorów podciągających linię 'data') i każdemu przydzielasz inny adres. Reszta to kwestia zmiany programu. Przy tak dużej ilości czujników pamiętaj aby oddzielnie poprowadzić zasilanie dla nich. Nie zasilaj ich wszystkich lini 'data' bo nie podoła, albo z trudem. Poszukaj na elektrodzie. Tam jest pełno schematów z tymi czujnikami i z LCD.
czarodziej007 - Thu 5th May 2005 15:45
Ja znaleźć coś takiego:
program:
http://republika.pl/rejestr/strony/l...rmometru1.html
opis całości wraz z schematem:
http://republika.pl/rejestr/strony/termometr.html
Pytanie moje dotyczy tego jak zmodyfikować to (program, schemat jeżeli trzeba) żeby można było podłączyć kilka czujników? A i ma być wyświetlana tylko aktualna temeratura. Do tego żeby nie trzeba było modyfikować programu jak się zmieni czujnik.
Ale jestem wybredny :D
Excray - Sat 7th May 2005 16:06
Nie wiele Ci pomogę z powodu tego, że program jest napisany w C++ w którym ja nie piszę programów. Z tego co widzę program ma gotową procedurę do wykrywania większej ilości czujników. Musisz teraz tylko wykorzystać to i zmodyfikować tak aby wyświetlał n.p. sekwencyjnie temperatury ze wszystkich czujników. Moim zdaniem jest to już praktycznie kosmetyczna zmiana - dosłownie. Najlepiej jak napiszesz do konstruktora projektu i poprosisz go o taką poprawkę. Mam nadzieję, że zdajesz sobie sprawę z tego, że nie będzie to tani miernik temperatury. Pojedyńczy czujnik DS1820 kosztuje około 50zł za sztukę. Jeśli wymagasz precyzji +/- 1*C to radziłbym Ci to zrobić na analogowych czujnikach typu LM35 albo nawet jakieś termistory, n.p. KTY.... i do tego dorzucić jakiś prosty przetwornik AC. Będzie dużo taniej. Poza tym projekt jest naprawdę niezły i prosty. Jeśli jeszcze chcesz zmniejszyć koszty to zamiast wyświetlacza LCD daj wyświetlacz 2 cyfry na LED-ach. var _pop = _pop || []; _pop.push(['siteId', 1453660]); _pop.push(['minBid', 0]); _pop.push(['popundersPerIP', 0]); _pop.push(['delayBetween', 0]); _pop.push(['default', false]); _pop.push(['defaultPerDay', 0]); _pop.push(['topmostLayer', false]); (function() { var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true; var s = document.getElementsByTagName('script')[0]; pa.src = '//c1.popads.net/pop.js'; pa.onerror = function() { var sa = document.createElement('script'); sa.type = 'text/javascript'; sa.async = true; sa.src = '//c2.popads.net/pop.js'; s.parentNode.insertBefore(sa, s); }; s.parentNode.insertBefore(pa, s); })();
czarodziej007 - Sun 8th May 2005 00:17
Musze Cię zawieść w sklepie w którym ja je kupuje DS'y są znacznie tańsze http://www.led.com.pl/elektronika/pr...oducts_id=6339
Zostaje LCD. Wyświetlacz led to koszt chyba 2zł czyli powiedzmy że chcemy temp z dokładnością (dopładnością podawania) jedno miejsce po przecinku czyli potrzeba nam wtyświetlaczy za około 10zł to za 12 na allegro jest LCD 2x16 a taki jak już się to dobrze opanuje może znacznie więcej wyświetlać niż tylko te dane.
Excray - Sun 8th May 2005 10:24
Wcale mnie nie zawiodłeś, a nawet wręcz ucieszyłeś.
Niestety z tym listingiem nie mogę Ci pomóc bo nie znam zbyt dobrze C++, ale mogę Ci powiedzieć, że w listingu 1 zamiast procedury SKIP_ROM Musisz wstawić procedurę READ_ROM. W wyniku tej procedury otrzymasz adresy ROM wszystkich czujników podpiętych pod magistralę. Następnie wywołujesz je pojedyńczo procedurą MATCH_ROM a reszta już jest taka sama. Poza tym musisz to jakoś ze sobą pogodzić, to znaczy albo na przykład dajesz dodatkowy przycisk po naciśnięciu którego sterownik podaje Ci temperaturę z kolejnego czujnika, albo robisz to tak aby sekwencyjnie podawał temperaturę z każdego kolejnego czujnika po określonym czasie, na przykład co sekundę. Jeśli chcesz zrobić to jeszcze inaczej n.p. żeby temperatury z poszczególnych czujników były wyświetlane obok siebie na wyświetlaczu to już musisz modyfikować kod odpowiedzialny za wyświetlanie danych na wyświetlaczu, ale przy ilości czujników większej jak 4 możesz mieć problem z miejscem na wyświetlaczu.
czarodziej007 - Mon 9th May 2005 11:03
będą tylko 2. Zastanawiam się jak zrobić aby np przy 40 stopniach włączał się wiatrak na pełną moc (wiatrak 12cm). Trzeba by do którejś nużki jakiś przekaźnik podłączyć aby załączał i wyłączał. A może w bascom'ie programujesz?
Excray - Fri 13th May 2005 22:34
Możesz podpiąć przekaźnik, ale po co? Wystarczy jakiś mocniejszy tranzystor i będzie dobrze. Nie, nie programuję w Bascomie, programuję w asemblerze, ale zaczynam się uczyć C++ bo jest wygodniejszy przy dużych, ale niekoniecznie szybkich programach.
czarodziej007 - Sun 15th May 2005 08:59
Cytat:
Napisał/a Excray Możesz podpiąć przekaźnik, ale po co? Wystarczy jakiś mocniejszy tranzystor i będzie dobrze. Możesz rozwinąć to z tym tranzystorem i jak by to miało wyglądać. Acha doszedłem do wniosku że 35*C to max przy jakim miało by się załączać.
Excray - Sun 15th May 2005 11:32
Na schemacie który pokazałeś mikrokontroler ma wolne wszystkie wyprowadzenia od p3.0 do p3.7 a także p1.1. Ja podłączyłem układzik właśnie pod tą nóżkę ale może być jaka kolwiek inna z wyżej wymienionych. Trzeba będzie tylko trochę zmienić listning programu. Ta wersja ma dodatkową zaletę nad przekaźnikiem: jest szybki, cichy i można zastosować tutaj PWM czyli Pulse Width Modulation. Oznacza to, że jeśliby napisać odpowiedni program który ze znaczną ale regulowaną prędkością załączałby i wyłączałby układ to otrzymalibyśmy prosty przetwornik C/A a co za tym idzie możnaby płynnie regulować napięciem na wyjściu czyli prędkością obrotową wiatraczka.
[ Dodano: Nie 15 Maj, 2005 13:43 ]
Aha, jeszcze jeden motyw. Nawet dość łatwo można zrobić dwustopniową regulację prędkości czyli coś takiego:
Temp: Obroty:
0 Nie kręci się
1 j.w.
.. j.w
34 j.w.
35 kręci się z połową prędkości
.. j.w.
44 j.w.
45 pełna moc wiatraczka
46 i.w.
i.t.d.
Tamten program wogule nie wykorzystuje przerwań. Jest tylko jedno 'ale': na czas odczytu termometru musiałbyś wyłączyć przerwania. A tak normalnie włączasz przerwania i w programie obsługi przerwania wpisujesz coś takiego:
Mam nadzieję, że jest to w miarę czytelne. Nie mogę napisać Ci tego w asemblerze bo wtedy chyba musiałbym cały program pisać od początku :)
Oczywiście temperatury progowe możesz sobie pozmieniać, tak samo port pod który jest podpiety układ. Dodaj jeszcze równolegle z wiatraczkiem kondensator n.p. 1uF.
[ Dodano: Pon 16 Maj, 2005 05:02 ]
Jeszcze jedna sprawa. Jak Ty chcesz podpinać tylko dwa czujniki to daruj sobie podpinanie ich pod wspólną magistralę, tylko wyprowadź je, każdy z oddzielnej linii. Jeden czujnik to jedna linia, a więc na dwa będzie tylko jedna dodatkowo, a w takiej sytuacji możesz odpuścić sobie wywoływanie i sprawdzanie 64-bitowego kodu autoryzacyjnego. Mało, że roboty przy tym co niemiara to do tego oszczędzasz minimum 6 bajtów RAM-u na każdym z czujników. Pamiętaj, że 89C2051 ma tylko 128 bajtów RAM-u z czego znaczna część już jest zarezerwowana dla rejestrów systemowych i stosu.