Wie gut sind COB-LEDs?

Chip on Board-LED-Module – mittlerweile in Flutern sehr weit verbreitet und sehr günstig zu beschaffen.

Da ich bei einer Aufräumaktion eine Schreibtischleuchte (noch mit Leuchtstofflampen und fehlendem Treiber) ergattern konnte war der erste Gedanke: Umrüsten auf LED.

Im Asiamarkt (ok, eBay) gab es 4 Module – 2x warmweiß und 2x kaltweiß – für nicht ganz 6 Euro bei nicht einmal 2 Wochen Versand:

Leider sind Module mit 2700 K Farbtemperatur eher selten, also ca. 3250 K und 6250 K. Aber warum überhaupt verschiedene Werte? Kaltweiß ist besser, um Farben neutral zu sehen, warmweiß ist angenehmer für’s Auge. Allerdings muss man dazu sagen: es ist nur die halbe Wahrheit. Ein wichtiger ist der CRI. Echte weiße LEDs gibt es nicht, es handelt sich in aller Regel um blauen LEDs, die bestimmte Farbstoffe anregen und je nach Material ist das Spektrum und damit die Farbwiedergabe unterschiedlich – aber das nur am Rande.

Um die Spannung und Ströme der Streifen gering zu halten, sind die LEDs in mehrere Stränge, meist mit der Länge 3 angeordnet. Bei einer Flussspannung von 3,2 Volt sind das 9,6 Volt, mit einem Vorwiderstand haben die meisten Streifen eine Betriebsspannung von 12 Volt. Das ist bei den meisten COBs meist nicht der Fall. 4 LEDs in Reihe, mehrere dieser Stränge parallel und fertig. Durch Fertigungstoleranzen schwanken die Vorwärtsspannungen ein bisschen, das kann man im Griff haben aber das kostet natürlich. Bei einigen hundert LEDs für 6 Euro: never ever.

Aber wie schlecht sind sie wirklich? Der Test funktioniert relativ einfach: LED an eine Spannungsquelle anschließen und die Spannung so weit erhöhen, bis sie leicht zu glimmen anfangen – bei den gekauften Exemplaren war das bei 9 Volt:

Montage von 4 Fotos bei gleicher Belichtungszeit

Die Belichtung wurde so eingestellt, dass möglichst keine Übersteuerung der Farbkanäle stattfindet, hat auch fast geklappt.

Man sieht gewisse Ungleichmäßigkeiten, not too bad, not too good either. Richtiges Binning hat auf keinen Fall stattgefunden.

Die Leuchtpunkte der unteren LED wurden ausgeschnitten, ausgerichtet und durch ein kleines Python-Script (mit pillow statt pil) gejagt:

from PIL import Image
im = Image.open('P1120207.png', 'r')
width, height = im.size
pixel_values = list(im.getdata())

y = 8

for x in range(0, width):
px = pixel_values[width*y+x]
print(str(px[0]) + "\t" + str(px[1]) + "\t" + str(px[2]))

Das Script spuckt die RGB-Werte der 8. Zeile aus. Auch wenn der blaue Farbkanal am ehesten heraussticht, ist es besser den grünen zu verwenden – weniger Clipping und durch Chroma-Subsampling (besser kein JPEG verwenden) und des Bayer-Pattern ist grün einfach besser ;).

Aus Excel kam dann folgendes Diagramm:

Mit ein bisschen Phantasie erkennt man die Stranglänge. Die Aussagekraft des Diagramms ist zugegebenermaßen etwas eingeschränkt: Es ist kein kalibriertes System sondern eher ein Schätzeisen aber es reicht für einen groben Vergleich: Es gibt einen ausreißenden Strang (nach oben) und einige LED-Chips in den Stränge, die deutlich darunter liegen. Grundlegend ist die Bewertung mit dem Diagramm aber etwas besser möglich als durch das Ansehen der Bilder, da der Faktor subjektive Wahrnehmung verringert wird und Nuancen in Helligkeitsunterschieden besser erkennbar sind.

Mal sehen, wie sich die Streifen dann im tatsächlichen Einsatz machen…

MCP2221 mit C# – aber schnell.

