Fre­quenz­zäh­ler – Ver­si­on 2.0

Wie schon im vori­gen Bei­trag zu dem Fre­quenz­zäh­ler ange­deu­tet, habe ich eine neue Ver­si­on ent­wickelt, die eini­ge Nach­tei­le behebt. Nun ist ein USB-RS232-Kon­ver­ter inte­griert, die CPU ist direkt auf die Lei­ter­plat­te gelö­tet und der Quarz­os­zil­la­tor ist ther­misch eng mit dem Tem­pe­ra­tur­sen­sor gekop­pelt. Der Zäh­ler wird jetzt, so wie man das von einem moder­nen PC-Peri­phe­rie­ge­rät erwar­tet, direkt über das USB-Inter­face ver­sorgt. Ein sepa­ra­tes Netz­teil ist nicht mehr nötig. Die Strom­auf­nah­me liegt bei unter 100 mA. Die Funk­ti­ons­wei­se ist weit­ge­hend kom­pa­ti­bel zur alten Ver­si­on, aber das CPLD-Pin­out unter­schei­det sich aus Grün­den des ein­fa­che­ren Rou­tings. Mit einer Grö­ße von 75 mm x 100 mm passt der Zäh­ler nun in ein FISCHER Frame Gehäu­se aus Aluminium.

Hier zunächst mal die 3D-Ansich­ten von KiCad und der Schaltplan:

Hier sind nun auch noch die KiCad V6.0 Pro­jekt­da­tei­en, der Schalt­plan und das Layout.

Seit der KiCad Ver­si­on 6.0 soll­ten alle Daten in die­sen Datei­en ent­hal­ten sein, so daß sie sich direkt auf einem ande­ren PC öff­nen und wei­ter­be­ar­bei­ten las­sen sollten.

Beschrei­bung

Auf der obe­ren lin­ken Sei­te des Boards sieht man den USB-RS232-Kon­ver­ter. Es han­delt sich um ein klei­nes Board mit dem FT232R-Bau­stein von FTDI. Die­ses Board ist für zwei bis drei Euro über die bekann­ten Online-Händ­ler zu bezie­hen. Im Zeh­ner­pack direkt aus Chi­na auch noch preiswerter.

Links unter dem FTDI-Board sieht man den Quarz­os­zil­la­tor und den Tem­pe­ra­tur­sen­sor. Ein gefrä­stes PVC-Gehäu­se sorgt für eine gewis­se ther­mi­sche Abschir­mung, so daß die Tem­pe­ra­tur des Quarz­os­zil­la­tors ziem­lich genau gemes­sen wer­den kann. Die­ses Gehäu­se besteht aus zwei Tei­len, die oben in der 3D-Ansicht semi­trans­pa­rent dar­ge­stellt sind. Durch einen klei­nen Trick wird eine enge ther­mi­sche Kopp­lung des Oszil­la­tors zu dem Tem­pe­ra­tur­sen­sor sicher­ge­stellt. Der Tem­pe­ra­tur­sen­sor im SOIC8-Gehäu­se ist über einer recht­ecki­gen Aus­frä­sung in der Lei­ter­plat­te mon­tiert, in den der Quarz­os­zil­la­tor manu­ell von der ande­ren Sei­te mon­tiert und über vier Dräh­te ange­schlos­sen wird. Hier die 3D-Nahan­sicht von oben und unten ohne das PVC-Gehäuse:

