DS1250Y/DS1650Y FRAM Ersatz

Abbildung, erster Prototyp im Programmiergerät

Dieses Projekt ist zwar nicht sehr groß aber trotzdem etwas Besonderes. Zum Einen ist es Teil einer jahrelang vorbereiteten Restaurierung zum Anderen ist anscheinend noch niemand bis jetzt auf die Idee gekommen, einen 5V NVRAM durch einen 3,3V FRAM zu ersetzen bzw. das zu veröffentlichen.

Problembauteile NVRAM

Wer alte Geräte lange Zeit erhalten will, trifft immer wieder auf Chips mit integrierter Lithium-Batterie von „Dallas Semiconductor“, die im Jahr 2001 von „Maxim Integrated“ gekauft wurden, die wiederum 2021 von „Analog Devices“ gekauft wurden. Dabei handelt es sich meist um NVRAMs (non-volatile RAM) oder RTCs (Real-Time-Clocks) mit NVRAM. Die im Chip-Gehäuse integrierte Batterie ermöglicht, dass die Daten im RAM auch nach Abschaltung der Betriebsspannung erhalten bleiben und die RTC weiterläuft. Ein ebenfalls integrierter NVRAM-Controller sorgt für die Umschaltung zwischen Batterie und Betriebsspannung sowie für  Datenschutz beim Ein- und Ausschalten.

Grundsätzlich ist das eine sehr praktische Lösung, da man ein einzelnes Bauteil verwenden kann anstatt einer ganzen Schaltung nebst Batterie. Fatal ist allerdings, wenn nach erfahrungsgemäß etwa 20 Jahren die eingebaute Batterie erschöpft ist. Fast immer ist damit das ganze Gerät nicht mehr funktionsfähig. Die Bauteile werden selbstverständlich nicht mehr produziert. Auch die im Internet gehandelten Restposten sind entweder schon zu alt oder noch häufiger gefälscht. Ich habe selbst zwei Fälschungen erworben. Somit ist der Ersatz mit dem Originalteil keine Option.

Beispielfoto fest eingelöteter NVRAM und RTC
Fest eingelöteter NVRAM und RTC (Tektronix TDS754C CPU Board)

Ersatzmöglichkeiten

Der Ersatz von RTC und NVRAM unterscheidet sich erheblich.

Den NVRAM kann man durch einen entsprechen SRAM mit NVRAM-Controller und Batterie ersetzen. Dazu sind einige Beispiele im Netz zu finden.

Eine andere Variante ist der Ersatz durch FRAM, ein Speicher, der sich wie RAM beliebig schreiben lässt, den Inhalt aber auch ohne Betriebsspannung behält. Auch hierzu gibt es Beispiele mit den FRAM-Typen FM16(W)08 und FM18(W)08 mit 64kBit bzw. 256kBit Größe. Der Charme dieser Lösung ist, dass keine Batterie nötig ist und damit der Speicher wartungsfrei bleibt. Leider sind die beiden genannten FRAM-Typen zwar pinkompatibel mit den Dallas NVRAMs, werden aber etwas anders angesteuert. Damit funktioniert der Austausch leider nicht in allen Geräten.

Eine RTC lässt sich nicht so einfach ersetzen. Die RTC bildet die Uhrzeit auf einen Speicherbereich ab, auf den wie auf „normalen“ RAM zugegriffen wird. Dabei muss der Chip das geforderte Timing exakt einhalten. Das lässt sich nur mittels Dual-Port RAM sicherstellen. Passende Schaltungen habe ich allerdings nicht gefunden. Das wäre mal ein kleines Projekt für die Zukunft. Derzeit gibt es nur die Möglichkeit, eine alte RTC mechanisch aufzubohren und von außen eine neue Lithium-Batterie anzuschließen. Oder man verwendet einen kompatiblen RTC-Chip, der noch als Restposten verfügbar ist. Soweit ich weiß geht das nur für einen DS1486, der durch einen DS1386G incl. RAM und Batterie ersetzt wird.

DS1250Y/DS1650Y FRAM Ersatz

