
W tym artykule opiszę projekt oraz konstrukcję testera układów FPGA własnego pomysłu, do którego budowy zostałem zmuszony przez Chińczyków, bo w ostatnio zamówionej paczce od nich co trzeci scalak był wadliwy. Tester po wciśnięciu jednego przycisku dogłębnie sprawdzi włożony układ. Będzie trochę elektroniki analogowej, sporo cyfrowej, trochę o JTAGu i USB. Zapnijcie pasy, bo zapowiada się ciekawie.
1. Tytułem wstępu - trochę o naszym pacjencie, czyli układzie EPM240T100C5N
1.1. Dlaczego akurat ten?
1.2. Motywacja do budowy
1.3. Sprytny test
2.0 Budowa – założenia
2.1. Obsługiwane układy
2.1. Podstawka ZIF
2.2. Programowanie układu
2.3. Zabezpieczenie przeciwzwarciowe + pomiar prądów zasilania
2.2. Test pinów
2.3. Oprogramoanie po stronie PC
3. Niespodzianki podczas budowy
4. Plany na przyszłość
5. Podsumowanie
1. Tytułem wstępu - trochę o naszym pacjencie, czyli układzie EPM240T100C5N
Każdy z konstruktorów-elektroników ma chyba swoje ulubione procesory, FPGA czy inne scalaki, których używa do budowy jakichś projektów. Moim jest układ EPM240T100, najprostszy przedstawiciel rodziny układów programowalnych MAX II od firmy Altera.

1.1. Dlaczego akurat ten?
+ Tani (przed skokiem inflacji można było je dostać po 0.90$-1.5$/sztukę ana aliexpress)
+ Pojemność 240 bloków logicznych (LE) (1 blok w uproszczeniu pozwala na przechowanie jednego bitu w przerzutniku)
+ Dość przyjazna obudowa TQFP100 (0.5mm odstęp między nogami) – łatwa do lutowania w domu (po nabraniu wprawy)
+ Spora liczba końcówek (wersja w obudowie TQFP100 to 80 pinów I/O)
+ Obsługa różnych standardów napięciowych na pinach I/O w tym możliwość włączenia przerzutnika Schmitta na wejściu dla wolno rosnących sygnałów,
+ W najprostszym wariancie wymaga jedynie pojedynczego napięcia zasilania 3.3V
+ Zawiera dwie niezależne pamięci - pierwsza (konfiguracyjna) przechowująca aktualnie zaprogramowany wsad oraz druga (tzw. blok UFM)
* w pamięci konfiguracyjnej zapisane jest "jak ma działac układ", nie wymaga on więc dodatkowej pamięci do przechowania tej informacji (jak w przypadku wielu układów FPGA), jest te też możliwość zabezpieczenia przed odczytem naszego kodu
+ UFM służy dla użytkownika jako pamięć Flash; z zewnątrz może być ona widoczna jako pamięć szeregowa (np. po protokole SPI, I2C) czy też pamięć równoległa
+ Sygnał zegarowy (ok 3..5MHz) z bloku UFM można wykorzystać na swoje potrzeby, nie wymaga więc dodatkowego generatora
Jednak jest też sporo wad:
-Wyżej wspomniana pojemność 240 LE to jednak stosunkowo mało (nie zmieścimy w nim np. implementacji prostego procesora Z80 czy nawet 6502)
-Ograniczona liczba cykli przeprogramowania (do 100 razy)
-Blok UFM symulujący pamięć Flash tez ma tylko do 100 cykli zapisu (więc bardziej służy do przchowywania jakichś danych, które rzadko modyfikujemy;)
-Brak wejść 5V-tolerant
Wspomniany układ EPM240 to tylko najprostszy przedstawiciel rodziny, poniższa tabelka zawiera wszystkich członków tej rodziny:

Oraz sposób oznaczania:

1.2. Motywacja do budowy
Cena tych układów (aliexpress) na początku mojej przygody z nimi (rok 2017) wahała się w okolicach 1$ i w zasadzie przez 3 lata była na podobnym poziomie. W ciągu ostatnich kilku miesięcy stał się jednak jakiś dramat - cena z tygodnia na tydzień zaczęła szybować w górę i obecnie jest w okolicach 2-3$.
Ja zamawiałem je od przeróżnych sprzedawców i bywało raz lepiej, raz gorzej. Bywały zamówienia, że tylko 1 na 50 układów okazywał się niesprawny, bywały takie że 100% działało, ale ostatnio zamawiając od jednego sprzedawcy kilka razy zauważyłem poważny problem. Średnio co 3-4 układ nie działał. A bywały przypadki, że wylutowałem niesprawny układ, wlutowywałem nowy i ten tez nie działał, dopiero za 3 czy 4 razem było OK. Strata czasu i zszargane nerwy powiedziały STOP.
A co to znaczy, że układ był niesprawny? Bywało wiele różnych usterek:
* po wlutowaniu powodował zwarcie między zasilaniem a masą
* nie był wykrywany przez programator
* był wykrywany przez programator jako zupełnie inny układ (np. 5M240ZT100) mimo, że na obudowie widniało prawidłowe oznaczenie (!). O tym układzie będzie wspomniane jeszcze później. To tylko potwierdza, że Chińczyki malują na obudowach nowe oznaczenia często na ślepo. Mam kilka układów „zbieranych” na przestrzeni czasu – widać różną czcionkę na każdym z nich, faktura obudowy tez jest różna (raz gładka, raz szorstka)
* programowanie w połowie nagle zostawało przerywane z komunikatem błędu
* niektóre z pinów wyjściowych nie działały (albo przywarte do masy/zasilania albo w ogóle wisiały w powietrzu)
* niektóre z pinów wejściowych nie działały - ta usterka była najcięższa w diagnozie, bo objawiała się niezgodnym z założeniem działaniem całego układu
* no i oczywiście defekt fizyczny (np. wygięte nogi, brak którejś ze skrajnych nóżek - ułamana w czasie transportu). Kilka razy zdarzyła się nawet dziurka w środku obudowy, świadcząca jednoznacznie, że z układu ulotnił się magic smoke oraz widoczne przez obudowę części pól struktury (za mocno zeszlifowana obudowa?)


Jeśli podczas mojej przygody wykryłem kiedyś wadliwy układ, odkładałem go do specjalnego pudełka. Na przestrzeni lat zgromadziłem ok 100 układów, które w jakiś sposób nie nadawały się do normalnej pracy.
1.3. Sprytny test
Będąc w potrzebie stwierdzenia, z jakim układem mam do czynienia, przypadkowo znalazłem ciekawy sposób na test na szybko przed wlutowaniem. W opisywanym scalaku można wyróżnić kilka grup pinów:
Przykładając do pinów 11 GND (+) oraz 13 VCCINT (-) sondy miernika na teście diod, otrzymywałem z reguły 3 wskazania:
~1070 mV – EPM240 (czyli taki, jak ma być)
~1300 mV – układ wykrywany jako 5M240
~700 mV – układ który po wlutowaniu powodował zwarcie
Test jednak wymagał wyłożenia scalaka na biurko, skrupulatnego policzenia pinów, przyłożenia ostrych sond miernika, był więc upierdliwy a i tak nie pozwalał na stwierdzenie czy wszystkie piny w scalaku działają poprawnie.
A co tu tak właściwie mierzymy? Zdaje się, ze średnie napięcie przewodzenia wszystkich diod zabezpieczających w scalaku.

2.0 Budowa – założenia
Tak naprawdę na tym etapie sam do końca nie wiedziałem, co chcę zbudować. Na pewno miałoby to być urządzenie wyposażone w podstawkę ZIF, do której wkładałoby się pacjenta.
Początkowo chciałem do podstawki podłączyć jedynie gniazdo programatora (oraz zasilanie).
Później doszedłem do wniosku, że warto byłoby jednak przetestować też wszystkie piny.
Dalej – że warto byłoby dodać pomiar prądów pobieranych przez scalak.
Dalej – że niezbędne jest zabezpiecznie przed zwarciem
Sam sposób wyświetlania wyniku też ewoluował w mojej głowie:
* dwie diody LED: czerwona – układ ma jakiś defekt, zielona – układ sprawny
* mały wyświetlacz OLED – w przypadku defektu - wyświetlenie szczegółów usterki
* wysłanie szczegółowej informacji o wyniku po USB do komputera – przyspieszyłoby to tworzenie listy zawierającej scalaki wraz z usterkami (którą można np. potem wysłać do sprzedawcy w celu ubiegania się o zwrot kosztów)
Finalnie pomysł ktory został zrealizowany to:
* płyta główna (oparta o mikrokontroler Atmega 64), gniazdo USB, diody sygnalizacyjne, bufory, gniazdo USB
* na płytę nakładana druga płytka z podstawką