Der Fre­quenz­zäh­ler wird mit 3.3 V betrie­ben, weil das CPLD nicht mehr ver­trägt. Die­se Ver­sor­gungs­span­nung wird mit einem klei­nen Line­ar­reg­ler aus den 5 V vom USB Bus erzeugt. Der Micro­chip-Pro­zes­sor (ehe­mals Atmel) ATMEGA644 kom­mu­ni­ziert über sei­nen UART und das FTDI-Board mit dem PC und über Port-Pins per Bit-Ban­ging mit der Logik im CPLD. Das CPLD-Inter­face ist selbst­ge­strickt und folgt kei­nem Stan­dard, zum Host wird wie­der das Mod­bus Pro­to­koll ver­wen­det. Die Logik im CPLD ent­spricht im wesent­li­chen dem der vor­he­ri­gen Ver­si­on, nur das Pin­out ist geän­dert und hier sind kei­ne LEDs und kein DIP-Schal­ter mehr ange­schlos­sen. Die CPU hat kei­nen eige­nen Quarz mehr, son­dern sie wird mit dem auf 10 MHz her­un­ter­ge­teil­ten Takt des 100 MHz Quarz­os­zil­la­tors betrieben.

Die Takt­ein­gän­ge clk1 und clk2 sind wie in der vori­gen Ver­si­on mit 50 Ω Wider­stän­den ter­mi­niert und über einen ein­stu­fi­gen AC-gekop­pel­ten Tran­si­stor­ver­stär­ker in Emit­ter­schal­tung an das CPLD ange­schlos­sen. Um auch nied­ri­ge Fre­quen­zen bis hin zu DC zu unter­stüt­zen, wur­de der clk3-Ein­gang vor­ge­se­hen. Er ist über einen 100 Ω Wider­stand direkt an das CPLD ange­schlos­sen, das zum Schutz noch zwei Schott­ky-Dioden gegen GND und VCC geschal­tet hat. Die etwas selt­sam anmu­ten­de Aus­füh­rung mit Dop­pel­di­oden ist der zum Design­zeit­punkt ein­zig in der Bastel­ki­ste ver­füg­ba­ren Vari­an­te BAS70-05W geschul­det. Inzwi­schen ist auch die BAV99W-Vari­an­te in hin­rei­chen­den Stück­zah­len ein­ge­la­gert, die dann bei einem even­tu­el­len Rede­sign ein­ge­setzt würde.

Obe­rer und unte­rer Rand der Pla­ti­ne sind beid­sei­tig vom Löt­stopp­lack befreit. Die Kup­fer­flä­chen sind jeweils an GND ange­schlos­sen und stel­len so einen Kon­takt zum Gehäu­se her. Das ist bei einem Alu­mi­ni­um­ge­häu­se natur­ge­mäß unzu­ver­läs­sig, daher sind die zwei Flach­stecker TP4 und TP5 vor­ge­se­hen, über die zusätz­lich ein Mas­se­ka­bel mit dem Gehäu­se ver­bun­den wer­den kann.

Hier noch ein paar Fotos des fer­ti­gen Gerätes:

Die SMA-Buch­sen an der Vor­der- und Rück­sei­te wer­den über kur­ze RG174-Koax-Kabel an die Lei­ter­plat­te ange­schlos­sen. Weil die Buch­se des USB-RS232-Kon­ver­ters etwa 1 mm von der Rück­wand ent­fernt ist, die außer­dem 2 mm dick ist, reich­te ein klei­ner Durch­bruch lei­der nicht aus. Daher muss­te er lei­der so groß gefräst wer­den, daß der gesam­te Stecker hin­ein­passt. Neben dem clk3-Ein­gang und der USB-Buch­se ist auf der Rück­sei­te auch noch eine Flü­gel­schrau­be zur Erdung des Gerä­tes ange­bracht. Das wird nor­ma­ler­wei­se nicht nötig sein, könn­te aber bei grö­ße­ren HF-Lei­stun­gen in der Umge­bung hilf­reich sein.

Fre­quenz­zäh­ler, Teil 1

Hier kommt nun der erste Teil der Beschrei­bung des Fre­quenz­zäh­lers. Hier soll die Hard­ware bespro­chen wer­den, inklu­si­ve der Logik im ver­wen­de­ten CPLD und der Soft­ware des Controllers.

