- 2 porty 8-bitowe (cyfrowe linie I/O),
- jeden 8-bitowy port wielofuncyjny (ADC/DAC/cyfrowe linie I/O),
- jeden port specjalnego przeznaczenia (cyfrowe linie I/O, PWM, generator przebiegu prostokątnego, licznik impulsów, miernik częstotliwości, SPI/I²C/1-Wire, komparator analogowy),
- tryb pracy portów jako 8-bitowy port równoległy I/O (tylko porty A, B i D),
- częstotliwość PWM: 1,22 kHz, 9,5 kHz, 78,125 kHz lub 156,25 kHz,
- częstotliwość przestrajanego sygnału prostokątnego: 1,2 kHz...2,5 MHz,
- zakres pomiarowy funkcji częstościomierza: do 10 MHz,
- rozdzielczość ADC i DAC: 12 bitów/0...5 V,
- częstotliwość taktowania I²C: 100 kHz, 400 kHz, 1 MHz,
- częstotliwość taktowania SPI: 1,25 MHz lub 5 MHz,
- zasilanie i komunikacja: port USB typu B z funkcjonalną izolacją galwaniczną,
- sterowanie: komendy SCPI (9600, 8, NP, 1),
- wbudowany wyświetlacz LCD 1,8”.
Świat idzie jednak do przodu i obecnie użytkownik może w każdej chwili zakupić praktycznie dowolne urządzenie, które, nie tylko przez USB, może sterować czym tylko dusza zapragnie. Pojawienie się mikrokontrolerów i ekosystemów typu Arduino czy Raspberry Pi zdaje się rozwiązywać problem. Wystarczy do portu USB wpiąć proste Arduino i po napisaniu niewielkiego programu można już za jego pomocą sterować peryferiami.
Szczególnie interesującą kategorią są urządzenia DAQ (Data AcQuisition), które umożliwiają między innymi zbieranie i przetwarzanie danych z czujników pomiarowych. W klasycznym urządzeniu DAQ użytkownik ma do dyspozycji szereg cyfrowych i/lub analogowych linii wejścia/wyjścia, których stanem można zarządzać za pomocą odpowiedniego oprogramowania. Niestety cena urządzeń DAQ w wielu przypadkach może być dość wysoka, a dodatkowo są to zwykle rozwiązania zamknięte, sprzedawane pod klucz jak przysłowiowe „czarne skrzynki”.
Po latach stosowania rozwiązań ad-hoc umożliwiających podłączanie się do komputera, postanowiłem skonstruować urządzenie, które w końcu spełni moje wymagania. Tak powstała pokazana na fotografii tytułowej przystawka laboratoryjna JJMDAQ.
Zgodnie z założeniami urządzenie oferuje 33 wejścia/wyjścia cyfrowe, w tym 8 analogowych. Dodatkowo w przystawce postanowiłem zaimplementować obsługę podstawowych interfejsów szeregowych (I²C, SPI, 1-Wire), generator PWM i przebiegu prostokątnego oraz prosty licznik impulsów i miernik częstotliwości.
Przystawka bazuje na 44-nóżkowym mikrokontrolerze PIC16F887, który wyposażony jest w całkiem pokaźny zestaw linii GPIO oraz peryferiów mogących realizować powyżej wymienione funkcje. Procesor taktowany jest zegarem 20 MHz.
Część analogowa przystawki bazuje na układzie AD5592R [2] firmy Analog Devices. AD5592 to 8-kanałowy, w pełni konfigurowalny front-end ADC/DAC/GPIO. Każdy kanał może być niezależnie skonfigurowany jako 12-bitowy przetwornik ADC bądź DAC pracujący w zakresie napięć 0...5 V albo jako GPIO, czyli cyfrowe wejście bądź wyjście. Programowanie układu realizowane jest przez zestaw 16-bitowych rejestrów oraz 4-sygnałowy interfejs SPI.
Sygnały wejścia/wyjścia przystawki dostępne są w postaci 4 portów: A, B, D oraz X. PORTA obsługiwany jest przez układ AD5592, a jego linie mogą pełnić funkcje wejść ADC, wyjść DAC albo GPIO. PORTB oraz PORTD stanowią proste wejście/wyjście cyfrowe. 9-bitowy PORTX, oprócz funkcji GPIO, może być skonfigurowany do obsługi funkcji alternatywnych:
- generator sygnału PWM,
- generator przebiegu prostokątnego o zmiennej częstotliwości,
- licznik impulsów,
- prosty miernik częstotliwości sygnału TTL,
- interfejs SPI,
- interfejs I²C,
- interfejs 1-Wire,
- komparator analogowy.
Każdy sygnał dostępny w interfejsie może być sterowany niezależnie. Porty A, B i D mogą być również skonfigurowane jako 8-bitowe, równoległe wejście/wyjście.
Generator PWM i generator przebiegu prostokątnego zrealizowane zostały za pomocą bloku CCP (Capture/Compare/PWM) mikrokontrolera. Wybrana częstotliwość sygnału PWM może wynosić 1,22 kHz lub 9,5 kHz z rozdzielczością 10 bitów albo 78,125 kHz lub 156,25 kHz z rozdzielczością 8 bitów.
Częstotliwość przebiegu prostokątnego o wypełnieniu 50% można zmieniać w zakresie od 1,2 kHz do 2,5 MHz. Oprogramowanie przystawki dopasuje wprowadzoną przez użytkownika częstotliwość do możliwości elektroniki bloku PWM.
16-bitowy, bramkowany licznik impulsów obsługiwany jest przez licznik TIMER1 mikrokontrolera. Prosty miernik częstotliwości wykorzystuje również TIMER1 oraz TIMER0 (z preskalerem równym 256) do sterowania podstawą czasu, która dobierana jest automatycznie w zależności od częstotliwości badanego przebiegu. Miernik umożliwia pomiar częstotliwości do 10 MHz.
Interfejsy komunikacyjne I²C oraz SPI zrealizowano za pomocą bloku MSSP (Master Synchronous Serial Port) mikrokontrolera. Interfejs I²C może pracować z częstotliwościami 100 kHz, 400 kHz albo 1 MHz. Interfejs SPI może pracować w trybach M0, M1, M2 lub M3 z częstotliwościami 1,25 MHz albo 5 MHz. Interfejs 1-Wire zrealizowano w sposób programowy.
W mikrokontrolerze PIC16F887 znajduje się również moduł komparatora analogowego, którego wejścia (C1IN+, C1IN–) oraz wyjście (C1OUT) również zostały wykorzystane.
Opisane powyżej funkcje alternatywne dostępne są na wybranych liniach 9-bitowego portu PORTX, który domyślnie działa jako cyfrowe wejście/wyjście. Włączenie i wyłączenie funkcji alternatywnych realizowane jest odpowiednimi rozkazami sterującymi.
Wszystkie sygnały (wraz z zasilaniem 5 V i GND) wyprowadzone są na cztery 10-stykowe, rozłączalne listwy zaciskowe typu 15EDGK3.81, a wejścia mogą być opcjonalnie zabezpieczone dodatkowymi, niewielkimi (np. 100 Ω) rezystorami szeregowymi. Po włączeniu zasilania wszystkie linie interfejsu skonfigurowane są jako cyfrowe wejścia.
Całość zmontowano w standardowej, plastikowej obudowie Z34A firmy Kradex.
Urządzenie zostało także wyposażone w 1,8-calowy, kolorowy wyświetlacz LCD Waveshare ST7735 [3], na którym w czasie rzeczywistym wyświetlane są informacje o aktywnych funkcjach oraz stany cyfrowe i analogowe poszczególnych linii interfejsu. Wyświetlacz nie jest niezbędny do pracy przystawki, ułatwia jednak jej użytkowanie. W szczególności jeżeli jedynym zadaniem jest monitorowanie sygnałów, to po podłączeniu ich do portów wejściowych wystarczy włączyć zasilanie przystawki, a stany sygnałów wyświetlone zostaną na wyświetlaczu.
Zarówno wyświetlacz, jak i układ AD5592 obsługiwane są przez interfejs SPI zrealizowany w sposób całkowicie programowy (bit-bang).
Przystawka jest zasilana i sterowana przez USB, zaś do obsługi tego ostatniego zastosowano kontroler FT230SX. W projekcie umieszczono klasyczne gniazdo USB typu B. Dodatkowo galwaniczną izolację interfejsu USB realizuje izolator ISO7221 oraz przetwornica DC/DC AM1S-0505.