NXP TEF6686 auf Arduino

Das Radioforum. Hier dreht sich alles um die technischen Seiten des Radio- und TV-Empfangs.
DXHR
Beiträge: 77
Registriert: Sa 27. Apr 2019, 20:27

NXP TEF6686 auf Arduino

Beitrag von DXHR »

Servus an alle,

ich habe vor Kurzem auf YouTube ein, zwei Videos gesehen, wo der von NXP hergestellte FM-Chip TEF6686 gezeigt wird. Ich kenne diesen Chip von China-Autoradios, wo er laut einigen anderen Foren, verglichen mit den anderen China-Radiomodellen, sehr gute Arbeit leistet. In den Videos wird er allerdings über einen Arduino und einer self-made Software von GitHub gesteuert.

Meine Frage zu dem ist, was ihr davon hält und ob irgendjemand eine Idee hat, wie das Ganze zu realisieren ist?
In meinen Augen sieht das nach einem brauchbaren Empfänger für wenig Geld aus.

Die Videos:
Allgemeine Empfangsdarstellung:
https://www.youtube.com/watch?v=t0UzNTsZdsU

Vergleich mit Sony XDR-F1HD
https://www.youtube.com/watch?v=m8aQ31sZgZU
Standort: Wien
Empfänger: TEF6686 + Arduino, Sangean ATS-909X

DH0GHU
Beiträge: 1262
Registriert: Fr 31. Aug 2018, 15:56

Re: NXP TEF6686 auf Arduino

Beitrag von DH0GHU »

Naja, was ist da zu halten? Man besorge sich das detaillierte Datenblatt, implementiere die I²C-Befehlssätze in einem Arduino (man muß halt programmieren können), baue ein Frontendfilter vor den Chip und einen Audioverstärker hinter den Chip, packe das in ein Layout, bestücke die Platine und fertig.
Die Hauptherausforderung dürfte sein, den Chip einzulöten. 32-Pin HVQFN... vermutlich mit Thermal Pad.
QTH: Obersöchering/JN57OR, zeitweise Kehl/JN38VN
Funkamateur, DLF-Hörer, Multipler Musikgeschmack, DAB-Nutzer. Normal ist normalerweise langweilig.

Mc Jack
Beiträge: 35
Registriert: Fr 31. Aug 2018, 20:03

Re: NXP TEF6686 auf Arduino

Beitrag von Mc Jack »

Endlich mal wieder ein interessantes Thema. 🙂

BTW I2C-Befehlssätze bei NXP-Chips:
Falls jemand jemanden kennt, der den Befehlssatz für den SAF7741 HV/115 liegen hat, darf er mich gerne anschreiben. 😉 Mehr als das Pinning und div. Layouts war bislang nicht aufzutreiben.
Fürs erste wäre ich aber schon zufrieden, wenn ich die RDS-Daten aus dem I2C-String per Seeduino o. ä. auf einem Display zur Anzeige bringen kann. Den vorerst wichtigsten Teil der Daten (PI, RT und Signalstärke) konnte ich mittels etlichen Traces und deren Analyse bereits entschlüsseln. Einen Teil davon hatte(n) ich/wir bereits 2014 gepackt. Nur das 'simple' zur Anzeige bringen ist für mich noch etwas zu hoch. Ich bin leider kein Arduino-Typ, obwohl es vergleichsweise einfach ist.

Es gibt schon seit Jahren etliche Autoradios von Kia/Hyundai mit der Chipsatz-Kombi TEF7000/SAF7741 bzw. SAF7730, die von ihren Besitzern mangels Navi für kleines Geld bei eBay verschleudert werden. Weitere OEM-Radios mit dieser Kombi gibt es von Clarion, die für US-Modelle gefertigt wurden und ebenfalls für eine handvoll $ verkauft werden. Deren Empfangsleistungen und Möglichkeiten sind mit denen der US-Sony XDR absolut identisch, was wir schon vor Jahren in längeren Vergleichen herausfanden. Logisch, es ist ja auch derselbe Kram verbaut. Nur die XDR-Modifikationen, die leider schon seit Jahren Online nicht mehr verfügbar sind, funktionieren wegen unterschiedlicher Controller nicht.