Eine kur­ze Erwäh­nung fand der Zäh­ler schon vor ein paar Wochen in der Über­sicht der aktu­el­len Pro­jek­te. Dort fin­det sich auch der Schalt­plan und die 3D-Ansicht, bei­des hier noch­mal zum direk­ten Zugriff:

Die Hard­ware

Der Fre­quenz­zäh­ler basiert wie­der auf dem ATME­GA644-CPU-Board mit RS485-Schnitt­stel­le, das sich inzwi­schen in unter­schied­li­chen Pro­jek­ten bewährt hat. Die­ses CPU-Board kom­mu­ni­ziert über eine syn­chro­ne seri­el­le Schnitt­stel­le mit dem in einem EPM240T100 imple­men­tier­ten Fre­quenz­zäh­ler. Die benö­tig­te Geschwin­dig­keit ist unkri­tisch und daher wird die­se Kom­mu­ni­ka­ti­on auf dem CPU-Board über I/O‑Pins imple­men­tiert („bit-ban­ging“). Da der EPM240 mit 3,3 V betrie­ben wer­den muß und kei­ne 5‑V-tole­ran­ten I/O‑Pins hat, wird auch das CPU-Board mit 3,3 V betrie­ben. Das schränkt die Betriebs­fre­quenz auf maxi­mal 10 MHz ein. Wegen der gerin­gen Anfor­de­run­gen an die Geschwin­dig­keit, wur­de ein 8 MHz Quarz eingebaut.

Der Schalt­plan zeigt unten die Span­nungs­ver­sor­gung und die Kon­troll-LEDs, dar­über zwei gleich­ar­ti­ge Breit­band-Ver­stär­ker in klas­si­scher Emit­ter-Schal­tung für den Ein­gangs­takt. Sie sind ein­gangs­sei­tig mit 50 Ω abge­schlos­sen und heben den Pegel von etwa 6 dBm (8 mA Trei­ber­stär­ke) auf den für die CPLD-Takt­ein­gän­ge benö­tig­ten Hub von 3.3 V an. Wegen der Schmitt-Trig­ger-Ein­gän­ge darf es auch etwas weni­ger sein. Acht LEDs und vier DIP-Schal­ter kön­nen optio­nal zur Sta­tus­an­zei­ge und zur Kon­fi­gu­ra­ti­on ver­wen­det wer­den. Außer­dem ist ein 100 MHz Quarz­os­zil­la­tor ein­ge­baut sowie jeweils eine JTAG-Pro­gram­mier­schnitt­stel­le für das CPU-Board und das CPLD.

Funk­ti­ons­wei­se

Zur digi­ta­len Bestim­mung einer Fre­quenz gibt es prin­zi­pi­ell zwei Metho­den: man zählt die Anzahl der Tak­te wäh­rend eines mög­lichst genau bekann­ten Inter­valls oder man misst die Zeit­dau­er zwi­schen zwei oder meh­re­ren Tak­ten. Die erste Metho­de wird nach­fol­gend als Nor­mal­be­trieb bezeich­net, die zwei­te Metho­de als Revers­be­trieb. Bei­de Ver­fah­ren benö­ti­gen eine mög­lichst prä­zi­se Referenzfrequenz.

Prin­zi­pi­ell sind bei­de Betriebs­ar­ten gleich­wer­tig, sie unter­schei­den sich aber in der Dau­er der Mes­sung. Die Auf­lö­sung im Nor­mal­be­trieb ist umge­kehrt pro­por­tio­nal zum Mess­in­ter­vall. Um eine Auf­lö­sung von 1 Hz zu errei­chen, muß man eine Sekun­de lang mes­sen, bei 0,1 Hz Auf­lö­sung schon zehn Sekun­den. Den 32 kHz Takt einer Uhr kann man auf die­se Wei­se in einer Sekun­de also nur auf etwa 30 ppm genau mes­sen (2-15).

