Ultrasonic Level Meter Display Page in English
Ultrasonic Level Meter Display Page in English

Anzeige

Display

Die An­zei­ge­ein­heit ver­wen­det ei­nen ATmega128 mit, wie auch der Sen­sor, eben­falls 3,6864 MHz. Die­ser wur­de ge­wählt weil er zwei se­ri­el­le Schnitt­stel­len hat, ei­ne zur Mess­ein­heit und ei­ne zu ei­nem PC (RS232) oder zu ei­nem even­tu­el­len Home-Bus (RS485). Ab Re­vi­sion 2.0 ist auch ein Blue­tooth-Mo­dul vor­ge­se­hen. Als Baud­ra­te wur­de 9600 Baud ge­wählt. Die­se ist zwei­fel­los aus­rei­chend für die Mes­sung des Was­ser­stan­des ein­mal pro Mi­nu­te aber auch für wei­te­re denk­ba­re Auf­ga­ben, et­wa der Ab­fra­ge von Strom- oder Was­ser­zäh­lern oder dem Schal­ten von be­lie­bi­gen Ver­brau­chern, aber dies ist ei­ne an­de­re Ge­schich­te...

Das Blue­tooth-Mo­dul nutzt ab Werk eben­falls 9600 Baud. Wenn Sie über Blue­tooth ei­ne an­de­re Baud­ra­te ver­wen­den wol­len reicht es nicht, die­se am PC und im Dis­play ein­zu­stel­len. Sie müs­sen dann auch das Blue­tooth-Mo­dul ent­spre­chend pro­gram­mie­ren! Ich ha­be das bis jetzt nicht ge­tan und kann Sie nur auf das Da­ten­blatt des ARF32 ver­wei­sen!

Die An­zei­ge fragt al­so ein­mal pro Mi­nu­te den Was­ser­stand der Zis­ter­ne ab, er­rech­net da­r­aus die ent­hal­te­ne Was­ser­men­ge und zeigt sie an. Ne­ben­bei er­rech­net sie auch die Dif­fe­renz zum Vor­tag und zur ver­gan­ge­nen Stun­de. Die Uhr­zeit, die da­bei an­ge­zeigt wird, be­zieht sich auf den letz­ten Ein­schalt­zeit­punkt, sie kann je­doch über die se­ri­el­le Schnitt­stel­le (oder über Blue­tooth oder dem Home­bus) auf die tat­säch­­li­che Ta­ges­zeit ein­ge­stellt wer­den. Al­ter­na­tiv kann ein DCF77-Emp­fän­ger an­ge­schlos­sen wer­den.

Zur Er­mitt­lung des Was­ser­stan­des wer­den 10 Mess­wer­te des Sen­sors ge­mit­telt. Da­nach wird die Ver­sor­gungs­span­nung des Sen­sors ab­ge­schal­tet. Dies spart nicht nur Strom, es ver­rin­gert auch die Ei­gen­er­wär­mung was wie­der­um der Ge­nau­ig­keit der Tem­pe­ra­tur­mes­sung zu­gu­te kommt. Au­ßer­dem wird der Sen­sor so zu­rück­ge­setzt falls er sich ein­mal "auf­hän­gen" soll­te.

Die Pra­xis hat ge­zeigt, dass die Ent­fer­nungs­mes­sung sehr ge­nau und wie­der­hol­bar ar­bei­tet. Tat­säch­lich kann man bei lau­fen­den Mes­sun­gen wäh­rend der Was­ser­ent­nah­me die Li­ter di­rekt mit­ver­fol­gen. Wäh­rend es reg­net ist die Was­ser­ober­flä­che je­doch ziem­lich in Be­we­gung und auch Sprit­zer kön­nen Fehl­mes­sun­gen ver­ur­sa­chen so­fern man nicht über ei­nen be­ru­hig­ten Zu­lauf ver­fügt, des­halb die Mit­te­lung.

Die An­zei­ge­ein­heit ist für always on ge­dacht und ent­hält des­halb auch ei­ni­ge Maß­nah­men zur En­er­gie­ein­spa­rung. Der Strom­ver­brauch liegt laut ei­nes En­er­gie­mess­ge­räts von Con­rad Elec­tron­ic bei 0,0 W (al­so un­ter­halb der Mess­auf­lö­sung von ca. 2 W).

Als Ge­häu­se ha­be ich mich für ein Heiden­reich ZA16 ent­schie­den, das zu­fäl­lig greif­bar war. Es eig­net sich zur Wand­mon­ta­ge, ist ein­fach zer­leg­bar und die Front passt per­fekt für das ge­wähl­te Dis­play. Es ist nicht ge­ra­de sty­lish aber ne­ben den an­de­ren Ge­rä­ten im Hei­zungs­raum macht es sich doch ganz gut...

Anschluss der Messeinheit

Für den An­schluss der Mess­ein­heit wur­de ein Stan­dard-Netz­werk­ka­bel vor­ge­se­hen. Es ist bil­lig, leicht er­hält­lich und für die Da­ten­über­tra­gung von ho­her Qua­li­tät. Auf­grund der ge­rin­gen Baud­ra­te soll­ten auch ver­drill­te Zwei­draht­lei­tun­gen (Klin­gel­dräh­te) funk­tio­nie­ren. Von pa­ral­lel­lau­fen­den Steu­er­ka­beln soll­te man aber bes­ser ab­se­hen (Wenn sie nun schon mal drin sind, nun ja, pro­bie­ren Sie es. Wenn sie 80 cm un­ter der Er­de lie­gen soll­te es wohl auch we­nig EMV-Pro­ble­me ge­ben). Der Schirm (so­fern vor­han­den) soll­te ein­sei­tig (an der An­zei­ge­ein­heit, die­se stellt ja die Ver­sor­gung) an Mas­se ge­legt und an der an­de­ren Sei­te iso­liert wer­den. Be­nö­tigt wird nur ein Ader­paar für die Da­ten­lei­tung und ei­nes für die Ver­sor­gung. Bei Ver­wen­dung ei­nes Netz­werk­ka­bels kann es nicht scha­den, die un­be­nutz­ten Paa­re für die Ver­sor­gungs­span­nung par­al­lel zu schal­ten (je­weils ei­ne Lei­tung des Paa­res an +, die an­de­re an GND).

Die An­zei­ge schal­tet die 15 V (Unreg) über ei­ne ein­fa­che Kon­stant­strom­quel­le be­stehend aus T1, D1 und R3 an. Da­mit wird ein Span­nungs­ein­bruch in der An­zei­ge­ein­heit und/oder Über­las­tung von T1 ver­hin­dert. Die Kon­stant­strom­quel­le kos­tet im Ver­gleich zu ei­nem simp­len Schalt­tran­sis­tor ge­ra­de ein­mal zwei Di­oden (als SMD in ei­nem Ge­häu­se er­hält­lich und wirk­lich bil­lig) und ei­nen Wi­der­stand.
Die Strom­quel­le ist den­noch nicht kurz­schluss­fest. Wenn die Sen­sor­ver­sor­gung kurz­ge­schlos­sen ist lie­fert T1 et­wa 40 mA aus der Ver­sor­gung was ei­ner Ver­lust­leis­tung von ca. 0.6 W ent­spricht. Dies wür­de ei­ne Über­hit­zung und den Aus­fall von T1 in­ner­halb we­ni­ger Se­kun­den be­wir­ken.
Der 15 Ω-Wi­der­stand R112 in der Sen­sor­ein­heit dämpft Schwin­gun­gen, die über die Lei­tungs­in­duk­ti­vi­tät und den Ein­gangs­kon­den­sa­tor ent­ste­hen könn­ten. Lange Zu­lei­tun­gen und hoch­wer­ti­ge ke­ra­mi­sche Kon­den­sa­to­ren an ei­ner nie­der­oh­mi­gen Ver­sor­gung bil­den Schwing­krei­se von er­staun­li­cher Gü­te, die durch­aus stö­ren­de, wenn nicht so­gar zer­stö­ren­de Span­nun­gen pro­du­zie­ren kön­nen wenn sie plötz­lich ge­schal­tet wer­den. Wenn Sie da­mit he­r­um­spie­len möch­ten, hier ei­ne ein­fa­che Si­mu­la­tion der Strom­quel­le für LTspice.

