- Napięcie zasilania: 9…12 VDC
- Prąd obciążenia: 210 mA (tryb normalny)/60 mA (tryb oszczędny)
- Liczba kanałów: 8
- Częstotliwości próbkowania: 1 MHz, 100 kHz, 10 kHz, 1 kHz, 500 Hz
- Pojemność pamięci danych: 512, 1 k, 4 k, 8 k, 16 k, 32 k
- Sposoby wyzwalania:
- ręczny (MANUAL),
- dowolną kombinacją stanów (PATTERN),
- dowolnym zboczem na dowolnym kanale (EDGE).
- Liczba kursorów pomiarowych: 3
- Wielkość pokazywanego rekordu danych: 32 bajty
- Funkcje specjalne: analiza szeregowa, analiza równoległa (z użyciem kursorów pomiarowych), oszczędny tryb podświetlenia, sygnalizacja dźwiękowa, pamięć konfiguracji urządzenia.
W praktyce każdego elektronika zajmującego się techniką cyfrową wcześniej czy później musi nadejść taki moment. Mowa o chwili, w której trudno mu się obejść bez choćby prostego analizatora stanów logicznych, który jak się wydaje, powinien być elementarnym wyposażeniem takiego warsztatu. Tak samo było i w moim przypadku. Prace rozpocząłem od poszukiwania ciekawych rozwiązań istniejących układów, lecz szybko okazało się, iż rozwiązania te nie satysfakcjonują mnie. Generalnie, urządzenia, których opisy znalazłem w Internecie, można podzielić na dwie grupy: średnioskomplikowane układy akwizycji danych współpracujące z komputerem klasy PC i dedykowaną im aplikacją lub układy autonomiczne, lecz o ograniczonej funkcjonalności.
Postanowiłem skonstruować urządzenie szyte na miarę moich potrzeb. Jako że jestem zdecydowanym zwolennikiem urządzeń funkcjonujących samodzielnie, zdecydowałem się zbudować samodzielnie funkcjonujący układ.
Opis konstrukcji
Schemat analizatora T-logic przedstawiono na rys. 1. Jest to urządzenie z mikrokontrolerem o średniej skali komplikacji, wykorzystujące mikrokontroler ATmega325, kilka typowych układów scalonych z serii 74HC (lub HCT) oraz wyświetlacz graficzny LCD o rozdzielczości 240×128 punktów, zintegrowany z rezystancyjnym panelem dotykowym.
Nie bez powodu (jak i pewnych trudności) wybrano ten, a nie inny układ z rodziny AVR. Po pierwsze, zapewnia on odpowiednią liczbę portów I/O. Po drugie, wyposażono go w niezbędną z punktu widzenia założeń projektowych, liczbę źródeł przerwań sprzętowych. Po trzecie, układ ten dysponuje odpowiednią liczbą układów czasowo-licznikowych, jak i wbudowanym przetwornikiem ADC niezbędnym do obsługi panelu dotykowego.
Głównym zadaniem mikrokontrolera jest sterowanie procesem akwizycji i analizy danych oraz obsługa wyświetlacza zintegrowanego panelem dotykowym i graficznego interfejsu użytkownika. W analizatorze wykorzystano wszystkie układy czasowo-licznikowe mikrokontrolera oraz 3 źródła przerwań sprzętowych. Do składowania zarejestrowanych danych zastosowano statyczną pamięć RAM o oznaczeniu HM62256B o pojemności 32 kB, zaś do jej adresowania dwa 12-bitowe liczniki binarne typu 74HC4040 (używane jest 15-bitowe słowo adresowe).
Sposób użycia układów czasowo-licznikowych i źródeł przerwań systemowych z opisem ich znaczenia dla funkcjonowania całego urządzenia umieszczono w tab. 1 i tab. 2.
Pomimo iż podprogramy obsługi przerwań zostały napisane w asemblerze, a wykonanie każdego z nich zajmuje tylko kilka taktów zegara mikrokontrolera, to biorąc pod uwagę, że czas upływający od momentu wystąpienia zdarzenia generującego przerwanie do rozpoczęcia jego obsługi w mikrokontrolerach AVR zajmuje cztery cykle maszynowe, to przy częstotliwości taktującej wynoszącej 16 MHz nie da się uzyskać większej aniżeli 1 MHz realnej częstotliwości próbkowania sygnałów badanych. Na list. 1 pokazano podprogram obsługi przerwania INT0.
Edge_change:
$asm
push r16 ‚Odkładamy rejestr R16 na stos
in r16, SREG ‚Ładujemy do rejestru R16 rejestr SREG
push r16 ‚Odkładamy rejestr R16 na stos czyli de facto SREG na stos
lds R16, {T0_param} ‚do R16 ładujemy zmienną globalną T0_param czyli parametry Timera0
Out Tccr0a , R16 ‚Przepisujemy R16 (czyli T0_param) do rejestru sterującego Timer0 ustawiając tym samym preskaler czyli uruchamiając licznik - w 9 takcie mikrokontrolera licząc czas do obsługi przerwania
LDI R16,1 ‚Wpisanie do R16 stałej „1”
sts {Started}, R16 ‚Started=1 czyli sygnalizujemy programowi głównemu, że rejestracja na pewno wystartowała
CBI eimsk,0 ‚Wyłączamy przerwania od INT0
‚Odtworzenie SREG i R16
pop r16
Out Sreg , R16
pop r16
$end Asm
Return
Na rys. 2 przedstawiono w sposób schematyczny blok logiki sprzętowej analizatora wraz z rysunkiem przebiegów w charakterystycznych punktach układu dla trybu akwizycji danych „RECORD”. W analizatorze zastosowano dodatkowe, sprzętowe zabezpieczenie przed przekroczeniem górnego adresu pamięci RAM w trybie akwizycji danych (pomimo implementacji procedury OVF1) w przypadku, gdy wybrano maksymalną, dostępną liczbę próbek czyli 32768. Do tego celu służy wyjście Q4 licznika binarnego 74HC4040 (U5), bramka NAND U8D oraz jedno z wejść bramki NAND U8A (szczegóły tej funkcjonalności można zobaczyć na wykresie przebiegów na rys. 2).
Zgodnie z tym co napisano wcześniej, układ Timer0 dostarcza sygnał taktujący procesem akwizycji danych. W tym celu, układ ten skonfigurowano do pracy w trybie CTC licznika (wyjście OC0A w tryb Toggle) z odpowiednimi ustawieniami rejestru OCR0A jak i preskalera (N) częstotliwości taktującej ten licznik. Stosowne nastawy pokazano w tab. 3.
Dodatkowo, kilka słów wyjaśnienia wymagają sygnały sterujące dostępne na wybranych portach mikrokontrolera, których znaczenie jest fundamentalne z punktu widzenia sposobu pracy urządzenia. Opis znaczenia poszczególnych portów dla pracy analizatora jest w tab. 4.
Pomimo tego, że pamięć RAM w trybie akwizycji danych adresowana jest całkowicie sprzętowo, to tenże sam proces w trybie analizy danych, kontrolowany jest wyłącznie programowo. To znaczy, że odpowiedni przebieg taktujący (na wyjściu OC0A) generowany jest programowo bez użycia układu Timer0. Wynika to przede wszystkim z wybranego sposobu adresowania pamięci RAM jak i zapewnienia możliwości dowolnego przewijania rekordu danych (zawartości pamięci RAM). Dla zminimalizowania niekorzystnych zjawisk, które mogą wystąpić na wejściach układu zatrzasku 74HC573, zdecydowano się na zbocznikowanie ich do masy za pomocą rezystorów 220 kΩ. Dużo lepszym rozwiązaniem jest zastosowanie specjalizowanych izolatorów cyfrowych np. układów ADuM1400 firmy Analog Devices.
Obsługa
Na rys. 3 przedstawiono wygląd graficznego interfejsu użytkownika wraz z opisem znaczenia poszczególnych elementów regulacyjnych dla obu trybów pracy układu.
Podstawowym założeniem projektowym była chęć zbudowania możliwie najprostszego a zarazem czytelnego i funkcjonalnego środowiska współpracy urządzenia z użytkownikiem korzystającego ze znanych z systemów operacyjnych kontrolek. Tak powstał interfejs, w którym nastawy dla każdego z trybów pracy (akwizycja czy analiza) zostały podzielone na dwie strony z zakładkami „RECORD” i „PLAY”. Z uwagi na nagromadzenie elementów regulacyjnych, które to przekłada się na ich rozmiar jak i wymiary samego panelu dotykowego, regulacje wszelkich parametrów powinny odbywać się przy użyciu specjalnego rysika lub innego przedmiotu o gładkiej, ale twardej końcówce.
W przypadku pól wyboru rodzaju zdarzenia wyzwalającego rejestrację elementem aktywnym jest (oprócz symbolu graficznego) również część związanego z nim opisu. Należy podkreślić, iż wszystkie kontrolki sprawdzają stan związanych z nimi zmiennych i jeśli program stwierdzi, iż dokonywana operacja jest niemożliwa, stają się nieaktywne oraz wygenerowany zostanie podwójny sygnał dźwiękowy – „tick”. W przeciwnym wypadku, wykonywanej operacji towarzyszy pojedynczy sygnał dźwiękowy (lub potrójny dla potwierdzenia zapisania konfiguracji pracy urządzenia).
W programie obsługi analizatora zaimplementowano aż 3 kursory pomiarowe: jeden do analizy równoległej i dwa do analizy szeregowej. Kursor analizy równoległej służy do pokazania wartości (heksadecymalnie) danej znajdującej się w podświetlonym obszarze wykresu zarejestrowanych przebiegów. Kursory analizy szeregowej służą do pokazania wartości (heksadecymalnie) ośmiu kolejnych bitów w wybranym kanale danych (poczynając od MSB) w zakresie bieżących 32 rekordów danych pokazywanych na wyświetlaczu.
Montaż
Schemat montażowy analizatora przedstawiono na rysunku rys. 4. Montaż tego typu układów możemy wykonać na co najmniej dwa sposoby w zależności od sprzętu lutowniczego jakim dysponujemy. Sposób pierwszy to użycie specjalnej stacji lutowniczej (typu Hot Air) oraz odpowiednich, przeznaczonych do tego celu, topników. Sposób drugi (stosowany przeze mnie) to montaż przy użyciu typowej stacji lutowniczej, dobrej jakości cyny z odpowiednią ilością topnika oraz plecionki, która umożliwi usunięcie nadmiaru cyny spomiędzy wyprowadzeń układów. Należy przy tym uważać by nie uszkodzić termicznie układu. Po przylutowaniu mikrokontrolera, przechodzimy do montażu podstawek pod pozostałe układy cyfrowe, następnie montujemy rezystory, kondensatory (należy zwrócić szczególną uwagę na typ i jakość zastosowanych elementów), pozostałe elementy bierne oraz złącza i gniazda. Złącze CON3 (AVR ISP) wymagane jest jedynie w przypadku, gdy zamierzamy sami zaprogramować nasz mikrokontroler.
Metalową obudowę rezonatora kwarcowego najlepiej jest połączyć z masą układu – przewidziano odpowiednie wyprowadzenie. Wyświetlacz graficzny LCD należy zamocować przy pomocy tulei dystansowych o wysokości 17 mm wykorzystując przewidziane w tym celu otwory, tak aby wyświetlacz znajdował się tuż nad płytką analizatora, zaś same połączenie, z uwagi na jego długość, należy wykonać przy użyciu listwy goldpin (gniazdo przylutowane do płytki wyświetlacza jak i do płyty głównej układu – oba gniazda połączone listwą goldpin). Tuż przed przykręceniem wyświetlacza do płyty głównej, należy podłączyć zintegrowany z nim panel dotykowy korzystając ze złącza ZIF umieszczonego po stronie elementów. Scalony stabilizator napięcia zasilania 7805 należy wyposażyć w odpowiedniej wielkości radiator zapewniający odprowadzenie ciepła strat. Poprawnie zmontowany układ (warto sprawdzić jakość montażu mikrokontrolera) powinien działać tuż po podłączeniu zasilania a jedyne regulacje, jakie należy przeprowadzić to regulacja kontrastu wyświetlacza graficznego (potencjometr montażowy P1).
CKSEL3...0: 1111
SUT1...0: 11
CKLKO: 1
JTAGEN: 1
BODEN: 1
RSTDISBL: 1
SPIEN: 0
OCDEN: 1
WDTON: 1
CKDIV8: 1
BOOTRST: 1
Program będzie rozwijany w kierunku zwiększenia funkcjonalności w tym dodania dodatkowych częstotliwości próbkowania jak i możliwości edycyjnych. W tej chwili już jest możliwe pomijanie znaczenia bitów dla trybu wyzwalania typu Pattern (możliwe ustawienia „0”, „1”, „X”), jak i zaimplementowano dodatkowe opcje przewijania.
Robert Wołgajew, EP
- R1: 22 kΩ
- R2...R9: 220 kΩ
- R10: 10 Ω (w zależności od jasności podświetlenia)
- R11: 0...100 Ω (w zależności od jasności podświetlenia)
- P1: 47 kΩ potencjometr montażowy (raster 5 mm)
- C1, C3, C7...C16: 100 nF
- C5...C6: 22 pF ceramiczny
- C2: 220 μF/16 V
- C4: 100 μF/16 V
- GLCD: wyświetlacz graficzny 240×128 pikseli ze zintegrowanym, rezystancyjnym panelem dotykowym typu LCD-AG-240128NTP-BIW W/B-E6 PBF
- B1: mostek prostowniczy 1 A 50 V (raster 5 mm)
- T1: BC547C (TO-92)
- U1:7805 (TO-220)
- U2: ATmega325 (TQFP-64)
- U3: HM62256B (DIP-28)
- U4, U5: 74HC4040 (DIP-20)
- U6: 74HC151 (DIP-16)
- U7: 74HC573 (DIP-20)
- U8: 74HC00 (DIP-14)
- CON1 – gniazdo męskie kątowe 10-pin (NSL25-10W)
- CON2 – gniazdo męskie kątowe 2-pin (NSL25-2W)
- CON3 – gniazdo męskie kątowe 2×5-pin (standard KANDA)
- Q1 – rezonator kwarcowy niski 16 MHz
- BUZ – buzzer piezoelektryczny KPX-G1205B
- L1 – dławik 10 μH
- ZIF – złącze typu ZIF do montażu powierzchniowego (raster 1 mm, 4-pin)