Vermutlich an irgendeinem Abend, bereits im Bett liegend, scrollte ich wieder mal durch Aliexpress, als ich über eine Platine mit dem AD8317 Log-Detector gestolpert bin. Das Präfix 'AD83xx' war mir bereits vom AD8307, dem AD8362 und dem AD8302 vertraut, so dass ich gleich das Datenblatt öffnete: bis zu 10GHz, naja, nicht dass ich schon ins 3cm Band eingestiegen wäre, aber dennoch könnte man doch damit etwas machen, auch wenn es an sich nichts wirklich Neues ist. Gedacht, gekauft.
Wie meistens ist die Platine nach Ankunft und initialem Funktionstest in die Sortierbox mit den ganzen anderen Platinen aus China gewandert; meistens liegt ja noch ein anderes Projekt auf dem Labortisch. Irgendwann hab ich dann wieder mal in all den Antistatiktüten rumgewühlt und diese Platine dabei rausgezogen. Gleichzeitig wollte ich eines dieser 1,8" TFTs ausprobieren, die ebenfalls rumlagen.
Obwohl es ein TFT-Display sein sollte, setzte ich einen ATMega328 in das Entwicklungsboard und warf Eclipse an. Das Display war insofern neu, als dass es nicht den bereits bekannten ILI9341, sondern den ST7735 verwendete. Schon bald zeigte sich aber, dass die Ansteuerung kaum vom anderen TFT abwich, ebenso konnte der Fontsatz 1:1 übernommen werden. Im Gegensatz zu bisherigen AVR-Projekten, in denen SPI-Slaves zum Einsatz kamen, habe ich hier das Hardware SPI-Modul verwendet, da Bitbanging für das TFT einfach zu langsam ist.
Ebenfalls zum ersten zum Einsatz kam der MCP3421 18bit ADC; nun 18bit gilt nur, wenn man ihn differentiell speist; single-ended bleiben noch 17bit übrig, und das auch nur mit einer Samplerate von 3Hz; deswegen entschied ich mich dann für 15bit bei 16 samples pro Sekunde, damit man ohne Sorge 3 Werte pro Sekunde auslesen kann. Die Berechnungen für die Messwerte übernahm ich vom bereits vorhandenen RF Powermeter Code.
Als der Code fertig war, stolperte ich erst über eine Unaufmerksamkeit, die mir vorher nicht aufgefallen waren:
Wenn ich das Meter mit meiner 0dBm-Referenz und dem 30dB Attenuator kalibrieren wollte, stimmten die Werte, die gegen 0dBm strebten, immer weniger. Der Noisefloor war bei -59dBm, und bis hinauf zu etwa -15dBm stimmten die Werte, hingegen zeigten sich total falsche Werte zwischen -5dBm und 0dBm. Hätte ich früher noch einmal genau ins Datenblatt geschaut, wäre mir wohl aufgefallen, dass der maximale Inputlevel bei -3dBm liegt, folglich die ganze Berechnung falsch läuft, wenn ich 0dBm als obere Referenz einspeise. Als dann die Kalibrierung bei -5dBm und -35dBm erfolge, war alles tiptop. Bis dahin habe ich aber eine Weile wie ein Rohrspatz geflucht; schliesslich war ich es mir von den anderen Log-Detektoren gewohnt, mit 0dBm als oberen Messwert zu kalibrieren; aber bekanntlich: keine Regel ohne Ausnahme.
Wie schon bei meinem anderen Powermeter können mehrere Referenzpunkte auf unterschiedlichen Frequenzen angelegt werden, um das nichtlineare Verhalten des Chips über den ganzen Frequenzbereich etwas zu kompensieren, wobei das selbstverständlich begrenzt ist, da sich die Eingangsimpedanz bis in den oberen Grenzbereich von etwa 8GHz recht stark verändert - bis soweit hinauf steht mir derzeit aber ohnehin kein Messsignal zur Verfügung.
Wie es sich für ein Handheld gehört, musste natürlich eine Batterie bzw. Akku rein. Obwohl ich schon seit Jahren für /p LiPos einsetze, dachte ich mir, einen 4-Zell NiMH zu verbauen. Leider stellte sich bald heraus, dass die Laufzeit unter aller Sau war, so dass ich auf einen 1-Zell 1000mAh LiPo umgestiegen bin; mit den heute zur Verfügung stehenden BMS-Chips gibt es nichts Einfacheres als das.
Was allerdings für den portablen Betrieb notwendig ist, wäre ein Timeout für die TFT Hintergrundbeleuchtung, da diese der grösste Stromfresser am ganzen Gerät ist - was ich auf der ToDo Liste für einen Überarbeitung habe.