2.1. Obsługiwane układy
Kluczowym układem który chciałem obsłużyć jest oczywiście główny bohater - EPM240T100.
Czasami zachodziła także potrzeba zakupu trochę bardziej pojemnych układów (EPM570T100), którym mam też kilka w kolekcji. Pod względem obudowy i wyprowadzeń są one niemal identyczne z poprzednikiem.
W wyniku niefrasobliwości sprzedawców, w mojej kolekcji pojawiło się tez kilka układów EPM240GT100 - różnią się one tym, że do zasilenia wymagają napięcie VCCINT 1.8V (zamiast 3.3V)
Wreszcie, także w wyniku błędów sprzedawców jest tez kilka układów 5M240ZT100 - one także wymagają VCCINT = 1.8V oraz dodatkowo mają drobną różnicę w pinoucie
Mam też jeden układ 5M570ZT100
Różnica w pinoucie jest naprawdę minimalna i sprowadza się do tego, że układy mają dodatkowe piny masy/zasilania w miejscu, gdzie EPM240T100 miał piny IO:

W efekcie:
* płytka musi umożliwiać podanie na piny VCCINT zarówno napięcia 1.8V jak i 3.3V
Napięcia 1.8V oraz 3.3V mają ciekawa własność, że leżą symetrycznie między napięciem środkowym 2.5V.
Jeśli teraz pin VCCINT_SET:
* będzie w stanie Hi-Z, to na wyjściu dzielnika ustali sie napięciei 2.5V
* będzie zwarty do masy, to na wyjściu dzielnika ustali się napięcie ~1.8V
* będzie zwarty do +5V, to na wyjściu dzielnika ustawli się napięcie ~3.3V.
Atmega64 sterując odpowiednio pinem może więc regulować napięcie dostarczane do układu - wystarczy jedynie dodać wtórnik (zrealizowany na wzmacniaczu operacyjnym):

* ściągnięcie pinów 1, 37, 90 do masy
* ściągnięcie pinów 39, 88 do VCCINT
To zostało zrealizowane poprzez klucze tranzystorowe (nasycone):
* pojawienie się na pinie VCCINT_39_80_nEN stanu niskiego powoduje ściągnięcie pinów 39 i 88 do zasilania (VCCINT)
* pojawienie się na pinie GND_1_EN stanu wysokiego powoduje ściągnięcie pinu 1 do zasilania
* pojawienie się na pinie GND_37_90_EN stanu wysokiego powoduje ściągnięcie pinów 37 i 90 do masy
Ponieważ w przypadku układu EPM240 wszystkie te piny (39, 88, 1, 37, 90) są pinami IO, są one nadal połącze do mikrokontrolera tyle że przez rezystory zabezpieczające

2.1. Podstawka ZIF
Najważniejszą (i najdroższą) częścią urządzenia jest podstawka. Są dwa rodzaje
Podstrawka typu „muszla” do której wkłada sie scalak, a następnie zamyka klapkę, która dociska piny (po lewej) oraz podstawka typu kompaktowego, do której wkłada się scalak, naciska całość, scalak opada pod ciężarem i jest już dociskany


Nie miałem do czynienia z żadną z nich, ale postawiłem na tą drugą - wydała mi się bardziej precyzyjna, a możliwość obsługi jedną ręką była dodatkowym atutem (swoją drogą – ciekawe czemu ceny tych podstawek na ali zaczynają się od 20$, a w Polsce to już np. od 700zł?)
Dalszym rozważaniem był wybór między gołą podstawką a taką już wlutowaną w płytkę z goldpinami po bokach (jak na zdjęciach). Wybrałem drugie rozwiązanie, bo wykonywanie w domowych warunkach płytki z taka ilością dziurek to mordęga.
Teraz z perspektywy czasu mogę powiedzieć, że podstawka działa wyjątkowo sprawnie. Jedyny mankament jest taki, ze wsadzenie (i wyjęcie) układu odbywa się od góry, więc wymagany jest podciśnieniowy chwytak.
Tu znów musiałem zrobić mały risercz. Chwytaki manualne wg wielu opinii, niezależnie od producenta to jeden i ten sam szmelc:

Ja przypadkowo trafiłem na ssawkę, zasilaną bateryjką, która ma mini pompkę aktywowana przyciskiem. I muszę powiedzieć – rewelacja. Bez problemu unosi nawet ciężkie rzeczy. Jedyne, czego nie mogę zrozumieć, to dlaczego producent postanowił zasilać go jednym paluszkiem AAA (malutkim) zamiast normalnym (AA)? Nawet gdyby wiązało się to z delikatnie grubszym chwytem, to taka bateria ma przecież 3 razy większą pojemność.


2.2. Programowanie układu
Na płytce dodałem złącze 6 pin (JTAG) które umożliwia podłączenie do niej programatora USB Blaster i zaprogramowanie układu z poziomu oprogramowania Quartus. Płytka przystosowana jest tez do programowania bezpośrednio przez układ Atmega 64 aby wyeliminować konieczność korzystania z zewnątrznego programatora.

2.3. Zabezpieczenie przeciwzwarciowe + pomiar prądów zasilania
Jak było wspomniane wcześniej, czasami po wlutowaniu układu w płytkę pojawiało się zwarcie które świadczyło o jakimś wewnętrznym uszkodzeniu scalaka. Po włożeniu takiego układu do podstawki, najpewniej zakończyłoby się to albo pojawieniem się komunikatu "nastąpil skok napięcia na porcie USB", albo zadziałaniem zabezpieczenia w stabilizatorze 3.3V albo wypaleniem delikatnych styków w podstawce. Konieczne było więc zrobienie jakiegoś zabezpieczenia przeciwzwarciowego. Najprostrze zabezpieczenie skłąda się z rezystora szeregowego, na którym odkłada się napięcie. Przy zbyt duzym prądzie, ten spadek napięcia steruje tranzystorem, który "przytyka" tranzystor przepuszczający napięcie, obniżając jego wartość, w efekcie zmniejszając pobierany prąd:

Idea jest prosta, jednak w powyższej postaci ma ona pewną wadę - spadek napięcia na rezystorze szeregowym musi być co najmniej ok 0.7V aby "przymknąć" tranzystor. Przy zasileniu układu napięciem 3.3V taki spadek jest zbyt duży. Pewnym obejściem byłoby zastosowanie powyższego układu po stronie wejściowej stabilizatora 3.3V (stabilizator LD1117 ma dropout ok 1V więc przy zasilaniu z +5V byłoby to na styk), jednak pomysł ten mi sie nie podobał. Innym pomysłem byłoby zmniejszenie dropoutu na rezystorze szeregowym, następnie wzmocnienie tego spadku i sterowanie nim tranzystora. Postanowiłem na razie pomyślęć nad czymś innym, mianowicie pomiarem prądu pobieranego przez scalak.
Układ EPM240 posiada trzy rodzaje napięć zasilających:
* VCCINT - zasilanie rdzenia (+1.8V lub +3.3V)
* VCCIO1 - zasilenie pinów IO: 2, 3, ..., 51 oraz pinów JTAGa (max +3.3V)
* VCCIO2 - zasilenie pinów IO: 52, 53, ..., 100, 1 (max +3.3V)

W najprostrzej konfiguracji wystarczy zewrzeć wszystie trzy napięcia VCCINT = VCCIO1 = VCCIO2 = +3.3V. Jednak w przypadku testu warto byłoby zmierzyć pobierany prąd na każdym z trzech rodzajów zasilań. Wykorzystałem tutaj rezystor szeregowy 1R oraz wzmacniacz operacyjny w konfiguracji nieodwracającej, którzy wzmacnia ~20 razy różnicę na rezystorze szregowym i podaje na wejście ADC mikrokontrolera (trzy takie same bloki dla każdego z napieć VCCINT, VCCIO1, VCCIO2).
Warto tylko wspomnieć, że zastosowany wzmacniacz operacyjny LM324 NIE JEST rail to rail, jednak poniważ jest zasilany z napięcia +5V, a obie końcówki rezystora szeregowego maksimum na potencjale +3.3V, to spełnia się on w tej roli doskonale