Nun zum corpus delicti. Das Bauteil DS1250Y von „Dallas Semiconductor“ ist ein 4MBit NVRAM. Die pinkompatible Variante DS1650Y verfügt zusätzlich über die Möglichkeit, einzelne Speicherbereiche per Software mit einem Schreibschutz zu versehen. Damit kann der DS1650Y den DS1250Y ersetzen. Umgekehrt geht das nicht in jedem Fall, sondern nur dann, wenn die Software das Schreibschutz-Feature nicht benutzt oder nicht davon abhängt.

Eine kurze Bauteilrecherche nach parallelen 4MBit FRAM fördert lediglich ein einziges Produkt zu Tage, den FM22L16-55-TG. Unglücklicherweise arbeitet der mit maximal 3,3V und hat 16 Bit Datenbreite im Gegensatz zu 5V und 8 Bit beim DS1250Y.

Da fehlen also noch einige Teile, um den FM22L16 anzupassen: Etwas Logik, Level-Shifter, ein Spannungsregler und ein wenig Hirnschmalz. Schwierig beim Entwurf war auch, dass die ganze Schaltung auf eine Platine mit der Größe des Originalteils passen muss.

Schaltung

Nach einigen Tagen Datenblätter lesen und verstehen und Schaltbilder malen war die Schaltung fertig.

Abbildung, DS1250 FRAM Ersatz Schaltbild
Schaltbild

Zum Einsatz kommen ein bidirektionaler Level-Shifter 74LVC8T245 für den Datenbus, ein MCP1700T-3302E Low-Dropout Spannungsregler für die 3,3V Stromversorgung, ein paar Universal Single-Gates für die Steuerlogik sowie Schottky-Dioden und LEDs für die unidirektionalen Level-Shifter der Adress- und Steuerleitungen.

In der ersten Version hatte ich die Pullup-Widerstände R3 bis R5 vergessen was dazu führte, dass die Daten verändert wurden, wenn man den Baustein aus dem Programmiergerät entfernt hat. Ansonsten funktioniert die Schaltung tadellos und erfüllt problemlos die Anforderungen an das Timing des Originals.

Die Unidirektionalen Level-Shifter mit Schottky-Diode plus LED sind noch speziell und auf meinem Mist gewachsen. Ich habe die Schaltung simuliert und festgestellt, dass dieser einfache Weg sicher und schnell funktioniert.

Abbildung, Simulation unidirektionaler Level-Shifter
Simulation Level-Shifter für Adress- und Steuerleitungen

Der Plan ist hier als pdf verfügbar.

Aufbau

Die Schaltung findet auf einer doppelseitigen Platine Platz, die allerdings ca. 1mm breiter ist als das Original Bauteil. In den meisten Geräten ist aber ausreichend Platz dafür vorhanden.

Abbildung, Layout
Platinenlayout

Gerber Files zur privaten Nachbestellung befinden sich hier. Üblicherweise bestelle ich bei JLCPCB. Dort kann man das zip einfach hochladen zum Bestellen. Die Bauteilliste und den Bestückungsplan habe ich hier hinterlegt.

Der Rest folgt als kurze Bildergeschichte:

Abbildung, fertige Platinen sind da und werden bestückt
Fertige Platinen sind da und werden bestückt
Abbildung, Bauteile manuell bestückt und gelötet
Bauteile manuell bestückt und gelötet
Abbildung, Ansicht von unten
Ansicht von unten
Abbildung, Ansicht von unten, nachträglich eingelötete Pull-Up Widerstände manuell mit Draht verbunden
Ansicht von unten, nachträglich eingelötete Pull-Up Widerstände manuell mit Draht verbunden
Abbildung, Ansicht von unten, das Löten der Stiftleiste von der Seite ist etwas knifflig
Ansicht von unten, das Löten der Stiftleiste von der Seite ist etwas knifflig
Abbildung, erster Prototyp im Programmiergerät
Erster Prototyp im Programmiergerät

 

Bekomme Updates per Email

Loading

Bluetooth Audio Receiver mit PCM5102A

Bluetooth Audio Receiver mit PCM5102A

Bei uns im Wohnzimmer steht ein Receiver, der ziemlich genau 50 Jahre auf dem Buckel hat. Der Sony STR-V5 hat richtig Wumms, ist mit Wire-Wrap Verbindungen verkabelt wie frühere Raumfahrttechnik und wird sicher auch noch weitere 50 Jahre funktionieren. Das Problem war nur, dass er mit seinen Cinch-Eingängen nicht mehr mit aktuellen Geräten kompatibel ist, die drahtlos übertragen. Daraus entstand die Idee, für den Receiver einen etwas besseren Bluetooth-Empfänger zu bauen im Passenden Retro-Look. Das Endergebnis ist hier schon mal zu sehen.