Im Revers­be­trieb teilt man den Takt der Uhr bei­spiels­wei­se durch 215 und bekommt so auch ein Inter­vall von einer Sekun­de. Zählt man in der Zeit die Tak­te einer 100 MHz Refe­renz, dann erreicht man auf eine Auf­lö­sung von 10 ns, was 0,01 ppm = 10 ppb entspricht.

Kurz zusam­men­ge­fasst: damit das Mess­in­ter­vall kurz gehal­ten wer­den kann, wählt man den Nor­mal­be­trieb am besten bei hohen Fre­quen­zen im Ver­gleich zur Refe­renz­fre­quenz, den Revers­be­trieb bei nied­ri­gen Frequenzen.

Das CPLD

Ein CPLD ist für die­se Art von Auf­ga­ben prä­de­sti­niert. Es besteht aus einer Anzahl Logik-Ele­men­te, in die­sem Fall 240 Blöcke, die weit­ge­hend frei ver­schal­tet wer­den kön­nen und über schnel­le Ver­bin­dun­gen zu den Pins ver­fü­gen. Anders als die mei­sten FPGAs, haben CPLDs nicht­flüch­ti­ge Spei­cher und müs­sen daher nicht bei jeden System­start neu kon­fi­gu­riert wer­den. Man benö­tigt aller­dings ein preis­wer­tes Werk­zeug, in die­sem (Intel/Al­te­ra-) Fall den soge­nann­ten USB-Bla­ster, um das CPLD in der Schal­tung zu pro­gram­mie­ren. Das kann man auch mehr­fach machen, aber die Anzahl der Pro­gram­mier­zy­klen ist auf etwa 100 beschränkt, wäh­rend der Flash-Spei­cher einer CPU nor­ma­ler­wei­se auch 10.000 bis 100.000-mal pro­gram­miert wer­den kann.

Die Logik wird in einer Pro­gram­mier­spra­che ähn­lich einer Soft­ware-Pro­gram­mier­spra­che ein­ge­ge­ben. Zwei Spra­chen haben sich eta­bliert, VHDL und Ver­i­log. Ver­i­log hat Ele­men­te der Pro­gram­mier­spra­che „C“ und ist für jeman­den, der die­se Spra­che kennt, rela­tiv leicht zu erler­nen. Der Unter­schied ist frei­lich, daß Soft­ware im wesent­li­chen sequen­zi­ell abge­ar­bei­tet wird, wäh­rend in Hard­ware vie­les gleich­zei­tig pas­siert. Wie auch bei der Soft­ware­pro­gram­mie­rung benö­tigt man Werk­zeu­ge, die den erstell­ten Quell­code in ein Binär­for­mat umwan­deln, das man in das CPLD laden kann. Die­se Werk­zeu­ge stellt der Her­stel­ler der Logik­bau­stei­ne, gege­be­nen­falls in einer abge­speck­ten Ver­si­on, kosten­los zur Ver­fü­gung. Im Fal­le Intels ist das die „Quartus“-Entwicklungsumgebung, die sogar eine ange­pass­te Ver­si­on des Men­tor Model­Sim Simu­la­tors ent­hält, der in der Voll­ver­si­on auch in der pro­fes­sio­nel­len Chip-Ent­wick­lung ver­wen­det wird.

Block­dia­gramm des Frequenzzählers

Genau wie beim Ent­wurf einer dis­kret auf­ge­bau­ten Schal­tung, soll­te man sich auch bei einem CPLD (oder FPGA) ein Block­dia­gramm erstel­len, das die Funk­ti­ons­blöcke dar­stellt. Die kön­nen dann bei Bedarf hier­ar­chisch wei­ter ver­fei­nert wer­den, was aber bei dem rela­tiv ein­fa­chen Zäh­ler hier nicht not­wen­dig ist.

Blockdiagramm des Frequenzzählers
Block­dia­gramm des Frequenzzählers