Ogólny schemat opisanego rozwiązania przedstawiłem poniżej:

Wracając jednak do tematu zabezpieczenia nadprądowego, teraz coś mi w głowie zaświtało. Można by wykorzystać wzmocniony spadek napięcia (np. ADC_VCCIO1) do sterowania tranzystorem ograniczającym napięcie na wejściu.
Niestety jest pewien kłopot. Do sterowania tranzystore T1 (PNP) wymagamy przedziału [4.3V ... 5V] (włączony .. wyłączony). Przedzial zmian napięcia na ADC_VCCIO1 wraz ze wzrostem prądu to [0 ... 5V]. Kierunek zmian się zgadza, niestety przedział wartości nie.

Trzeba więc dodać tranzystor NPN (T2) który odwróci końce kierunek napięć [5V .. 0V]. Konieczny będzie też kolejny tranzystor NPN (T3) który znowu odwróci kierunki napięć)

Fajnie byłoby jednak, aby nadmierny pobór prądu w każdej z gałęzi (VCCIO1 / VCCIO2 / VCCINT) aktywował zadziałanie zabezpieczenia przeciwprądowego. Tutaj wystarczy dodac 3 diody, które będą pełnić funkcję podobną do bramki OR. Dodatkowo dodając czwarta diodę i sterując tym pinem (POWER_nON) z mikrokontrolera możemy programowo wyłączyć zasilanie do układu - przydatne, aby po wykonanym teście odciąć zasilanie i móc spokojnie wyjąc badany układ.

Wartość prądu, od którego układ zacznie obniżać napięcie można zwiększyć zwiększając wzmocnienie wzmacniaczy albo zmniejszyć dodając dodając dzielnik rezystorowy na bazie tranzystora T2. Nie wiedziałem do końca jakiego prądu się spodziewać przy normalnej pracy, więc postanowiłem za limit uznać coś w okolicach między 50 a 100mA.
Cały układ przesymulowałem najpierw w programie LTSpice i wg symulacji zabezpieczeniei zadziałało w okolicach 80mA

Później już na wykonanym fizycznie urządzeniu zwiększałem stopniowo pobór prądu, odczytując jednocześnie wartość zwracną z przetworinka ADC i na tej podstawie mogłem stwierdzić, że zabezpieczenie pozwala na przepuszczenie maksymalnie ok 65 mA prądu (na wykresie widać małe nieliniowości na początku i końcu przedziału, spowodowane albo nieliniowością samego przetwornika w Atmedze albo też nieliniowością wzmacniacza napięcia z rezystora szeregowego)

2.2. Test pinów
Kluczową sprawą (oprócz stwierdzenia, czy układ nie ma zwarcia, czy jest wykrywany i czy da się zaprogramować) jest stwierdzenie, czy każdy z pinów jest sprawny. Nie znam do końca mechanizmu, który powoduje, że niektóre piny w posiadanych układach były uszkodzone (sprzedawane układy są najpewniej używane i odnowione), więc mam pewne podejrzenia:
* albo zostały uszkodzone już w urządzeniu z którego zostały wyszabrowane,
* albo zostały uszkodzone w momencie niefachowego wylutu - np poprzez ładunki ESD,
* albo cała struktura została w ogóle usunięta z oryginalnego scalaka i następnie zapakowana do nowej obudowy z nowymi nóżkami i podczas lutowania złotych drucików (bond wires) coś poszło nie tak.
Przetestsowanie działania pinów polega na sprawdzeniu, czy każdy z nich może wystawić logiczne 0/1 oraz czy każdy może odczytać z zewnątrz 0/1. Wymaga to wgrania do układu specjalnego wsadu diagnostycznego oraz komunikację z pinami. Ponieważ pinów w układzie jest aż 80, a dostęp do wszystkich z nich na raz nie jest wymagany, postawiłem na multipleksowanie buforami (odczyt wszystkich na raz nie jest potrzebny). Przy 80 pinach wykorzystałem równo 10 buforów 74LVC245. Ilość zużytych nóg to: 8 + 10 (BUF /OE) + 10 (BUF DIR) = 28. Jak sie później okazało, wszystkie piny sterujące kierunkami buforów i tak można było połączyć razem, bo nigdy wiecej niż jeden bufor nie jest aktywny.
Bufory oprócz multipleksowania pełnią one dodatkowa funkcję - konwertują napięcia z poziomu 5V (Atmega64) do +3.3V (układ EPM240)
Prosty program, wgrany do układu EPM240 który go testuje działa jak poniżej:
* jeden z pinów przeznaczony jest na zegar, który steruje pracą
* podczas cyklu T0 - na pierwszych 8 pinach wystawiane jest 0xAA
* podczas cyklu T1 - na pierwszych 8 pinach wystawiane jest 0x55
* podczas cyklu T2 - z pierwszych 8 pinów odczytywana jest wartość (V1)
* podczas cyklu T3 - na pierwszych 8 pinach wystawiana jest zanegowana wcześniej odczytana wartość (~V1)
* podczas cyklu T4 - z pierwszych 8 pinów odczytywana jest wartość (V2)
* podczas cyklu T5 - na pierwszych 8 pinach wystawiana jest zanegowana wcześniej odczytana wartość (~V2)
Układ EPM240 wystawia wartości jedynie podczas gdy CLK=0, gdy CLK=1 - piny są w stanie wysokiej impedancji
potem cykle T6..T11 testują kolejne 8 pinów, T12..T17 dalsze 8 itd.
Dzięki wystawieniu wartości AA a potem 55 można sprawdzić, czy układ potrafi na każdym z pinów wystawić logiczne zero oraz jedynkę oraz czy dwa sąsiednie piny nie są ze sobą zwarte.

Pewnym mankamentem był pin zegarowy. Taki pin powinien być bezpośrednio połączony z atmegą, gdyż wartość na nim wystawiona powinna byc dostępna dla układu EPM240 ciągle, a dostęp rzez bufory to uniemożliwia. Początkowo probowałem to obejść, używając np pinu nr 1 (który ma też połączony klucz tranzystorowy), zwierając go do masy (logiczne 0) rozwierając i stosując wbudowane w EPM240 rezystory pociągające (logiczne 1). Niestety, takie zbyt mało strome zbocza, nawet pomimo włączenia wbudowanego przerzutnika Schmitta powodowały często, ze układ myślał że dostał dwa albo i więcej zboczy. Musiałem więc dokonać przeróbki w płytce, odcinając jedną ze scieżek od bufora i łącząc na stałe z atmegą (dodałem oczywiście rezystor w szeregu i diodę zenera +3.3V)
Wadą jest również to, że jeśli pin, przeznaczony na zegar akurat w testowanym układzie nie działa, to nie będzie możliwości przeprowadzenia testu.
2.3. Oprogramoanie po stronie PC
Kolejnym krokiem było stworzenie programu, który będzie się komunikował urządzeniem. Postanowiłem na skromny interfejs, który
* pozwala włączyć/wyłączyć układ
* ustawić odpowiednie napięcie zasilania
* przeprowadzić test
* wyświetlić aktualny pobór prądu przez układ


3. Niespodzianki podczas budowy
Podczas prac nad urządzeniem nie wszystko od razu szło gładko i po myśli.
* Pierwszym problemem była Atmega64, która po wlutowaniu nie była w ogóle wykrywana - tu jak sieo kazało winny byl sam scalak, który kupiłem kiedyś od kogoś na allegrolokalne.pl i posiadał on tak zaprogramowane fusebity, że nie dało sie go już przeprogramować szerzej opisałem to tu:
https://www.elektroda.pl/rtvforum/topic3849821.html
* Tuż po zlutowaniu okazało się, wyłączanie podawania napięcia do układu nie działa, jeśli wybrano napięcie +2.5V lub +3.3V. Przyczyna problemu okazała się prosta - w momencie gdy tranzystor (Q4) odcinający napięcie zasilające jest aktywny, wzmacniacz operacyjny (wtórnik) nadal próbuje tak wysterować tranzzystor T4 aby podawał on napięcie VCCINT zgodne z ustawionym. Ponieważ jednak T4 nie może tego zrobić, bo do jego kolektora nie wpływa już zaden prąd, operacyjny wystawia na jego bazie tak duże napięcie, że złącze baza-kolektor zostaje przebite i do układu nadal dopływa prąd, jednak tym razem - ze wzmacniacza:

Rozwiązaniem było przepięcie jednej z nóg rezystora R23 od +5V do kolektora:

