FPGA załatwia liczenie krótkich czasów (poniżej 1us). Zacząłem to robic na TTL ale jak zaczęły się mnożyc i szansa na błąd wzrastać sięgnąłem po FPG, cena około 10zł. Biorąc pod uwagę zajmowana powierzchnię to warto. No i poprawienie błędów nie wymaga skalpela. Poza tym można zasymulować przebiegi wejściowe, obejrzeć wyjściowe. Pomyślałem też aby umieścić tam multiplekser wejściowy i dzielniki wstępne. FPGa działa do 133MHz więc dałem na zewnątrz 74ABT74 200MHz. Dwa załączone PDF + jeszcze trochę zatrzasków, liczników mutiplekser i kilkanaście bramek, zastępuje FPG 44pin (35 do dyspozycji). Wynik symulacji: http://obrazki.elektroda.pl/3440242600_1488052771_thumb.jpg http://obrazki.elektroda.pl/1868893500_1488052862_thumb.jpg Układ EMP3064 jest wykozystany w blisko w 50%. Opiszę jak to (ma)działa(ć). Pomiar czasów rzędu us realizuje timer z przechwytywaniem. Krótsze czasy pomaga mierzyć FPGa. Przyjmijmy, że poprzedni pomiar sie odbył lub FPGa jest po resecie i licznik w FPG jest zerowany. Gdy mierzony sygnał (przebieg T) przyjmie poziom wysoki, bramka AND "przepuści" sygnał zegarowy 100MHz na wejście licznika. Opadające zbocze mierzonego sygnału wygeneruje najpierw impuls zatrzaskujący zliczone impulsy (przebieg 5Q.CLK) po czym zeruje licznik (1QD.CLRN) przygotowując licznik do następnego pomiaru. Jednocześnie sygnał ICP przyjmuje poziom niski powodujący przechwycenie pomiaru timera w mikrokontrolerze. Jeśli sygnał był krótki mikrokontroler zliczył 0 impulsów (może 1). Stan ICP nie zmieni się do czasu odczytu wyniku pomiaru strobem RD przy wysokim stanie linii A0. Ze względu na to, że mikrokontroler komunikuje sie z FPGa 4-bitowo odczyt podzielony jest na dwa półbajty. Po odczycie starszego pół bajtu ICP przyjmie poziom wysoki i umożliwi zatrzaśnięcie wyniku kolejnego pomiaru. Prawda, że proste? Sygnał można zanegować bramką exor i mierzyć czas poziomu niskiego (wejście POL FPGA). Ze względu na synchroniczne generowanie impulsów kasujących i zatrzaskujących wynik zliczania minimalny czas pomiędzy pomiarami to 3 okresy sygnału zegarowego 100MHz (jeśli nie pomyliłem sie w obliczeniach - przesymuluję to i napisze jak jest). Co do wyświetlaczy, to zrezygnowałem z 4x20 na rzecz dużego negatowywego 2x16. Dodatkowe wyświetlacze będą sterowane po IIC. LED standardowa aplikacja SAA164 (4 szt). LCD sterowany atmega169. Ma ona wbudowany sterownik 4x25 segmentów (w obudowie 100pin 4x40). niewielkimi LCD można sterować prosto z mikrokontrolera ale przy 8x7-seg potrzeba dużo wyprowadzeń. Sterowanie multipleksowe już takie proste nie jest (kilka poziomów napięć) dlatego zajmie sie tym kontroler AVT'ka. Może zrobić sterownik lamp NIXE? Fajne połączenie, miernik z lampami podłączony do kompa przez USB :-) Myślałem też o opcji VIDEO. Dodatkowy AVR może generować obraz dla CRT lub VGA (o HDMI czy DVI na razie zapomnijmy). Zaleta monitora - duża liczba informacji, ale czy ma sens skoro wyniki będą dostępne przez USB? Wtedy aplikacja na kompie może wyświetlać dużo informacji i łatwo zrobić dokumentację (zrzuty ekranowe). PS Wiem, że można dać Xilinx, będzie szybszy, bo może reagować na obydwa zbocza, można dać zegar 200MHz itp, itd. Mnie pomiar czasów rzędu 10ns z odstępem co najmniej 30ns wystarczy a jeśli ktoś już zrobił lepszy miernik to niech pokaże go na Elektrodzie.
1
2
4
3
VCC
VCC
VCC
D
C?
100nF
VCC
GND
LF
INb
1
3
U?A
3
2
R?
74ABT04D
330R
VCC
EnINb
GND
5
4
14
1
7
C
VCC
R?
74ABT04D U?A
330R
74ABT125D
VCC
R?
220R
U?B
3
4
U?
2
D1
12
D2
1
CLR1
13
CLR2
3
CLK1
11
CLK2
4
SET1
10
SET2
GND
R?
EnLF
220R U?A
1
2
2
VCC
10
GND
TTL
GND
U?
7
STB
PRE011
A
PRE110
B
PRE2 9
C
/1
4
D0
3
/2
D1
/4
2
D2
1
/8
D3
/16 15
D4
/32 14
D5
/64 13
D6
1/5M 12
D7
U?
2
R0(1)
3
R0(2)
14
8
1
VCC
PRE[0..2]
6
Q1
8
Q2
5
Q1
9
Q2
6
U?B
74ABT125D
R?
EnTTL
220R U?C
5
6
9
GND
74ABT74D
GND
74ABT00
R?
74ABT04D U?C
330R
74ABT125D
CKA
CKB
4
NC
6
NC
7
NC
13
NC
12
QA
9
QB
8
QC
11
QD
B
13
EnHF
U?D
9
8
12
HF
11
U?E
11
10
W
R?
2 13
D?
IN
VCC
R?
10k
2
D1
12
D2
1
CLR1
13
CLR2
3
CLK1
11
CLK2
4
SET1
10
SET2
VCC
12
P?
3MHz
200MHz
U?F
74ABT04D
VCC
A
VCC
C?
C?
100nF 100nF
GND
R?
1k
C
GND
B
IN GND
GND
1
Fout
R?
1k
ABT - 200MHz
AC(T) = 133MHz
F - 100MHz
HC(T) - 35MHz
U?
JP?
200MHz
5
6
D?
1k
74ABT04D U?D
74ABT04D
74ABT125D
R?
330R
Y
74HC151
VCC
74HC93D
R?
220R
GND
D
C?
100nF
C?
100nF
6
Q1
8
Q2
5
Q1
9
Q2
Title
74AC74D
Size
GND
Number
Revision
A4
Date:
File:
1
2
3
25-Feb-2017
Sheet of
d:\Dokumentacje\Czestosciomierz\PCB\Czestosciomierz.ddb
Drawn By:
4
A