Terminierung

Laut Lehr­buch müs­sen die Lei­tun­gen ei­ner RS485-Schnitt­stel­le an bei­den Enden mit je­weils 120 Ω ter­mi­niert wer­den um Re­fle­xio­nen zu mi­ni­mie­ren. Dies ist si­cher­lich kein Feh­ler was die Si­gnal­in­te­gri­tät be­trifft aber es er­höht die Strom­auf­nah­me be­trächt­lich.

Die 120 Ω sind lei­der auch kei­ne Na­tur­kon­stan­te son­dern der Wel­len­wi­der­stand der ty­pi­scher­wei­se ver­wen­de­ten Lei­tung. Wenn Sie an­de­re Lei­tun­gen ver­wen­den müs­sen sie den Ter­mi­nie­rungs­wi­der­stand an­pas­sen um op­ti­ma­le Er­geb­nis­se zu er­zie­len.

Was ist Wellenwiderstand?

Ein­stein sagt, es gibt nichts schnel­le­res als das Licht. Wenn nun die Strom­quel­le am Dis­play ein­schal­tet, wo­her weiß sie was am En­de der Lei­tung für ei­ne Last an­liegt? Obwohl die Lei­tung viel­leicht nur 10 m lang ist (Licht braucht da­für im Va­ku­um et­wa 30 ns). Nun, sie weiß es nicht. Zu­nächst fließt der Strom der dem Wel­len­wi­der­stand der Lei­tung ent­spricht. Am En­de an­ge­kom­men wird geht ein Teil des Stro­mes in die an­lie­gen­de Last, der Rest wird re­flek­tiert und kommt 30 ns spä­ter wie­der an der Strom­quel­le an. Dort äu­ßert er sich als ne­ga­ti­ve (oder auch po­si­ti­ve, je nach Last) Span­nung, die in Rei­he mit der Ver­sor­gung nun ei­nen hö­he­ren (oder nied­ri­ge­ren) Strom in die Lei­tung treibt. So über­la­gert er sich mit dem Strom der bis­her ge­flos­sen ist und der Strom pegelt sich letzt­lich auf den tat­säch­­lich be­nö­tig­ten Wert ein. Dabei kön­nen an der Last Über­schwin­ger ein­tre­ten die im Ex­trem­fall das Dop­pel­te der an­lie­gen­den Span­nung aus­ma­chen.

Tat­säch­lich ist die Sig­nal­ge­schwin­dig­keit in den ty­pi­scher­wei­se ver­wen­de­ten Lei­tun­gen nur et­wa 2/3×c so dass wir hier eher von 45 ns für 10 m aus­ge­hen müss­ten.

Im All­tag denkt man da nicht wei­ter da­r­ü­ber nach aber das pas­siert je­des mal wenn Sie das Licht ein­schal­ten!

Ei­ne Ter­mi­nie­rung ist nö­tig, wenn die An­stiegs­zei­ten des Si­gnals in die Nähe der Lauf­zeit auf der Lei­tung kom­men. Wir ver­wen­den Slew Rate limited Trei­ber, al­so Trei­ber mit be­wusst ver­rin­ger­ter An­stiegs­zeit, was Re­fle­xio­nen re­du­ziert. Zudem re­agiert der Emp­fän­ger nicht auf Flan­ken son­dern tas­tet das Si­gnal je­weils in der Mit­te ei­nes Bits (bei 9600 Baud al­so nach et­wa 50 µs) ab. Bis da­hin sind Re­fle­xio­nen längst ab­ge­klun­gen. Des­halb ha­be ich auf die Ter­mi­nie­rung der Sen­sor­lei­tung ver­zich­tet. Bei mir funk­tio­niert dies mit et­wa 10 m Sen­sor­ka­bel ab­so­lut pro­blem­los. Auch auf dem Os­zil­lo­skop ist nichts von Re­fle­xio­nen zu se­hen.

Tat­säch­lich wä­ren et­wa­i­ge Re­fle­xio­nen in 50 µs et­wa 500 mal durch die Lei­tung ge­lau­fen. Bis da­hin sind sie al­lein durch den ohm­schen Wi­der­stand der Lei­tung völ­lig auf­ge­zehrt, sie sind ein­fach weg.

Bei hö­he­ren Baud­ra­ten wä­re die ma­xi­ma­le Ka­bel­län­ge oh­ne Ter­mi­nie­rung kür­zer. Die Re­fle­xio­nen müs­sen bis zur Ab­tas­tung un­ter die Schalt­schwel­le des Emp­fän­gers ab­ge­klun­gen sein um den kor­rek­ten Si­gnal­pe­gel si­cher zu er­ken­nen.

Ich emp­feh­le, die Lei­tun­gen nicht zu ter­mi­nie­ren. Es ist schlicht un­nö­tig weil al­le Re­fle­xio­nen bis zum Ab­tast­zeit­punkt ab­ge­klun­gen sind.

Wenn Sie es trotz­dem tun wol­len, müs­sen Sie den Kon­stant­strom er­hö­hen, al­so R3 ver­rin­gern und kon­se­quen­ter­wei­se auch R8 um den nö­ti­gen Ba­sis­strom zu trei­ben, weil sonst die Ver­sor­gungs­span­nung am Sen­sor wäh­rend des Sen­dens ein­bre­chen wür­de.

Mei­ne Wahl für die­sen Fall: R3=6,8 Ω, R8=4,7 kΩ aber dies ist nur ei­ne Pro­gno­se, ich ha­be nicht ter­mi­niert und ha­be das auch nicht ge­tes­tet.

Da­mit er­hö­hen Sie zwangs­läu­fig die Be­las­tung der Dis­play-Ver­sor­gung und da­mit de­ren Ripple wäh­rend des Da­ten­trans­fers. Das sind Kom­pli­ka­tio­nen die Sie ver­mei­den kön­nen.

Wenn Ihr Sen­sor­ka­bel al­ler­dings sehr lang ist (ei­ni­ge zig oder hun­der­te von Me­tern) soll­ten Sie mit dem Os­zil­lo­skop noch­mal nach­mes­sen be­vor Sie den Sen­sor ver­gie­ßen.

Schnittstellen

Die An­zei­ge­ein­heit ver­fügt über zwei USARTs. USART0 wird ver­wen­det zur Kom­mu­ni­ka­tion mit der Mess­ein­heit über ei­nen RS485 physical Layer, USART1 kann als Be­stück­ungs­va­ri­an­te oder auch durch Jum­pern ent­we­der über Blue­tooth, RS232 oder RS485 mit ei­nem Host-PC kom­mu­ni­zie­ren. Die Sen­de­rich­tung geht da­bei im­mer über al­le Schnitt­stel­len, nur der Emp­fang wird um­ge­jum­pert.

