Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Stacja meteorologiczna... bez mikrokontrolera

Stiepanowna 02 Sie 2013 10:13 5859 0
  • Stacja meteorologiczna... bez mikrokontrolera

    Z pewnością wielu czytelników wykorzystywało czujniki lub inne układy scalone z interfejsem I2C w projektowanych urządzeniach.

    Jednym ze sposobów jest montaż testowanego układu scalonego na płytce drukowanej i połączenie jej z mikrokontrolerem. Równocześnie środowisko programów dla mikrokontrolerów wraz z wewnątrzsystemowym programem uruchomieniowym może być wykorzystane do komunikacji z testowanym układem scalonym i wyświetlania wysyłanych i odbieranych przez niego danych.

    Można też zrobić inaczej - wykluczyć mikrokontroler na rzecz konwertera USB-I2C. W tym przypadku można uruchomić program na komputerze, wykorzystując ulubiony język i środowisko programowania.

    Artykuł dotyczy układu scalonego USB-SMBus konwertera CP2112 produkowanego przez firmę Silicon Laboratories. Oprócz konwersji protokołów posiada także 8-bitowy port wejście/wyjście i wbudowany stabilizator napięcia 3,3V, który może zasilać testowany układ. Cały układ jest zasilany przez port USB w komputerze.

    Zaletą CP2112 jest sprzętowa realizacja protokołu USB-HID, co wyklucza
    potrzebę zastosowania specjalnego sterownika i umożliwia wykorzystanie standardowych sterowników, które oferuje praktycznie dowolny system operacyjny. W celu sprawdzenia całej koncepcji powstał taki oto schemat:

    Stacja meteorologiczna... bez mikrokontrolera

    Jak wynika ze schematu, układ scalony IC3 konwertera komunikuje się z dwoma czujnikami IC1, IC2, które są podłączone do wspólnej szyny I2C. IC1 to czujnik ciśnienia atmosferycznego, a IC2 - czujnik temperatury i względnej wilgotności powietrza. Czujnik BMP180 produkcji firmy Bosch Sensortec jest udoskonaloną wersją popularnego czujnika ciśnienia BMP085, ale w porównaniu ze starym modelem ma lepszą rozdzielczość i niższy poziom szumu. Warto wiedzieć, że ten czujnik najprawdopodobniej również zostanie wyparty przez nowszą wersję - model BMP280. Jednakże ten ostatni model czujnika jak dotąd nie jest jeszcze bardzo popularny.

    Zgodnie z datasheet'em, jego wejście /CS należy zewrzeć do masy podczas pracy z innymi czujnikami podłączonymi do tej samej szyny I2C. W przeciwnym wypadku, co też pokazało doświadczenie, czujnik będzie blokował linię danych SDA, co uniemożliwi pracę z szyną. W prezentowanym układzie autor podłączył jego zasilanie za pomocą rezystora R3, po wcześniejszej konfiguracji pinu GPIO.5 układu scalonego IC3 jako wyjście. Pozostałe układy scalone są podłączone według aplikacji z datasheet'u. Diody zenera D1-D3 chronią układ scalony IC3 przed uszkodzeniami, a R1 i R2 to rezystory podciągające dla linii I2C. Całość zmontowano na płytce uniwersalnej, pliki każdej płytki w Eagle dodano w załączniku.





    Stacja meteorologiczna... bez mikrokontrolera

    Strukturę komunikatów HID (reports) dokładnie opisano w nocie aplikacyjnej AN495 na stronie firmy silabs.com. Do komunikacji wyższego poziomu z CP2112 z programem użytkownika firma opracowała specjalną bibliotekę, która jest dostępna na jej stronie w formacie .dll dla Windows i .dylib dla MacOS. Przykładowo, pierwsza może być wykorzystana w programach w językach C/C++, C# i VB. Wszystkie funkcje API tej biblioteki zostały opisane w nocie aplikacyjnej AN496.

    Program testowy do komunikacji z czujnikami i wyświetlania ich wartości został napisany języku C# (źródło w załączniku). Jest przeznaczony do komunikacji w środowisku Visual Studio 2012 i przetestowany pod systemami operacyjnymi Windows 7 i Windows 8. Program komunikuje się z czujnikami co 2s i wyświetla otrzymane dane. Temperatura wyświetla się w °C, a ciśnienie w mmHg. Kod programu zawiera sporo komentarzy i każdy może dostosować go do swoich potrzeb.

    Stacja meteorologiczna... bez mikrokontrolera

    Podczas pracy wyjaśniła się następująca osobliwość funkcji SLABHIDtoSNBus.dll. biblioteki. Jeśli wybierzemy funkcję autoReadRespond (szczegóły w datasheet'cie), to zamiast pierwszego odczytanego bajtu z czujnika funkcja GetReadResponse zwraca adres rejestru tego bajtu. Równocześnie analizator logiczny na linii I2C wskazuje prawidłowe przesyłanie danych. Autorowi nie udało się tego zmienić.

    Udało się to obejść drogą odczytu serii danych z czujnika, z początkowego adresu na ten niższy niż wymagany. Pierwszy odczytany bajt był po prostu ignorowany. Po konsultacji z inżynierami wspomnianej firmy, autor przepisał kod, określając warunki blokowania funkcji autoReadRespond, która, jak się okazało, jest domyślnie zablokowana. W wyniku tego sekwencja bajtów wyświetlana przez analizator logiczny w pełni odpowiadała sekwencji zwracanej przez funkcję GetReadResponse.

    Autor: Siergiej Biezrukow

    W załączniku źródło i płytki w Eagle.

    Źródło tłumaczonego tekstu: http://www.radiokot.ru/circuit/digital/home/164/


    Fajne!
 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME