Ultrasonic Level Meter Sensor Page in English
Ultrasonic Level Meter Sensor Page in English

Sensor

Sensor Der Sen­sor be­nutzt ei­nen re­la­tiv klei­nen Con­trol­ler vom Typ ATtiny2313. Um sei­ne Ka­pa­zi­tät nicht un­nö­tig zu for­dern ist die Firm­ware in As­sem­bler ge­hal­ten (schließ­lich wol­len wir auch das nicht ganz ver­ges­sen, oder?). Al­le Be­rech­nun­gen wer­den in der An­zei­ge­ein­heit durch­ge­führt, die in C pro­gram­miert ist. Auch die Ver­sor­gungs­span­nung des Sen­sors wird von die­ser fern­ge­schal­tet. En­er­gie­ver­brauch ist da­her nur am Ran­de ein The­ma da er nur so­lan­ge ein­ge­schal­tet ist wie er auch wirk­lich ar­bei­ten muss (in der ak­tu­el­len Ver­sion ma­xi­mal 10 s pro Mi­nu­te).

Das be­deu­tet aber auch, dass er sich kei­ne Wer­te im RAM mer­ken kann. Alles was er dau­er­haft wis­sen muss ist folg­lich im EEPROM ab­ge­legt. Bis zum ak­tu­el­len Soft­wa­re­stand muss er sich glück­li­cher­wei­se *nichts* mer­ken.

Ultraschallsender

Die Sen­der-Hard­ware ist die Stan­dard­schal­tung wie sie in vie­len An­wen­dun­gen ver­wen­det wird. Das Si­gnal in Form von 8 Pe­ri­oden ei­ner 40 kHz-Schwin­gung wird per Soft­ware im Mi­kro­con­trol­ler er­zeugt. Ver­su­che ha­ben ge­zeigt, dass das Emp­fangs­sig­nal wäh­rend der ers­ten 2-3 Pe­ri­oden deut­lich an­steigt (Re­so­nanz des Emp­fän­ger­kris­talls und ver­mut­lich auch des Sen­ders). Mehr als 8 Pe­ri­oden brin­gen je­doch kei­ne we­sent­li­che Ver­bes­se­rung.

Ultraschallempfänger

Die Emp­fän­ger­schal­tung wur­de in LTspice si­mu­liert und un­ter Be­rück­sich­ti­gung der Qua­li­tä­ten des ver­wen­de­ten Ope­ra­ti­ons­ver­stär­kers auf ma­xi­ma­le Ver­stär­kung bei 40 kHz op­ti­miert. Jede ein­zel­ne Pe­ri­ode des emp­fang­en­en Ul­tra­schall­si­gnals löst im Con­trol­ler ei­nen In­ter­rupt aus. Die­ser kann da­mit die Lauf­zeit des Im­pul­ses mes­sen und die Ent­fer­nung zur re­flek­tie­ren­den Ober­flä­che be­rech­nen.

Schallgeschwindigkeit

Die Schall­ge­schwin­dig­keit ist ab­hän­gig von der Tem­pe­ra­tur nach fol­gen­der For­mel:
v=v0tt0 wo­bei v0 die Ge­schwin­dig­keit bei 0 °C (331,5 m/s) und t0=273 K ist.
10 °C wür­den ei­nen Feh­ler von et­wa 2,4% be­wir­ken was et­wa 140 l in ei­ner 6000 l-Zis­ter­ne be­deu­tet.
Ei­ne Tem­pe­ra­tur­mes­sung in der Zis­ter­ne ist da­mit ob­li­ga­to­risch. Aller­dings soll­te man sich auch nicht zu viel da­von ver­spre­chen denn die Tem­pe­ra­tur in der Luft­säu­le ist be­son­ders im Som­mer sehr in­ho­mo­gen. Scheint die Son­ne auf den Zis­ter­nen­de­ckel er­reicht die Luft­tem­pe­ra­tur im obe­ren Be­reich lo­cker über 30 °C wäh­rend sie knapp über der Was­ser­ober­flä­che nur 15 °C be­trägt.