Das zu­ge­hö­ri­ge Jum­per­feld ist rie­sig (zu­mal laut Da­ten­blatt das Blue­tooth-Mo­dul auch noch RTS und CTS be­nö­tigt) und ich bin da­mit nicht rich­tig glück­lich aber es ist die bil­ligs­te Va­rian­te, wir ha­ben ge­nug Platz da­für und es muss nor­ma­ler­wei­se nur ein ein­zi­ges Mal ge­steckt wer­den.

Die Un­ter­stüt­zung für RTS/CTS-Hand­shake kann per Define in den Sour­cen er­fol­gen oder per Kon­fi­gu­ra­tion. In mei­nen Sour­cen ist das Hand­shake ak­ti­viert, sie kön­nen es je­doch durch ein Kom­man­do de­ak­ti­vie­ren.
Dies ist nö­tig, wenn an der Host-Schnitt­stel­le kein dau­er­haft be­trie­be­nes Gerät an­ge­schlos­sen ist, da sonst kein Senden mög­lich ist und das Dis­play blo­ckiert wird so­bald der Sen­de­puf­fer voll ist.

Der USART un­ter­stützt über In­ter­rupt-Flags das für RS485 als Halb­du­plex-Medium nö­ti­ge Ein- und Aus­schal­ten des Sen­de­trei­bers, was der Soft­ware­sei­te sehr ent­ge­gen kommt.

Kommunikation mit dem Host

Die An­zei­ge­ein­heit kom­mu­ni­ziert mit 9600 Baud, 8N1 mit dem Host (PC oder Lap­top). Da im Zu­sam­men­hang mit PCs das 9. Bit eher pro­ble­ma­tisch ist wur­de hier auf die Ver­wen­dung des­sel­ben ver­zich­tet und die ge­sam­te Kom­mu­ni­ka­tion er­folgt in les­ba­ren ASCII-Zei­chen. Die Schnitt­stel­le ist im­mer ak­tiv. Auf ein Select De­vice, wie es im Bus mit meh­re­ren Ge­rä­ten nö­tig wä­re, wur­de vor­erst ver­zich­tet.

Das vor­ge­se­he­ne Blue­tooth-Mo­dul hat per De­fault die glei­chen Vor­ga­ben so dass es oh­ne be­son­de­re Pro­gram­mie­rung ein­fach ver­wen­det wer­den kann.

Die Sende- und Emp­fangs­rou­ti­ne ist in­ter­rupt­ge­steu­ert. Senden er­folgt klas­sisch über ei­nen FIFO im SRAM. Beim Emp­fang wer­den die Da­ten ge­sam­melt bis ein <LF> ein­trifft. Dann wird die ge­sam­te Zei­le auf ein­mal aus­ge­wer­tet. <CR>s wer­den igno­riert. Ein Kom­man­do be­ginnt im­mer mit ei­nem Kom­man­do­wort ge­folgt von even­tu­el­len Pa­ra­me­tern, je­weils durch Leer­zei­chen ge­trennt.

Und wenn kein <LF> kommt? Jeder drückt doch <Re­turn> nach ei­nem Kom­man­do!

NEIN! Das ist der klas­si­sche Buffer Over­flow Attack! Zei­chen kom­men auch noch wenn sie nicht mehr er­war­tet wer­den wenn der Host nicht gut­ar­tig ist oder es auch nur EMV-Pro­ble­me gibt. Und sie wer­den dann in ei­nem Spei­cher­be­reich ge­spei­chert, der ei­gent­lich gar nicht da­für vor­ge­se­hen war. Die Fol­gen kön­nen ver­murks­te Va­ria­blen und da­mit fal­sche An­zei­gen, ein schlich­ter Ab­sturz oder auch die Aus­füh­rung von un­be­ab­sich­tig­tem oder frem­dem Code sein!
Ich ha­be mich hier für ei­nen Buffer Wrap ent­schie­den, d.h. Zei­chen, die nicht mehr in den Puf­fer pas­sen über­schrei­ben ihn von vor­ne wie­der. Man könn­te auch Zei­chen igno­rie­ren so­bald der Puf­fer voll ist, das ist Ge­schmacks­sa­che. Haupt­sa­che, nicht über den Puf­fer hi­n­aus schrei­ben!

Ein sol­cher An­griff kann in bei­de Rich­tun­gen ge­hen: Er sen­det mehr Zei­chen als Sie er­war­ten oder er pro­vo­ziert mehr Ant­wor­ten als Ihr Sen­de­puf­fer ver­kraf­ten kann. Sei­en Sie auf bei­des vor­be­rei­tet!

Glück­li­cher­wei­se ge­stat­ten es die un­ter­schied­li­chen For­ma­te von Host-Kom­man­dos und Te­le­gram­men des Blue­tooth-Mo­duls die­se zu un­ter­schei­den. So kann die Emp­fangs­rou­ti­ne se­pa­ra­te Flags für je­des die­ser Er­eig­nis­se set­zen.
Ein Blue­tooth-Te­le­gramm zu er­ken­nen ist den­noch nicht tri­vial, da das En­de-Kenn­byte (ETX, 0x03) auch in­ner­halb der Da­ten vor­kom­men kann. Wir müs­sen des­halb das Te­le­gramm parsen. Nor­ma­ler­wei­se kom­men nur we­ni­ge Blue­tooth-Te­le­gram­me vor da wir den trans­pa­ren­ten Mo­dus be­nut­zen. Das ers­te ist das LMX9830_READY, wel­ches das Blue­tooth-Mo­dul beim Power-Up oder nach ei­nem Re­set sen­det. Darauf folgt ein SPP_INCOMING_LINK_ESTABLISHED und, falls die Ver­bin­dung ab­bricht, mög­li­cher­wei­se ab­wech­selnd ein SPP_LINK_RELEASED. Durch die­se Te­le­gram­me kön­nen wir er­ken­nen ob über­haupt ein Blue­tooth-Mo­dul vor­han­den ist und ob ak­tu­ell ei­ne Ver­bin­dung mit dem Host be­steht.

RTC

Timer0 er­zeugt ein­hun­dert mal pro Se­kun­de ei­nen In­ter­rupt als uni­ver­sel­ler Timer. Ne­ben­bei wird da­r­aus ei­ne HH:MM:SS-Uhr, die bei 24:00:00 zu­rück­ge­setzt wird (Ta­ge wer­den nicht ge­zählt). Dabei setzt sie Flags für je­de Se­kun­de, Mi­nu­te und Stun­de so­wie ein­mal pro Tag, mit de­ren Hil­fe die Haupt­schlei­fe se­künd­li­che, mi­nüt­li­che, stünd­li­che oder täg­li­che Ak­tio­nen durch­füh­ren kann.

Am En­de der Haupt­schlei­fe wird ein Sleep aus­ge­führt, der ei­ner­seits nichts kos­tet, den Strom­ver­brauch des Con­trol­lers an­de­rer­seits aber er­heb­lich senkt da bis zur nächs­ten 1/100 Se­kun­de deut­lich we­ni­ger ver­braucht wird.

DCF77