Nachdem die Python-Lib ganz gut funktioniert (ein paar Bugs habe ich bereits gefunden, Fixes stehen noch aus), wollte ich die Implementierung auch in C# umsetzen. Zwar gibt es von Microchip schon eine Lib, allerdings ist diese nicht Native und auch nicht open source und dadurch auf bestimmte .NET-Versionen eingeschränkt.

Um das Rad nicht neu erfinden zu müssen, wollte ich zumindest für die USB-HID-Kommunikation eine fertige Bibliothek verwenden. Bei der Suche bin ich auf HidLibrary gestoßen, die zwar nicht mehr so aktiv gepflegt wird – aber das muss nicht unbedingt viel bedeuten. Ja, auch Software kann mal fertig sein 😉

Heruntergeladen und die ersten Funktionsblöcke geschrieben. Als ersten Test habe ich i2c_detect portiert und laufen lassen. Für 127 Adressen dauert der Scan knapp über 17 Sekunden. Mit Microships MCP2221 I2C/SMBus Terminal sind es nicht ganz 11 Sekunden und mit meiner Python-Lib unter 0,7 Sekunden. Was ist da los?

Im ersten Schritt habe ich mit System.Diagnostics.Stopwatch die Schreib und Lesezeiten gemessen – jeweils braucht die Lib im Schnitt 21 ms, für jeden Probe einer Adresse sind zwei Schreib-/Lesezyklen erforderlich, kommt kein ACK für eine Adresse ist ein weiterer Zyklus für ein i2c_cancel erforderlich. Macht für einen Proben einer nicht genutzten Adresse ca. 126 ms, für 127 Adressen sind das bisschen über 16 Sekunden – kommt also hin.

Visual Studio kann Performance-Analysen und der schuldige ist schnell gefunden:

Es hängt also am HidLibrary.HidDevice::IsConnected bzw. EnumerateDevices.

Auf GitHub gibt es (Stand November 2018) auch Bugs zum Thema Performance.

Die Tickets existieren seit 2011, 2014 und 2016 – also besteht offenbar kein Interesse, das zu fixen. Ein User namens kaczart hat eine Lösung gefunden.

Um im ersten Schritt nicht zu viel zu verbasteln, habe ich einfach mal „IsConnected“ ein einstweiliges „return true;“ verpasst. Nun benötigt ein Schreibvorgang um die 3,4 ms und ein Lesevorgang knapp 2,3 ms. Unterm Strich dauert der Scan nun 2,5 Sekunden. Besser aber noch nicht gut genug.

In anderen „Projekten“ hat mir in Sachen Timing gerne mal der Debugger in die Suppe gespuckt, also mal als Release ausgeführt und Tadaa: 0,78 Sekunden. Fast so schnell wie die Python-Implementierung.

Um es nochmal genau zu wissen habe das „return true;“ aus HidDevice::IsConnected wieder entfernt und als Release ausgeführt: 14 Sekunden.

Der Hund liegt also definitiv in der Lib begraben. Workaround, Fixen, nach Alternativen suchen oder selber machen (oder einfach eine Weile abhängen lassen und etwas anderes machen)?

Mal sehen.

Was der MCP2221 sonst noch kann

Es gibt Dinge, die Zeit verschwenden, nicht richtig funktionieren und schlussendlich nicht einmal einen Sinn ergeben. Manche nennen das sogar Hobby.

Nachdem mir im Zuge der MCP-USB-Bridges keine Python-Implementierung so richtig gefallen habe, bin ich gerade dabei, selbst eine zu schreiben und mehr oder weniger ausgiebig zu testen.

GPIOs, ADC funktionieren so wie es aussieht genz gut, heute war der DAC dran.
So richtig toll ist er nicht, aber besser als nichts. Um Seine Leidensfähigkeit zu zeigen, musste ein kleines Beispiel her.

Warum nicht einfach so etwas ähnliches wie einen Hellschreiber implementieren? Nur halt extrem ranzig.

In Python geht das ordentlich schnell und einfach:

txt = "Hallo Welt!"

vals = [22,20,18,16,14,12,10,8]

meh = []
for c in txt:
    meh.extend(font[ord(c)-32])
    meh += [0]