Es hat sich ge­zeigt, dass da­durch im Ta­ges­ver­lauf schein­ba­re Was­ser­zu­läu­fe (auch oh­ne Regen) im Be­reich von 30-50 l er­fol­gen weil sich der Schall in war­mer Luft schnel­ler aus­brei­tet und da­durch die Ober­flä­che für den Sen­sor fer­ner scheint als sie tat­säch­­lich ist.

In­te­res­sant­er­wei­se dehnt sich durch die Er­wär­mung auch das Edel­stahl-Be­fes­ti­gungs­seil und senkt da­mit den Sen­sor ein we­nig ab, was die­sem Ef­fekt ent­ge­gen­wirkt.

Totzeit

Wenn Ul­tra­schall­im­pul­se ge­sen­det wer­den, emp­fängt der Sen­sor nicht nur das Echo von der Was­ser­ober­flä­che son­dern zu­nächst ein­mal Vi­bra­tio­nen, die über das Ge­häu­se und die un­mit­tel­ba­re Um­ge­bung über­tra­gen wer­den. Des­halb ist es nö­tig, ei­ne Tot­zeit ein­zu­füh­ren. Vor Ab­lauf die­ser wer­den emp­fan­ge­ne Si­gna­le ver­wor­fen. Sie kann in Viel­fa­chen von 256×Timer1-Clocks an­ge­ge­ben wer­den. Erst Echos nach Ab­lauf der Tot­zeit be­wir­ken die Aus­lö­sung ei­ner Mes­sung. Prak­tisch be­deu­tet dies, dass kein Ob­jekt und kei­ne Was­ser­ober­flä­che ge­mes­sen wer­den kann, die nä­her als et­wa 30 cm am Sen­sor ist.

Mikrocontroller

Ver­wen­det wur­de der ATtiny2313 bei ei­ner Takt­fre­quenz von 3,6864 MHz. Die­se krum­me Fre­quenz er­laubt das feh­ler­lo­se Er­zeu­gen gän­gi­ger Baud­ra­ten.
Un­nö­tig hoch soll­te man die Takt­fre­quenz nicht wäh­len, da EMV-Pro­ble­me da­mit wahr­schein­li­cher wer­den und auch der Strom­ver­brauch prak­tisch li­ne­ar mit der Takt­fre­quenz an­steigt.

Die 40 kHz-Schwin­gung wird rein durch Soft­ware er­zeugt. Da beim Senden kei­ne In­ter­rupts frei­ge­ge­ben sind ist dies mög­lich und es ist so ein­fa­cher, ei­ne be­stimm­te An­zahl von Pe­ri­oden (acht) zu er­zeu­gen. Ein Pa­ket aus acht Pe­ri­oden ist 200 µs lang, bei rund 340 m/s Schall­ge­schwin­dig­keit ent­spricht das 6,8 cm. Ei­ne ein­zel­ne Pe­ri­ode und da­mit die the­o­re­ti­sche Ma­xi­mal­gren­ze der Ge­nau­ig­keit ent­spricht 8,5 mm. Nach dem Senden des Pa­kets wird Timer 1 ge­star­tet, mit dem die Lauf­zeit ge­mes­sen wird. Da, wie be­reits er­wähnt, das Emp­fangs­sig­nal wäh­rend der ers­ten Pe­ri­oden an­steigt kann es pas­sie­ren, dass mal die ers­te und mal die zwei­te oder gar drit­te Pe­ri­ode er­kannt wird und das Er­geb­nis so sprung­haft um Viel­fa­che von 8,5 mm stei­gen oder fal­len kann. Für den Fall dass im­mer die glei­che Pe­ri­ode er­kannt wird ist die Auf­lö­sung al­ler­dings sehr hoch (ei­ne Ti­mer­pe­ri­ode ent­spricht we­ni­ger als 0,1 mm) was aber nicht mit Ge­nau­ig­keit ver­wech­selt wer­den darf!