Zusammengefasst:
Wenn bei den erwähnten Radios sich eine kleine Truppe (?) zusammentut und sich den I2c-Kram vorknöpft, müsste man nicht mehr jedes ausgeglühte und die Jahre gekommene XDR-Radio für mittlerweile hunderte Euros aus den Staaten importieren. Zumal die Autoradios mit CD, mp3, tlw. Bluetooth und brauchbaren NF-Endstufen deutlich spannender sind als die US-XDRs, bei denen noch das Deemphasis- und 110V-Problem hinzu kommt. Bastelgeschick vorausgesetzt. Traces von einem Kia-Radio kann ich GB-weise anbieten. Teile der entschlüsselten Daten auch.

Wie wär's? 🙂
Den Mutigen gehört die Welt.

carkiller08
Beiträge: 432
Registriert: Fr 31. Aug 2018, 17:01
Wohnort: Sachsen-Anhalt

Re: NXP TEF6686 auf Arduino

Beitrag von carkiller08 »

Der Sourcecode von Konrad Kosmatka für den XDR-F1 liegt noch bei Github.
https://github.com/kkonradpl
https://github.com/kkonradpl/xdr-i2c

Auszug https://github.com/kkonradpl/xdr-i2c/bl ... xdr_f1hd.h
DSP_I2C 0x38
#define DSP_I2C 0x38
#define IF_I2C 0xC4

#define DSP_FALSE 0x000
#define DSP_TRUE 0x7FF

#define DSP_RDS_STATUS 0x000030
#define DSP_RDS_DATA 0x000031
#define DSP_RDS_CONTROL 0x000035

#define DSP_FM_LEVEL_FAST 0x030092
#define DSP_FM_LEVEL 0x030097
#define DSP_FM_MULTIPATH 0x030099
#define DSP_AM_LEVEL 0x03006E
#define DSP_VOLUME_SCALER 0x031011
#define DSP_FORCE_MONO 0x031020
#define DSP_ST_19kHz 0x03102C
#define DSP_ST_THRESHOLD 0x03128D
#define DSP_DEEMPHASIS 0x0311D7

#define DSP_ULTRASONIC_NOISE 0x0100D2
#define TDSP1_X_CIBW_1_FirCtl 0x0101A1
#define TDSP1_X_CIBW_1_FirCtlFix 0x0101A2
#define TDSP1_X_CIBW_1_pFirCtl 0x0101A3
#define TDSP1_X_CIBW_4_FirCtl 0x0101A4
#define TDSP1_X_CIBW_4_FirCtlFix 0x0101A5
#define TDSP1_X_CIBW_4_pFirCtl 0x0101A6
Das dürfte hauptsächlich den DSP betreffen.


Die Hauptherausforderung dürfte sein, den Chip einzulöten. 32-Pin HVQFN... vermutlich mit Thermal Pad.
Zumindest das ließe sich mit so einem TDQ-230V-186 bzw. anderen Modul vermeiden :
http://www.xfa-module.net/products.php?pid=86
http://www.xfa-module.net/products_list.php?prid3=49

Die-GitHub-Seite aus dem oben verlinkten Video hat auch das Datenblatt dabei:
https://github.com/makserge/tef6686_radio

Andi_Bayern
Beiträge: 152
Registriert: Fr 31. Aug 2018, 17:49
Wohnort: München

Re: NXP TEF6686 auf Arduino

Beitrag von Andi_Bayern »

DH0GHU hat geschrieben:
Mi 20. Nov 2019, 09:06
...
Die Hauptherausforderung dürfte sein, den Chip einzulöten. 32-Pin HVQFN... vermutlich mit Thermal Pad.
Ja, mit Thermal Pad, siehe das PDF mit den Daten des Package "HVQFN32 / SOT617-3": https://www.nxp.com/docs/en/package-inf ... T617-3.pdf

carkiller08 hat geschrieben:
Fr 22. Nov 2019, 00:32
...
Die-GitHub-Seite aus dem oben verlinkten Video hat auch das Datenblatt dabei: https://github.com/makserge/tef6686_radio
Das ist aber "nur" das User Manual mit der Beschreibung der Register, aber kein Datenblatt das die Beschaltung des Chips beschreibt.

Viele Grüße,
Andi
DAB-Playersoftware für Noxon-Stick & Co.: https://www.ukwtv.de/cms/downloads-asid ... gsinn.html
Support-Forum: https://www.rundfunkforum.de/viewtopic.php?f=11&t=55891

Standort: München-Bogenhausen

carkiller08
Beiträge: 432
Registriert: Fr 31. Aug 2018, 17:01
Wohnort: Sachsen-Anhalt