for col in meh:
    for reps in range(4):
        curcol = col
        for y in range(8):
            if curcol & 1 == 1:
                dev.dac_setvalue(vals[y])
            else:
                dev.dac_setvalue(0)
            curcol >>= 1
            time.sleep(0.003)

Die Font liegt in als Liste vor, die alle wichtigen Zeichen ab dem Leerzeichen enthält. Vals beinhaltet die Analogwerte der jeweiligen Bits der Zeichen (in der Höhe). Der Text wird sprichwörtlich in eine Bitmap umgewandelt und einfach über den DAC rausgejagt. Damit die Zeichen etwas besser lesbar sind, werden sie 4 mal wiederholt. Die kurze Pause ist nötig, weil sich sonst der MCP verhaspelt.


Ist das nun Kunst oder kann das weg? 😉

Teardown von Trådfri

Eigentlich habe ich mich nur in der Ausfahrt vertan – was bin ich nur für ein Dussel. Weil ich aber schon dort war, habe ich mir etwas mitgenommen: Die billigste verfügbare Lampe mit Funkanbindung (GU10 mit 400 lm, 803.652.70) und einen drahtlosen Dimmer (003.478.31), der eine relativ interessante Funktionsweise hat: Man kann ihn in quasi beliebiger Raumlage drehen (liegend oder an der Wand klebend) – die Halterung braucht man dafür nicht. Daher meine Vermutung: Da muss ein mindestens ein Drehratensensor (Gyroskop) oder gar ein Kompass drin sein.

Der Hauptgrund des Einkaufes war – zumal es in meiner Wohnung keine Leuchten mit GU10-Lampen – eher ein Teardown, da ich online bis jetzt noch nichts finden konnte.

Nimmt man das „User-servicable“ Gehäuse vom Dimmer ab, bekommt man folgendes zu Gesicht (klick macht wie immer groß):

Die Typenbezeichnung ist also neben der Ikea-Nummer ICTC-G-1. Obwohl das Gehäuse den Anschein macht, als wäre es Ultraschall-verschweißt, ist es nur geklipst. „Built to a price“, das Schweißen wäre ein zusätzlicher Produktionsschritt und die Spritzguss muss sowieso ran. Mit einem Schraubendreher lassen sich die Gehäuseteile vorsichtig trennen.

Das Rückteil ist weniger spektakulär – ein Magnet und eine Kontaktfeder für die Batterie. In der anderen Hälfte steckt die „Magie“:

Der Codename für das Leiterkärtchen ist allen Anschein nach „Nebula_1F“. Ich bin kein Trekkie, aber ist das eine Anspielung auf eine Schiffsklasse? Halbwegs futuristisch ist die Bedienung immerhin…

Hirn und Herz ist ein Silabs EFR32 MG1P132GI. Für ein Datenblatt sollte man den Suchbegriff auf „EFR32MG1“ einschränken: „Mighty Gecko Mesh Networking Wireless SoCs for Zigbee and Thread“-Produkt-Familie beim Hersteller.

Leider hört es da auch schon fast auf. der IC rechts unten (mit der Aufschrift „I4BEB2 P10343“) dürfte ein EEProm sein (nachdem der Gecko wohl keinen internen hat), bei den oberen beiden (Aufdruck „S2 636“ und „628“) dürfte es sich vermutlich um Magnetometer und Gyro handeln. Letzteres vermutlich eher links oben, da diese Komponenten meines Wissens etwas höhere Pulsstromaufnahmen (schließlich muss die Mikromechanik angeschubst werden) haben.

Schön an den Geckos ist, dass man die Pins ziemlich komfortabel auf die gewünschten Funktionen routen kann, für’s Reverse Engineering ist das allerdings nicht so ganz schön.

Wenn man die Leiterbahnen etwas verfolgt erkennt man, dass es die Leiterkarte mehr als 2 Lagen hat, halbwegs erstaunlich, bei der vergleichsweise geringen Komplexität. Bei der Leiterkartenproduktion wurde das aber wieder reingeholt: Die Leiterkarte ist gestanzt statt gefräst und das Material sieht eher billig als günstig aus. Immerhin sind die Kontakte vergoldet und es wurden einige Testpunkte spendiert – da wird sicher ein I²C dabei sein.

Objekt 2 ist, wie oben geschrieben, eine GU10-Lampe:

Der Deckel bzw. die Optik geht erstaunlich leicht runter, Innen sieht es erstaunlich unspektakulär aus:

Ein herumflatterndes Kupferfähnchen? Sieht nach einem late fix zum Bestehen der EMV-Prüfungen aus. Das LED-Modul hat keine Wärmeleitpaste im Rücken und die leicht verklebte Metallplatte lässt sich mit sanfter Gewalt (mit dem Schraubendreher am Schraubloch hebeln) herausnehmen. Dahinter begrüßt einen die Elektronik – oder zumindest das Funkmodul.

Es sieht besser aus als es ist. Ich bin mir nicht sicher, ob das Shielding seinen Namen verdient hat, es wackelt wie ein Kuhschwanz. Eine saubere elektromechanische Verbindung sieht auf jeden Fall anders aus. Ein bisschen mehr hebeln und das Innere erblickt das Tageslicht:

Das Silabs-Logo lässt sich erahnen, links unten sitzt auch ein „alter Bekannter“. Bin mir ziemlich sicher, dass es sich hier um einen EEProm handelt. Im Bild sieht man auch, dass das Modul by design eher bescheiden eingelötet ist: unter der linken Kante sitzt ein SMD-Widerstand, unter der rechten nicht. Da man sowas maschinell nicht vernünftig gelötet bekommt: Messer rein, Gedärme raus. Natürlich: Modul rein, Lötzinn-Raupe drüber.

Mit ein bisschen Zug kommt auch das Netzteil + Controller raus. Es ist hinten nicht verlötet und sieht von oben zwar sehr eng gepackt aber dennoch halbwegs ok-ish aus:

Von unten sollte man es – zumindest wenn man Elektroniker ist und einen schwachen Magen hat – besser nicht ansehen. Verdammt viele Handlötungen, mehr Lötzinn als mir lieb ist und noch mehr ekelhafte Flussmittelrückstände:

Der 5-Beiner oben ist mit ZR7IB beschriftet (kein Datenblatt auffindbar). Das Beuteil im SO-8-Gehäuse heißt BEH7JB (auch nix zu finden). Die Qualität dieser Leiterkarte ist leider nicht wirklich rühmlich.

Einen High-Pot-Test würde ich angesichts solcher Lötstellen nicht unbedingt machen:

Chirp mag keine Staunässe

Eine längere Zeit überwachten Chirp zwei meiner Topfpflanzen.

Nachdem Topf 2 deutlich größer (und vor allem tiefer) ist, zirpte der Sensor sehr früh, weshalb ich nach dem Prinzip „aus zwei mach eins“ die Sensorfläche deutlich vergrößerte.

Funktionierte etwas besser aber nicht ganz so gut wie erhofft. Dazu kommt, dass die Pflanze an einem eher schattigen Plätzchen steht, wodurch eher geblinkt als gezirpt wurde.

Irgendwann war ich dann mal im Urlaub und Mutti hat das Gießen übernommen und anscheinend (vielleicht war’s auch ich) die Elektronik mitgewässert.

Also: gar kein Zirpen/Blinken mehr, also wieder nach Gefühl (viel zu viel) gegossen aber den Sensor in der Erde gelassen. Irgendwann hab ich ihn dann doch herausgezogen und dann war auch klar, warum das Teil nicht mehr funktioniert:

Der Grund für die zwei Flachbandkabel: das eine – klar – das Programmierinterface (das hier auch für die Stromversorgung mit zwei AA-Zellen verwendet wurde), das andere zu einem NR24L01+-Modul. Ja, die Chirps haben funken gelernt, sind aber noch nicht in einem Zustand, in dem ich es veröffentlichen möchte.

Am Batterieclip lag die ganze Zeit Spannung an und dementsprechend ist das Teil sprichwörtlich abgefault:

Auch auf der anderen Seite haben sich an der Stromversorgung Kristalle gebildet:

Leider war ich in Chemie nie ’ne Leuchte, könnte also nicht sagen was zu was reagiert hat.

Erstaunlicherweise hat sich der Lötstopplack so ziemlich nur auf dem Kupfer gelöst:

Das Kupfer darunter war noch erstaunlich blank:

Trotzdem, da muss ich mir überlegen, wie das Teil besser vor dem Milieu im Blumentopf geschützt werden kann.

Deckel über die Elektronik geht nicht, wegen der LED a. k. a. Lichtsensor, Coating geht auch nicht, weil sonst die Batterie nicht mehr getauscht werden kann.

Für die Sensorfläche wäre die Frage: Welcher Lack ist naturverträglich und hat möglichst wenig Einfluss auf die kapazitive Messung? Hmm.

Seid vorsichtig!

Es ist verdammt kalt draußen. Am 27.02.2018 um 20:40 Uhr zeigt das Thermometer -13 °C. Es ist verdammt trockene Kälte. Die Heizungen und Klimaanlagen leisten zusätzlich noch ihren Beitrag. In meinem „Empire of dirt“/“Nerdcave“ herrschen 19 % relative Luftfeuchte, so man dem Hygrometer überhaupt noch trauen kann. In der Arbeit waren es heute morgen (gleicher Sensor und Disclaimer) 17 % rH. Dank ESD-Schlappen und leicht ableitenden Böden hat es dort nie gebritzelt. Es wäre mitunter teuer wenn doch. Nur die Schleimhäute und Hände leiden massiv unter der extrem trockenen Luft.

Daheim habe ich aufgehört, die Entladungen zu zählen. Auch wenn momentan leider keine Zeit zum Basteln bleibt (zum Glück habe ich im vorletzten Beitrag kein Datum versprochen), musste ich nackte Elektronik anfassen und habe mich dementsprechend oft und gezielt entladen. Obwohl mein Kleiderschrank nur sehr wenige Kleidungsstücke mit Neigung zur Ladungstrennung beinhaltet, hat es bei fast jeder Berührung geknackt.

Daher kann ich nur raten: Seid aktuell vorsichtig beim Basteln! Macht nichts kaputt und ärgert euch so richtig, wenn es doch passiert. Ich hab euch gewarnt 🙂

Die Anschaffung einer ESD-Matte kann kann günstiger sein, als das was man im Zweifel kaputt macht und schont gleichzeitig den Tisch.

Es geht weiter

Zugegebenermaßen: es passiert hier so wenig, dass man in Hinblick auf den vorletzten Post schon fast von falschen Versprechen ausgehen könnte. Aber: Es passiert nicht nichts, es geht einfach nur verdammt langsam voran. (warum muss ich nur an das Zitat „es ist nicht undicht, es läuft über“ denken…?)

Um zu zeigen, dass es nicht ganz Schall und Rauch ist:

Aber das ist nicht alles. Bis wann die Software und der zugehörige Artikel fertig ist, kann ich noch nicht versprechen. Ein paar Wochen halte ich für realistisch 🙂

Das „Custom Programming Tool“ in Atmel Studio

Schon länger gibt es in Atmel Studio die Möglichkeit, ein eigenes Programming tool zu verwenden:

Hat mich bis jetzt nie wirklich interessiert, da ich entweder über einen in-circuit-Programmer (der direkt unterstützt wird) flashe oder FastBoot manuell startete.

Zu viele Klicks bzw. Tastaturakrobatik. Also doch mal mit dem bereits Vorhandenem spielen.

echo „foo“ macht was es soll:

Prima, also kann ich einfach die burn.bat im Projektverzeichnis einfügen und los geht’s!

Nope. Da passt wohl das Arbeitsverzeichnis nicht. Aber wie kommt man ins aktuelle Projektverzeichnis? Zunächst versuchte ich mich an den Platzhalter der „External Tools“. Allerdings wurde „$(ProjectDir)“ zu leer ersetzt.

Hmpf. Für die Buildautomatisierung gibt es noch die Build Events – klickt man dort auf „Edit #-build …“ und dann auf Show Macros, bekommt man eine längere Liste an Platzhaltern:

echo „$(MSBuildProjectDirectory)“ zeigt das aktuelle Projektverzeichnis 🙂

also schnell „$(MSBuildProjectDirectory)\burn.bat“ eingegeben und ab dafür!