Zur Syn­chro­ni­sa­tion mit der of­fi­zi­el­len Nor­mal­zeit kann ein ex­ter­ner DCF77-Emp­fän­ger an­ge­schlos­sen wer­den. Der kor­rek­te Emp­fang wird durch Mes­sung der Im­puls­zei­ten und der Über­prü­fung des kor­rek­ten Te­le­gramm­auf­baus ge­prüft. Gül­ti­ge Te­le­gram­me set­zen die RTC se­kun­den­ge­nau auf den emp­fang­en­en Wert. Die Po­la­ri­tät des Emp­fangs­sig­nals kann per Kom­man­do ein­ge­stellt wer­den.

Ein spe­zi­el­ler Typ ist nicht er­for­der­lich, er muss je­doch mit 5 V Ver­sor­gungs­span­nung ar­bei­ten kön­nen und ein TTL-kom­pa­ti­bles Aus­gangs­si­gnal lie­fern (oder ent­spre­chend an­ge­passt wer­den). Falls Sie hart­nä­ckig kei­nen Emp­fang be­kom­men, ver­su­chen Sie, das DCF-Si­gnal zu in­ver­tie­ren (sie­he Kom­man­do dcfinv). Ich emp­feh­le den Mein­berg RU226, da ich mit die­sem gu­te Er­fah­rung ge­macht ha­be.

Ein sehr simp­ler Al­go­rith­mus sorgt für ein 'sanf­tes' Nach­füh­ren der RTC. Wenn die emp­fan­ge­ne Zeit­in­for­ma­tion um mehr als 60 s von der RTC ab­weicht wird die Zeit hart ge­stellt. Dazu müs­sen zwei auf­ein­an­der­fol­gen­de Te­le­gram­me emp­fan­gen wer­den, die bis auf 60 s die glei­che Ab­wei­chung zur RTC auf­wei­sen. (Tat­säch­lich ha­be ich auch schon Te­le­gram­me mit feh­ler­haf­ter Zeit emp­fan­gen, die trotz­dem als Feh­ler­frei er­kannt wur­den. Mehr­fa­che Bit­feh­ler die zu­fäl­lig die kor­rek­te Prüf­sum­me er­ge­ben ma­chen dies mög­lich.) Dabei kön­nen Mi­nu­ten- oder Stun­den­er­eig­nis­se ver­lo­ren­ge­hen da sie nur vom Timer In­ter­rupt aus­ge­löst wer­den.

Bei klei­ne­ren Ab­wei­chun­gen läuft die RTC 1% schnel­ler oder lang­sa­mer bis die Ab­wei­chung we­ni­ger als 1 s be­trägt, d.h. ein Timer In­ter­rupt wird aus­ge­las­sen oder ein fik­ti­ver zu­sätz­li­cher In­ter­rupt wird ein­ge­fügt.

Auf die­se Weise ge­hen im Ge­gen­satz zum har­ten Stel­len der Uhr­zeit kei­ne Se­kun­den- oder Mi­nu­ten­er­eig­nis­se ver­lo­ren.

Da­durch wird al­ler­dings auch die Ge­nau­ig­keit der Uhr auf ±1 s zur hoch­ge­nau­en Nor­mal­zeit des DCF77 re­du­ziert. Si­cher­lich noch aus­rei­chend um den ge­plan­ten Zug zu er­rei­chen...

Sie kön­nen das stat-Kom­man­do be­nut­zen um zu se­hen ob die DCF-Syn­chro­ni­sie­rung funk­tio­niert. Be­ach­ten Sie, dass es selbst bei stö­rungs­frei­em Emp­fang bis zu drei Mi­nu­ten dau­ern kann bis die Syn­chro­ni­sie­rung ge­lingt. Es müs­sen min­des­tens zwei Te­le­gram­me stö­rungs­frei emp­fan­gen wer­den und die Ab­wei­chung muss bis auf ei­ne Mi­nu­te ge­nau über­ein­stim­men be­vor ei­ne har­te Ver­stel­lung der Sys­tem­uhr vor­ge­nom­men wird. Bei ei­nem ge­stör­ten Te­le­gramm be­ginnt die­se Zeit von vor­ne...

Auf dem Dis­play er­scheint ein An­ten­nen­sym­bol (¡) wenn ein Te­le­gramm stö­rungs­frei emp­fan­gen wur­de. Die Sys­tem­zeit muss dann je­doch noch nicht stim­men da sie erst beim zwei­ten Te­le­gramm ge­setzt wird. Um­ge­kehrt kann bei kor­rek­ter Sys­tem­zeit das An­ten­nen­sym­bol er­lö­schen wenn der Emp­fang ge­stört ist. Die Zeit läuft dann quarz­ge­nau wei­ter.

DCF77-Empfänger

Es ren­tiert sich nicht, hier in paar Eu­ro zu spa­ren um ei­nen bil­li­ge­ren Emp­fän­ger ein­zu­set­zen. Er wür­de Ihnen mehr Är­ger und Zeit kos­ten als die paar Krö­ten wert sind! Wenn sie es bil­lig ha­ben wol­len, schlach­ten Sie ei­ne chi­ne­si­sche 5 €-Funk­uhr aus, wenn Sie sich nicht är­gern wol­len, neh­men Sie ei­nen gu­ten Emp­fän­ger. Alles da­zwi­schen macht nur Är­ger.

Ver­wen­den Sie ei­nen hoch­wer­ti­gen Emp­fän­ger wie den Mein­berg RU226 und ach­ten Sie auf die Mon­ta­ge­an­lei­tung! Der Emp­fän­ger muss mit der Quer­sei­te der Fer­rit­an­ten­ne mög­lichst ge­nau nach Frank­furt zei­gen (da be­fin­det sich der Sen­der) und darf nicht auf Me­tall oder in der Nähe me­tal­li­scher Ober­flä­chen oder Lei­ter­schlei­fen mon­tiert wer­den.

Auch Stör­sen­der wie das Dis­play selbst und ins­be­son­de­re sein Blue­tooth-Mo­dul soll­ten so weit wie mög­lich ent­fernt sein. Der größ­te Feh­ler wä­re, den Emp­fän­ger in den Klem­men­bo­den zu mon­tie­ren, nur weil da noch Platz ist. Nur so er­hal­ten Sie stö­rungs­frei­en Emp­fang!

Die DCF77-Sen­de­fre­quenz von 77,5 kHz ist fast ge­nau die 5. Ober­wel­le der Zei­len­fre­quenz des PAL-Fern­se­hens von 15,625 kHz. Falls sie (so wie ich) tat­säch­­lich noch ei­nen al­ten Fern­se­her in der Nähe be­trei­ben könn­te auch die­ser ei­nen stö­rungs­frei­en Emp­fang ver­hin­dern.

Bei mir im La­bor hat­te ich über­all Stö­run­gen (vie­le Com­pu­ter und an­de­re Stör­quel­len) bis auf ei­ne klei­ne Stel­le auf mei­nem Schreib­tisch. Wenn Sie Emp­fangs­pro­ble­me ha­ben, ver­schie­ben Sie den Emp­fän­ger um ei­nen hal­ben Me­ter und pro­bie­ren Sie es er­neut. Ir­gend­wann muss es klap­pen...

Signal-Ausgänge