Die­ses Dia­gramm zeigt nur die Logik des Zäh­lers, nicht das CPU-Inter­face. Zunächst gibt es die vier Takt­ein­gän­ge clk0 .. clk3, die über den Ein­gangs­mul­ti­ple­xer ver­teilt wer­den. clk1 und clk2 sind über die oben beschrie­be­nen Vor­ver­stär­ker mit den bei­den SMA-Buch­sen ver­bun­den und für den Refe­renz­takt und die zu mes­sen­de Fre­quenz vor­ge­se­hen. clk0 ist fest mit dem CPU-Takt ver­bun­den und clk3 wird von dem 100 MHz Quarz­os­zil­la­tor betrieben.

f_check ist die zu mes­sen­de Fre­quenz, die über einen optio­na­len Vor­tei­ler auf die Refe­renz­fre­quenz f_ref syn­chro­ni­siert wird. Daher muß die Refe­renz­fre­quenz min­de­stens dop­pelt so hoch sein, wie die ggf. her­un­ter­ge­teil­te zu mes­sen­de Fre­quenz. Der Ein­gangs­mul­ti­ple­xer bestimmt, wel­cher der vier Takt­ein­gän­ge auf f_check und f_ref geschal­tet wird. Es gibt hier kei­ne Ein­schrän­kun­gen, zu Test­zwecken kann auch der­sel­be Takt auf bei­de Signa­le geschal­tet werden.

Die Refe­renz­fre­quenz wird übli­cher­wei­se in der Grö­ßen­ord­nung von 50 bis 100 MHz lie­gen und wenn die zu mes­sen­de Fre­quenz mehr als halb so hoch ist, muß sie mit dem Pre­s­ca­ler her­un­ter­ge­teilt werden.

Der eigent­li­che Zäh­ler besteht aus einem 32-bit brei­ten Regi­ster, des­sen Inhalt von der CPU ein­ge­le­sen wer­den kann, sinn­vol­ler­wei­se nach­dem die Mes­sung been­det ist und der Wert sich nicht mehr ändert. Der eben­falls 32-bit brei­te pro­gram­mier­ba­re Tei­ler wird beim Start des Meß­zy­klus mit dem Wert des Timer-Rel­oad-Regi­sters gela­den und anschlie­ßend her­un­ter­ge­zählt. Er bestimmt damit die Tor­zeit, also wie lan­ge der Zäh­ler zäh­len soll. Der Meß­zy­klus wird been­det, sobald die­ser Timer null erreicht. Ein kom­plet­ter Meß­zy­klus besteht aus der Kon­fi­gu­ra­ti­on des Fre­quenz­zäh­lers (Wahl der Takt­ein­gän­ge, der Betriebs­art und Ein­stel­lung des Vor­tei­lers), Set­zen des Rel­oad-Regi­sters und Trig­gern der Mes­sung, womit gleich­zei­tig der Zäh­ler auf null gesetzt wird. Ein Sta­tus­flag zeigt an, wenn der Meß­zy­klus been­det ist und das Ergeb­nis aus­ge­le­sen wer­den kann.

Timer, Zäh­ler und Steu­er­lo­gik lie­gen in der Clock-Domä­ne des aus­ge­wähl­ten Refe­renz­si­gnals, wäh­rend die von der CPU geschrie­be­nen Kon­fi­gu­ra­ti­ons- und Sta­tus-Regi­ster in der Clock-Domä­ne des CPU-Boards lie­gen (clk0). Die Simu­la­ti­on ergibt eine maxi­ma­le Ein­gangs­fre­quenz von 120 MHz für die Takt­ein­gän­ge des Fre­quenz­zäh­lers und über 50 MHz für das CPU-Inter­face. Bei Betrieb mit 100 MHz ist man also auf der siche­ren Sei­te und die 32-bit Zäh­ler kön­nen dann über 80 Sekun­den zäh­len, ohne überzulaufen.

Im Nor­mal­be­trieb wird die Tor­zeit von der Refe­renz­fre­quenz bestimmt und die Anzahl der stei­gen­den Flan­ken von f_check wird in die­sem Inter­vall gezählt. Im Revers­be­trieb bestimmt f_check die Tor­zeit wäh­rend­des­sen die Anzahl von f_ref Flan­ken gezählt wird.