Re: NXP TEF6686 auf Arduino

Beitrag von carkiller08 »

Das Vorhandensein eines Datenblattes bezog sich nur auf das Tuner-Modul TDQ-230V-186 , wo der TEF6686 ja drin steckt.

Der Tuner hat Anschlüsse für die I²C-Bus zur Steuerung SDA(5) und SCL(4) , Audio-Ausgänge R(9)+L(10) , +5V Betriebsspannung (7) und den Antenneneingang(1) . Kenntnisse zur genauen Beschaltung des TEF6686
werden nicht benötigt, wenn man so einen Tuner verwendet.

Den TEF6686 gibt es einzeln ab ca. 3,50€. Tuner mit dem TEF6686 bereits für ca. 6$ bis 10$ (China).

ullibg
Beiträge: 315
Registriert: Fr 31. Aug 2018, 16:59

Re: NXP TEF6686 auf Arduino

Beitrag von ullibg »

Standort: 10E14 / 51N49, 360m ü. N.N., LdKr. Osterode/Harz
UKW-FM PORTABEL: Blaupunkt Panda CC (SHARX),Hyundai i10 Autoradio(Serie), 9-ELE. Eigenbau nach P.Körner, 9.2 nach Körner von Antennenland
DAB+ : Roberts expression mit Teleskopantenne

carkiller08
Beiträge: 432
Registriert: Fr 31. Aug 2018, 17:01
Wohnort: Sachsen-Anhalt

Re: NXP TEF6686 auf Arduino

Beitrag von carkiller08 »

Hat schon mal jemand versucht, den Programmcode von https://github.com/makserge/tef6686_radio
in der Arduino IDE zu kompilieren und war damit erfolgreich ?

Als ich das heute probiert habe, gab es Fehlermeldungen beim Kompilieren der Tuner_Api.cpp und Tuner_Interface.cpp. Alle 10 Dateien lagen dabei in einem eigens angelegten Ordner "Radio".

Mehrere verschiedene Tuner mit den TEF6686 liegen ansonsten inzwischen hier.

carkiller08
Beiträge: 432
Registriert: Fr 31. Aug 2018, 17:01
Wohnort: Sachsen-Anhalt

Re: NXP TEF6686 auf Arduino

Beitrag von carkiller08 »

Inzwischen habe ich das Programm von https://github.com/makserge/tef6686_rad ... ster/radio
auf einen Mega2560-Board dank weiterer Informationen zum Laufen bekommen.

Dazu waren einige Änderungen und Ergänzungen notwendig.
Siehe hierzu die Kommentare unter https://youtu.be/t0UzNTsZdsU

Die Empfangsleistung ist schonmal vielversprechend.

Allerdings hat der Ersteller des YT-Videos die PI-Funktion
in Eigenregie durch Änderung des Originalprogramms erhalten.

Sprich: Das Originalprogramm gibt im Terminalfenster PS und RT aus, aber kein PI.

Der RDS-Datenblock A mit dem PI-Code wird offenbar über den Programmcode in der Datei TEF6686.cpp bereits mit aus dem TEF6686 ausgelesen (ab Zeile 141) , aber nicht weiterverarbeitet. Die Ausgabe der Daten an das Terminal läuft dann via Serial.print über das "Hauptprogramm" radio.ino und müsste angepasst werden.

Andi_Bayern
Beiträge: 152
Registriert: Fr 31. Aug 2018, 17:49
Wohnort: München

Re: NXP TEF6686 auf Arduino

Beitrag von Andi_Bayern »

carkiller08 hat geschrieben:
So 24. Nov 2019, 11:28
Das Vorhandensein eines Datenblattes bezog sich nur auf das Tuner-Modul TDQ-230V-186 , wo der TEF6686 ja drin steckt.

Kenntnisse zur genauen Beschaltung des TEF6686 werden nicht benötigt, wenn man so einen Tuner verwendet.
...
Leider kann man mit den fertigen Modulen nicht alle Funktionen des Chips nutzen:
- Audio wird nur analog angeboten, der Chip könnte es auch digital (I²S)
- Der TEF6688 hat auch noch einen Ausgang für die digitalen Basisband I/Q Daten.

Siehe Blockdiagramm (aus dem "Short Datasheet" von NXP):
TEF668x_blockdiagram.png