Der Emp­fän­ger lie­fert für je­de Pe­ri­ode des Pa­kets ei­ne Flan­ke, die ei­nen In­put-Cap­ture-In­ter­rupt aus­löst. Der Con­trol­ler hat da­mit ei­nen ex­ak­ten Zeit­stem­pel je­der ein­zel­nen Pe­ri­ode und könn­te so so­gar Dop­pler­mes­sun­gen vor­neh­men, was hier aber nicht nö­tig ist.

Wenn Timer 1 über­läuft wird die Mes­sung ver­wor­fen. Dies wä­re bei di­rek­tem Sys­tem­takt nach 17,8 ms oder 6 m. Da dies je nach Form und Fas­sungs­ver­mö­gen der Zis­ter­ne et­was knapp sein kann (in der 6000 L-Zis­ter­ne des Au­tors hängt der Sen­sor et­wa 2,90 m (al­so 5,80 m hin und zu­rück) über dem Bo­den) mes­sen wir in die­sem Fall noch ein­mal mit clk/8. Wird kein Si­gnal emp­fan­gen läuft der Timer al­so nach wei­te­ren 142 ms ab. Spä­tes­tens dann be­kommt die An­zei­ge­ein­heit auch die In­for­ma­tion über die Lauf­zeit des Si­gnals.

Temperaturmessung

Da die Schall­ge­schwin­dig­keit tem­pe­ra­tur­ab­hän­gig ist muss auch die Tem­pe­ra­tur ge­mes­sen wer­den. Das kos­tet nicht viel, bringt aber, wie wir ge­se­hen ha­ben, ei­nen deut­li­chen Ge­nau­ig­keits­ge­winn. Der Con­trol­ler be­sitzt un­glück­li­cher­wei­se kei­nen AD-Wand­ler so wur­de auch die­ser in Soft­ware re­a­li­siert. Dazu wird Timer 1 als 8-Bit PWM be­trie­ben und das Aus­gangs­si­gnal durch ei­nen ein­fa­chen RC-Tief­pass ge­fil­tert. Die­se Span­nung wird vom in­te­grier­ten Kom­pa­ra­tor mit der über ei­nem NTC ver­gli­chen. Das PWM-Si­gnal hat da­bei ei­ne fes­te Fre­quenz von 14,4 kHz (3,6864 MHz/256).

Aus­ge­hend von ei­nem ent­la­de­nen Kon­den­sa­tor lau­tet die For­mel für den Span­nungs­ver­lauf an ei­nem RC-Glied be­kann­ter­ma­ßen:

U(t)=U0(1--tτ)

Fol­gen­de Um­for­mung tut uns da­bei gu­te Diens­te da sie sich tri­vial nach t bzw. τ auf­lö­sen lässt:

-ln(1-UU0)=tτ

Zwei Rand­be­din­gun­gen müs­sen für die kor­rek­te Funk­tion der Mes­sung er­füllt sein:

  1. Die Rest­wel­lig­keit des ge­fil­ter­ten PWM-Si­gnals muss klei­ner sein als ½ LSB
  2. Die Ein­schwing­zeit der ge­fil­ter­ten Span­nung bis auf ½ LSB muss ab­ge­war­tet wer­den

Restwelligkeit:

Die höchs­te Rest­wel­lig­keit ist in der Mit­te des Mess­be­reichs, bei 50 % Duty Cycle.
Die La­de­span­nung ist im ein­ge­schwun­ge­nen Zu­stand ½ VCC. Da­mit die Rest­wel­lig­keit des Si­gnals un­ter ½ LSB (U/U0=½/128) bleibt muss die Zeit­kon­stan­te des Fil­ters über 8,87 ms lie­gen (t ist hier ei­ne hal­be Pe­ri­oden­dau­er, al­so 34,7 µs).
Wir wäh­len Wer­te von 12 kΩ und 1 µF und da­mit ei­ne Zeit­kon­stan­te von 12 ms.

Einschwingzeit:

Die höchs­te Ein­schwing­zeit ist zwi­schen den Ex­tre­ma, d.h. von 0 auf 255. Da der höchs­te Schritt, den wir ab­war­ten müs­sen, je­doch nur von 0 auf 128 ist rech­nen wir nun mit u=127,5 und u0=128. Da­mit die Span­nung auf we­ni­ger als ½ LSB an den PWM-Soll­wert he­r­an­kommt muss das Si­gnal al­so we­nigs­tens 66,5 ms an­ste­hen. Auch hier wäh­len wir groß­zü­gig 100 ms. Für ei­nen Soft­ware-SAR-Wand­ler mit 8 Bit be­nö­ti­gen wir 8 Mes­sun­gen und er­hal­ten so­mit nach et­wa 800 ms das ge­naue Er­geb­nis.

Wir könn­ten die Ein­schwing­zeit für die fol­gen­den Schrit­te re­du­zie­ren da der Span­nungs­hub je­weils nur die Hälf­te des vor­her­ge­hen­den ist aber das ist hier nicht nö­tig und auch nicht er­wünscht.

Das war ziem­lich viel Ar­beit und ist min­des­tens 1000 mal lang­sa­mer als ein in­te­grier­ter Hard­ware-A/D-Wand­ler aber wie wir spä­ter noch se­hen wer­den ist dies nicht un­be­dingt ein Nach­teil.

Ei­ne An­mer­kung zu den Bau­teil­to­le­ran­zen: der ab­so­lu­te Wert des RC-Glie­des ist un­kri­tisch, selbst der Tem­pe­ra­tur­ko­ef­fi­zi­ent, da sich die Tem­pe­ra­tur im Lau­fe ei­ner Mes­sung nicht we­sent­lich än­dert. Ent­schei­dend ist le­dig­lich, dass die ge­sam­te Mi­nus-To­le­ranz nicht mehr als 26 % (8,87 ms/12 ms) und die Plus-To­le­ranz nicht mehr als 50% (100/66,5) be­trägt, was mit mo­der­nen Kon­den­sa­to­ren und Wi­der­stän­den durch­aus ein­zu­hal­ten ist (et­wa mit 20% C und 5% R).

Es ist al­so nicht nö­tig, be­son­ders hoch­wer­ti­ge Wi­der­stän­de oder Kon­den­sa­to­ren ein­zu­set­zen, das bil­ligs­te was Sie krie­gen kön­nen ist gut ge­nug (na ja, je­den­falls fast)...

Der Wi­der­stand R15 über dem Heiß­lei­ter soll­te je­doch ein 1%-Typ sein, da sein Feh­ler di­rekt in die Ge­nau­ig­keit der Mes­sung ein­geht. 1%-Wi­der­stän­de sind im­mer noch bil­lig. Ei­ne noch hö­he­re Prä­zi­sion geht schnell ins Geld und bräch­te kaum Ver­bes­se­rung da die To­le­ranz des Heiß­lei­ters viel grö­ßer ist.

Unter mei­nen Elek­tro­nik-Rech­nern kön­nen Sie in­zwi­schen ei­nen Rech­ner fin­den, der das RC-Glied ein­fach be­stim­men kann.

Um Ver­fäl­schun­gen des Er­geb­nis­ses durch die Trei­ber­leis­tung des Port­pins zu ver­rin­gern le­gen wir das po­si­ti­ve En­de des Wi­der­stand/Heiß­lei­ter-Span­nungs­tei­lers nicht an VCC son­dern eben­falls an ei­nen Port­pin des sel­ben Ports (an­de­re mö­gen ab­wei­chen­de Trei­ber­leis­tung ha­ben) der wäh­rend der Mes­sung per­ma­nent 1 ist und ver­wen­den für den Wi­der­stand des RC-Glie­des ei­nen ähn­li­chen Wert wie für den Vor­wi­der­stand des Heiß­lei­ters, so dass ähn­li­che Strö­me flie­ßen. Dies hat zu­sätz­lich den Vor­teil, dass wir den Heiß­lei­ter ab­schal­ten kön­nen wenn wir ihn nicht be­nö­ti­gen und so nicht nur ein biss­chen Strom spa­ren son­dern auch die Ei­gen­er­wär­mung des Heiß­lei­ters re­du­zie­ren. Die­se ist zwar bei 2,5 V und 10 kΩ noch kein echtes Pro­blem, be­trägt je­doch bei­spiels­wei­se bei ei­nem SMD-NTC mit 220 K/W schon mehr als 1/8 °C.