Ver­i­log Code

Hier ist nun der Ver­i­log-Code des Fre­quenz­zäh­lers und die not­wen­di­gen Pro­jekt­da­tei­en für die Quar­tus-Ent­wick­lungs­um­ge­bung. Gege­be­nen­falls müs­sen Datei­pfa­de ange­passt werden.

Das eigent­li­che Design steckt in der Datei Datei FreqCntr.v, die hin­rei­chend gut kom­men­tiert sein soll­te. Zu beach­ten ist, daß die ursprüng­lich geplan­te Para­me­tri­sie­rung über die Para­me­ter COUNTERW, TIMERW und IOREGW nicht kon­se­quent ver­folgt wur­de. Sie soll­ten auf ihren Default-Wer­ten bleiben.

FreqCntr_EPM240.v instan­zi­iert den Fre­quenz­zäh­ler für das EPM240 CPLD auf dem Fre­quenz­zäh­ler-Board. Die bei­den wei­te­ren Ver­i­log Datei­en FreqCntr_tb_Counter.v und FreqCntr_tb_Serial_IO.v ent­hal­ten die Model­Sim-Test­be­n­ches für den Zäh­ler und die seri­el­le CPU-Schnitt­stel­le. Die zuge­hö­ri­gen Skrip­te tb_Counter.do und tb_Serial_IO.do wer­den in Model­Sim aus­ge­führt und star­ten den jewei­li­gen Test.

Nach­trag: Quar­tus Prime V21.1

Nach­dem ich mir vor ein paar Wochen einen neu­en Note­book gelei­stet habe (der alte war tat­säch­lich mitt­ler­wei­le neun Jah­re alt), habe ich die jeweils neue­sten Ver­sio­nen der Ent­wick­lungs­um­ge­bun­gen instal­liert, für CPLDs und FPGAs von Intel (frü­her Alte­ra) also Quar­tus V21.1. Die­ses Paket beinhal­tet nicht mehr Model­sim, son­dern des­sen Nach­fol­ger Que­sta (bei­de von Men­tor). Die Bedie­ner­ober­flä­che ist prak­tisch gleich geblie­ben, aber es ist nun eine 64-bit Ver­si­on und die Simu­la­ti­ons­ge­schwin­dig­keit ist beein­druckend (was teil­wei­se auch am neu­en Note­book lie­gen könn­te). Lei­der benö­tigt die­se Ver­si­on eine zeit­lich auf ein Jahr befri­ste­te Lizenz, die aber kosten­los ist und danach auch ver­län­gert wer­den kann.

Fol­gen­des ist zu beach­ten: die alten mit Model­sim erstell­ten Pro­jek­te soll­ten durch neue mit Que­sta erstell­te Pro­jek­te ersetzt wer­den. Die alten Pro­jekt­da­tei­en ent­hal­ten Abhän­gig­kei­ten, die mit Que­sta nicht mehr funk­tio­nie­ren. Außer­dem muß das „vsim“-Kommando einen Para­me­ter für den Opti­mi­zer ent­hal­ten (voptargs=“+acc=prn“), damit die Namen der Ports (p), Regi­ster (r) und Net­ze (n) als Debug­in­for­ma­tio­nen erhal­ten blei­ben. Das voll­stän­di­ge vsim-Kom­man­do lau­tet also bei­spiels­wei­se folgendermaßen:

vsim <testbench> -voptargs="+acc=prn" -t 1ns

Das soll­te dann in den Test­be­n­ches tb_*.do ent­spre­chend geän­dert werden.

ATME­GA644-Code

Die Soft­ware, die auf dem ATMEGA644 aus­ge­führt wird, kann hier als Refe­renz her­un­ter­ge­la­den werden.