Jaa-eein. Die Batch-Datei wird zwar ausgeführt, aber im falschen Arbeitsverzeichnis. Mist.

Eine kurze Suche bei Stack Overflow lässt in das richtige Verzeichnis wechseln:

cmd /k pushd $(MSBuildProjectDirectory) & burn.bat

It verks!!1!

Jetzt steht in der dämlichen Batchdatei halt noch der feste Pfad zum Binary und es wird immer die Debug-Config über den UART geschoben. Ein bisschen mehr Makro-Magic und ein %1 an der richtigen Stelle (die zu flashende Datei) mit folgendem Command erledigt den Job:

cmd /k pushd $(MSBuildProjectDirectory) & burn.bat „$(Configuration)\$(OutputFileName).hex“

Da in der burn.bat in meinem Fall eh nicht mehr als ein Aufruf von fboot.exe ist, kann die Batch-Datei auch komplett weggelassen werden:

cmd /k pushd $(MSBuildProjectDirectory) & fboot /B57600 /C1 /P“$(Configuration)\$(OutputFileName).hex“

Jetzt müsste man nur noch die Ausgabe des Build und des Custom programming tool gleichzeitig anzeigen können, dann wäre ich richtig happy 😉

PS: Bitte beim Copy & Paste der Befehle die Anführungszeichen manuell ersetzen, WordPress macht sie typografisch korrekt aber funktional kaputt.

Es bewegt sich was

Aber leider etwas langsam.

Ich hab aktuell ein paar Baustellen offen. Zum einen bin ich daran, ein Reverse Engineering an einem Autoradio durchzuführen, um Fehler – die der Hersteller tunlichst nicht fixen will – zu beseitigen. So gut wie alle relevanten Teile des Schaltplans sind rekonstruiert, dabei wurden sogar noch ein paar Designfehler entdeckt.

Leider blockt mich gerade ein wenig die Tatsache, dass die meisten Datenblätter unter NDA liegen und die I2C-Kommunikation zwischen Application Processor und Audioprozessor nicht ganz trivial ist.

Baustelle 2 ist beim Prozeda-Decoder. Nachdem die Anfrage reinkam, ob das auch mit einem Raspberry Pi funktioniert, dachte ich mir: Warum auch nicht? Mit echter Hardware auf dem Tisch, die mir freundlicherweise von einem Besucher bereitgestellt wurde, konnte ich mir ein paar Dinge nochmal genauer ansehen. Es gab auf jeden Fall einen Erkenntnisgewinn, jetzt muss ich es „nur noch“ dokumentieren.

Für den Minichirp gibt es hoffentlich auch bald ein Update, nachdem die ersten Versuche an der Hard- und Software vielversprechend sind. Nur so viel: der aktuelle Projektname lauter „ChirpRF“.

Als ob das nicht schon genug wäre, möchte ich jetzt endlich diese verdammte Wetterstation angehen, nachdem es im Sommer an den nRF-Modulen bzw. deren Durchdringung gescheitert ist, soll es jetzt ein CC1101 richten. Um mit diesem und den Sensoren schneller zu Rande zu kommen, gibt es zusätzlich Randprojekte: USB auf I2C und SPI. Das allerdings mit den Wandlerchips von Microchip, zu denen ich eine gewisse Hassliebe pflege. Beide funktionieren (irgendwie), es fehlt aber auch hier noch die Doku.

Es wird also nicht langweilig. Bis dahin für euch leider mal wieder Warteschleifenmusik…

…und er loggt doch.

Nachdem ich gestern nun die Dose des Neo geöffnet habe, gab es nichts mehr zu verlieren.

Da die Leiterbahn zum (de-)aktivieren des externen Flashs auch unter dem GNSS-Chip mit Masse verbunden ist, muss der erst einmal runter. Ich habe zwar schon einen BGA mit knapp 1200 Balls und extremer thermischer Masse erfolgreich getauscht, allerdings mit entsprechendem Equipment. Bei Tausch von kleinen QFNs habe ich mich bis jetzt aber erstaunlich blöd angestellt. Entweder zu viel Flussmittel oder zu viel Lötzinn. Dabei tanzt der Chip beim Erhitzen lustig vor sich hin, senkt sich aber nicht richtig ab. Dann ist ein Re-Rework fällig. Schlecht fürs Material aber meistens klappt es.

