Mittwoch, 9. September 2020

ITT Radiowecker CR220 mit iRadio und Lorenz C2 Simulation

 

 
Dieser Umbau sollte mal wieder eine Lorenz C2 Skalensimulation erhalten.
das ist der elegante Radiowecker, das 3,5"-Display hatte ich schon montiert:


an Druckteilen waren nötig: 2 Blenden um das Display in den ursprünglichen Uhrenausschnitt einzupassen und 4 Halterungen welche die Blenden und das Display mitsamt dem aufgesteckten Raspberry zusammenhalten.  


und dann noch 2 seitliche eingeleimte Führungen für das Display damit es auch zur Seite fixiert ist:


Die Blenden haben auf der Innenseite eingeschmolzene M3 Gewindeeinsätze an denen die Halteklammern verschraubt sind.

So sah mein erstes Konzept aus. Ein Raspberry zero mit USB-Adapterpeitsche und USB-Soundkarte. Passt alles wunderbar ins Gehäuse, das Display konnte ohne Rotation der Darstellung betrieben werden:



Mit diesem Aufbau installierte ich also nun die Lorenz C2 Simulation. Das Display wurde mittels LCD-show eingebunden.  Es zeigte sich allerdings daß die SPI-Schnittstelle zum Display für eine X11-Animation viel zu langsam ist. Ich setzte dann stattdessen ein HDMI-Display ein.

Hier ein Vergleich der beiden Einheiten:


Jetzt war der zero nicht mehr einsetzbar, weil die HDMI-Buchsen nicht zusammenfinden:


Also ersetzte ich den zero gegen einen 3B. Damit dessen USB-Anschlüsse nach innen zeigen war jetzt doch eine Softwaredrehung des Bildschirmes nötig. Dann kam ich auf die Idee die Klinkenbuchse des Display zur Soundausgabe zu nutzen. Diese liefert den wesentlich besseren HDMI-Ton. Die seitlichen Anschlüsse werden nun wegen dem Wegfall der USB-Soundkarte nicht mehr belegt und ich konnte die Einheit wieder rumdrehen.

die Neuinstallation war erst mal ein Chaos. Ich benutzte erstmalig den "Raspberry Pi Imager for Windows", ein kleines Programm, welches während des Ladens der aktuellsten Betriebssystemversion schon flasht. Das beschleunigt den Schreibvorgang deutlich.

wir sehen hier: es gibt wieder ein neues image, datiert vom 20.8.2020, also erst ein paar Tage alt. Nach dem Schreibvorgang geschahen seltsame Dinge. Die boot-Partition erschien nicht mehr unter Windows. Ich konnte also auf dem Weg nicht meine Dateien zur Installation einspielen (wlan, playlist, SSH). Im Raspberry fuhr das System normal hoch, aber /boot war schreibgeschützt!

Der Rasperry Pi Imager bietet weitere Auswahlen, und ich versuchte es dann mit dem Image "Raspberry Pi OS Full :

Dieses image verhielt sich dann wie gewohnt und ich konnte endlich installieren.

Das Display installierte ich wie im lcdwiki angegeben mit dem MPI3508-Treiber von LCD-Show. 

Der erste Teil der Simulation (Internetradio) ist schon fast fertig. Ich bin beim Uhrendesign geblieben weil das Radio ja auch noch eine konventionelle Skala hat.

das nächste Video:

Internetradiobetrieb, Stby-Betrieb mit Uhr, Weckzeiteinstellung.

(Originalton aus bekannten Gründen unkenntlich gemacht)


die gpio-Belegung:

stby_rotary.c:

#define  RoAPin    23  // GPIO-Pin 13, Pinnummer 33
#define  RoBPin    24  // GPIO-Pin 19, Pinnummer 35
#define  RoSWPin   25  // GPIO-Pin 26, Pinnummer 37

#define  PowerPin  22  // GPIO-Pin 6, Pinnummer 31

rotary_volume.c:

#define  RoAPin    28  // GPIO-Pin 20, Pinnummer 38
#define  RoBPin    29  // GPIO-Pin 21, Pinnummer 40  

PowerPin änderte ich später in:
#define PowerPin 26 // GPIO-Pin 12, Pinnummer 32 

Grund der Änderung:

bestimmte gpios starten mit high-Pegel. Das sind hauptsächlich die I2C und SPI - pin's. Genauer gesagt: gpio 2, 3, 4, 5, 6, 7 und 8. Um zu verhindern dass das Relais schon beim Einschalten anzieht wählte ich einen gpio der mit low-Pegel startet.

 Netzteil und Encoder wurden eingebaut. Die Encoder setzte ich auf die Rückseite in 2 schon vorhandene Bohrungen, wo mal die Einstellachsen der ursprünglichen Uhr rausschauten.
Ein paar Abende hat mich mal wieder die Sucherei nach dem Gefiepse gekostet. Das Fiepsen kommt weder über die NF noch über die Versorgungsspannung. Es wird am NF-Eingang durch die Luft eingefangen. Als Massnahme habe ich das NF-Kabel bestmöglich abgeschirmt und die Gesamtverstärkung der LM386-Schaltung von 200 auf 20 runtergesetzt. Dazu war lediglich ein Null-Ohm Widerstand zu entfernen. Der HDMI-Ausgang liefert genug Ausgangssignal und hat immer noch Lautstärkereserven.


die Encoder bestückte ich mit abgewinkelten Stiftleisten, damit sie am Raspberry vorbeikommen. Für die HDMI-Brücke musste ich an der Rückseite ein bisschen was wegfräsen, ganz ungeschoren ist das Gehäuse also nicht davongekommen.







 



hier war noch eine Relaiskarte nachzurüsten, um im Standby die Betriebsspannung zur NF abzuschalten. Dafür fand sich dann auch noch ein Plätzchen. Was auf dem Bild kaum zu sehen ist ist ein Halterahmen unter den Lochrasterplatinen. Dieser hat eingeschmolzene M2 Gewindeeinsätze und gibt der Gesamtkonstruktion Stabilität.
Das Relais schaltet dummerweise ein wenn man den Eingang auf Masse zieht. Das passte von der Logik her also nicht zum connect der software. Deshalb setzte ich noch eine Transistorschaltstufe dazwischen, hier unterhalb der NF zu sehen.


die Schaltstufe besteht aus einem kleinen npn-Transistor und einem Basiswiderstand 82K. Das Relais ist für open-collector Ansteuerung konzipiert. Also bekommt es seinen open-collector. Geht der gpio auf high schaltet er den Transistor über den Widerstand durch und das Relais zieht an. 

es wäre auch eine Softwarelösung statt der Transistorstufe denkbar:

Zitat Bernhard:

die Logik kannst Du im Quellcode einfach umdrehen.

Zunächst für den BT-Modus:

In der Datei connect müsste


// NF-Stufe an Pin 4 anschalten

gpio mode 4 out

gpio write 4 1

die letzte 1 zu einer 0 werden. Damit wird die Endstufe eingeschaltet wenn ein BT-Gerät gekoppelt wird.

Für den gpiod müssste in stby_rotary.c an folgenden Stellen etwas abgeändert werden:


// zwischen 500 und 1200 ms, an/aus

if ((time_ms_by100 > 5) && (time_ms_by100 < 12)) {

if (bRadioAn) {

       system("echo \"stop\" | nc 127.0.0.1 9294 -w 0");
       system("echo \"stby\" | nc -u 127.0.0.1 6030 -w 0");
       digitalWrite(PowerPin,0);
}

else {

       system("echo \"play\" | nc 127.0.0.1 9294 -N");
       system("echo \"netr\" | nc -u 127.0.0.1 6030 -w 0");
       digitalWrite(PowerPin,1);

}

Oben müsste bei der 0 beim digitalWrite auf den PowerPin eine 1 stehen, unten wird die 1 zur 0

Gleiche Datei weiter unten in der main() 


// Schalter NF-Stufe

pinMode(PowerPin, OUTPUT);
digitalWrite(PowerPin,1);

müsste die 1 zur 0 werden.

Damit der Wecker funktioniert, müsste im Weckerdaemon in der Quelldatei weckerd.cxx an der Stelle


if (ltm->tm_min == wecker.minute) {
     system("echo \"play\" | nc 127.0.0.1 9294 -N");
     system("echo \"netr\" | nc -u 127.0.0.1 6030 -w 0");
     digitalWrite(PowerPin,1);
 }

die 1 beim digitalWrite auf den PowerPin zur 0 werden.

Alles neu compilieren und die Dateien an die richtige Stelle kopieren, siehe Readme.txt zur LorenzC2_V2. Mehr ist zur Umkehrung der Schaltlogik für das Endstufenrelais nicht zu machen.

 

Keine Kommentare:

Kommentar posten