Receiver betriebsbereit
Receiver betriebsbereit

Bluetooth-Audio

Vor diesem Projekt hatte ich keine Ahnung von Bluetooth. In meiner Vorstellung klang es recht einfach, die Audiodaten zu übertragen und dann abzuspielen. Leider ist es nicht ganz so. Aufgrund der begrenzten Datenrate einer Bluetooth-Funkverbindung müssen die Daten komprimiert werden. Das übernimmt ein „Codec“. Der muss natürlich der gleiche sein auf der Sender- und der Empfangsseite. Die ältesten und derzeit am weitesten verbreiteten Codecs sind „AAC“ und „SBC“. Audiophile Nutzer waren mit der Qualität dieser Kompression nicht zufrieden, sodass eine Reihe neuer Standards versuchen den Markt zu erobern. Neben „SBC“ und „AAC“ wetteifern nun auch “ aptX“, „aptX HD“ und „LDAC“ um die Gunst des Kunden. Nicht vergessen: Sender und Empfänger müssen den gleichen Codec unterstützen. Wenn man sich z.B. einen Bluetooth-Kopfhörer mit „aptX“ kauft, der Receiver aber „LDAC“ spricht, kommt nur eine Verbindung mit „SBC“ zustande, falls es überhaupt klappt.

Insgesamt ist der Bluetooth-Standard ziemlich komplex und mein Interesse hält sich in Grenzen da noch weiter einzutauchen. Die Software benutzt „SBC“, was von quasi allen Geräten unterstützt wird.

Lautstärkeregelung

Während der Programmierung ist mir aufgefallen, dass die Lautstärkeregelung bei Bluetooth der Knackpunkt ist. Das Grundproblem besteht darin, dass die Audio-Samples mit 16 Bit und üblicherweise 100% Lautstärke übertragen werden. Im Empfänger wird nun die Lautstärke reduziert auf sagen wir mal 35%. Das bedeutet, dass wir die Audio-Samples ungefähr durch 16 teilen müssen. Als Ergebnis haben wir Audiodaten mit einer Auflösung von nur noch 12 Bit. Und genauso hört sich das dann an.

Eine einfache Lösung für das Problem ist ein 32 Bit D/A-Wandler. Die empfangenen 16 Bit Samples werden in 32 Bit Werte umgewandelt, indem einfach Nullen angehängt werden. Das macht erst mal keinen Unterschied. Im zweiten Schritt können wir aber die Lautstärke mit dem 32 Bit-Wert berechnen und diesen dann direkt an den D/A-Wandler senden. Dadurch gibt es keinen Informationsverlust bei geringer Lautstärke, die 16 Bit Information bleiben erhalten.

Über die Geheimnisse einer gefälligen Lautstärkeregelung hatte ich kürzlich einen Artikel geschrieben.

Bauteile

Herzstück der Schaltung ist ein Mikrocontroller ESP32 der Firma Espressif. Das System bietet nicht nur reichlich Rechenleistung für 3,50 Euro, sondern ist auch noch stromsparend. Es gibt sehr viele Code-Beispiele vom Hersteller und lebhafte Diskussionen in Foren, was Anwendungsentwicklung und Fehlersuche erleichtern.

ESP-WROOM-32D Modul
ESP-WROOM-32D Modul

Als hochwertiger D/A-Wandler kommt ein PCM5102A von Texas Instruments mit 32 Bit und 112dB Signal-Rausch-Abstand zum Einsatz. Eigentlich ist der für Bluetooth-Audio viel zu gut, die Vorteile der 32 Bit zahlen sich aber bei der Lautstärkeregelung aus.

D/A-Wandler Board
D/A-Wandler Board

Das ganze wird noch ergänzt durch zwei Taster für Lautstärke und Reset, ein 128×64 Pixel OLED-Display und eine Lochraster-Platine. Bei diesem Projekt verwende ich fertige Module, die nur noch miteinander verbunden werden müssen. Das geht natürlich viel schneller, als ein eigener Platinen-Entwurf.

Bauteile
Bauteile

Schaltung