Ich muss ge­ste­hen, die­ser Teil der Schal­tung hat mir am meis­ten Spaß ge­macht. Ein­fach zu be­rech­nen, ein­fach zu bau­en und funk­tio­niert auf An­hieb!

Wenn Sie mal da­mit spie­len möch­ten, hier ei­ne klei­ne Si­mu­la­tion für LTspice. Die Span­nung der PWM ha­be ich hier auf 255 V ge­setzt. So kann man di­rekt das Er­geb­nis des DA-Wand­lers über­prü­fen. Für die Funk­tion ist ja der ab­so­lu­te Wert der Span­nung un­er­heb­lich.

Gehäuse

Das Ge­häu­se für den Sen­sor soll­te auf je­den Fall feuch­tig­keits­ge­schützt sein. Ich ha­be ein Bopla ET-210 ver­wen­det. Tem­pe­ra­tur­än­de­run­gen und da­mit die Ge­fahr der Be­tau­ung er­fol­gen zwar in ei­ner Zis­ter­ne nur sehr lang­sam, kön­nen aber durch die ge­rin­ge Ei­gen­er­wär­mung des Sen­sors nicht völ­lig aus­ge­schlos­sen wer­den. Ins­be­son­de­re in der kal­ten Jah­res­zeit kühlt der Sen­sor von oben aus wäh­rend von un­ten re­la­tiv feucht-war­me Luft auf­steigt. Auch die Ein­füh­rung des Ka­bels soll­te des­halb durch ei­ne feuch­tig­keits­dich­te IP54-Ka­bel­ein­füh­rung er­fol­gen. Ich ha­be so­gar un­ter die Ul­tra­schall-Sen­so­ren noch Si­li­kon ge­spritzt um das Ein­drin­gen von Feuch­tig­keit durch die Bohr­lö­cher zu ver­hin­dern und kann dies auf­grund spä­te­rer Er­fah­run­gen nur drin­gend emp­feh­len! Die Sen­so­ren selbst sind der Feuch­tig­keit je­doch scho­nungs­los aus­ge­lie­fert. Es gibt auch feuch­tig­keits­be­stän­di­ge Ul­tra­schall­sen­so­ren, die­se sind je­doch schlecht er­hält­lich. Bei Be­fürch­tun­gen in die­ser Rich­tung kann na­tür­lich auch die Un­ter­was­ser-Aus­füh­rung he­r­an­ge­zo­gen wer­den. Ich ha­be die Un­ter­was­ser-Aus­füh­rung nur kurz ge­tes­tet, es scheint je­doch, dass die­se ei­ne er­heb­lich hö­he­re Trei­ber­leis­tung er­for­dern. Sie wür­den je­den­falls nicht oh­ne Schal­tungs­mo­di­fi­ka­ti­on funk­tio­nie­ren. Hier sind Sie ge­fragt!

Die Ty­pen UST40R und UST40S ha­ben je­doch meh­re­re Jah­re un­be­scha­det über­stan­den.

Auch ge­rin­ge Men­gen Feuch­tig­keit kön­nen zu­sam­men mit Ver­un­rei­ni­gun­gen auf der Lei­ter­plat­te (Fluss­mit­tel, Haut­fett etc.) kor­ro­si­ve und/oder leit­fä­hi­ge Be­lä­ge bil­den, die frü­her oder spä­ter zum Aus­fall füh­ren.