To rozwiązanie działa dla zadawania napięcia +1.8V oraz +2.5V, natomiast nadal nie działa dla +3.3V (bo wtedy atmega wprowadza swoje +5V). Jednak układ EPM240 do zasilania VCCINT wymagają napięcia z przedziału +2.5V..+3.3V więc zailanie go +2.5V wystarcza
* Czasami zdarza się, że test wskazuje, że jeden lub dwa piny są uszkodzone, mimo że układ okazuje się potem być sprawny. Przyczyną jest osad (brud) na testowanych scalakach, wystarczy czasem ponowne dociśnięcie podstawki lub wyjęcie układu i przejechanie nożykiem po wszystkich pinach.
* Oscylacje przy zwarciu - podczas zwarcia (czy to w wyniku uszkodzonego układu czy np. celowo, gdy łączymy któreś z napięć zasilających z masą drutem), sygnał ze wzmacniacza który trafia do przetwornika w Atmedze nie jest już napięciem stałym, ale widoczne są na nim wyraźne oscylacje o częstotliwości ok 100 kHz. Nie wiem dokładnie jaka jest tego przyczyna, czy któryś z tranzystorów próbuje generować, czy może pętla sprzężenia zwrotnego w ograniczaczu prądu jest zbyt długa. Ja to obszedłem programowo, uśredniając odczyt z ADC.

4. Plany na przyszłość
* dodanie możliwości programowania układu bezpośrednio z poziomu mojego programu (każdorazowe podłączanie programatora USB Blaster oraz uruchamianie oprogramowania Quartus jest wyjątkowo upierdliwe). Możliwość automatycznego wykrywania rodzaju układu oraz wybierania odpowiednioego do niego wsadu (do testu każdego z układów EPM240T100 / EPM240ZT100 / 5M240ZT100 / EPM570T100 potrzeba osobnego skompliowanego pliku VHDL)
* znalezienie jakiegoś sposobu, na zmianę pinu do zbocza zegarowego (te z układów na liście, w których rzekomo wszystkie 79 pinów jest uszkodzonych posiada tak naprawdę uszkodzony pin zegarowy i dlatego wynik testu jest niewiarygodny)
* na byłem kilkadziesiąt sztuk bardziej pojemnych układów Xilinx XC3S100E (obudowa TQF144) co do których także mam wątpliwości, czy wszystkie są sprawne. Mam już tez podstawkę ZIF do tych scalaków, pozostaje więc tylko stworzyć dedykowaną wersję testera.

5. Podsumowanie
Opisywany tester umożliwił sprawdzenie wszystkich posiadanych przeze mnie układów. Dzięki niemu mogłem stworzyć listę wadliwych i wysłać ją do sprzedawcy żądając zwrotu środków:

* Kilka z układów miało usterkę w postaci niedziałającego 1/2/3 pinów - te udało się wykorzystać do mojego projektu po prostu pomijając wadliwe piny (chociaż bywały takie, w których nie działało i np. 17).
* Sporo układów miało wewnętrzne zwarcie (głównie na linii VCCINT2).
* Także sporo układów nie było wykrywanych przez programator (pomiar multimetrem na teście diod wskazywał brak połączenia jednego lub kilku pinów odpowiedzialnych za JTAG - upalenie wewnątrz scalaka)
Jako ciekawostkę powiem, że dwa razy z własnej winy uszkodziłem układ EPM240. Opisywane scalaki służą mi m.in. do budowy KrzysioCarta - programowalnego kartridża do konsoli NES (https://www.elektroda.pl/rtvforum/topic3326538.html). Na zdjęciu niżej w specjalnej wersji dla konsoli NES. Na płytce są dwa złącza 6 pin - jedno JTAG do programowania układu EPM, a drugie ISP do programowania mikrokontrolera attiny13. Przypadkowo dwa razy w życiu podłączyłem programator USB blaster do gniazda JTAG, raz na gdzieś 5 sekund, drugim razem nawet nie wsadziłem wtyczki do środka tylko ledwo przyłożyłem i od razu odrzuciłem. Niestety w obu przypadkach układ EPM powodował po tej operacji zwarcie do masy (prawdopodobnie +5V na linii od programatora USB podłączone do któregoś z pinów JTAGa skutecznie go zabiło)







Cool? Ranking DIY