logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Najprostszy termometr na USB na świecie

ghost666 15 Wrz 2015 14:56 12420 23
  • Najprostszy termometr na USB na świecie


    Główną motywacją do stworzenia tego projektu była, jak mówi autor, chęć nauki programowania interfejsu USB w mikrokontrolerach z rodziny PIC. Dodatkowo autor ciekaw był, jak mocno uprościć można funkcjonalne urządzenie z interfejsem USB. Okazało się, że bardzo! zaprezentowany poniżej termometr składa się z, dosłownie, dwóch elementów - układu scalonego PIC16F1455 i wtyczki USB typu A. Program napisany dla PICa konfiguruje go jako urządzenie-wirtualny port szeregowy i nadają tą drogę temperaturę co sekundę w postaci strumienia znaków ASCII. Prościej się nie da :D

    Opis

    Mikrokontroler PIC16F1455 firmy Microchip jest dosyć nowym układem, którego jedna z cech jest to, że może obsługiwać interfejs USB, bez konieczności dodawania zewnętrznego oscylatora kwarcowego. Układ ten ma także wbudowane rezystory podciągające linie USB, co oznacza, że można uruchomić na nim komunikację poprzez USB bez żadnych dodatkowych elementów.

    Najprostszy termometr na USB na świecie


    Autor tworząc ten projekt i ucząc się programowania USB na PICu chciał móc wysyłać jakieś sensowne dane do komputera. Zauważył on, że układ ten ma moduł TIM - wbudowanego termometru. Pozwala on na odczytywanie, poprzez wbudowany przetwornik analogowo-cyfrowy (ADC) temperatury samego układu scalonego. Nie jest to może nazbyt dokładny termometr, jednakże pozwala on na odczyt temperatury rdzenia mikrokontrolera, która w przybliżeniu równa jest temperaturze otoczenia.

    Wykonanie projektu było bardzo proste - wystarczyło zlutować ze sobą mikrokontroler w obudowie do montażu przewlekanego (DIP) i wtyczke USB. Podłączone zostały jedynie cztery linie - VDD, VSS oraz D+ i D-. Korzystając z stosu USB M-Stack z Signal 11 autor napisał program (kod głównej funkcji programu poniżej), który konfiguruje urządzenie jako urządzenie szeregowe CDC i przesyła temperaturę w postaci tekstowej do komputera z częstotliwością 1 Hz.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Od strony komputera dane zbierane mogą być dowolnym programem - prosty terminalem, lub dedykowanym programem, który będzie logował wartości z ADC/temperaturę i dodawał do nich np. aktualny czas.

    Żródło: https://hackaday.io/project/6258-two-component-usb-temperature-data-logger

    Fajne? Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    https://twitter.com/Moonstreet_Labs
    ghost666 napisał 11960 postów o ocenie 10197, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #2 14997222
    pawel1029384756
    Poziom 21  
    Projekt na prawdę ciekawy, ale bardziej jako eksperyment niż coś praktycznego. Martwi mnie trochę brak jakiś kondensatorów filtrujących zasilanie. Co prawda pewnie z drugiej strony USB ma dobrą filtracje w komputerze, ale jak by już dać przedłużkę, szczególnie kiepską, to mogą pojawić się problemy.
    Fajnie, bo projekt pokazuje, jak bardzo użyteczne mogą bić mikrokontrolery PIC, które niestety są mało popularne w Polsce.
  • #3 14997383
    c4r0
    Poziom 36  
    To jest projekt-pomysł i jego założeniem jest właśnie pozbycie się wszystkich możliwych elementów nawet kosztem stabilności pracy. Autor osiągnął tutaj szczyt, no chyba, że ktoś przerobi scalak tak żeby pasował do gniazda USB... albo zrobi termometr z samej wtyczki :P Przydatność jest w praktyce zerowa ale za pomysłowość efekt (przy uwzględnieniu założeń) należy się duży plus!
  • #4 14997589
    komatssu
    Poziom 29  
    Ten układ niestety będzie mierzył temperaturę gniazda USB w komputerze, a nie otaczającego go powietrza.
  • #5 14997619
    kombo
    Poziom 13  
    Sztuka dla sztuki.
    Autor mógłby się pokusić o wykorzystanie pic'a w obudowie SMD co by zredukowało wymiary:)
    W sumie dobrze że są tacy wśród nas, co nie myślą o straconym czasie na takie konstrukcje.

    Nie zawsze trzeba mieć zysk ze swej pracy, liczy się satysfakcja.

    Pozdrawiam.
  • #6 14997952
    ghost666
    Tłumacz Redaktor
    1) Autor sam pisał, że mierzy temperaturę scalaka.
    2) Projekt, jak tłumaczyłem, miał na celu nauczenie się USB, od strony programowania. Co może być prostsze? Jak chcemy nauczyć się wkręcać śrubki, to wkręcamy je w kawałek nagwintowanej stali czy od razu w silnik V6? :D
    3) Wystarczyłoby dodać 1 układ (termometr na 1-Wire, albo analogowy LM35) i już termometr by był realnie aplikowalny, więc rozwiązanie o ile jest ultraproste ma możliwości rozwoju ;).
  • #7 14998110
    sftw
    Poziom 1  
    Ja uważam że to świetna sprawa...i dokładnie nie miało to być użyteczne, praktyczne czy jakieś WOW, ale za to jest to czego czasem tutaj na elce brakuje.... bo ktoś niema, bo to jego, a tak na prawdę nie chce dać. a mowie o kodzie który autor napisał i udostępnił żeby wszyscy z niego korzystali i w ten sposób się uczyli, i nie pomiaru temperatury a obsługi USB i twórczości.

    Pozdrawiam.
  • #8 15001606
    szczepar
    Poziom 20  
    pawel1029384756 napisał:
    [...] Martwi mnie trochę brak jakiś kondensatorów filtrujących zasilanie. Co prawda pewnie z drugiej strony USB ma dobrą filtracje w komputerze, ale jak by już dać przedłużkę, szczególnie kiepską, to mogą pojawić się problemy.
    [...]


    Proponuję zapoznać się z specyfikacją USB i restrykcjami dotyczącymi dołączania urządzeń zawierających obciążenia pojemnościowe (głównie chodzi o chwilowy prąd ładowania takich kondensatorów i wpływu na inne urządzenia podłączone do USB). Aby zrobić to zgodnie z sztuką trzeba było by kombinować.
    .
  • #9 15003959
    michalko12
    Specjalista - Mikrokontrolery
    Kondensator filtrujący powinien być nawet w tak bezużytecznym układzie, są jakieś minimalne zasady projektowania urządzeń cyfrowych
  • #10 15004127
    szczepar
    Poziom 20  
    michalko12 :
    Nie znam takiego przedrostka jak "pierdyliony" , farad znam - możesz mi wskazać gdzie w "przedrostkach do jednostek fizycznych układu SI" znajdę taki przedrostek ?

    Ja rozumiem przeczytałeś na szybko, i musiałeś skomentować, teraz natomiast przeczytaj z zrozumieniem i wskaż mi gdzie napisałem że nie wolno/nie trzeba ich stosować.

    Zasady projektowania urządzeń cyfrowych - a możesz je wymienić ?
    Tylko podając punkt o kondensatorze odprzęgającym podaj jego wartość dobrze ?
    (nie odsyłaj mnie do google , bo zasad nie muszę się uczyć - zasady te nie mówią jak radzić sobie z 60mV ripplem o f=200MHz na linii zasilania propagowanymi z wzmacniacza symetrycznego obciążonego I=300mA@200Mhz. I tak 60mV było za dużo, trzeba było zejść do ~5mV )
  • #11 15004140
    c4r0
    Poziom 36  
    michalko12 napisał:
    bo takie są zasady projektowania urządzeń cyfrowych!
    Nie popieram takiego podejścia. Jak by każdy tak myślał to nie było by żadnych nowych odkryć. Jeśli układ nie jest krytyczny i awaria nie jest problemem a bardziej ciekawostką, to nie widzę powodu ścisłego stosowania się do takich zasad. Może akurat się okazać, że wszystko będzie śmigać bez problemów bez żadnych kondensatorów. Równie dobrze mógłbyś powiedzieć że nawet tak prosty układ musi mieć obudowę bo takie są zasady projektowania urządzeń, że elementy pod napięciem nie mogą być na wierzchu (!!!) :lol:
  • #12 15004197
    Urgon
    Poziom 38  
    AVE...

    Specyfikacja USB dopuszcza bodaj 10uF na zasilaniu. Nawet taki prosty układ powinien mieć przynajmniej kondensator 100nF ceramiczny. To dobra praktyka projektowa. Powinno się o tym pamiętać nawet przy prostych układach, bo można nabrać złego nawyku zakładania tematów z gatunku "Układ nie działa", gdzie poprawną odpowiedzią jest brak filtracji.
  • #13 15004261
    szczepar
    Poziom 20  
    Urgon :
    Specyfikacja USB 2.0 w pierwotnej wersji zakładała :
    “A minimum of 1.0uF is recommended for bypass across Vbus.”

    Ale po jakimś czasie zmieniono to na :
    “A USB device is required to expose a capacitance on the VBUS pin of its connector of CRPB. This capacitance shall be greater than CRPB min for voltages on the VBUS pin from 0V to 5.25V, regardless of whether the USB device is powered or unpowered.”

    Jednocześnie zmieniając definicję CRPB na :
    "VBUS to GND across the whole VBUS voltage range (0 - 5.25V); Note 9, Section
    7.2.4.1" min 1uF , max 10 uF.

    Reasumując - odsprzęganie pomiędzy 1uF a 10uF (gdzie 1uF jest wymagane jako minimum).

    Nie należy tego jednak odczytywać jako "wlutuj 1uF i będzie dobrze"

    Kolejna sprawa , czy tam będzie 100nF czy go nie będzie to będzie działać tak samo...
    Czyli źle.

    A czemu źle ? Sprawdź sobie gdzie leży rezonans takiego kondensatora (czyli kiedy już zupełnie nie działa).
    100nF to było dobre jak układy miały w porywach 1MHz.
  • #14 15004692
    Freddy
    Poziom 43  
    Koledzy najeżdżacie na autora, a to jest projekt DIY Zagranica :).
  • #15 15004892
    c4r0
    Poziom 36  
    To jak autor jest zza granicy i nie bierze udziału w dyskusji, nie można już wyrazić opinii o projekcie?
  • #16 15005810
    Freddy
    Poziom 43  
    Można wyrazić opinię, ale dyskusja jest taka, jakby autor był obecny na forum.
  • #17 15007446
    michalko12
    Specjalista - Mikrokontrolery
    szczepar napisał:
    100nF to było dobre jak układy miały w porywach 1MHz.

    Naprawdę? To znakiem tego według twojej teorii np. Raspberry Pi i wszystkie inne tego typu konstrukcje powinny chodzić na max 1MHz. Wszyscy na przekór Twojej teorii stosują te nieszczęsne 100n (Schemat RPi). Wracając do tego projektu to te 100n nie miało pomagać VUSB tylko procesorowi, który przy kiepskiej jakości linii zasilania może sam sobie szkodzić.

    szczepar napisał:
    A czemu źle ? Sprawdź sobie gdzie leży rezonans takiego kondensatora (czyli kiedy już zupełnie nie działa).

    Akurat wtedy taki kondensator ma najmniejszą impedancję i najlepiej w tym przypadku spełnia swoje zadanie. A to, że ma gorszą odpowiedź przy innych częstotliwościach nie oznacza, że już w ogóle nie spełnia swojej roli. W wielu przypadkach stosuje się równolegle połączone kondensatory o różnych wartościach w celu rozszerzenia pasma (zwielokrotnienia tych Twoich "rezonansów")

    c4r0 napisał:
    Nie popieram takiego podejścia. Jak by każdy tak myślał to nie było by żadnych nowych odkryć.

    Tu już nie ma co odkrywać, ktoś właśnie kiedyś odkrył, że bez tych kondensatorów są problemy >>> Link <<<. Potem wiele osób widząc taki projekt będzie wzorować się na takim gniocie tłumacząc, że przecież tam działało to i u mnie powinno działać.

    Dodano po 1 [minuty]:

    Freddy napisał:
    Można wyrazić opinię, ale dyskusja jest taka, jakby autor był obecny na forum.

    Nic podobnego. Dyskusja jest tylko o projekcie i nikt tu nie odnosi się do samego autora.
    Może coś źle zrozumiałeś.
  • #18 15008394
    szczepar
    Poziom 20  
    michalko12 :
    Nie chciało mi się szukać daleko - wpisałem "100nF datasheet" i wybrałem pierwszy z brzegu pdf jaki wyrzucił mi google.
    http://datasheet.octopart.com/CC0603KRX7R8BB104-Yageo-datasheet-10883670.pdf

    Zobacz sobie na :
    Fig. 5 Impedance ESR vs. frequency characteristics for multilayer chip capacitors.

    I co tam widać około 15 MHz wypada rezonans własny takiego kondensatora.
    OD 10 MHz już ESR takiego kondensatora zaczyna wzrastać.
    Przy założeniu że układ ciągnie ci prąd impulsowo musisz się liczyć z Harmonicznymi 3,5.

    Co powoduje że dla układu o częstotliwości pracy 2MHz - 5 harmoniczna wypada już w zakresie gdy ten kondensator przestaje poprawnie pracować. Oczywiście taki kondensator w szybszych układach coś tam będzie filtrował - ale jednocześnie daje Fałszywe złudzenie poprawności filtracji.

    I jeśli uważasz że patrząc na sam schemat Raspberry Pi - podparłeś się czymś tak niepodważalnym że nie będę w stanie wskazać błędu w twoim rozumowaniu to się głęboko mylisz.

    W produkcjach gdzie masz 4-6 warstw stosuje się coś czego na schemacie nie widać a co wynika z budowy PCB, są to pojemności wynikające z 2 warstw gdzie jedna z nich jest masą a druga zasilaniem. Takie obwody mają pojemności pF i znakomicie działają w wysokich częstotliwościach.
    Plus proponuje zerknąć na wyjścia stabilizatorów w w/w przez Ciebie projektu - masz tam 10nF.

    Dodatkowo duże znaczenie ma wielkość obudowy w jakiej jest dany kondensator oraz diaelektryk - mniejsza obudowa pozwala na pracę z wyższymi częstotliwościami.

    Naprawdę możesz stosować mityczne 100nF wszędzie i gdzie się tylko da bo tak uczyli w szkole (bo nauka tam zatrzymała się na etapie układów TTL z CEMI).
    Ewentualnie bezkrytycznie powielać i zapierać się, że tak jest lepiej, i póki nie masz ambicji aby z 24-bitowego przetwornika wycisnąć realne 21 bitów (jak deklarują w nocie układu) i zadowala cię 12-14 bitów jakie uzyskasz.

    Moje wpisy mają uświadomić że :
    - 100 nF nie są lekiem na całe zło a często wprowadzają złudne poczucie poprawnego projektu
    - kondensatory to nie jest element który lutuje się bo ma być , to musi być przemyślany element całości

    Natomiast Tobie mają uświadomić co następuje :
    - to że ktoś ma wpisane Automatyk , a nie Specjalista - Miktrokontrolery - to nie znaczy że nie ma zielonego o elektronice analogowej/cyfrowej
    - zanim napiszesz kolejny post nic nie wnoszący do dyskusji/lub wnoszący mało - przeczytaj z zrozumieniem co napisał przedmówca
    - nie wkładaj swoich interpretacji tekstu przedmówcy w jego usta
    - to że nieraz nie widać problemu bo np. nie masz czułego układu ADC to twój problem - brak świadomości o problemie nie wyeliminuje go
    - poczytaj sobie o harmonicznych i to że układ pracujący na 1 MHz potrafi siać i na 7 harmonicznej
    - nie stosowanie 100nF jest złe, ale stosowanie SAMYCH 100nF jest złe (a to jest zasadnicza różnica)
    - to że nie widać kondensatora na schemacie to nie znaczy że go nie ma (patrz wielowarstwowe płytki PCB i pojemność jaka z nich wynika)

    Jak widać dyskusja była jednak potrzebna, bo nadal żyją ludzie w przeświadczeniu że 100nF to rozwiązanie wszystkich problemów.
    (Żałuję jedynie że nie mam już oscylogramów pokazujących jak bardzo zwykły generator 40 MHz "sieje" po zasilaniu w zależności od dołączonych kondensatorów - w tym i mitycznego 100nF).

    Dla tych natomiast co chcą jakiejś rady co z tymi kondensatorami :
    - zamiast 3 x 100 nF przemyślcie zastosowanie 100nF, 10nF , 1 nF :)
  • #19 15008494
    Urgon
    Poziom 38  
    AVE...

    Gdybyś na moment przestał mieć takie nadęte ego, to byś zauważył, że tam napisałem, iż 100nF to przynajmniej minimum potrzebne zawsze. Osobiście zawsze stosuję parę 100nF + 10uF przy każdym pinie Vcc każdego mikrokontrolera czy innego układu scalonego + dodatkowe kondensatory minimum 10uF przy wejściu zasilania.
    Dalej, w nocie katalogowej użytego w tym projekcie mikrokontrolera na stronie 353 w tabeli 29.7 podano minimalną wartość specjalnego kondensatora Vusb3v3 dla wewnętrznego LDO na 0,22uF, jest to pierwszy niezbędny kondensator, którego tutaj brakuje. Ciekawe, z jakiego powodu upierają się na kondensatory MLCC? Hej, może dlatego, że mają niższą wartość ESR od innych typów?
  • #20 15008586
    michalko12
    Specjalista - Mikrokontrolery
    szczepar napisał:
    ...
    Jak widać dyskusja była jednak potrzebna, bo nadal żyją ludzie w przeświadczeniu że 100nF to rozwiązanie wszystkich problemów.

    Zdaję sobie sprawę ze wszystkiego co napisałeś. Ja nie mam ochoty pisać elaboratów tutaj na ten temat bo nie mam na to czasu. Podałem link, pod którym są umieszczone linki do literatury rozszerzającej te zagadnienie. Jest tam też to o czym piszesz. Jeśli ktoś ma ochotę to niech się w całą tą literaturę zagłębia, a jeśli nie ma, to w wielkim skrócie na tej stronie przedstawiony jest ten problem. Zobacz co wcześniej napisałeś, że 100n to dla układów, które pracowały w porywach do 1MHz. Weźmie teraz ktoś schemat jakiejś płyty z dziesiątkami lub setkami MHz i coś mu się nie będzie zgadzało z tym co napisałeś bo tam będą na potęgę stosowane te nieszczęsne 100n. Tylko nieliczne osoby będą sobie zdawać sprawę z tego jak w rzeczywistości zachowują się te kondensatory ułożone na około układu i dlaczego w ogóle muszą być ułożone w różnych miejscach. Myślisz, że po tej informacji komuś przyjdzie do głowy, że wewnętrzne warstwy robią za takie kondensatory? Zobacz co ten projekt sobą reprezentuje i jakie są zdania na temat tej filtracji. Faktem jest to, że nie do końca zrozumiałem Twoją pierwszą wypowiedź, bo była trochę oderwana od postu poprzednika, tam była mowa o filtracji, a Ty pisałeś o specyfikacji USB.

    Dodano po 2 [minuty]:

    szczepar napisał:
    Dla tych natomiast co chcą jakiejś rady co z tymi kondensatorami :
    - zamiast 3 x 100 nF przemyślcie zastosowanie 100nF, 10nF , 1 nF :)

    michalko12 napisał:
    W wielu przypadkach stosuje się równolegle połączone kondensatory o różnych wartościach w celu rozszerzenia pasma


    Dodano po 3 [minuty]:

    Urgon napisał:
    Ciekawe, z jakiego powodu upierają się na kondensatory MLCC?

    Głównym powodem jest niska indukcyjność, co przekłada się na niską impedancję.
  • #21 15008714
    szczepar
    Poziom 20  
    michalko12 :
    Wolę opracowania zrobione przez firmy produkujące układy :)
    AN-1109 "Recommendations for Control of Radiated Emissions with iCoupler Devices" - tu przykład jak robi się kondensatory w PCB z bardzo wrednymi układami.

    Pokazując płytkę z RB Pi gdzie ludzie kręcą zegar do 1 GHz prosiłeś się o głębsze wytłumaczenie tego, czemu to działa mimo takich a nie innych kondensatorów.

    Urgon :
    Są układy gdzie 100nF to jest już maksimum jakie można do nich podłączyć.
    I gdzie specjalne procedury projektowania płytek branę są bardziej pod uwagę. (patrz układy ADUM)

    "100nF to przynajmniej minimum potrzebne zawsze" - na tym polega właśnie problem propagujesz nieświadomie minimalistyczne podejście.
    Bo jeśli brak przy tym informacji że to minimum nie jest wystarczające w większości szybkich procesorów to nikt nie będzie szukał lepszych rozwiązań.
  • #22 15008791
    michalko12
    Specjalista - Mikrokontrolery
    szczepar napisał:
    Wolę opracowania zrobione przez firmy produkujące układy :)
    AN-1109 "Recommendations for Control of Radiated Emissions with iCoupler Devices" - tu przykład jak robi się kondensatory w PCB z bardzo wrednymi układami.


    Zobacz jaki jest tytuł tego wątku. Wiesz kto tu najczęściej będzie zaglądał? Pewnie w większości "pokolenie" Arduino. Wiesz na co im ta "rozszerzona" wiedza i zawiłe tłumaczenia potrzebne są? Jak komuś potrzebne są dokładniejsze informacje będzie wiedział czego i jak szukać. W większości projektów tego typu wystarczy dać po jednym 100n na każdą nogę zasilającą i to będzie te niezbędne minimum dużo lepsze od tego żeby nic nie dawać jak w przypadku tego "projektu".
  • #23 15008907
    Urgon
    Poziom 38  
    AVE...

    Szczepar, jak wielu amatorów elektroniki projektuje układy pracujące z wysokimi częstotliwościami? Ci, co je projektują, na przykład radioamatorzy, znają te wszystkie problemy. Większość poważniejszych programistów mikrokontrolerów też je zna. Ale amator projektujący od niedawna układy z mikrokontrolerami zwykle nie pamięta nawet o tym przeklętym 100nF na zasilaniu. I dlatego układ mu nie działa zbyt stabilnie.
    W tym przypadku twórca projektu w celach uzyskania "minimalistycznej" konstrukcji nie dał ani jednego kondensatora. Ani na zasilaniu, ani dla stabilizatora LDO dostarczającego energii dla transceivera USB. Jemu to działa w jego komputerze, ale w moim by już nie działało. Miałem problem z transmisją USB również przez brak odpowiedniego kondensatora dla LDO w PIC18F45K50.

    Teraz dla rozrywki i edukacji sytuacja, gdzie mikrokontroler bez dodatkowych kondensatorów będzie funkcjonalnym urządzeniem (choć dodanie dwóch kondensatorów poprawi efekt): dwuelementowy emulator tagu RFID.
REKLAMA