Viele Grüße,
Andi
DAB-Playersoftware für Noxon-Stick & Co.: https://www.ukwtv.de/cms/downloads-asid ... gsinn.html
Support-Forum: https://www.rundfunkforum.de/viewtopic.php?f=11&t=55891

Standort: München-Bogenhausen

Andi_Bayern
Beiträge: 152
Registriert: Fr 31. Aug 2018, 17:49
Wohnort: München

Re: NXP TEF6686 auf Arduino

Beitrag von Andi_Bayern »

carkiller08 hat geschrieben:
So 24. Nov 2019, 11:28
Das Vorhandensein eines Datenblattes bezog sich nur auf das Tuner-Modul TDQ-230V-186 , wo der TEF6686 ja drin steckt.
...
Kenntnisse zur genauen Beschaltung des TEF6686 werden nicht benötigt, wenn man so einen Tuner verwendet.
Nach etwas Suchen im Netz hat sich das Service-Manual des Pioneer AVH-X7700BT gefunden, in dem ein TEF6686 steckt. Auf Seite 120 ... 121 ist die Pin-Belegung und Beschaltung des Chips zu finden.
AVH-X7700BT_120-121.png
Viele Grüße,
Andi
DAB-Playersoftware für Noxon-Stick & Co.: https://www.ukwtv.de/cms/downloads-asid ... gsinn.html
Support-Forum: https://www.rundfunkforum.de/viewtopic.php?f=11&t=55891

Standort: München-Bogenhausen

carkiller08
Beiträge: 432
Registriert: Fr 31. Aug 2018, 17:01
Wohnort: Sachsen-Anhalt

Re: NXP TEF6686 auf Arduino

Beitrag von carkiller08 »

Um nochmal auf die Ausgangsfrage des TE zu kommen:

Inzwischen liegen soweit alle Infos vor, um es so wie in den YT-Videos zum Laufen zu bringen.

* Benötigt werden somit folgende Haupt-Komponenten:

- Tuner mit TEF6686-Chip (Es gibt verschiedene Modelle, die sich im verbauten Quarz unterscheiden. Dies muss im Arduino-Sketch berücksichtigt werden!)
- Arduino MEGA2560 Board mit passenden USB-Kabel
- ein paar Widerstände und Kondensatoren , isolierter Draht/Litze
- optional Antennenbuchse (empfehlenswert)

* Verdrahtung und Teileliste siehe https://youtu.be/cv-REJTlisM


* PC-Software
-Arduino IDE https://www.arduino.cc/en/main/software
-Terminal-Programm ( z.B PuTTY -> https://www.chiark.greenend.org.uk/~sgt ... atest.html )

* Arduino-Programmsketch
- Download von https://github.com/makserge/tef6686_radio durchführen und die 10 Dateien aus dem 'radio'-Ordner in einen
Sketch-Ordner namens 'radio' auf dem PC kopieren
- Arduino-IDE starten und 'radio.ino' aus den Sketch-Ordner öffnen.
- Korrektur von Programmfehlern laut Kommentarbereich aus https://youtu.be/t0UzNTsZdsU und ggf. Anpassung der Quarzfrequenz im Tuner

1) Datei: Tuner_Interface.cpp -> Zeile 4

Code: Alles auswählen

TwoWire Wire2 (I2C_PORT, I2C_FAST_MODE);
ändern in

Code: Alles auswählen

TwoWire Wire2;
2) Wenn man den Sketch testweise kompillert, wird in mehreren Dateien ein Fehler 'delay' was not declared in this scope' angezeigt.
In diesen Dateien ist folgende Zeile am Anfang zu ergänzen :

Code: Alles auswählen

#include arduino.h
3) Wenn man einen Tuner verwendet ,in dem kein 9,216MHz-Quarz verbaut ist, muß noch eine kleine Änderung vorgenommen werden.
Dies betrifft u.a die Tuner von https://de.aliexpress.com/item/32809641460.html mit 4,000MHz-Quarz

In der Datei 'Tuner_Interface.cpp' ist für die 4,000MHz-Version folgende Zeile zu ändern:

Code: Alles auswählen

9, 0x40,0x04,0x01,0x00,0x8C,0xA0,0x00,0x00,0x00,//APPL_Set_ReferenceClock
für 9,216MHz-Quarze
in

Code: Alles auswählen

9, 0x40,0x04,0x01,0x00,0x3D,0x09,0x00,0x00,0x00,//APPL_Set_ReferenceClock
für 4,000MHz-Quarze

