W takich sytuacjach niezbędny okazuje się oscyloskop, ale nie prosty oscyloskop, tylko bogatsza wersja z możliwością dekodowania danych na popularnych magistralach. Taki oscyloskop jest jednak stosunkowo drogi i często znajduje się poza zasięgiem elektronika hobbysty.
Dobrą wiadomością dla hobbysty jest to, że w większości sytuacji nie potrzebujemy pełnej funkcjonalności, jaką oferuje nam taki oscyloskop. Wystarczyłby prosty podgląd czy na magistrali jest „wszystko w porządku”. Prezentowany w tym artykule projekt spełnia właśnie taką funkcję monitora magistrali (I2C, UART, SPI, 1-WIRE, USRT, IRCOM), a dodatkowo pozwala też na pomiar napięcia i prądu w wybranym punkcie układu, pomiar częstotliwości oraz ładunku elektrycznego.
Opis układu - monitor magistrali/moduł do pomiarów
Realizacja tego projektu w pokazanej na fotografiach postaci maleńkiego modułu była możliwa dzięki zastosowaniu nowoczesnego mikrokontrolera ATxmega32E5. Jest to najmniejszy członek rodziny xmega, dostępny w obudowie 32-pinowej. Mikrokontroler ten oprócz standardowej funkcjonalności ma też szereg zaawansowanych rozwiązań, takich jak: bezpośredni transfer danych DMA (Direct Memory Access), system zdarzeń (Event System) oraz niewielki moduł logiki programowalnej (Custom Logic Module).
Wykorzystanie tych podsystemów pozwala na sprzętową realizację najbardziej czasochłonnych operacji, co znacząco zwiększyło możliwości poprawnej interpretacji nawet stosunkowo szybkich magistrali (do 1MHz). Schemat ideowy całości można zobaczyć na rysunku 1.
Do prezentacji danych został wybrany bardzo popularny i tani wyświetlacz z telefonu Nokia 5110 (wyposażony w sterownik PCD8544). Sterowanie tym wyświetlaczem odbywa się poprzez jednokierunkową magistralę SPI wzbogaconą o jedną linię, decydującą o tym, czy wysłany bajt jest komendą, czy danymi do prezentacji. Jedna ramka danych składa się z 512 bajtów (8 bajtów komend i 504 bajty danych) jak na rysunku 2.
Zastosowany wyświetlacz jest monochromatyczny, ale zmieniając wartość poszczególnych pikseli na przeciwny przy każdym odświeżaniu, można uzyskać jeszcze wartość pośrednią pomiędzy aktywnym a nieaktywnym pikselem (rysunek 3). Podświetlanie wyświetlacza zrealizowanie jest za pomocą diod LED D6-D11. Układ AP7333 (LDO 3,3V) zapewnia stabilne zasilanie, które dodatkowo jest filtrowane przez koraliki ferrytowe FB1-FB3 i kondensatory C6-C9. Wejście stabilizatora jest zabezpieczone przed zbyt wysokim napięciem diodą Zenera D1 i bezpiecznikiem polimerowym F1.
Minimeter - pomiar wartości analogowych
Pomiar wartości analogowych realizowany jest za pomocą przetwornika analogowo-cyfrowego wbudowanego w mikrokontroler. Napięcie referencyjne dla przetwornika (2,048V±0,1%) dostarcza układ MCP1501. Mierzone napięcie trafia do przetwornika AC-DC poprzez dzielniki napięcia utworzone z rezystorów: R7, R9 i R8, R10.
Takie rozwiązanie pozwala zwiększyć zakres pomiarowy do 7V (maksymalne dopuszczalne napięcie na wejściu xmegi to około 3,5V), jednocześnie stanowiąc zabezpieczenie w przypadku jego przekroczenia. Aby zapewnić odpowiedni poziom tłumienia sygnału współbieżnego (CMRR), rezystory tworzące te dzielniki muszą być bardzo dokładne (±0.1%).
Rysunek 4 dokładniej ilustruje ten problem. Przy jednakowym napięciu na obu wejściach napięcie pomiarowe powinno wynosić 0V. Tak będzie na pewno, jeśli oba wejścia zewrzemy do masy (rysunek 4a), jednak dla niezerowych napięć wejściowych otrzymamy (w najgorszym przypadku) błąd będący iloczynem napięcia wspólnego i tolerancji zastosowanych rezystorów (rysunek 4b).
Błąd ten będzie oczywiście występował również, gdy napięcia na wejściach nie są sobie równe (będzie się zmieniał wraz z ich wartościami), dlatego tylko rezystory o tolerancji poniżej 1% pozwalają uzyskać akceptowalną w tym przypadku dokładność. Za dzielnikami wpięte są kondensatory C4 i C5, których zadaniem jest szybkie przeładowanie pojemności układu próbkującego (obniżają impedancję dzielników widzianą od strony przetwornika).
Niestety pojemność tych kondensatorów wraz z rezystancją zastępczą dzielników tworzy filtr dolnoprzepustowy o częstotliwości granicznej kilkunastu kiloherców, co akurat w tym zastosowaniu nie stanowi większego problemu (ale warto o tym pamiętać).
Minimeter - pomiar prądu
Pomiar prądu polega na odczycie napięcia na rezystorze R1 (100mΩ). Sygnał użyteczny jest na tyle mały, że konieczne okazało się zastosowanie dedykowanego precyzyjnego układu wzmacniającego INA181 (rysunek 5). Po podaniu dodatniego napięcia odniesienia na końcówkę REF układ ten pozwala na pomiar prądu w obu kierunkach.
Przetwornik AC-DC mierzy różnicę napięć na wyprowadzeniach REF i OUT, dlatego konkretna wartość i dokładność napięcia na końcówce REF nie jest krytyczna. W naszym przypadku napięcie to zapewnia zwykła dioda krzemowa D12 spolaryzowana w kierunku przewodzenia przez rezystor R14. Zakres mierzonego prądu to –0,25A÷1A.
Wszystkie wejścia cyfrowe są zabezpieczone rezystorami szeregowymi i diodami Zenera, ograniczającymi napięcie do maksymalnego dopuszczalnego przez mikrokontroler. Takie rozwiązanie chroni też mikrokontroler przed przepięciami, jakie mogą pojawić się na wejściach podczas podłączania przewodów pomiarowych.
Oprogramowanie - monitor magistrali/modułu do pomiarów
Przygotowane oprogramowanie pozwala na monitorowanie magistrali: I2C, UART, SPI, 1-WIRE, USRT i IRCOM (UART w podczerwieni), pomiar napięcia, prądu, częstotliwości i ładunku elektrycznego. Przełączanie między poszczególnymi trybami odbywa się poprzez naciśnięcie i przytrzymanie (około 3s) kombinacji przycisków.
Przyciski do zmiany trybu - monitor magistrali/moduł do pomiarów:
- 1. I2C (fotografia 1)
- 2. Pomiar napięcia (fotografia 2)
- 3. Pomiar prądu (fotografia 3)
- 4. UART (fotografia 4)
- 1+2. 1-WIRE (fotografia 5)
- 2+3. SPI (fotografia 6)
- 3+4. USRT (fotografia 7)
- 1+4. IRCOM (fotografia 8)
- 1+3. Pomiar częstotliwości (fotografia 9)
- 2+4. Pomiar ładunku elektrycznego (fotografia 10)
Funkcje przypisane do kombinacji przycisków:
- 1+3+4. Kalibracja ADC dla pomiaru napięcia
- 1+2+4. Kalibracja ADC dla pomiaru prądu
- 1+2+3. Ustawienia wyświetlacza (kontrast, podświetlanie)
- 2+3+4. Ustawienie długości opóźnień i czasu wyświetlania powiadomień
- 1+2+3+4. Informacja o wersji oprogramowania
Monitorowanie magistrali synchronicznych (I2C, SPI, USRT)
Monitorowanie magistrali synchronicznych (I2C, SPI, USRT) odbywa się na następującej zasadzie. W kluczowych momentach (aktywne zbocze sygnału zegarowego oraz początek i koniec transmisji) stan linii danych jest zapisywany w buforze. Mikrokontroler w wolnych chwilach przetwarza dane z bufora, rekonstruując bit po bicie odebrane dane, które następnie prezentowane są na wyświetlaczu. Maksymalna akceptowalna częstotliwość sygnału zegarowego SPI , USRT i I2C to 1MHz.
Monitorowanie magistrali asynchronicznych (UART, IRCOM)
Do dekodowania magistrali asynchronicznych (UART, IRCOM) wykorzystane są sprzętowe moduły wbudowane w mikrokontroler. Można monitorować dwie linie jednocześnie. W ten sposób możemy zobaczyć dane z linii TxD i RxD z zachowaniem kolejności, w jakiej wystąpiły. Dla łatwego rozróżnienia dane z linii RxD są wyświetlone ciemnymi znakami na jasnym tle, a dane z linii TxD odwrotnie. Ze względu na brak możliwości poprowadzenia ścieżki bezpośrednio do drugiego modułu USART w mikrokontrolerze, konieczne było przepuszczenie sygnału przez komparator analogowy, którego wyjście akurat było na właściwym pinie (rysunek 6).
Wersja UART wykorzystująca podczernień jest stosowana raczej rzadko, ale xmega ma sprzętowy moduł IRCOM, dlatego można było dodać tę funkcjonalność niewielkim kosztem. Różnicę w wyglądzie ramki danych UART i IRCOM można zobaczyć na rysunku 7.
W tym trybie można monitorować tylko jedną linię danych. Maksymalne ustawienie prędkości UART i IRCOM to 2Mbps.
W przypadku magistrali 1-WIRE przy każdym zboczu narastającym do bufora zapisywany jest czas trwania stanu niskiego na linii danych. Na tej podstawie odtwarzany jest przebieg wymiany informacji pomiędzy układami podpiętymi do magistrali. Aktualnie poprawnie interpretowane są dane nadawane w trybie standard (tryb overdrive nie jest obsługiwany).
Pomiar częstotliwości polega na zliczaniu liczby impulsów w określonym czasie, a dla częstotliwości poniżej 11kHz na zliczaniu cykli zegara w jednym okresie przebiegu mierzonego.
Wyniki przedstawiane są zarówno w formie liczbowej, jak i graficznej (wykres w funkcji czasu). Dokładność pomiaru jest zależna od dokładności głównego oscylatora xmegi (±1%) i oscylatora RTC (±0,5%) oraz od zakresu pomiarowego (najgorzej będzie dla częstotliwości granicznej 11kHz). Ogólna dokładność nie powinna być gorsza niż ±2,5%.
Dysponują c zmierzoną wartością prądu oraz pomiarem czasu, zdecydowałem się na dodanie możliwości wyliczenia ładunku elektrycznego (całki prądu w czasie). Jednak ze względu na ograniczoną rozdzielczość pomiaru prądu (1mA) oraz akumulacje błędu przesunięcia zera ADC (offset), otrzymane wyniki należy traktować jedynie jako orientacyjne.
Wykresy przedstawiające wartości analogowe prezentują wartość uśrednioną od ostatniej aktualizacji (ciemniejszym odcieniem) oraz maksymalną (jaśniejszym odcieniem). Dzięki temu można łatwo zorientować się, kiedy zachodzi zjawisko aliasingu (fotografia 11).
Montaż i uruchomienie monitora magistrali/modułu do pomiarów
Płytka drukowana (rysunek 8) została zaprojektowana z myślą o pracy na uniwersalnych płytkach stykowych (niewielkie wymiary, wyprowadzenia pomiarowe w rastrze 2,54mm). Elementy montowane powierzchniowo należy przylutować w pierwszej kolejności, rozpoczynając od mikrokontrolera (rozstaw wyprowadzeń to 0,8mm). Przy zachowaniu precyzji i dokładności montaż nie powinien sprawić większych trudności. Mniej doświadczonym czytelnikom zalecam poćwiczyć przed rozpoczęciem, ponieważ do wylutowania układów scalonych będzie konieczna stacja na gorące powietrze.
Do zaprogramowania mikrokontrolera potrzebny będzie programator z obsługą protokołu PDI (AVR-ISP mkII, AVR Dragon lub Atmel-ICE), odpowiednie wyprowadzenia są dostępne na złączu Z3. Korzystając z popularnego programu avrdude i programatora AVR-ISP mkII, należy użyć następującej komendy: avrdude -c avrisp2 -p x32e5 -U flash:w:MiniMeter-F1.hex. Dodatkowo warto jeszcze włączyć układ kontroli napięcia zasilającego (BOD) ustawiając odpowiednio FUSE5: avrdude -c avrisp2 -p x32e5 -U fuse5:w:0xeD:m.
Po prawidłowym zaprogramowaniu układ powinien od razu zacząć działać. Jeżeli na wyświetlaczu nic się nie pojawia, ale podświetlanie działa prawidłowo, może to oznaczać konieczność sprawdzenia elastycznego połączenia wyświetlacza z płytką (zebra connector). Pełną dokumentację tego projektu wraz z kodem źródłowym można znaleźć w Elportalu wśród materiałów dodatkowych do tego numeru EdW.
Możliwości zmian - moduł do monitorowania magistrali i pomiarów
Jako główne podświetlanie wyświetlacza wybrano cztery zielone diody LED. Zastosowanie diod o innym kolorze (również białych) jest możliwe, ale pociąga za sobą potrzebę doboru nowych wartości rezystorów R15–R18 (tak aby jasność diod była akceptowalna). Diody podświetlające wyświetlacz nie są w pełni zakryte przez jego obudowę, dlatego dla zwiększenia komfortu można zasłonić je odcinkiem samoprzylepnej folii aluminiowej (fotografia 12).
Dla układu nie przewidziano żadnej obudowy, ale możliwe jest wykonanie płytki osłonowej według rysunku 9.
Taką płytkę można zrobić np. z cienkiego laminatu bez miedzi lub tworzywa sztucznego. Przestrzeń pomiędzy płytką główną a osłonową można wypełnić silikonem lub klejem na gorąco (fotografia 13). Dodatkową zaletą kleju na gorąco jest to, że wystarczy trochę alkoholu izopropylowego i całość można bez problemu ponownie rozdzielić.