Da ich für das Projekt fertige Module verwendet habe, beschränkt sich die Schaltung auf wenige Verbindungen des zentralen ESP32 Moduls mit dem OLED-Display, dem D/A-Wandler und den zwei Tastern. Das ganze ist in einer Stunde zusammengelötet.

Verdrahtung Unterseite
Verdrahtung Unterseite
Schaltbild
Schaltbild

Das Schaltbild steht hier als pdf zur Verfügung.

Prototyp
Prototyp
Funktionstest
Funktionstest

Gehäuse

Aus verleimten Sperrholzresten habe ich ein kleines Gehäuse gebaut, was ganz chic geworden ist und für meinen Geschmack und gut zum Sony-Receiver passt.

Gehäuse aus Sperrholz - Vorderseite

Gehäuse aus Sperrholz - Unterseite
Gehäuse aus Sperrholz, Vorder- und Unterseite

Software

Die Software ist abgeleitet vom Beispiel „A2DP-SINK“ des ESP32-Herstellers Espressif. Das hat die Entwicklungszeit sehr verkürzt für mich, da die komplette und ziemlich komplexe Bluetooth-Kommunikation bereits im Beispiel implementiert ist. Ich habe noch eine Verarbeitung der Audio Samples für die Lautstärkeregelung und die Umwandlung von 16 zu 32 Bit hinzugefügt wie oben beschrieben. Außerdem habe ich die Routinen für das OLED-Display ergänzt. Auf dem Display wird der Betriebszustand, das verbundene Gerät und eine logarithmische Pegelanzeige dargestellt.

Am Ende hat die Programmierung und Fehlersuche dann doch deutlich länger als ein Wochenende gedauert, da noch eine Menge Bugs zu finden und zu beseitigen waren.

Den kompletten Quellcode, die Bedienungsanleitung und Anweisungen zum Compilieren des Projektes habe ich auf Github veröffentlicht.

https://github.com/uhucrew/bt-receiver-pcm5102a

 

 

Bekomme Updates per Email

Loading

dsPIC33 Experimente

Wer meinen Artikel Fledermausdetektor gelesen hat, wird sicher den Unterton mitbekommen haben, dass ich nicht ganz zufrieden war mit dem Ergebnis. Das Gerät funktioniert zwar grundsätzlich, ist aber zu unempfindlich. Das hat mich bewogen das ganze noch mal aufzubauen, diesmal mit Digitaltechnik, die der Aufgabe besser gewachsen ist. Zentrales Bauteil ist ein dsPIC33E, ein Mikrocontroller mit DSP-Funktionen von Microchip.

Das Ziel

Die Idee ist, das Ultraschallsignal mit Mikrofonen aufzunehmen, die in dem Bereich empfindlich sind. Das verstärkte Signal wird mit einem AD-Wandler mit mindestens 300kHz Samplingrate eingelesen. Nach einer Spektralanalyse mit FFT wird das Spektrum zunächst auf einem Display ausgegeben. Wenn möglich wird es mit einer inversen FFT und nach Anpassung der Samplingrate wieder hörbar gemacht. Soweit die grobe Idee und wenn das Projekt mit aller Hardware, Software und Mathematik weiter gediehen ist, gibt es hier sicher einen Artikel dazu.

Das Experiment

Zunächst benötige ich also ein kleines System zur digitalen Signalverarbeitung. Am Eingang ein Vorverstärker, AD-Wandler, DSP bzw. schneller Mikrocontroller und am Ausgang wieder ein DA-Wandler. Ein kleines Display sollte auch nicht fehlen. Schön wäre eine Stromversorgung per Batterie, alternativ USB.

Blockschaltbild mit Frontend, AD-Wandler, DSP, DA-Wandler und Stromversorgung

Bauteilrecherchen

Ein solches Projekt fängt immer mit Recherchen zu den verwendeten Bauteilen an. Welcher Mikrocontroller wird gewählt, welche Wandler, Stromversorgung usw. usf. Aus diesen Überlegungen und nach einiger Suche ist dann schon ein recht detailliertes Blockschaltbild entstanden wie oben zu sehen.