Da noch Klem­men des Ge­häu­ses un­be­nutzt wa­ren, ha­be ich noch zwei po­ten­tial­freie Si­gnal­aus­gän­ge hin­zu­ge­fügt. Es han­delt sich da­bei um die Foto­tran­sis­to­ren ei­nes Op­to­kopp­lers, die für ex­ter­ne Schalt­ak­ti­o­nen zur Ver­fü­gung ste­hen. Für je­den von die­sen kann ei­ne Schwel­le fest­ge­legt wer­den ober­halb und/oder un­ter­halb de­rer der Aus­gang ak­tiv ist.

Die Foto­tran­sis­to­ren ha­ben ei­nen ge­mein­sa­men Emit­ter, sie sind al­so ge­eig­net, zwei Ein­gän­ge ei­ner ex­ter­nen Schal­tung ge­gen de­ren Mas­se zu zie­hen.

Jeder Aus­gang hat zwei Pa­ra­me­ter, Aktiv un­ter­halb und Aktiv ober­halb. Die Wer­te sind in Li­tern, der Wer­te­be­reich ist von 0 bis 65535.

Ein Aktiv ober­halb von 65535 wird al­so nie­mals schal­ten, eben­so we­nig wie ein Aktiv un­ter­halb von 0 l.
Durch in­tel­li­gen­te Wahl der­sel­ben sind meh­re­re Kon­fi­gu­ra­tio­nen mög­lich, z.B.

Wenn Sie ei­nen Aus­gang nicht be­nut­zen wol­len und die Leis­tung des Op­to­kopp­lers spa­ren wol­len, set­zen die Aktiv un­ter­halb auf 0 und Aktiv ober­halb auf 65535. Dann ist der Op­to­kopp­ler nie­mals ak­tiv. Dies ist auch der De­fault wenn Sie nichts an­de­res pa­ra­me­trie­ren.

Elektrische Sicherheit der Ausgänge

Die Aus­gän­ge sind durch Op­to­kopp­ler von der Schal­tung ge­trennt, al­ler­dings nur mit et­wa 5 mm Iso­la­ti­ons­ab­stand. Die Schal­tung die sie da­r­an an­schlie­ßen darf die Lei­tun­gen des­halb nicht mit der Netz­span­nung ver­bin­den sonst ver­lie­ren Sie den Iso­la­ti­ons­ab­stand zum Dis­play und dem Sen­sor! Manche Leu­te mei­nen, 3 mm sind ge­nug, na ja, no risk no fun, ich be­vor­zu­ge in sol­chen Fäl­len al­ler­dings better safe than sorry!

Sie dür­fen da­mit al­so z.B. nicht di­rekt ei­nen Thy­ris­tor schal­ten, der mit dem Netz ver­bun­den ist. Sie kön­nen je­doch den Ein­gang ei­ner SPS oder ei­ner an­de­ren, vom Netz ge­trenn­ten Schal­tung (z.B. den Par­al­lel­port ei­nes PCs) steu­ern.

Ei­ne Klem­me ne­ben der Netz­ver­sor­gung bleibt frei um 8 mm Si­cher­heits­ab­stand zum Netz ein­hal­ten zu kön­nen.

Anzeige

Hin­weis: Die Low-Cost 2×16-An­zei­ge wird in Zu­kunft nicht wei­ter un­ter­stützt und ist in der ak­tu­el­len Firm­ware mög­li­cher­wei­se ver­nach­läs­sigt. Le­sen Sie bit­te trotz­dem die fol­gen­den Zei­len da sie auch für die 4×20-An­zei­ge re­le­vant sind.

Die An­zei­ge (zwei Zei­len à 16 Zei­chen) ist wie folgt auf­ge­baut:

1234L<PChh:mm:ss
±1234 l/h ±1234*

Die ers­te Zei­le zeigt da­bei per­ma­nent die Füll­men­ge in Li­tern und die Zeit seit der letz­ten Sys­tem-Mit­ter­nacht. Die Füll­men­ge wird über 10 Mes­sun­gen ge­mit­telt. Wäh­rend die­ser Mes­sun­gen wird das je­wei­li­ge Mess­ergeb­nis an­ge­zeigt, da­nach bis zur nächs­ten Mess­rei­he der Mit­tel­wert. Zur Un­ter­schei­dung wird bei den Ein­zel­mes­sun­gen ein klei­nes l an­ge­zeigt und beim Mit­tel­wert ein gro­ßes L.

Die Zei­chen ab Po­si­tion 5 (<PC) sind Error-Flags und soll­ten nie er­schei­nen. An Po­si­tion 5 kann da­bei ein < er­schei­nen falls we­ni­ger als 10 Mess­wer­te für die Ent­fer­nung emp­fan­gen wur­den (sehr wahr­schein­lich über­haupt kei­nes, was auf ei­ne un­ter­bro­che­ne Sen­sor­lei­tung oder Sen­sor­de­fekt hin­weist) oder ein > falls mehr als 10 Wer­te emp­fan­gen wur­den. Ei­gent­lich soll­te das Dis­play den Sen­sor nach dem 10. Wert ab­schal­ten. Das > weist auf ei­nen Defekt im Be­reich der Kon­stant­strom­quel­le um T1 hin, d.h. das Dis­play kann die Sen­sor­ver­sor­gung nicht ab­schal­ten.

Das P be­deu­tet Parity-Error und das C Check­sum-Error bei der Kom­mu­ni­ka­tion mit dem Sen­sor. Dies kann auf ein zu lan­ges oder un­ge­eig­ne­tes Sen­sor­ka­bel oder ein­ge­kop­pel­te Stö­run­gen hin­wei­sen. Es kann auch durch ei­nen zu nied­ri­gen Strom der Kon­stant­strom­quel­le ent­ste­hen so dass die Sen­sor­ver­sor­gung durch den ho­hen Sen­de­strom (ins­bes. bei Ter­mi­nie­rung mit je­weils 120 Ω an den Lei­tungs­en­den) ein­bricht und so ein Sen­sor-Re­set aus­ge­löst wird.

Ein S er­scheint, wenn in der letz­ten Mi­nu­te kein ein­zi­ges Te­le­gramm vom Sen­sor emp­fan­gen wur­de (Sen­sor Dead).

Die an­ge­zeig­te Was­ser­men­ge ist bei Er­schei­nen von min­des­tens ei­nem die­ser Flags un­zu­ver­läs­sig und mög­li­cher­wei­se ver­al­tet oder völ­lig falsch.

Die Error-Flags blei­ben im Dis­play auch wenn der Feh­ler nicht mehr vor­liegt und wer­den erst zur nächs­ten vol­len Stun­de (oder bei ei­nem Re­set) ge­löscht.

Die zwei­te Zei­le wech­selt zy­klisch zwi­schen fol­gen­den An­zei­gen:

Erweiterte Anzeige

Für den Au­tor hat sich die Low-Cost-Ver­sion mit ei­nem zwei­zei­li­gen Dis­play als un­zu­rei­chend er­wie­sen. So gibt es die Mög­lich­keit, im Source­code auch ein vier­zei­li­ges Dis­play mit 20 Zei­chen pro Zei­le aus­zu­wäh­len wenn man be­reit ist, sich die­sen Lu­xus auch in Hard­ware zu gön­nen (tat­säch­­lich re­den wir hier nur von ein paar Eu­ro!).

Dann wer­den fol­gen­de Wer­te auf ei­nem vier­zei­li­gen Dis­play wie z.B. auf ei­nem Win­star WH2004A an­ge­zeigt:

1234L<PChh:mm:ss  ¡Ê
01234  l/h 01234*  Î
01234  l/d 01234*  Î
 12.3°C   340.1m/s Î