Nach et­wa drei Jah­ren Be­trieb riss bei mei­nem Sen­sor das Hal­te­seil, der Sen­sor fiel in die Zis­ter­ne und saug­te sich mit Was­ser voll. Des­halb ent­schied ich mich, den nächs­ten kom­plett mit Epoxyd­harz zu ver­gie­ßen. Ei­ne Schal­tung an die man nicht mehr he­r­an­kommt ist bes­ser als ei­ne ka­put­te Schal­tung!

Dafür ha­be ich Robnor PX804D/BK ver­wen­det. Es sieht aus wie Alt­öl und ist et­was zäh­flüs­si­ger als die­ses. Man be­nö­tigt et­wa 200 g. Nach der hal­ben Menge et­was Schwen­ken da­mit auch die Hohl­räu­me aus­ge­füllt wer­den. Zum Schluss mit dem Gerät ein paar mal auf den Tisch klop­fen da­mit die Luft­bla­sen auf­stei­gen. Ideal wä­re na­tür­lich der Ver­guss im Va­ku­um aber für un­se­re Zwe­cke geht es auch so.

Falls Sie über Va­ku­um-Ver­guss nach­den­ken wür­de ich Ihnen Kühl­schrank-Kom­pres­so­ren ans Herz le­gen. Sie sind bil­lig (kos­ten­los aus al­ten Kühl­schrän­ken) und er­zeu­gen ein durch­aus brauch­ba­res Va­ku­um (et­wa bis 0.1 Bar). Va­ku­um-Tech­ni­ker lachen an die­ser Stel­le für ge­wöhn­lich, aber die Luft­bla­sen in un­se­rem Sen­sor wä­ren dann im­mer­hin nur noch 1/10 so groß! Ver­gie­ßen, Va­ku­um an, et­was war­ten bis die Blasen hoch­ge­stie­gen sind und Va­ku­um aus be­vor das Harz be­ginnt fest zu wer­den.

Au­ßer­dem eig­nen sie sich auch her­vor­ra­gend um mü­he­los Fahr­rad- oder Au­to­rei­fen auf­zu­pum­pen...

Sensor-Ansteuerung

Der Sen­sor wird in ei­nem fes­ten Zeit­ras­ter ein­mal pro Mi­nu­te an­ge­steu­ert.
Dieses Zeit­ras­ter stammt aus ei­ner frü­hen Ent­wick­lungs­pha­se des Pro­jekts und ist in sei­nem jet­zi­gen Stand kaum von Vor­teil. Da es aber auch nicht von Nach­teil ist wur­de es ein­fach bei­be­hal­ten...

Sekunde Aktion
0 Reserviert für Boot-Vorgang
Wer Bootzeiten von PCs gewöhnt ist mag eine Sekunde für kurz halten aber Booten beschränkt sich bei der Anzeige auf das Initialisieren der bescheidenen Hardware und das Anspringen der Hauptschleife.
1 Die Stromversorgung wird eingeschaltet. Der Sensor führt daraufhin selbsttätig asynchron Temperatur- und Laufzeitmessungen durch und sendet die Ergebnisse an die Anzeige.
Jede empfangene Laufzeitmessung wird als Füllstand "live" angezeigt.

Die An­zei­ge mit­telt 10 Lauf­zeit­mes­sun­gen (was grob auch et­wa 10 Se­kun­den dau­ert) und er­rech­net da­r­aus die Füll­men­ge der Zis­ter­ne. Mit dem Er­halt der 10. Mes­sung schal­tet sie die Ver­sor­gung wie­der ab. Die An­zei­ge zeigt nun bis zur nächs­ten Mi­nu­te den ge­mit­tel­ten Wert.

Die Ab­schal­tung er­folgt a­syn­chron, sie hängt ab von der tat­säch­­lich be­nö­tig­ten Zeit für 10 Mes­sun­gen, die ja von der Lauf­zeit des Si­gnals bzw. schlimms­ten­falls vom Time­out der­sel­ben ab­hängt. Die be­nö­tig­te Zeit liegt bei et­wa 10 Se­kun­den.