Der Scetch kann jetzt auf das Mega2560 Board hochgeladen werden, wenn eine PI-Code-Anzeige nicht benötigt wird
Für eine PI-Code-Anzeige müssten 3 Dateien getauscht werden:

https://pastebin.com/qhvFLk4T
https://pastebin.com/yU6frk0M
https://pastebin.com/LJFLA0yd

Darauf achten , dass die Dateinamen stimmen.
radio.ino.txt ändern in radio.ino
tef6686.h.cpp ändern in tef6686.h
tef6686.cpp.cpp ändern in tef6686.cpp

Diese 3 Dateien ersetzen die gleichnamigen Dateien im Sketch-Ordner
Danach den Sketch mit der Arduino-IDE erneut öffnen
Ich musste nur noch eine kleine Änderung machen, weil die Lautstärke sich nicht reduzieren ließ:
in der Datei radio.ino von fmdxbp steht 'byte volume' (0..255) statt 'int volume' (auch negative Werte).

Nach Hochladen des so geänderten Sketches auf das MEGA2560-Board kann die Arduino IDE beendet und PuTTY gestartet werden.
Einstellung seriell , speed 115200 und als com-Port COM... wird die Nummer wie in der Arduino IDE bzw im Geräte-Manager eingetragen.

Es erscheint dann 'Begin' im Programmfenster und ansonsten die Anzeige wie unter
https://youtu.be/t0UzNTsZdsU

Steuerung
a Tune +
b Tune -

u Search+
d Search-

+ Vol+
- Vol-

m Mute
n Unmute
Die Anzeige der Signalstärke ist mit wenigen zusätzlichen Zeilen im Sketch auch möglich.


---


Alternatv-Programm:
Es gibt einen weiteren Sketch zur Steuerung des TEF6686, der auch auf kleineren Boards wie Seeduino / Arduino Uno und
zusammen mit Konrad's XDR-Software läuft. Allerdings ist da keine RDS-Anzeige dabei.

https://translate.google.de/translate?h ... rev=search
Dateiname: cr6686_i2c.zip

In einem aktuellen YT-Video hat jemand daher eine Erweiterung für die Nutzung von RDS Spy realisiert ( RDS-CLK und RDS-Data auf
zwei GPIO gelegt per Programmierung). Wenn man so etwas plant, wäre ggf ein anderer Tuner mit 19 Anschlüssen empfehlenswert, bei dem 2 GPIO-Anschlüsse nach außen geführt werden.

siehe
https://youtu.be/IIi_cKDiN6k

gs2006
Beiträge: 8
Registriert: Sa 4. Mai 2019, 19:48

Re: NXP TEF6686 auf Arduino

Beitrag von gs2006 »

@carkiller08: Erst mal vielen Dank für die ausführliche Anleitung! Meine Module aus China sind letzte Woche eingetroffen und warten nur noch darauf, verdrahtet zu werden :) . Mein Ziel ist letztendlich eine DX-Logging-Station, die vor sich hin werkelt, während ich z.B. in der Arbeit bin.

Ich hätte allerdings noch eine Frage zu den Kondensatoren im Verdrahtungsplan: wie ich das (naiv) sehe, sollen die irgendwelche schnellen Wechselspannungs-Anteile auf Masse ziehen... spielt da der exakte Wert der Kapazitäten eine Rolle? Ich habe nämlich in meinem Fundus keine 15 µF (nur 10) und 3.9 µF (nur 4.7). Das dürfte doch eigentlich keine Probleme bereiten, oder?

carkiller08
Beiträge: 432
Registriert: Fr 31. Aug 2018, 17:01
Wohnort: Sachsen-Anhalt

Re: NXP TEF6686 auf Arduino

Beitrag von carkiller08 »

Die benötigten Kondensatoren haben Werte von 15nF und 3,9nF (Nanofarad), nicht µF.
Das sollten Keramik-oder Folienkondensatoren sein, keine Elkos.

Es spricht nichts dagegen, etwas andere Werte wie 10nF oder 4,7nF zu nehmen.
Die beiden Konensatoren an der SDA und SCL-Leitung haben 47pF (Pikofarad).

gs2006
Beiträge: 8
Registriert: Sa 4. Mai 2019, 19:48

Re: NXP TEF6686 auf Arduino

Beitrag von gs2006 »

Ah sorry, die µF waren natürlich Tippfehler :). Aber danke für den Hinweis! Ich werde die Schaltung nachher mal aufbauen.

Antworten