Die ers­te Zei­le ist iden­tisch mit der 2×16-Ver­sion. In der zwei­ten und drit­ten Zei­le wer­den per­ma­nent die Ver­bräu­che für die lau­fen­de und ver­gan­ge­ne Stun­de so­wie für heu­te und ges­tern an­ge­zeigt.

Die vier­te Zei­le wech­selt zy­klisch zwi­schen fol­gen­den An­zei­gen:

Nur in der er­wei­ter­ten An­zei­ge ist auch ein An­ten­nen­sym­bol für den DCF77-Emp­fang und der Bal­ken zu se­hen, der den Füll­stand in­tu­i­tiv er­fass­bar dar­stellt!

Ganz rechts wird ein ver­ti­ka­les Bal­ken­dia­gramm für den Füll­stand an­ge­zeigt. So kön­nen sie op­tisch den Füll­stand mit ei­nem Blick er­fas­sen.

Die 4×20-An­zei­ge wur­de auf­grund der ge­rin­gen Mehr­kos­ten zum Stan­dard de­fi­niert und ich un­ter­stüt­ze das 2×16-Dis­play nicht mehr ak­tiv. Wenn Sie in Ihren Sour­cen die 2×16-An­zei­ge wäh­len kann es sein, dass sie nicht wie er­war­tet funk­tio­niert. Ich be­mü­he mich auch wei­ter­hin, das 2×16-Dis­play zu un­ter­stüt­zen aber ich tes­te dies nicht wei­ter. Ver­wen­den Sie das 4×20-Dis­play und Sie ha­ben kei­ne Pro­ble­me.

Hinterleuchtung

Das ge­wähl­te LC-Dis­play be­sitzt ei­ne LED-Hin­ter­leuch­tung, die wir nicht un­ge­nutzt las­sen wol­len. Da wir be­reits ei­nen hoch­ef­fi­zi­en­ten Schalt­reg­ler ein­set­zen um die 5 V zu er­zeu­gen kön­nen wir uns auf­wän­di­ge­re Schal­tun­gen er­spa­ren und das Back­light ein­fach über ei­nen 4,7 Ω-Wi­der­stand an 5 V le­gen. Ich ha­be noch ei­nen Tran­sis­tor als Schal­ter ein­ge­fügt mit dem der Con­trol­ler das Back­light schal­ten und per PWM auch dim­men kann. Als Strom ha­be ich bei mei­nem Pro­to­typ 183 mA (bei 100%) ge­mes­sen.

Sound

Da wir noch Port­pins und Timer frei ha­ben ent­schloss ich mich, ei­nen Pie­zo-Ton­ge­ber an Timer 3 an­zu­schlie­ßen. Die Sound­rou­ti­nen er­lau­ben es, be­lie­bi­ge Töne, Mu­sik­no­ten oder kom­plet­te Mu­sik­se­quen­zen mit mi­ni­ma­lem Over­head im In­ter­rupt ab­zu­spie­len. Die Mu­sik ist da­bei mo­no­ton, ich woll­te ei­gent­lich kei­nen Syn­the­si­zer pro­gram­mie­ren...

Se­quen­zen kön­nen pro­gram­miert wer­den für

Aller­dings sind die Se­quen­zen selbst der­zeit nur im Source­code än­der­bar und nicht kon­fi­gu­rier­bar.

Die Se­quenz für den Sys­tem­start er­tönt nach je­dem Re­set und ist nicht de­ak­ti­vier­bar.

Die Se­quenz für Si­gnal­aus­gang 1 wird in je­der Mi­nu­te zur 10. Se­kun­de wie­der­holt und klingt et­was ag­gres­si­ver. Aus­gang 1 ist des­halb bes­ser für dring­li­che Mel­dun­gen ge­eig­net.

Die Se­quenz für Aus­gang 2 ist de­zen­ter und wird nur zu je­der vol­len Stun­de in der 20. Se­kun­de wie­der­holt.

Da dies mög­li­cher­wei­se ner­vig sein könn­te ist ei­ne Zeit­span­ne pro­gram­mier­bar, au­ßer­halb de­rer kei­ne akus­ti­schen Mel­dun­gen er­fol­gen.

Zu­sätz­lich gibt es ei­ne soundmask mit der fol­gen­de Mel­dun­gen ak­ti­viert wer­den kön­nen:

Um die soundmask zu be­rech­nen, ad­die­ren sie die oben ge­nann­ten Wer­te die Sie be­nö­ti­gen. Wenn Sie z.B. Si­gnal­aus­gang 1 im­mer hö­ren wol­len und den Stun­den­schlag wün­schen ist die soundmask folg­lich 5.
Der Stun­den­schlag ist ei­gent­lich nichts, was wirk­lich in ein Gerät wie die­ses ge­hört aber ich ha­be mir lan­ge über­legt, was man aus die­ser Hard­ware noch ma­chen könn­te und aus Lan­ge­wei­le und pu­rem Über­mut ha­be ich ihn im­ple­men­tiert.

Ein Be­su­cher mei­ner Web­site hat mir letzt­lich doch noch ei­ne Idee ge­ge­ben (zu Zei­ten als Goog­le noch die Such­be­grif­fe über­mit­tel­te): Ab der ers­ten Se­ri­en­ver­sion gib es den

Analogausgang

Für Nost­al­gie-Ver­sio­nen kann auch auf das LCD ver­zich­tet und ein 100 µA Dreh­spul­mess­werk ein­ge­setzt wer­den, dass dann den Füll­stand in % an­zeigt.

Ich ha­be die Mit­tel­wert­bil­dung des PWM-Si­gnals von Timer 1 C ei­nem RC-Glied über­las­sen und für die Um­wand­lung in ei­nen Ana­log­wert den zwei­ten, bis­her un­ge­nutz­ten OpAmp als span­nungs­ge­steu­er­te Strom­quel­le be­nutzt, der so­mit ein weit­ge­hend AC-frei­es Si­gnal er­zeugt. Das Si­gnal ist nicht GND-be­zo­gen aber für ein Dreh­spul­mess­werk ist das ja egal.

Über X12 wird das Mess­werk an­ge­schlos­sen. Zu­sätz­lich zum ana­lo­gen Si­gnal steht auch noch das dimm­ba­re Be­leuch­tungs­sig­nal so­wie +5 V zur Ver­fü­gung, falls ihr Mess­werk ei­ne Be­leuch­tung be­sitzt. Ver­wen­den Sie für die Zu­lei­tung zum Mess­werk ei­ne ver­drill­te Zwei­draht­lei­tung, eben­so wie für die Zu­lei­tung zur Be­leuch­tung um Über­spre­chen zwi­schen dem Ana­log­si­gnal und dem steil­flan­ki­gen Be­leuch­tungs­sig­nal zu mi­ni­mie­ren.
Die Pin-Rei­hen­fol­ge von X12 ist ver­po­lungs­to­le­rant d.h. bei ver­kehrt he­r­um ge­steck­tem X12 schlägt das In­stru­ment ins Ne­ga­ti­ve aus und die Be­leuch­tung ist ver­polt, was für Ska­len­lämp­chen egal ist und selbst LEDs to­le­rie­ren soll­ten.