Ich ver­wen­de Atmel Stu­dio 7.0 als Ent­wick­lungs­um­ge­bung, habe aber kei­ne Pro­jekt­da­tei­en dazu­ge­fügt. Ver­mut­lich hat sowie­so jeder sei­ne eige­ne Phi­lo­so­phie bezüg­lich der Pfa­de. Das 7z-Archiv ent­hält auch eine PDF-Datei mit wei­te­ren Beschreibungen.

Im kom­men­den zwei­ten Teil soll die PC-Soft­ware zur Bedie­nung des Fre­quenz­zäh­lers beschrie­ben werden.

Was gibt’s neues?

Lei­der gab es seit ein paar Mona­ten kei­ne Updates mehr in die­sem Blog, das wer­de ich nun nach­ho­len. Im Som­mer war viel an unse­rem Haus zu tun, wir haben das Gar­ten­haus fer­tig­ge­stellt und auch im Haus gab und gibt es noch so eini­ge Bau­stel­len. Meist klei­ne Din­ge, die nicht drin­gend sind, aber doch bela­sten, weil man sie immer vor sich her­schiebt. Zwi­schen­durch hat­te ich immer wie­der etwas Zeit, um eine Lei­ter­plat­te zu desi­gnen oder Soft­ware zu schrei­ben, ohne mir aber die Zeit zu neh­men, die­se Din­ge in die­sem Blog zu beschrei­ben. Hier nun eine kur­ze Zusammenfassung.

ATMEGA644 V1.1

Nach­dem das mit der Fer­ti­gung und Bestückung des Relais­trei­bers in Chi­na so gut funk­tio­niert hat, habe ich auch das ATMEGA644 Board noch­mal auf­ge­legt und zehn Stück davon fer­ti­gen und teil­be­stücken las­sen. Es spart doch eine Men­ge Arbeit, wenn wenig­stens das Vogel­fut­ter schon­mal drauf ist und man nur noch die „makro­sko­pi­schen Bau­tei­le“ von Hand bestücken muß.

Ich habe die Schal­tung mini­mal geän­dert, es wur­den zwei optio­na­le Schott­ky-Dioden vor­ge­se­hen, damit man dem Board ein Bat­te­rie-Back­up spen­die­ren kann und es wur­den zwei zusätz­li­che Stütz­kon­den­sa­to­ren für den Pro­zes­sor hin­zu­ge­fügt. Der hat jetzt an jedem sei­ner drei VCC-Pins einen eige­nen Stütz­kon­den­sa­tor. Kann nichts scha­den, kostet kein Geld (eini­ge mil­li-Cent) und bei 0402-er Bau­form ist auch der Platz­be­darf zu ver­nach­läs­si­gen. Den Trimm­kon­den­sa­tor am Quarz habe ich weg­ge­las­sen, der war sowie­so nur expe­ri­men­tell auf einem ein­zi­gen Board auf­ge­lö­tet. Außer­dem habe ich eine Mög­lich­keit vor­ge­se­hen, den Span­nungs­reg­ler etwas zu küh­len. Es sind zwei Boh­run­gen vor­han­den, in die ein Flach­stecker als Kühl­fah­ne ein­ge­lö­tet wer­den kann. Not­wen­dig ist die­se Küh­lung nicht, aber es hat sich beim Anten­nen­um­schal­ter und beim Tuner gezeigt, daß die Tem­pe­ra­tur der Pla­ti­ne im Betrieb um ein paar Grad ange­ho­ben wird und damit die Tem­pe­ra­tur­mes­sung ver­fälscht wird. Hier nun der Voll­stän­dig­keit hal­ber die 3D-Ansich­ten der neu­en Pla­ti­ne und der Schaltplan.

Zuge­ge­ben, die Kühl­fah­ne sieht etwas gewöh­nungs­be­dürf­tig aus, aber man muß sie ja nicht bestücken. Zudem kann man sie vor dem Ein­lö­ten seit­lich weg­bie­gen oder auch auf der Unter­sei­te bestücken. Sie kann natür­lich auch durch irgend­ein ande­res pas­sen­des Blech ersetzt werden.