15 Die Mittelwerte werden berechnet und auf die Anzeige geschrieben.
59 Letzte Fehlerchecks werden durchgeführt. Wenn die Anzahl der empfangenen Laufzeitmessungen nicht genau 10 ist wird der entsprechende Fehler angezeigt.
Die Stromversorgung wird abgeschaltet um einen sicheren Reset auszulösen.

Dieses Ver­fah­ren mag lang­wei­lig oder bü­ro­kra­tisch er­schei­nen, es ver­hin­dert je­doch auf ein­fa­che Weise das Zu­stan­de­kom­men von Race-Con­di­tions und lässt doch Raum für Er­wei­te­run­gen (so­fern nicht mehr als 60 Schrit­te be­nö­tigt wer­den). Der Sen­sor hat auf je­des Kom­man­do ei­ne knappe Se­kun­de Zeit und kann si­cher sein, nicht ge­stört zu wer­den. Zu­sätz­lich ver­schwen­det der steu­ern­de Con­trol­ler kei­ne CPU-Zeit in un­nö­ti­gen War­te­schlei­fen auf Er­geb­nis­se. Man könn­te dies auch oh­ne das star­re und trä­ge Zeit­ras­ter mit ei­ner State-Ma­chine lö­sen, die­se wä­re je­doch un­über­sicht­li­cher und da­mit feh­ler­träch­ti­ger und bräch­te im kon­kre­ten Fall kei­ne Vor­tei­le.

Sensorprotokoll

Der Sen­sor ist ver­gleichs­wei­se ein­fach auf­ge­baut und führt, ab­ge­se­hen von der Tem­pe­ra­tur-Look­up­table kei­ne Be­rech­nun­gen durch. Er kom­mu­ni­ziert grund­sätz­­lich bi­när und spon­tan mit Te­le­gram­men im 9-Bit-For­mat.

Ist das 9. Bit 0 han­delt es sich um ein Da­ten­byte, bei 1 um ein Kenn­byte wie folgt:

Kennbyte Antwort Datenbytes folgen
0x00 Ende des Datensatzes 0
't' Temperatur in  °C/2. So entspricht z.B. 3510 einer Temperatur von 17.5 °C
Raw-Wert des Software-SAR-Konverters
1
1
'T' Laufzeit des Ultraschallimpulses in Timer1-Clocks
Multiplikator für Timer1 in CPU-Clocks (1 oder 8)
Totzeit in 256×Timer1-Clocks
2
1
1

Nach je­dem Da­ten­satz (vor dem 0x00-Byte) wird ein Check­sum­men-Byte ge­sen­det, das sich aus der Ex­klu­siv-Oder-Ver­knüp­fung der Da­ten und des ers­ten Kenn­bytes er­rech­net.

Tem­pe­ra­tu­ren grö­ßer 63.5 °C wer­den als 63.5 °C, sol­che klei­ner als -64 °C als -64 °C ge­mel­det. Der aus­wert­ba­re Tem­pe­ra­tur­be­reich ist da­her von -63.5 °C bis +63 °C. Es bleibt an­zu­mer­ken, dass die Auf­lö­sung in der Mit­te des Mess­be­reichs am größ­ten ist (teil­wei­se bes­ser als 0.5 °C) wäh­rend am Ran­de des Mess­be­reichs Sprün­ge von bis zu 5,5 °C/ LSB vor­kom­men, was bei -64 °C aber kei­ne Rol­le mehr spie­len dürf­te...

Wurde kein Echo emp­fan­gen ist die Lauf­zeit 0.

Der Sen­sor führt kon­ti­nu­ier­lich Mes­sun­gen durch bis die Ver­sor­gungs­span­nung ab­ge­schal­tet wird. Die re­la­tiv lan­ge Mess­zeit von et­wa 800 ms des Soft­ware-AD-Wand­lers für die Tem­pe­ra­tur sorgt ne­ben­bei auch da­für, dass al­le Ul­tra­schall-Echos in der Zis­ter­ne ver­klun­gen sind. Mit ei­nem schnel­len Hard­ware-ADC an Bord müss­ten wir an die­ser Stel­le ei­ne War­te­schlei­fe ein­fü­gen...