Der Strom er­gibt rech­ne­risch bei 2,7 V am RC-Glied 100 µA so dass Bau­teil­to­le­ran­zen gut per Soft­ware aus­ge­gli­chen wer­den kön­nen. Ei­ne ent­spre­chen­de Ka­li­brie­rungs-Pro­ze­dur für den Voll­aus­schlag des In­stru­ments wur­de im­ple­men­tiert und wird im Rah­men des Ca­li­brate-Kom­man­dos aus­ge­führt.

Der ge­wähl­te OpAmp ist kein ech­ter Rail-To-Rail Typ des­halb kön­nen wir nicht den ge­sam­ten 5 V Span­nungs­hub aus­nut­zen. Er kann 0 V recht gut dar­stel­len aber Aus­gangs­span­nun­gen na­he VCC wer­den nicht er­reicht.

Da der Timer 8 Bit Auf­lö­sung hat kann der An­zei­ge­wert nur auf et­wa 1% ge­nau ein­ge­stellt wer­den aber ge­nau­er kann man ein ana­lo­ges Mess­werk oh­ne­hin kaum ab­le­sen. Mes­sun­gen mit ei­nem ge­nau­en Di­gi­tal-Am­pere­me­ter be­stä­ti­gen ei­ne Ge­nau­ig­keit bes­ser als 1% des Voll­aus­schlags.

Wenn Sie auf das LCD ver­zich­ten, set­zen Sie un­be­dingt den Dis­play-Typ auf Analog. Die meis­ten Funk­tio­nen wür­den zwar auch mit LCD-Ty­pen funk­tio­nie­ren da die LCD-Rou­ti­nen ein Time­out ver­wen­den falls das Dis­play nicht ant­wor­tet. In ei­ni­gen Fäl­len kann das Time­out je­doch lang ge­nug sein um ei­nen Watch­dog-Re­set aus­zu­lö­sen.

Nun, das war wohl die letz­te In­spi­ra­tion die ich von ei­nem Be­su­cher be­kom­men soll­te denn seit Sep­tem­ber 2013 scheint Goog­le kei­ne Key­words mehr zu über­mit­teln. Des­halb kann ich nur emp­feh­len, be­nut­zen Sie nicht Goog­le für die Suche. Nur Goog­le weiß noch, wo­nach sie ge­sucht ha­ben. Ich kann mei­ne Sei­te und mein Pro­jekt nicht mehr ver­bes­sern denn ich er­fah­re nicht, wo­nach sie ge­sucht ha­ben (wer sie sind er­fah­re ich so­wie­so nicht, auch wenn Goog­le es wahr­schein­lich weiss). Be­nut­zen sie nicht Goog­le!
Na­tür­lich kön­nen Sie trotz­dem Goog­le be­nut­zen wenn Ihnen da­nach ist und Sie kön­nen mir ein­fach ei­ne Email schrei­ben, was ih­nen an mei­ner Sei­te fehlt. Aber die­ser Da­ten­schutz-Ak­tio­nis­mus nervt.

Stackchk

Ein Mo­dul na­mens Stackchk wur­de hin­zu­ge­fügt um die Re­ser­ve an frei­em Spei­cher (al­so zwi­schen Heap und Stack) zu schät­zen. Dies ist nur ak­tiv wenn Sie die Va­ri­ab­le WITH_STACKCHK per #define er­zeu­gen. Sie kön­nen das in den Pro­ject-Pro­per­ties un­ter Com­pi­ler-Sym­bols er­le­di­gen. An­dern­falls re­du­zie­ren sich al­le Calls auf die Funk­tio­nen auf ein simp­les Re­turn. Ein gu­ter Opti­mizer soll­te Calls auf ein Re­turn eli­mi­nie­ren. Leider ist dies in der ak­tu­el­len Ver­sion nicht der Fall aber wir ver­lie­ren da­durch le­dig­lich drei Bytes an Pro­gramm­spei­cher, was nor­ma­ler­wei­se kein Pro­blem dar­stellt.

In der ak­tu­el­len Ver­sion zeigt dies knapp 300 Bytes Re­ser­ve so dass wir uns kei­ne Ge­dan­ken über ei­ne Stack-Kol­li­sion ma­chen müs­sen.

Kommandos

Fol­gen­de Kom­man­dos sind bis­her im­ple­men­tiert:

Abkürzen von Kommandos

Kom­man­dos sind Case-In­sen­si­tive, d.h. Groß-Klein­schrei­bung spielt kei­ne Rol­le. Au­ßer­dem wird das Kom­man­do nur bis zu sei­ner an­ge­ge­be­nen Län­ge aus­ge­wer­tet, d.h. cal ist äqui­va­lent zu Ca­li­brate oder im Ex­trem­fall d ist äqui­va­lent zu DCFInf. Wenn Sie sol­che Ab­kür­zun­gen ver­wen­den soll­ten Sie sich an­ge­wöh­nen, ein­deu­ti­ge Ab­kür­zun­gen zu ver­wen­den. Mög­li­cher­wei­se kom­men Kom­man­dos hin­zu, die sich mit Ihren Ab­kür­zun­gen über­schnei­den und mög­li­cher­wei­se stimmt die Sor­tie­rung im Source­code nicht mit der von Ihnen er­war­te­ten über­ein... Ins­be­son­de­re in Skrip­ten oder an­de­ren pro­gramm­ge­steu­er­ten Ak­tio­nen soll­ten Sie die Kom­man­dos stets aus­schrei­ben.

Be­ach­ten Sie: al­le Än­de­run­gen der Kon­fi­gu­ra­tion (ein­schließ­lich der Ka­li­brie­rung) wer­den zu­nächst nur im tem­po­rä­ren Spei­cher ab­ge­legt und erst durch ein Write-Kom­man­do per­ma­nent!

Pa­ra­me­ter kön­nen nicht ab­ge­kürzt wer­den. Sie kön­nen z.B. deb dcf schrei­ben an­statt debug dcf aber deb d wird nicht funk­tio­nie­ren!

Kommandos mit Neustart

Einige Kom­man­dos en­den mit ei­nem Neu­start des Ge­räts. Dies wird durch ei­nen Watch­dog-Re­set be­wirkt da es kei­ne an­de­re Mög­lich­keit gibt auch die Hard­ware des Con­trol­lers zu­rück zu set­zen. Es ist nor­mal, dass nach die­sen Kom­man­dos ei­ne Feh­ler­sei­te ein­ge­blen­det wird, die das an­zeigt.
Nach ei­nem ech­ten Power-Down-Re­set (aus- und wie­der ein­schal­ten) soll­te die­se je­doch ver­schwin­den.

Debug-LEDs

Zum De­bug­ging ha­be ich dem Dis­play noch vier ver­schie­den­far­bi­ge LEDs spen­diert. So­lan­ge die Schal­tung nicht in 1000-er Stück­zah­len läuft ist der fi­nan­zi­el­le Auf­wand ver­nach­läs­sig­bar, spä­ter kann man sie weg­las­sen. In der ak­tu­el­len Firm­ware zei­gen sie fol­gen­des an:

Die­se Si­gna­le sind auch für das Os­zil­lo­skop über X9 zu­gäng­lich.

Die blaue LED wird auch für den Fer­ti­gungs­test be­nö­tigt und soll­te da­her nur mit sehr gu­ten Grün­den ge­än­dert wer­den!

Helligkeit

