Witam
Szukam sposobu na podłączenie kilku termistorów NTC do Atmega8
Dokładnie chce podłączyć 8 czujników.
Korzystam z BASCOMa i z definicji
Dim W As Word
Do
W = Getrc(Pind , 4)
Print W
Wait 1
Loop
Wszystko fajnie działa na jednym. Ale nie wiem jak podłączyć jeszcze 7.
Myślałem o podłączeniu wszystkiego na jednej linii ale podanie VCC lub GND poprzez rezystor na pozostałe nic nie daje, albo odczyt wynosi 0 albo jakieś inne dziwne akcje.
Getrc dziala ale na jednym... no ok ale poszukam jak to zrobic na wiekszym procku. Gdzie znajde jakis krutki kodzik na wzor?? Zawsze robilem to na DS18B20 ale chce nauczyc sie jak to robic na zwyklych NTC, nawet z uwagi na cene.
Proszę poprawić post - regulamin pkt.3.1.13 [dzimi]
Dzieki za wlaczenie sie w temat... A blady kazdy popelnia wiec nie ma tematu.. Kwestia jak to ma wygladac?? Jak ma wygladac ten skrypcik ktory odczyta mi dany pin ADC??
Tak jak odczytujesz pin PD4 ( i podłączony tam termistor) podobnie możesz odczytać inne.
Musisz wykorzystać 8 pinów, na jednym nie da się tego zrobić.
Chyba - że weźmiesz jakiś układ typu 1-Wire np. (DS1820)
Dotychczas czerpałem dużo wiedzy z wypowiedzi kolegów z elektrody lecz nie miałem jeszcze okazji udzielić się na forum ze względu na mój krótki staż i brak doświadczenia, więc proszę o wyrozumiałość.
Chciałbym podłączyć się do tematu, żeby nie generować nowego bliźniaczego wątku.
Mam zamiar zabrać się niedługo za stworzenie układu uniwersalnego, który zależnie od typu czujnika (ntc lub ds18b20) umiałby to rozpoznać i pracować z fizycznie podłączonym czujnikiem oraz ignorować fakt, że innych czujników nie ma w układzie.
Temat wydaje mi się rozwiązywalny i dopiero zbieram informacje na temat jego przygotowania ale liczę się z moim brakiem doświadczenia i prośba do Kolegów: czy możecie przynajmniej ogólnie napisać na co powinienem zwrócić uwagę przygotowując się do tego? Czy jest to szczególnie trudne z jakiegoś względu?
Mam zamiar wykorzystać ATMEGA8 ze względu na obecność zarówno ADC (dla NTC) jak i we/wy cyfrowych (DS18B20). Miałem trochę doświadczenia z BASCOMem ale wolałbym pisać w C, w którym jako tako umiem programować. Chciałbym poznać waszą opinię nt. czy dla takiego projektu lepiej od razu iść prostszą i mniej ambitną ścieżką z BASCOM czy można spróbować z powodzeniem w C?
Z góry dziękuję za opinie - każda coś wnosi. Pozdrawiam
Jeśli chodzi o wykrywanie czujników "cyfrowych" - to magistrala 1-Wire się do tego idealnie nadaje. Każdy czujnik (np. DS1820) ma swój unikalny adres - natomiast co do transmisji i współistnienia wielu różnych czujników na jednej "szynie" - musiałbyś podać konkretne przykłady i konkretny pomysł, wtedy będzie nam się łatwiej odnieść do możliwości jego realizacji.
carlos-r wrote:
hciałbym poznać waszą opinię nt. czy dla takiego projektu lepiej od razu iść prostszą i mniej ambitną ścieżką z BASCOM czy można spróbować z powodzeniem w C?
Lepiej zdecydowanie zacząć od C. Bascom wnosi (wydaje się) sporo ułatwień, ale jest drogą prowadzącą na manowce.
Ja tam wole bascoma i zawsze jak mam jakis pomysl to udaje mi sie go zrealizowac w tym srodowisku. No a co do tego co kolega pisze to nie wiem jednego. Bo jesli maja byc podlaczone dwa termometry jeden ds18 a drugi ntc i to wszystko na jednym pinie to nie wiem czy to zadziala. Ale jesli ma to wykrywac po wlaczeniu, to chyba sprawa jasna, ds18 ma nr, jesli procek go otrzyma to znaczy ze dziala na ds, jesli nie to dziala na ntc. A co dalej i jak policzyc temperature z odczytu to juz inna bajka. Bo ds jest prosty a przy ntc musisz brac pod uwage jaki to ntc(ohmy).
Mój pomysł jest póki co niestety teoretyczny - dopiero przymierzam się do jego realizacji, dlatego tak niekonkretnie piszę.
Miałem na myśli sytuację, kiedy użytkownik takiego układu mógłby dobrowolnie zastosować czujnik, który ma w posiadaniu bez niepotrzebnej ingerencji w ustawienia (najbardziej wymarzona byłaby całkowita bezobsługowość, ewentualnie dip-switch wyboru typu czujnika).
Absolutnie nie myślałem o podpinaniu tego do jednej nogi procka - każdy kto chciałby zastosować 1 lub 2 czujniki DS musiałby podpiąć je do przygotowanego wyjścia (z tego co mówi datasheet tutaj starczy jedno, bo jak koledzy wspominają 1-wire wykorzystuje 1 we/wy). Z kolei każdy NTC musiałby wykorzystywać kolejne kanały ADC z procka na kolejnych nogach - to oczywiście jasne, że jeśli 1 NTC to 1 kanał ADC, 2 czujniki NTC - 2 kanały.
Mi chodziło o przygotowanie układu, który byłby w stanie inteligentnie wykryć co ma podpięte fizycznie do siebie. Miałem zamiar zrobić to dla przykładu z NTC: na zasadzie komparacji napięcia wejściowego - jego wartość poza skalą oczekiwaną przez procek dla NTC oznaczałaby brak czujnika (mam zamiar wykorzystać jeden typ NTC na zakres: 0...60⁰C - myślę, że dla jednego typu NTC da się to zrobić w układzie podzielnika napięcia). Większy problem widzę faktycznie, jeśli zachciałoby mi się zastosować inny NTC, bo wtedy charakterystyka się zmienia i nici z bezobsługowości, prawda?
Inna sprawa i inne pytanie w sprawie DS18B20. Czy jestem w stanie przygotować układ tak, by użytkownik przyszedł sobie z dowolnym DS18B20, podpiął i korzystał? Czy nie muszę jakoś przygotować układu właśnie ze względu na adres czujnika, który z nim może pracować. Zakładałem, że to możliwe lecz nie poznałem zasady działania. Przyznam się bez bicia, że na to pytanie znalazłbym odpowiedź gdybym wnikliwiej wczytał się wnikliwiej w datasheet DS ale nie zdążyłem tego uczynić dość dokładnie, lecz może koledzy umieliby szybciej to wyjaśnić - będę wdzięczny.
Proszę o weryfikację tego myślotoku - czy to rzeczywiście ma prawo działać w oczekiwany przeze mnie sposób...?
Proszę mi wybaczyć banalne i często łatwe do rozwiązania problemy, lecz niestety mimo zapału często brakuje czasu na znalezienie odpowiednich materiałów w necie, które wyjaśniają to w przystępny sposób. Samej elektroniki na studiach też miałem tylko podstawy, więc bardzo sobie cenię pomoc, która może mi zaoszczędzić długich poszukiwania odpowiedzi, gdyż często nie wiem jak ich szukać w google.
jesli maja byc podlaczone dwa termometry jeden ds18 a drugi ntc i to wszystko na jednym pinie to nie wiem czy to zadziala.
Nie zadziała.
Natomiast zadziała kilka czujników 1-Wire podłączonych razem na wspólnej magistrali do 1-go PIN'a.
carlos-r wrote:
Inna sprawa i inne pytanie w sprawie DS18B20. Czy jestem w stanie przygotować układ tak, by użytkownik przyszedł sobie z dowolnym DS18B20, podpiął i korzystał?
uC może wykryć numer każdego z czujników - Po to są one "ponumerowane". Teoretycznie dowolną ilość, praktycznie już nie za bardzo (z powodu m.innymi pojemności wprowadzanej przez każdy z nich).
Jeśli wykryjesz już jakie czujniki są "podpięte, zawsze możesz dać "klientowi" możliwość konfiguracji i np. nazwania - ale to wymaga już wyświetlacza, albo o podłączenia przez USB/COM do PC - i uczynienie z PC-ta wyświetlacza + "konfiguratora".
Większy problem widzę faktycznie, jeśli zachciałoby mi się zastosować inny NTC, bo wtedy charakterystyka się zmienia i nici z bezobsługowości, prawda?
No moim zdanie nie do konca, mozna to zrobic bezobslugowo. Dodajac jeden przekaznik.
Ja bym to zrobil tak...
sa sobie 2 piny, masa i szyna od procka.
1. Procek sie wlaczyl, sprawdza nr DS-a. Wynik 0 (procek wykryl ze bedzie pracowal na ntc)
2. Piny ntc sa podpiete do przekaznika, nastepuje przelaczenie i ntc jest wypiete z lini na ktorej robisz pomiary termo.
W tym czasie dokonuje pomiaru (czyli okresla wartosc jaka ma ntc przy pomocy opcji woltomierza w atmedze)
3. Procek pamieta wynik pomiaru i przelacza przekaznik na stan pierwotny, czyli laczy ntc z szyna do pomiaru termo.
4. Procek przelicza jakie maja byc wartosci przy takim ntc i zaczyna kumac temperatury
Ja to bym zrobil tak.
Dalczego przekaznik i odlaczanie ntc, z powodu takiego ze jak podlaczysz ntc do ukladu (rezystorkow) woltomierza to juz nie odczytasz termo i odwrotnie. Tranzystory i wszystko inne odpada. Kiedys to juz sprawdzalem, musisz go odlaczyc mechanicznie. No chyba ze ktos zna jakis magiczny ukladzik hehe
To bardzo ciekawy pomysł z tym odłączaniem NTC, muszę jednak spytać, żeby do końca zrozumieć:
Quote:
jak podlaczysz ntc do ukladu (rezystorkow) woltomierza to juz nie odczytasz termo i odwrotnie
Dotychczas nie wiedziałem właśnie jaki sposób pomiaru powinienem wybrać dla NTC i ostatecznie nastawiałem się na wpięcie NTC w zwykły podzielnik napięcia ale chyba taki układ kolega huzzar.ts ma na myśli jako ten 'do kalibracji czujnika' w stanie wypięcia go z szyny pomiaru, tak?
Natomiast zdawałem sobie sprawę, że istnieje sposób pomiaru w układzie mostkowym - czy według kolegi to właśnie układ mostkowy powinien być zastosowany do pomiaru temperatury?
Bardzo mi się podoba ten pomysł, bo faktycznie dużo by dało się w ten sposób załatwić, natomiast jak wspominałem - brak doświadczenia w temacie wymusza kolejne pytania z mojej strony.
Myślę że najlepszym rozwiązaniem będzie, jeśli przed przystąpieniem do projektowania układu, określisz konkretne założenia. Puki co określiłeś tylko, że MCU ma rozpoznawać jaki rodzaj czujnika jest podpięty i po rozpoznaniu mierzyć temperaturę z tego czujnika. Teraz żeby móc pójść dalej, musisz określić na jakim napięciu będziesz pracował. Czy 5V a może 3,3V. To ma znaczenie dla magistrali 1W. Określasz czy czujniki ds18B20 mają pracować w trybie z normalnym zasilaniem, czy może PARASITE. Co do czujników analogowych, wiemy że chcesz użyć termistora NTC. Żeby pójść dalej musisz określić się w jakim zakresie temperatur ma pracować i z jaką dokładnością. Dzięki temu będzie można dalej dyskutować o konstrukcji obwodów pomiarowych do nich.
Najprostszym rozwiązaniem dla NTC jest pół-mostek - czyli inaczej dzielnik napięcia. NTC podpinasz na górze do napięcia odniesienia (tego samego co ADC z MCU), na dole podpinasz dobrany do NTC rezystor (R1).
wzór na Vt:
Vt=(R1/(R1+Rt))*Vf
Dla uzyskania wyniku pomiaru masz:
ADC=(Vt/Vref)*1024 (jeżeli będziesz mierzył z max rozdzielczością 10 bit)
Po podstawieniu pierwszego równania do drugiego skraca nam się Vref i zostaje równanie:
ADC=(R1/(R1+Rt))*1024
Musisz zadbać aby rezystor R1 był stabilny temperaturowo i jak najdokładniejszy, w przeciwnym razie będzie Ci fałszował wyniki pomiarów. Skoro mamy wszystkie dane (wartość R1, wynik przetwarzania ADC) to z równania możemy wyznaczyć niewiadomą Rt ze wzoru:
Rt=((1024/ADC)-1)*R1
Dochodząc do tej wartości możemy w końcu obliczyć temperaturę na podstawie równania, które powinno znajdować się w nocie katalogowej do wybranego przez Ciebie NTC. Przykładowo takie równanie może wyglądać tak:
T(°C)=[b0+b1(lnRt)+b2(lnRt)²+b3(lnRt)³]^(-1)
W nocie katalogowej do NTC znajdziesz wszystkie współczynniki potrzebne do rozwiązania tego równania (jak i samo równanie), a od Ciebie już zależy czy MCU będzie obliczał temperaturę, czy może odczytywał wartości temperatury z uprzednio przez Ciebie przygotowanej tablicy wartości temperatur, dla zmierzonej rezystancji Rt. Myślę że w przypadku AVR to drugie rozwiązanie bedzie bardziej optymalne, ze względu na moc obliczeniową MCU.
Bardzo się cieszę, że kolega Electix dużo przydatnych danych zawarł w swoim poście - na pewno skorzystam podczas pisania softu.
Celem zastosowania układu jest porównywanie temperatury zadanej z mierzoną i w pętli regulatora PI generowanie sygnału cyfrowego (PWM o okresie rzędu 10s.). Elementem wykonawczym będzie grzałka, ogrzewająca powietrze w kanale. Przewiduje zastosowanie 1 lub max. 2 czujników temperatury - obowiązkowo pomiaru temperatury dla regulatora, opcjonalnie dodatkowego pomiaru ograniczającego zakres temperatury w kanale nawiewnym, za nagrzewnicą.
Wydaje mi się zatem, że nie ma sensu stosować dokładność większą niż 0,5 Kelvina, a nawet dokładność 1 K byłaby wystarczająca.
Faktycznie ze względu na ograniczone możliwości obliczeniowe ATMEGA8 chyba pójdę drogą z wpisaniem tablicy temperatur dla zakresów rezystancji.
Moja aplikacja przewiduje generalnie raczej przewidywalny zakres temperatur: 0 - 60 oC. Wszelkie stany powyżej lub poniżej są skrajne i spotkają się z warunkami reakcji układu na skrajne temperatury.
Co do zasilania DS to faktycznie w moim zastosowaniu najlepiej byłoby się ograniczyć do stosowania 2 żył ekranowanych (optymalnie skrętka ekranowana). I tu kolejne pytanie:
Czy wykorzystać 1 żyłę jako połączenie z GND a drugą jako 1-Wire BUS (parasite) czy lepiej kombinować z podawaniem 5V zza stabilizatora przez 1 żyłę, 1-Wire BUS na 2 żyle i GND 3 żyłą lub ekranem? Generalnie chciałbym ograniczyć liczbę wymaganych żył przewodu 2 ekranowanych i to moje jedyne wymaganie. Drugim jest to, by układ jak najsprawniej działał i o ile to możliwe nawiązywał współpracę z każdym podpiętym DSem przyjmując np, że pierwszy podpięty to zawsze pomiar dla regulatora PI, drugi MIN-MAX.
Praca czujników DS w trybie PARASITE jest dosyć fajną alternatywą. Musisz jednak pamiętać, że czujniki pobierają zasilanie z linii danych, dlatego musi być ona nieco inaczej zbudowana i sterowana od strony MCU. Szczegóły masz w nocie aplikacyjnej od czujników. Tam też znajdziesz informacje na temat połączeń. Maxim zaleca skrętkę... Jeżeli nagrzewnica o której piszesz, posiada jakiś wentylator, czy silnik, to wiąże się to z zakłóceniami EMI, co będziesz musiał uwzględnić przy budowie układu. Zakres mierzonych temperatur, pozwoli na określenie zakresu zmian rezystancji w jakim mogą pracować termistory NTC, a to pozwoli dobrać R1 i przez to maksymalnie wykorzystać zakres pomiarowy ADC
Oczywiście, powietrze będzie tłoczone przez wentylator znajdujący się w pobliżu. Docelowo sprawa jest dość trudna, gdyż zakłócenia to raz, a dwa że temperatura pracy układu może być podniesiona przez małą odległość od elementów grzejnych (umieszczonych w kanale, za blachą, pod PCB w odległości rzędu 5-8cm) i wykonawczych, załączających obwody prądowe.
Dopiero zabieram się za to, więc i pomiary temperatury otoczenia będę znać dopiero na dniach jeśli wszystko dobrze pójdzie. Co prawda teoretycznie temperatura nie powinna przekroczyć 50 oC lecz to się okaże po pomiarach. Ewentualnie będę kombinować z warstwami izolacji wewnątrz puchy, gdzie ma siedzieć PCB.
Ponadto te nieszczęsne zakłócenia... Stawiałem przede wszystkim na stosowanie skrętki ekranowanej, żeby zminimalizować ich wpływ, ale obawiam się, że co zaprojektowania samego układu mam zbyt blade pojęcie i zwrócę się do kogoś po pomoc w tej sprawie po zrealizowaniu pierwszej wersji prototypu, czyli osiągnięcia funkcjonalności bez wpływu czynników zewnętrznych.
Podoba mi się dobra wiadomość, co do NTC - nie będę potrzebować raczej szerszego zakresu temperatur niż 0-60 oC, więc będzie stosunkowo łatwo zrealizować warunek bezobsługowej detekcji podłączonego czujnika NTC.
A te zdwojone czujniki, w sensie możliwość stosowania NTC i/lub DS18B20 to taki wymóg? Czy może widzimisię Kolegi Konstruktora?
Jeżeli chodzi o sam pomiar temperatury, to czujnik - czy to będzie cyfrowy, czy to analog, pakujesz do komory nagrzewnicy i tym się nie martwisz. DSy mierzą do +125°C więc te 50°C nie zaszkodzi im. Projektując płytkę dla czujnika musisz uwzględnić tylko tą temperaturę przy doborze złącza dla czujnika, izolacji przewodów pomiarowych i ewentualnie parametrów laminatu na którym ewentualnie ten czujnik utwierdzisz.
Resztę układu będziesz budował na zewnątrz, więc traktujesz normalnie. Jeżeli chodzi o zakłócenia z wentylatorów, to odpowiednie filtry w zasilaniu MCU, ewentualnie ekranowana obudowa układu i nie powinno być problemów.
Zastosowanie DSów w tej sytuacji uchroni Cię od kombinacji z przetwarzaniem ADC. Jeżeli zapewnisz dobre warunki transmisji dla sygnału 1W w tych warunkach, to masz stabilny pomiar temperatury z rozdzielczością 12bit i niczym więcej się nie martwisz. Jeżeli chcesz wojować z NTC, to możesz spotkać się z tym, że do samego sygnału z NTC może dołożyć się trochę szumow i zakłóceń z nagrzewnicy, a wtedy będziesz musiał jakoś temu zaradzić. Do tego rozdzielczość ADC w ATmega ma 10bit. Co prawda da się poprzez różne zabiegi typu Oversampling i podnieść to do 12bit, a nawet więcej i przez zastosowanie "sztuczek DSP" poprawić jakość pomiaru temperatury, ale wydaje mi się że ograniczenie się do czujników DS, ułatwi Ci realizację i kłopot z budową takiego układu. Tymbardziej że zamierzasz jeszcze zaimplementować algorytm sterowania PI.
Hehe raczej może moja własna inicjatywa - nie mogę zrzucić winy na nikogo innego:)
Generalnie chodzi o to, by pogodzić tradycję i dostępność dotychczas stosowanych czujników NTC z nutką nowoczesności (DS) i dać większe pole do wyboru użytkownikowi. Mam nadzieję, że nie spowoduje to, że będę sobie pluć w brodę przy realizacji układu, a trochę większe możliwości zawsze działają na plus.
Odnośnie wyższej temperatury otoczenia to moje obawy wiążą się z umiejscowieniem puszki, gdzie będzie PCB (niewielka odległość i metalowa obudowa, która może ciepło przenosić i powodować wzrost temperatury w samej puszce. Jak wspomniałem, wydaje mi się to problemem ale nad nim będę się głowić - zawsze można coś zmienić w puszce lub zamontować ją w inny sposób.
Mimo wszystko spróbuję podnieść rękawicę z tym analogowym NTC - jeśli uzyskam tylko niezadowalające pomiary związane z szumami z układu lub okaże się, że rozdzielczość jest niewystarczająca to zawsze można sobie odpuścić. Więc przede wszystkim DS, a potem opcjonalnie NTC.
Dzięki za wszystkie podpowiedzi i rady - uważam, że na wagę złota i długich godzin domysłów, szukania i analizy:)