So er­weist sich der ver­meint­li­che Nach­teil der lang­sa­men AD-Wand­lung durch den Soft­ware-SAR als nütz­lich (ge­treu dem Mot­to It's not a bug, it's a feature!)

Programmierung des Sensors

Zur erst­ma­li­gen Pro­gram­mie­rung des Sen­sors mit dem AVRISP ist es er­for­der­lich dass die Sen­sor-Ver­sor­gung per­ma­nent ein­ge­schal­tet ist. Die ein­fachs­te Me­tho­de dies zu er­rei­chen ist über das Kom­man­do Ca­li­brate. Drü­cken Sie Re­turn bis die Mel­dung Please enter the re­al Value for Switched Unreg er­scheint. Der Sen­sor ist an bis sie er­neut Re­turn drü­cken und Sie kön­nen ihn ganz nor­mal mit dem AVRISP pro­gram­mie­ren.
Hin­weis: das AVRISP be­wirkt ei­nen Re­set des Sen­sors ei­ni­ge 100 ms nach­dem die Sen­sor-Ver­sor­gung ein­ge­schal­tet wird. Ein Up­date-Kom­man­do wird folg­lich fehl­schla­gen so­lan­ge das AVRISP mit dem Sen­sor ver­bun­den ist! Es hat mich Stun­den ge­kos­tet he­r­aus­zu­fin­den, wa­r­um das Boot­loa­der-Hello im­mer zwei­mal kam...

Fuses

Programmierfenster in ATStudio Wenn Sie den Sen­sor pro­gram­mie­ren reicht es nicht, nur das Sen­sor­pro­gramm selbst zu pro­gram­mie­ren! Achten Sie auch auf die Fuses. Ins­be­son­de­re die Clk/8-Fuse muss de­ak­ti­viert sein da sonst der Sen­sor nicht mit 3.6864 MHz läuft son­dern nur mit 461 kHz und da­mit kei­ne Kom­mu­ni­ka­tion mit dem Dis­play mög­lich ist! Ebenso muss die SELFPRGEN-Fuse ge­setzt sein sonst ist kein Firm­ware-Up­date über den Boot­loa­der mög­lich.

Test

Bevor Sie den Sen­sor ver­gie­ßen, tes­ten Sie un­be­dingt die Kom­mu­ni­ka­tion mit dem Dis­play. Ver­su­chen Sie auch ein Up­date-Kom­man­do. Erst wenn al­les Funk­tio­niert soll­ten Sie es ris­kie­ren, den Sen­sor in der Zis­ter­ne zu ver­sen­ken (bit­te nicht wört­lich neh­men :-)).

Befestigung

Der montierte Sensor in der ZisterneWenn Ih­re Zis­ter­ne ei­nen leich­ten Holz­de­ckel hat kön­nen sie ihn na­tür­lich ein­fach mit Edel­stahl­schrau­ben da­r­an be­fes­ti­gen. Mei­ne hat ei­nen 50 kg-Be­ton­de­ckel und ich wür­de den Sen­sor si­cher zer­stö­ren wenn er ein­fach un­ten fest­ge­schraubt wä­re und ich den De­ckel zur Sei­te wuch­te.
Ich ha­be in den Zis­ter­nen­hals vier Edel­stahl-Ha­ken ge­schraubt, ei­ne Edel­stahl­ket­te durch sie ge­spannt und den Sen­sor be­fes­tigt. Dazu ha­be ich auf das Sen­sor-Ge­häu­se ein Rest­stück Loch­ras­ter­plat­te be­fes­tigt (na­tür­lich mit Edel­stahl­schrau­ben) un­ter dem ich die Kette ge­spannt ha­be. Auf dem Fo­to ist das Sen­sor-Ka­bel noch teil­wei­se au­ßer­halb der Zis­ter­ne und da­mit nicht in sei­ner end­gül­ti­gen La­ge.