Fre­quenz­zäh­ler

Pas­send zum oben beschrie­be­nen CPU-Board habe ich einen Fre­quenz­zäh­ler gebaut. Hier zunächst mal die 3D-Ansichten:

Auf der Ober­sei­te sieht man links das auf­ge­steck­te CPU-Board und dane­ben das Intel (Alte­ra) CPLD, in dem der Zäh­ler und das CPU-Inter­face imple­men­tiert sind. Rechts sind zwei SMA-Buch­sen ange­bracht, über die das zu mes­sen­de Signal und die Refe­renz­fre­quenz ein­ge­speist wer­den. Ganz links sieht man die Buch­se für die Span­nungs­ver­sor­gung und dar­über die Klemm­lei­ste für das RS485-Inter­face. Um das CPLD her­um sind Stift­lei­sten ange­bracht, auf die die nicht ver­wen­de­ten CPLD-Pins geführt sind. Damit ist das Board auch für ande­re Zwecke ver­wend­bar. Die Schal­ter­stel­lun­gen des vier­po­li­gen DIP-Schal­ters kön­nen von der CPU ein­ge­le­sen wer­den und die acht LEDs am obe­ren Rand kön­nen per Soft­ware ein- und aus­ge­schal­tet wer­den. Die bei­den zehn­po­li­gen Stift­lei­sten am obe­ren Rand der Pla­ti­ne die­nen zum Pro­gram­mie­ren der CPU und des CPLDs. Hier ist nun der Schaltplan:

Der Fre­quenz­zäh­ler funk­tio­niert inzwi­schen sehr gut. Die Simu­la­ti­on ergibt eine Grenz­fre­quenz von 120 MHz für die Refe­renz- und die Meß­fre­quenz. Den Zäh­ler wer­de ich spä­ter in vor­aus­sicht­lich meh­re­ren Bei­trä­gen detail­lier­ter beschrei­ben. Dazu gehört dann der in Ver­i­log geschrie­be­ne CPLD-Code, die Soft­ware für das CPU-Board und die Host Soft­ware für einen Win­dows-PC. Außer­dem lohnt es, die Aus­wer­tung einer Meß­rei­he mit Libre­of­fice genau­er anzu­schau­en. Viel­leicht fan­ge ich sogar damit an, auch wenn es die chro­no­lo­gisch fal­sche Rei­hen­fol­ge ist.

Pro­gram­mier- und Debugboard

Wo ich gera­de so schön am Desi­gnen war und sowie­so eine Bestel­lung in Chi­na plan­te, habe ich auch noch ein klei­nes Pro­gram­mier- und Debug­board für das ATME­GA644-CPU-Board ent­wickelt. Es dient dazu, Pro­gram­me auf das CPU-Board zu pro­gram­mie­ren und auch zu testen. Der ATMEGA644 hat meh­re­re Schnitt­stel­len, unter ande­rem die SPI Schnitt­stel­le zum Pro­gram­mie­ren des Flash-Spei­chers und des EEPROMs und die JTAG-Schnitt­stel­le, die dar­über­hin­aus auch zum Debug­gen ver­wen­det wer­den kann.

Auf dem Board sind außer­dem ein paar Taster und LEDs ange­bracht, damit auf ein­fa­che Wei­se ohne Emu­la­tor ein paar Ein- und Aus­ga­be­mög­lich­kei­ten zu haben. Auf die SMA-Buch­se kann der System­takt aus­ge­ge­ben wer­den, um sei­ne Fre­quenz bei­spiels­wei­se mit dem oben gezeig­ten Fre­quenz­zäh­ler bei unter­schied­li­chen Tem­pe­ra­tu­ren zu messen.

Der Schalt­plan zeigt kei­ne Beson­der­hei­ten, die erklä­rungs­be­dürf­tig wären.