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 veröffentlichen