Forum: Projekte & Code DIY UKW-Receiver mit Padauk PFS154 und RDA5807


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ralph S. (jjflash)


Angehängte Dateien:

Bewertung
6 lesenswert
nicht lesenswert
Für die einen ist es Schrott, für die anderen der wohl billigste 
Selbstbau UKW-Radio der Welt !
----------------------------------

Okay, nicht so ganz so ernst nehmen (auch wenn ich in "freudiger 
Erwartung" derer die die "du machst nur Schrott-Schreiber" bin, hier das 
bisherige Ergebnis mit den Experimenten mit dem Padauk PFS154 (und weil 
in einem Nachbarthread eben gefragt wurde, was das Radio den so kann):

Schaltplan hier im Anhang zu sehen, die notwendigen Dateien sind 
ebenfalls im Anhang hier zu finden.

Die Binärprogramme, die das Makefile aufruft sind für 64-Bit Linux 
geschrieben und sollten wohl auf allen Linux-Derivaten laufen.

Als Compiler wird ein installierter SDCC 4.03 erwartet.

Zusätzlich zu dem Radio sind im Archiv noch Quellcode enthalten für:

- blinkende LED mit delay
- blinkende LED mit Timerinterrupt
- 16- und 20- Digit charliegeplexte LED
- I2C Bus mittels Bitbanging (wird auch vom Radio verwendet)
- i2C Bus-Scanner
- Portexpander mit PCF8574 (I2C)
- UART mittels Bitbanging (Transmit und Receive implementiert)
- mein obligatorisches "my_printf" (welches hier für mich sogar sehr 
notwendig war, weil ich für den Padauk keinen Debuger habe und mir das 
in Verbindung mit UART bei der Fehlersuche geholfen hat).

--------------------------------

Ich werde wohl dieses "Mini-Framework" für den Padauk weiter ausbauen 
mit den Dingen, die für mich sinnvoll sind.

Video vom Radio gibt es hier:

https://www.youtube.com/watch?v=UotCtPmJTLY

von Ralph S. (jjflash)


Bewertung
1 lesenswert
nicht lesenswert
... ach so ja, vergessen habe zu erwähnen: Bauteilekosten (ohne 
Netzteil, ohne PCB oder Steckbrett) liegen bei unter 50 cent (nach 
Bauteileorderung von www.lcsc.com)

------------------------

für mich ist es allerdings ein teures Radio geworden, weil ich sämtliche 
50 georderte Controller verschlampt habe und nicht mehr finde ... :-(

von Tim  . (cpldcpu)


Bewertung
1 lesenswert
nicht lesenswert
Super Projekt!

Hier gibt es übrigens eine assembleroptimierte print_int funktion, die 
noch ein paar bytes sparen könnte:

https://github.com/cpldcpu/SimPad/blob/master/Toolchain/library/PDK_softuart.c

Aber anscheinend passt es ja auch schon so in einen PFS154

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Hi Tim,

deine Assemblerfunktionen hatte ich schon zuvor gesehen gehabt und ich 
finde die gut gemacht.

Einzig: ich habe mich so an meine eigene Version von printf gewöhnt 
(nicht "nur" eine Integerausgabe), dass ich die für mich verwende. 
Wieviel Bytes die jetzt wirklich schluckt weiß ich nicht mehr aus dem 
Handgelenk, aber ich war erstaung, wie wenig das ist.

Meine printf-Version in Verbindung meiner UART-Funktionen hatte glaube 
ich so nicht ganz die Hälfte des Flashspeichers benötigt gehabt, so dass 
noch einiges für eine Anwendung vorhanden ist.

Sollte der Speicher knapp werden, kann ich das Parsing von printf 
weglassen und nur meine Integerausgabe herausnehmen.

Bspw. kann ich eine "Pseudokommazahl" mit dem von mir eingeführten 
Formater %k ausgeben:

printfkomma= 1;           // eine Nachkommastelle
my_printf("Zahlenwert: %k", 2318);
my_printf("Hexzahlenwert: 0x%x", 33);

gibt dann aus:

Zahlenwert: 231.8
Hexzahlenwert: 0x21

--------------------------------------------------

Mal sehen, was so alles mit dem Winzling geht, heute realisiert: 2 
stellige gemultiplexte 7-Segmentanzeige, die ich dann mit der nächsten 
Aufgabe kombinieren möchte:

Der PFS154 soll eine (halbwegs stabile) Konstantstromquelle schalten 
(bestehend aus Transistor, 2 Widerständen und einem Kondensator) und die 
Kondensatorrampe wird dem Komparator zugeführt um daraus einen (sehr 
einfachen) ADC zu machen.

Desweiteren werkel ich parallel dazu an einer Textmode IDE (wie ich sie 
für mich schon länger verwende), die zu großen Teilen aus der IDE des 
FreePascal / FreeVision besteht.

Ziel ist es, einen Ordner in ein beliebiges Verzeichnis zu entpacken und 
darin kann dann für den PFS gewerkelt werden (hierfür wird dann die 
benötigten Dateien vom SDCC auch in diesen Ordner kopiert und das 
Makefile ruft den Compiler relativ zu diesem Ordner auf, so dass der 
SDCC nicht wirklich installiert werden muss).

Schaun ma mal !

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Ich hatte mir auch mal ein Suchlaufradio fürs Bad gekauft. Ich habs in 
den Müll geschmissen, so ein Suchlauf ist einfach die Krätze.

Wenn ich das Datenblatt richtig verstehe, kann man auch die Kanalnummer 
direkt setzen. Es sollte also möglich sein, mehrere Speichertasten 
anzuschließen, um seine Lieblingssender auswählen zu können. Und über 
RDS sollte sich auch der Sendername bequem anzeigen lassen.

Der Chip sieht ja nicht schlecht aus, man kann sogar bei schwachen 
Sendern auf Mono schalten. Kann heute kaum noch ein Radio.
Wie ist denn so die Empfangsqualität im Vergleich zu einem herkömmlichen 
Radio?

von Thomas N. (tonevi)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ja, das ist richtig, die Kanalnummer lässt sich direkt setzen. Ich hatte 
mich vor 2 Jahren mal mit dem RDA5807 Modul befasst und hierbei ein 
Design nach ähnlichem Prinzip wie hier, aber mit fest eingespeicherten 
Frequenzen und für einen ATtiny44 erstellt. Zu finden hier:

http://tneveling.bplaced.net/radiobasteln.html

Die dort erwähne Variante mit OLED zeigt mittlerweile auch RDS Text und 
Uhrzeit an (siehe Foto).

von Gerd E. (robberknight)


Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> - Portexpander mit PCF8574 (I2C)

Ein PCF8574 ist um ein Vielfaches teurer als der PFS154.

Wäre es nicht besser hier auch einen PFS154 (oder anderen Padauk) als 
Portexpander zu verwenden?

Ein langsames I2C target müsste in Software eigentlich auch auf einem 
Padauk machbar sein. Oder wenn nicht, dann ein alternatives Protokoll 
verwenden.

Der Padauk hat im Vergleich zum PCF8574 den Vorteil echter 
Push-Pull-Ausgänge.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Bewertung
-1 lesenswert
nicht lesenswert
Ralph S. schrieb:
> verschlampt habe und nicht mehr finde ... :-(
Da mußte ich gleich einen Pluspunkt vergeben. :)
Guter Thread.

Der HXJ8002, wenn einer der Widerstände nicht im IC wäre, könnte dieser 
als Stereoverstärker verwendet werden. Aber wenn man Bias abtrennen 
würde und dort mit einem Widerstand inverse einkoppeln könnte, wäre 
vielleicht eine Zweckentfremdung vielleicht doch möglich.

Bei dem Preis nimmt man natürlich besser zwei Verstärker.

von Ralph S. (jjflash)


Bewertung
1 lesenswert
nicht lesenswert
Peter D. schrieb:
> Ich hatte mir auch mal ein Suchlaufradio fürs Bad gekauft. Ich habs in
> den Müll geschmissen, so ein Suchlauf ist einfach die Krätze.

Sagen wir es mal so: ein "komfortables" Radio sollte Suchlauf, manuelle 
Senderwahl und Stationstasten haben. Richtig gut wirds dann, wenn er 
noch DAB+ und Internetradio zum UKW hat und eine gute Endstufe mit 
wertigen Lautsprecherchasis.

Den Aufwand hierfür kann man richtig nach oben treiben.

Der Suchlauf hier von diesem Teil funktioniert allerdings wirklich gut.

Peter D. schrieb:
> Wenn ich das Datenblatt richtig verstehe, kann man auch die Kanalnummer
> direkt setzen. Es sollte also möglich sein, mehrere Speichertasten
> anzuschließen, um seine Lieblingssender auswählen zu können.

Es wäre dann möglich, hätte der Controller einen Flash oder ein internes 
EEProm dass man zur Laufzeit beschreiben könnte um zur Laufzeit eben 
Stationstasten zu belegen.

Im übrigen verwendet das Programm nicht die integrierten Möglichkeiten 
zum Sendersuchlauf, sondern ich verwende die empfangene Feldstärke. D.h. 
ich stelle die Lautstärke stumm, stelle neue Kanalnummer ein, frage 
Feldstärke ab und wenn diese nicht unter einem vorgebbaren Level liegt 
hört die Suche auf und die Lautstärke wird wieder eingeschaltet.

Mir ging es wie gesagt darum zu schauen, ob ich das Radio grundsätzlich 
mit dem PFS154 hinbekomme.

Peter D. schrieb:
> Der Chip sieht ja nicht schlecht aus, man kann sogar bei schwachen
> Sendern auf Mono schalten. Kann heute kaum noch ein Radio.
> Wie ist denn so die Empfangsqualität im Vergleich zu einem herkömmlichen
> Radio?

Die Empfangsqualität ist erstaunlich gut und das erzeugte NF-Signal hört 
sich gut an (früher hatte ich mal einen Testsender und eine 
Klirrfaktormeßbrücke, die steht mir nicht mehr zur Verfügung, so kann 
ich da nur "sensorisch" mit meinen Ohren bewerten).

Die Antennenempfindlichkeit könnte etwas besser sein, deswegen hatte ich 
mal einen einfachen Antennenverstärker hierfür gemacht gehabt:

Beitrag "Re: FM Radio Modul RDA5807M"

Peter D. schrieb:
> RDS sollte sich auch der Sendername bequem anzeigen lassen.
Sollte zwar gehen und jemand hat das scheinbar schon gemacht gehabt, 
aber ich bin daran bisher gescheitert, den RDA5807 hatte ich schon an 
AVR, STM8 und STM32F030.

Jemand hat das wohl schon hinbekommen wie oben jemand geschrieben hatte 
und ich muß mir das mal wieder anschauen.

Thomas N. schrieb:
> ja, das ist richtig, die Kanalnummer lässt sich direkt setzen. Ich hatte
> mich vor 2 Jahren mal mit dem RDA5807 Modul befasst und hierbei ein
> Design nach ähnlichem Prinzip wie hier, aber mit fest eingespeicherten
> Frequenzen und für einen ATtiny44 erstellt. Zu finden hier:
>
> http://tneveling.bplaced.net/radiobasteln.html
>
> Die dort erwähne Variante mit OLED zeigt mittlerweile auch RDS Text und
> Uhrzeit an (siehe Foto).

Mit einem Tiny44 hatte ich das im Rahmen eines kleinen Frameworks und 
dem preiswerten I2C - OLED Display schon gemacht gehabt:

Beitrag "Re: (sehr) kleines "FrameWork" für ATtiny44"

ein RDS (wie oben allerdings geschrieben habe ich noch nicht ausgewertet 
bekommen, hier interessiert mich deine Lösung und ich schau mir das mal 
dann genauer an).

Gerd E. schrieb:
> Ein PCF8574 ist um ein Vielfaches teurer als der PFS154.

Stimmt, es geht mir ja darum, mögliche Funktionalitäten auszuloten. Der 
PCF8574 ist der einfachste I2C Chip den ich kenne und mit dem kann ich 
dann gut testen, ob der Bus funktioniert oder nicht.

So werde ich bspw. auch Code für einen TM1637 (u.a. vierstellige 
7-Segmentanzeige) für den PFS154 portieren wobei es preiswerter ist, mit 
dem PFS154 einen Anzeigetreiber zu realisieren (und das behalte ich 
jetzt mal so im Kopf: 4-stellige 7-Segmentanzeige mit seriellem 
Dateneingang nach RS232-Protokoll)

Gerd E. schrieb:
> Wäre es nicht besser hier auch einen PFS154 (oder anderen Padauk) als
> Portexpander zu verwenden?
>
> Ein langsames I2C target müsste in Software eigentlich auch auf einem
> Padauk machbar sein. Oder wenn nicht, dann ein alternatives Protokoll
> verwenden.

Diese Überlegungen habe ich bereits schon, wobei ein I2C Slave bei mir 
wohl herausfällt, da wohl die Resourcen nicht so ganz reichen. Vllt. mit 
einem eigenen Protokoll wie das CPLDCPU Tim mit seiner skalierbaren 
7-Segmentanzeige gemacht hat.

Dieter D. schrieb:
> Der HXJ8002, wenn einer der Widerstände nicht im IC wäre, könnte dieser
> als Stereoverstärker verwendet werden.

Na ja, smile: wenn, hätte, könnte ! Der 8002 ist grundsätzlich als 
Brückenendstufe konzipiert und solcher auch zu nutzen. Der Vorteil hier 
ist eine hohe Ausgangsspannung an jedem Verstärkerzweig nahe der 
Versorgungsspannung und ultra preiswert.

Wenn ich keinen Kopfhörerbetrieb habe, würde ich mit 5V keinen 
Stereoverstärker ohne Brückenschaltung haben wollen, weil die 
Ausgangsleistung dann wirklich richtig klein ist.

Hierfür gibt es andere sehr preiswerte "Endstufen" im 8-pol. Gehäuse.

Dieter D. schrieb:
> Bei dem Preis nimmt man natürlich besser zwei Verstärker.

Smile: Genau (und wie gesagt ist hier dann eben auch die max. Leistung 
um bis zu Faktor 4 höher: doppelte Ausgangsspannung = 4-fache 
Ausgangsleistung)

von Bernd (Gast)


Bewertung
-1 lesenswert
nicht lesenswert

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Bernd schrieb:
> Hier ein Projekt aus einer höheren Liga:
>
> 
https://www.heise.de/news/Mit-2-Euro-SDR-Chip-Arduino-wird-zum-Weltempfaenger-4941272.html

Es gibt ewig viele Projekte und auch Projekte zum Thema Radio. Hrmpf, 
hier habe ich aber nur einen Port für PFS154 vorgestellt. Mehr nicht !

Warum nur muß man dann auf eine "höhere" Liga (was ist das überhaupt ?) 
verweisen, die weder mit dem PFS154 noch mit dem RDA5807 etwas zu tun 
haben?

Zu dem Heise-Artikel:

Ich kenne den SI4730, ich kenne 1,8" Displays (obwohl das auf dem 
Aufmacherfoto des Heise-Artikels ein 1,44" Display 128x128 Pixel ist), 
ich kenne Arduino und ich kenne Impulsdrehgeber.

Da ist genau so viel außergewöhnliches dabei wie mit jedem anderen 
Artikel, hier ist wenigstens der verwendete Controller relativ neu. 
Abgesehen davon steht im Heise Artikel: Baukosten ca. 20 Euro (bei 
vorhandenem Arduino), das Radio hier hat Baukosten < 50 Cent, inklusive 
des Controllers !

Von daher: preislich spielt das SI4730 Radio wirklich in einer anderen 
Liga !

von Thomas N. (tonevi)


Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
anbei wie angefragt der C-Code für das RDA5807 Radio mit RDS Funktionen 
(ATtiny45). Der RDS Text wird ungefiltert als Laufschrift ausgegeben,
was in der Praxis recht gut funktioniert; selten erscheinen falsche 
Buchstaben. Eine entsprechende Assembler Implementierung ist mir 
ebenfalls gelungen, nicht jedoch die Auswertung der Block Error Register 
des RDA5807 zur Fehlerkorrektur. Wenn hierzu jemand Erfahrungen hat, 
wäre das interessant für mich.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Ralph S. schrieb:
> Mit einem Tiny44 hatte ich das im Rahmen eines kleinen Frameworks und
> dem preiswerten I2C - OLED Display schon gemacht gehabt:

An den ATtinyx4 habe ich auch gedacht. Oder den ATmegax8A mit 32kHz 
Quarz als RTC.
Damit könnte man sich ein schönes Weckradio basteln. Fast alle 
käuflichen Weckradios gestatten leider nicht die 10-er Tastatur als 
komfortable Weckzeiteingabe. Man muß sich mit den hoch/runter-Tasten 
abquälen.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Thomas N. schrieb:
> Eine entsprechende Assembler Implementierung ist mir
> ebenfalls gelungen

Ich sehe hier keinerlei Vorteile, die Assembler hätte.
Danke für den C-Code, den werde ich mir mal ansehen.
Warum hast Du das I2C nicht auch in C geschrieben?

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Thomas N. schrieb:
> anbei wie angefragt der C-Code für das RDA5807 Radio mit RDS Funktionen
> (ATtiny45).

Auch von mir ein Dankeschön für die RDS-Funktionen. Den Code werde ich 
mir ansehen (wenn ich auf den Padauk keine Lust mehr habe) und ihn 
höchstwahrscheinlich für STM8 portieren (weil mein kleines Kellerradio 
als Controller den STM8 drin hat).

von Thomas N. (tonevi)


Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Warum hast Du das I2C nicht auch in C geschrieben?

... pure Faulheit ;-)

Ihr seid sicher im Vergleich zu mir die erfahreneren C-Codierer. 
Verbesserungsvorschläge sind daher willkommen.

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
Thomas N. schrieb:
> ... pure Faulheit ;-)
>
> Ihr seid sicher im Vergleich zu mir die erfahreneren C-Codierer.
> Verbesserungsvorschläge sind daher willkommen.

Absolut erlaubt. Warum das Rad immer neu erfinden, du hast halt Software 
von Peter Fleury verwendet und diese funktioniert und höchst 
wahrscheinlich ist der erzeugte Code auch kleiner als der von mir.

Aber ich freu mich, dass ich in deinem Radiocode immer noch Teile von 
meinem ursrünglichen entdecke !

Grundsätzlich: erlaubt ist, was funktioniert (und dein Radio 
funktioniert ja)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.