Aber zuerst muss der IC runter. Mit Heißluft bei etwa 380-400 °C und niedrigem Luftstrom (damit es keine anderen Bauteile wegpustet) um die Bauteile kreisen um die Komponenten nicht zu schnell zu erwärmen. Kurz nachdem das noch vorhandene Flussmittel verflüssigt, sieht man auch eine leichte Glanzveränderung am Lötzinn – der „sweet spot“ zum Herunterpicken der Bauteile ist kurz danach.

Nach etwas Geduld zum Abkühlen der Leiterkarte sieht man, dass nur ein einziger verdammter Pin mit der Massefläche verbunden ist. Man muss nicht raten, welcher das ist:

Mit etwas Flussmittel und Entlötlitze kommt das bleifreie Zeug zunächst runter, um es anschließend mit einer dünnen Neuauflage Sn60Pb40 zu ersetzen. Dabei habe ich den Pads außenherum mehr Zinn gegeben als der Massefläche unter dem Chip. Natürlich darf das Auftrennen der Masseverbindung zu Pin 29 nicht fehlen. Wer den Unterschied zwischen bleifrei und bleihaltig nicht kennt: Bildvergleich – bleifrei (oben) ist ziemlich matt, bleihaltig glänzt deutlich stärker:

Zwischen dem Verzinnen und wieder Bestreichen mit Flussmittel einmal mit Isopropanol waschen – Beim Ent-, Ver- und wieder Entzinnen entsteht Zunder und manchmal backt das Flux fest – das will man nicht unter Bauteilen haben. Anschließend ist der Chip dran, der ebenfalls vom Bleifrei-Lot befreit wird. Mit dopptelseitigem Klebeband auf dem Tisch bleibt er auch nicht am Lötkolben hängen.

Hier im Prozess: vertrocknetes Flux und noch nicht ganz verzinnte Pins. kleine Zinnkleckse auf der Massefläche (hier rechts oben) sollten entfernt werden, da sie den Lötprozess stören.

Nun kann der IC wieder platziert und verlötet werden. Wieder mit Heißluft mit wenig Pust und schön warm. Das Ergebnis ist gut aber nicht perfekt – der Käfer ist etwas verschoben, was aber kein Problem sein sollte:

Um vorab zu testen ob der Empfänger noch funktioniert, habe ich Pin 29 wieder gebrückt und das Modul mit Strombegrenzung (!) an den PC angeschlossen. Alles kommt hoch und nach ein paar Minuten habe ich einen GPS-Fix. Zu Glonass-Empfang lässt sich das Teil aber nicht bewegen, vielleicht aufgrund des fehlenden Shieldings?! 😉

Ok, Grundlegend funktioniert es also, aber wird der Empfänger auch mit externem Flash spielen? Ich konnte einen QSPI-Flash von Winbond ergattern. Mal schauen, ob es funktioniert.

Laut Hardware Integration Manual des UBX-G7020 (!) ist die Anschlussbelegung wie folgt (ob sie auch mit dem M8030 funktioniert?):

  • PIO0 (25) -> DI/IO0
  • PIO4 (26) -> CLK
  • PIO2 (27) -> !WP/IO2
  • PIO1 (28) -> DO/IO1
  • PIO5 (29) -> !CS
  • PIO3 (30) -> !HOLD/!RESET/IO3

GND sollte klar sein, Vcc habe ich aus Ermangelung anderslautender Tatsachen einfach an die Versorgung des Chipsatzes geklemmt.

Wieder ans Netzteil mit Strombegrenzung geklemmt: Keine Auffälligkeiten – was aber noch nicht heißt, dass es auch funktioniert. Die Wahrheit erfährt man erst, wenn man den Speicher nutzen kann, also ran an den PC und u-center wieder öffnen. Die Firmware findet sich – im Gegensatz des vollen Datenblatts – auf der Website von u-blox. Nach Anstoßen des  Updates und nicht ganz einer dreiviertel Minute warten liegt schon fast ein NEO-M8N auf dem Tisch (wären da nicht die Fädeldrähte):

Nun funktioniert auch das Logging – Mission accomplished! 🙂