Leider sind einige spezielle Bauteile nicht mehr im Handel für Amateure zu bekommen. Den DSP z.B. gibt es nur bei großen überregionalen Distributoren mit ziemlich hohen  Versandkosten oder direkt beim Hersteller. Insgesamt waren glaube ich 3-4 Bestellungen nötig, um alle Teile zu besorgen und wegen der modernen Gehäusebauformen muss man die meisten ICs auf eine kleine Adapterplatine löten, um sie zu einer Lochrasterkarte passend zu machen.

Adapterplatinen für verschiedene TSSOP und SSOP Gehäuse

Prototyp

Einige Bastelabende nachdem die Bestellungen da waren, war der Prototyp soweit fertig, dass ich anfangen konnte, die einzelnen Schaltungsteile zu testen.

Prototyp auf Lochrasterplatine aufgebaut

Es ging los mit dem Oszillator, dann der I2C Bus, Display und AD/DA-Wandler. An der Stelle kam ich etwas ins Stocken. Es ist jedes Mal ziemlich knifflig, eine SPI (synchron serielle Schnittstelle) mit hohen Datenraten zum Laufen zu bekommen. Ich musste mir noch einen neuen Logikanalysator mit 100MHz Auflösung anschaffen, um das Problem zu lösen. Der Grund war, dass der AD-Wandler noch ein Signal /CONVST (conversion start) benötigt, was die CPU nicht schnell genug und vor allem nicht synchron generieren kann. Als Ausweg habe ich das Signal /SS (slavesync) der SPI invertiert und als /CONVST verwendet. Die AD-Wandlung soll ohnehin synchron zur SPI Schnittstelle erfolgen was bedeutet, dass je eine Übertragung auf der SPI-Schnittstelle (/SS) auf eine AD-Wandlung (/CONVST) folgt.

Für die Analyse der Datenübertragung verwende ich PulseView, eine tolle Open Source Software für einige vorwiegend günstige Logikanalysatoren.

Logikanalysator Anzeige für SPI-Schnittstelle des AD-Wandler MAX8328

Nachdem ich die Schwierigkeiten mit einigen Hard- und Software-Änderungen umschifft hatte, war es ein toller Moment, den ersten verzerrungsfreien synthetisch erzeugten Sinus-Ton zu hören.

Software

Die Software habe ich zunächst vorwiegend in C geschrieben. Vom Prozessor-Hersteller gibt es eine tolle Entwicklungsumgebung, „MPLAB® X„, die frei verfügbar ist. Leider hat die freie Version einige Einschränkungen bei den Compileroptionen. Mehr als ein „-o1“ ist nicht erlaubt, was zu relativ langsamem Code führt. Das ist hier aber kein Problem, zeitkritische Dinge werden einfach in Assembler implementiert.
Das auch als Tipp an alle Nutzer von GCC, AVR-GCC etc: Es ist ziemlich einfach, Assembler in C zu integrieren. Man muss lediglich eine Datei mit der Endung „.s“ oder „.S“ dem Projekt hinzufügen. Dabei wird die Datei mit dem großen S noch vom Preprozessor verarbeitet.

Die jeweils aktuelle Software habe ich unter meinem Github-Account zur Verfügung gestellt.

Hardware

Die Hardware ist noch nicht perfekt, aber ganz gut geeignet für weitere Experimente. Immerhin sind  mit dem System 16bit mit 384kHz Mono bzw. 192kHz Stereo Samplingrate als Input möglich und 24bit bei 192kHz Stereo als Output. Dabei ist die CPU mit dem Datentransfer zu nur wenigen Prozent ausgelastet dank DMA-Transfers.

Schaltbild, noch ohne Frontend für Mikrofone und Line-In

Trotzdem würde ich beim nächsten Prototyp einiges verbessern, vor allem, um die SPI Programmierung einfacher zu machen.

  • dsPIC mit I2S Schnittstelle
  • dsPIC mit mindestens 3 SPI Schnittstellen und mehr IO Ports
  • ein größeres Display in Farbe
  • zusätzlicher RAM, evtl. an SPI Schnittstelle

Mehr RAM wäre prima. Das Maximum on Chip für dsPIC33 CPUs sind ca. 50kByte. Ein dsPIC33EP512GP806 im TQFP64 Gehäuse wäre gut geeignet vielleicht aber auch ein 32bit Controller wie der PIC32MZ1024EFH100.

Vorläufig fertiges Experimentierboard mit Programmieradapter und Logikanalysator in Betrieb