Da­mit kann man es wohl nie­man­dem recht ma­chen. Die ei­nen sa­gen, es ver­brennt ih­nen die Netz­haut, an­de­re mei­nen aus 5 m Ent­fer­nung kann man sie kaum noch er­ken­nen. Ich ha­be ei­nen Mit­tel­weg ge­wählt und sie mit je­weils 10 mA be­stromt. Da­mit sind mo­der­ne LEDs, sa­gen wir, hell. Ein vier­po­li­ger Jum­per er­mög­licht den An­schluss des Tast­kop­fes ei­nes Os­zil­lo­skops um die Zei­ten ex­akt zu mes­sen. Über­rascht hat mich die Hel­lig­keit der grü­nen Vishay-LED. Im ers­ten Pro­to­ty­pen fun­zelte noch ei­ne al­te Osram-LED vor sich hin aber die Vishay sieht aus als ob in ih­rer Um­ge­bung Schweiß­ar­bei­ten vor sich gin­gen. Ihr Vor­wi­der­stand muss drin­gend er­höht wer­den.

Na­tür­lich kön­nen Sie die LEDs auch für an­de­re Zwe­cke ge­brau­chen. Die Sour­cen ha­ben Sie ja...

Factory Test

Ich ha­be ei­nen ein­fa­chen Fac­to­ry Test im­ple­men­tiert, der in der La­ge ist Kurz­schlüs­se zwi­schen zwei Aus­gän­gen oder ei­nem Aus­gang und der Ver­sor­gung zu er­ken­nen.

Ein­gän­ge kön­nen da­mit nicht über­prüft wer­den da die Soft­ware den Zu­stand der Ein­gangs­lei­tun­gen nicht be­ein­flus­sen kann.

Dazu wird ein wal­king zero und ein wal­king one durch­ge­führt, d.H. al­le Aus­gän­ge wer­den ge­setzt und ein ein­zel­nes 0-Bit wan­dert durch al­le Pins. So­lan­ge nur die­ses Bit 0 ist und al­le an­de­ren 1 blei­ben ist al­les OK. An­schlie­ßend wer­den al­le Pins auf 0 ge­setzt und ei­ne 1 wan­dert durch al­le Bits. Da­mit kön­nen vie­le (aber nicht al­le) Kurz­schlüs­se er­kannt wer­den.

Al­le Ver­sor­gungs­span­nun­gen wer­den ge­mes­sen und mit vor­de­fi­nier­ten Grenz­wer­ten ver­gli­chen. Die Ka­li­brie­rungs­pro­ze­dur muss vor­her durch­ge­führt wer­den um die Grenz­wer­te si­cher zu er­ken­nen.

Au­ßer­dem kann er den SWUnreg-Switch über­prü­fen da er die an­lie­gen­de Span­nung mes­sen kann. Er zeigt die An­stiegs­zeit der SWUnreg (bis auf 90% von Unreg) und de­ren Ab­fall­zeit (auf 10% von Unreg) die, bei ge­ge­be­nen Prüf­be­din­gun­gen (an­ge­schlos­se­ner Sen­sor, 10 m Ka­bel), vor­her­sag­­bar sind. Da­mit kann die Funk­tion der Kon­stant­strom­quel­le über­prüft wer­den. Ty­pi­sche Wer­te für die An­stiegs­zeit in die­sem Fall sind ei­ne knappe Mi­kro­se­kun­de und für die Ab­fall­zeit et­wa 20 ms.

Er kann je­der­zeit mit dem Kom­man­do FTest auf­ge­ru­fen wer­den. Be­ach­ten Sie da­bei, dass kur­ze Spikes z.B. auf den Si­gnal­aus­gän­gen oder den se­ri­el­len Schnitt­stel­len auf­tre­ten, die evtl. un­er­war­te­te Ne­ben­wir­kun­gen zei­gen.

Der Fac­to­ry Test en­det stets mit ei­nem Re­set des Dis­plays

LITERS_T

LITERS_T ist ein typedef für al­le Vo­lu­men­ein­hei­ten im Sys­tem und in mei­nen Sour­cen als double de­fi­niert.

Manche Leu­te mö­gen sa­gen, ein In­te­ger wä­re ge­nug. Ich be­nut­ze je­doch für die meis­ten Be­rech­nun­gen Fließ­kom­ma-Arith­me­tik aus fol­gen­den Grün­den:

Wenn Sie kom­ple­xe Be­rech­nun­gen durch­füh­ren müs­sen, tun Sie dies in Fließ­kom­ma-Arith­me­tik! Be­den­ken Sie je­doch, dass der ==-Ope­ra­tor dann prin­zi­pi­ell nicht ver­wend­bar ist. 2 ist eben nicht gleich 1.9999973!

Für mich gibt es nur we­nig Grün­de, von die­sem Prin­zip ab­zu­wei­chen:

Beide Listen er­he­ben kei­nen An­spruch auf Voll­stän­dig­keit. Wenn Sie zu dem Schluss kom­men, int_16 reicht für LITERS_T, de­fi­nie­ren Sie es um. Ich kann ih­nen je­doch nicht ga­ran­tie­ren dass es ein­fach so funk­tio­niert ob­wohl ich mich be­müht ha­be, die Schnitt­stel­len kom­pa­ti­bel zu hal­ten. Ver­wen­den Sie auf kei­nen Fall vor­zei­chen­lo­se Ty­pen! Ihr Vo­lu­men kann ne­ga­tiv wer­den wenn die Zis­ter­ne 1 cm tie­fer ist als Sie ge­mes­sen ha­ben. Die Aus­wir­kun­gen könn­ten Sie sonst über­ra­schen!

Layout

Hier ein paar Hin­wei­se zum Lay­out.

All­ge­mein müs­sen in Strom­krei­sen mit ho­hem di/dt in­duk­ti­ve An­tei­le der Lei­ter­bah­nen mi­ni­miert wer­den. Hohes di/dt tre­ten in un­se­rer Schal­tung na­tür­lich im DC/DC-Kon­ver­ter auf, aber auch in der PWM-Schal­tung zum Dimmen des Back­lights.

Die In­duk­ti­vi­tät sinkt mit der Breite der Lei­ter­bah­nen und wächst mit der Län­ge und der um­schlos­se­nen Flä­che.

Ver­wen­den sie brei­te Lei­ter­bah­nen. 0.3 mm sind nicht ge­nug, auch wenn sie den Strom the­o­re­tisch tra­gen kön­nen. 1 mm ist im­mer noch zu schmal. Ver­wen­den Sie Flä­chen, so breit und kurz wie nur ir­gend mög­lich! Machen Sie sich klar, wel­chen Rück­weg der Strom neh­men muss und ver­le­gen Sie Hin- und Rück­weg so eng wie mög­lich ne­ben­ein­an­der (bzw. über­ein­an­der) um die um­schlos­se­ne Flä­che zu mi­ni­mie­ren. Jeder Mil­li­me­ter den Sie spa­ren kön­nen ver­bes­sert das Er­geb­nis.

Da der Rück­weg re­gel­mä­ßig über GND führt muss die Ground­plane die ers­te un­ter der Be­stück­ungs­sei­te sein!

DC/DC-Konverter

Für den DC/DC-Kon­ver­ter be­deu­tet dies:
U8 schal­tet, so­mit er­gibt sich das höchs­te di/dt in den Krei­sen um U8. Mi­ni­mie­ren Sie die Flä­che um C10, U8, L2, C12 so­wie D2, L2 und C12.

PWM Dimming

Für den Dim­mer-Schalt­kreis be­deu­tet dies:
Mi­ni­mie­ren Sie die Flä­che um C5, Back­light, R12 und T3