Bin heute morgen auf dem Saarlouiser Flohmarkt mehrmals an dem Radio vorbeigegangen. Und immer gedacht: Nein, so einen Riesentrümmer brauch ich nicht. Heute mittag war ich dann mit meiner Frau zufällig wieder in der Stadt und der Weg führte genau durch diese Ecke des Marktes wo der Franzose das Radio anbot. Da stand es immer noch. Ich dachte, fragen kann man ja mal. Fataler Fehler! Jetzt steht es in meinem Keller.
wie man hier sieht haben die Franzosen kein Astloch gescheut:
natürlich gibt es wieder keine Dokumentation. Rm.org führt ein ähnliches Radio, aber mit anderem Röhrensatz:
K242
an dem lassen sich auch die Dimensionen ablesen. Fast ein halber Meter Höhe!
10.04.2018
beim rumräumen gesehen das da noch was lebt. Das konnte ich nicht anstehen lassen.
Hab das Radio dann mal auseinandergenommen:
Die Wurmlöcher hab ich erst mal mit Pressluft ausgepustet. Zumindest 3 der Tierchen kamen mit der Staubwolke raus. Dann hab ich Clou Holzwurmtod in alle Löcher verteilt.
Die Schadstelle auf der Oberseite konnte ich nicht retuschieren. Ich hab dann alles lose rausgeschnitten und die Mulde verspachtelt. Im Moment trocknet eine neue Schicht Furnier. Ich hoffe man kann das so machen, Furnier auf Furnier. Geklebt hab ich mit verdünntem Holzleim. Das sind diese Experimente bei denen man nie weiß wie es ausgeht.
Ich habe das Chassus nur mit Ballistol abgerieben. Brüchige Kabel und defekte Bauteile ersetzt, spielt!
Das Skalenseil ist noch nicht gemacht. Da gehört wegen des dünnen Skalenrades ein Stahlseilchen drauf. Ich weis noch nicht wie ich das ändere. Wollte ja auch UKW reinsetzen, aber die 4 Wellenschalterstellungen gehören alle zu Empfangsbereichen. Und der TA-Eingang ist bei allen Wellen aktiv. Sprich, es gibt zwar den Eingang, aber keine extra Schaltstellung. Ich hab in solchen Fällen schon öfter einen kleinen Umschalter eingebaut, welcher die Heizspannung von der Mischstufe wegschaltet und das UKW-Teil versorgt. Aber es ist immer doof einen Schalter noch irgendwo dazuzusetzen.
Die Skala ist schon seltsam. Sieht aus wie handgemalt:
aktuelle Chassisbilder:
Furnier grob vorgeschnitten, nochmal abgewaschen, Folie dazwischen, dann mit den alten Schraubzwingen meines Opas fixiert.
bevor der Deckel Farbe bekommt lass ich ihn in der Sonne richtig gut austrocknen. Dann hoffe ich das ich ihn gründlich genug geputzt und geschliffen habe damit es keine hellen Stellen gibt.
23.04.2018
das Gehäuse ist mir ganz gut gelungen. Trotz der Leimdurchschläge. Das konnte ich alles wieder rausschrubben. Wenn ich wieder was furniere klebe ich mit Pattex. Im Moment hab ich noch mechanische Arbeiten am Skalentrieb, und dann sind mir noch weitere Ideen gekommen, so daß mich das Monopole noch eine Zeit lang beschäftigen wird.
Es gibt keine TA-Stellung, und einen zusätzlichen Schalter will ich nicht anbringen. Ich will auch keine mechanischen Klimmzüge machen mit Antrieben. Voraussichtlich werde ich µPC-Technik anwenden. Wird noch etwas dauern.
01.05.2018
das UKW-Teil ist schon fast einbaufertig. Es wird folgendermassen funktionieren:
Der Dreh-Encoder ersetzt die Betätigungsachse des Seilantriebs zum Drehkondensator. Durch leichten Druck auf den Abstimmknopf schaltet der Microschalter des Encoders auf UKW bzw. AM um. Dadurch ist das Problem der nicht vorhandenen TA-Wellenschalterstellung gelöst. Die NF bleibt also immer angeklemmt. Im AM-Betrieb schaltet der Prozessor das UKW-Teil stumm, im FM-Betrieb wird über das Relais die Heizung der Mischröhre weggeschaltet.
Hinter der Skalenscheibe wird der LED-Ring angebracht, der im FM-Betrieb grob die Frequenz anzeigt, im AM-Betrieb hingegen nicht in Erscheinung tritt.
04.05.2018
hier will ich mal zeigen wie ich den Skalenantrieb gelöst habe. Original lief hier ein Stahlseilchen. Ich hab ein neues Skalenrad gedruckt und eine Muffe für die Achsverlängerung des Encoders. Die Verlängerung selbst ist noch nicht montiert. Das Seil wird über einen Spannhebel gespannt. Diesem habe ich zwei Mini-Kugellager spendiert.
ein unvorhergesehenes Problem war die Zusammenführung der beiden NF-Signale (AM und FM). Die im AM-Betrieb stummgeschaltete UKW-NF hat die AM-NF so belastet das diese komplett verstummte. Ich brauchte also noch einen weiteren Kontakt am Umschaltrelais um die UKW-NF wegzuschalten. Dazu musste ich die Relaiskarte umbauen, da das blaue Relais nur einen einpoligen Umschaltkontakt besitzt.
Ich habe alles wieder spielfertig zusammengebaut. Der Tuner bekommt noch eine Abdeckung. Die Potis für Lautstärke und Klang machen Probleme, die muss ich noch erneuern. Nur noch Kleinkram, dann kann ich das Radio nach Wochen endlich wieder zusammenbauen. Das Klinkenkabel ist die Verbindung zwischen FM-Baustein und Relais und ist auf beiden Seiten steckbar, gleichzeitig dient es als UKW-Antenne.
jetzt will ich die software vorstellen. Sie ist ähnlich aufgebaut wie bei meinen anderen µPC-Projekten:
/// SI4703 Nano Rotary Neostrip sketch mit der SI4703_Breakout library von Simon Monk. Auf die aktuellere Version achten! Diese
/// hat bei der Objektdefinition 4 Parameter, die alte Version nur 3.
/// Jupp Haffner 15.9.2017
/// Jupp Haffner 22.9.2017 Speicherung des Senders per EEPROM
/// Monopole Version mit AM/FM-Relais
///
/// Wiring
/// ------
/// The SI4703 board has to be connected by using the following connections:
/// | Arduino UNO pin | Radio chip signal |
/// | -------------------| -------------------|
/// | 3.3V (red) | VCC |
/// | GND (black) | GND |
/// | A5 or SCL (yellow) | SCLK |
/// | A4 or SDA (blue) | SDIO |
/// | D2 (white) | RST |
#include <Arduino.h>
#include <Wire.h>
#include <radio.h>
#include <Si4703_Breakout.h>
#include <EEPROM.h>
/*SI4703 - Pins*/
int resetPin = 2;
int SDIO = A4;
int SCLK = A5;
int RDSInterruptPin = 3; // GPIO2 for RDS Interrupt
int StereoLED = 11;
int AF_LED = 12;
/*EEPROM*/
int ChannelEEP=0x01;
//int VolumeEEP=0x02;
int volume = 30;
int rssi; //signal-level
int tune; //AFC
int stereo;
/*Init SI4703 Driver*/
Si4703_Breakout radio(resetPin, SDIO, SCLK, RDSInterruptPin);
//Rotary Encoder
http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/keyes-ky-040-arduino-rotary-encoder-user-manual/
int clk = 3; // Connected to CLK on KY-040
int dt = 7; // Connected to DT on KY-040
int enc_sw = 5; // Connected to SW on KY-040
volatile int channel = 1017;
volatile byte INTFLAG1 = 0; // interrupt status flag
volatile byte UP_FLAG = 0; //seekUp
volatile byte DOWN_FLAG = 0; //seekDn
#include <Adafruit_NeoPixel.h>
#define Din 4 //Ausgabe der LED's über D4
int anz_led = 24; // Anzahl der LED's
Adafruit_NeoPixel strip = Adafruit_NeoPixel(anz_led, Din, NEO_GRB + NEO_KHZ800);
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
int wc = 0; //wheel-color 0 = grün, 80 = rot, 160 = blau
int led = 0;
int led_pos = channel;
int relais = 8; //Relais wird über D8 geschaltet
int ukw = 1;
unsigned long previousMillis = 0;
unsigned long interval = 1000;
void setup()
{
//Relais
pinMode(relais, OUTPUT);
//Rotary Encoder KY-040 pull up's built in
pinMode (clk, INPUT);
pinMode (dt, INPUT);
pinMode (enc_sw, INPUT);
// interrupt 1 digital pin 3 positive edge trigger
attachInterrupt(digitalPinToInterrupt(clk), flag, RISING);
//Read last channel and volume
GetDataFromEEP();
//Initialize and Power up the SI4703
radio.powerOn();
radio.powerOn();
radio.setVolume(volume);
radio.setChannel(channel);
//Print Informations to Serial Monitor
Serial.begin(9600);
displayInfo();
//Initialize LED-stripe
strip.begin();
strip.setBrightness(64); //range 0 (off) to 255 (max brightness)
strip.show(); // Initialize all pixels to 'off'
led_pos = channel;
UpdateLed();
}
void loop()
{
//Abfrage enc_sw
if (!digitalRead(enc_sw) && ukw && (millis() - previousMillis > interval)) {
//Umschaltung auf AM
previousMillis = millis();
ukw = 0;
Serial.println("UKW 0");
radio.setVolume(0);
strip.setBrightness(0);
UpdateLed();
digitalWrite(relais, HIGH);
}
else if (!digitalRead(enc_sw) && !ukw && (millis() - previousMillis > interval)) {
//Umschaltung auf FM
previousMillis = millis();
ukw = 1;
Serial.println("UKW 1");
radio.setVolume(30);
strip.setBrightness(64);
UpdateLed();
digitalWrite(relais, LOW);
}
//Rotary Encoder
if (INTFLAG1 && ukw) {
Serial.println("ISP ausgelöst");
if (UP_FLAG) SI4703_seekUpAuto();
if (DOWN_FLAG) SI4703_seekDnAuto();
// clear flags
INTFLAG1 = 0;
UP_FLAG = 0;
DOWN_FLAG = 0;
}
delay(100);
} //end loop
//ISR for Encoder: http://www.bristolwatch.com/arduino/arduino2.htm
void flag() {
if (ukw) INTFLAG1 = 1;
// CW
if (digitalRead(clk) && digitalRead(dt)) {
UP_FLAG = 1;
}
// CCW
if (digitalRead(clk) && !digitalRead(dt)) {
DOWN_FLAG = 1;
}
}
void GetDataFromEEP (void)
{
channel=EEPROM.read(ChannelEEP)+875;
//volume=EEPROM.read(VolumeEEP);
}
void SetDataToEEP (void)
{ EEPROM.write(ChannelEEP,channel-875);
//EEPROM.write(VolumeEEP,volume);
}
uint32_t Wheel(byte WheelPos) {
if (WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
void displayInfo (void)
{
rssi=radio.getRSSI();
tune=radio.getTune();
stereo=radio.getStereo();
Serial.print("\n\nChannel: "); Serial.print(channel/10.);Serial.println(" MHz");
Serial.print("Volume: "); Serial.println(volume);
Serial.print("RSSI: ");Serial.print(rssi);Serial.println("dB");
Serial.print("Tune: ");
if(!tune)Serial.println("AFC Tuned!!");
if(tune)Serial.println("AFC Tuning...");
Serial.print("Stereo: ");
if(stereo){Serial.println("true");digitalWrite(StereoLED, HIGH);}
if(!stereo){Serial.println("false");digitalWrite(StereoLED, LOW);}
}
void SI4703_seekUpAuto (void)
{
channel+=1;
radio.setVolume(0);
radio.setChannel(channel);
delay(20);
for(int seekup=channel;; seekup++)
{
if(seekup>1080)seekup=875;
Serial.print(seekup/10.);Serial.println(" MHz");
radio.setChannel(seekup);
led_pos = seekup;
UpdateLed();
delay(10);
int SI4703AFC_Tune=radio.getTune();
int SI4703RSSI_Tune=radio.getRSSI();
delay((SI4703RSSI_Tune*4));
if(((SI4703AFC_Tune==false)&&(SI4703RSSI_Tune>18)))
{
radio.setVolume(volume);
channel=seekup;
SetDataToEEP();
displayInfo();
break;
}
}
}
void SI4703_seekDnAuto (void)
{
channel-=1;
radio.setVolume(0);
radio.setChannel(channel);
delay(20);
for(int seekdown=channel;; seekdown--)
{
if(seekdown<=875)seekdown=1080;
Serial.print(seekdown/10.);Serial.println(" MHz");
radio.setChannel(seekdown);
led_pos = seekdown;
UpdateLed();
delay(10);
int SI4703AFC_Tune=radio.getTune();
int SI4703RSSI_Tune=radio.getRSSI();
delay((SI4703RSSI_Tune*4));
if(((SI4703AFC_Tune==false)&&(SI4703RSSI_Tune>18)))
{
radio.setVolume(volume);
channel=seekdown;
SetDataToEEP();
displayInfo();
break;
}
}
}
void UpdateLed()
{
rssi=radio.getRSSI();
tune=radio.getTune();
stereo=radio.getStereo();
strip.setPixelColor(led, strip.Color( 0, 0, 0));
led = map(led_pos, 875, 1080, 0, (anz_led - 1));
wc = 0; //grün
if (rssi >= 25) wc = 80; //rot
if (tune) wc = 160; //blau
strip.setPixelColor(led, Wheel(wc));
strip.show();
delay(20);
}
Ich fange mal mit der loop an. Diese besteht zum einen aus der Abfrage des Tasters am Encoder und zum anderen zum Starten der Suchlauffunktionen. Das flag ukw ist im UKW-Betrieb logischerweise 1 und im AM-Betrieb 0.
Den millis-Zähler benutze ich zum Entprellen. Wird ein Tastendruck erkannt wird erst nach 1 sek. wieder neu abgefragt. Anhand des ukw-flag erkennt das Programm ob es auf AM oder UKW umschalten soll.
Im ersteren Fall setzt es die Lautstärke des UKW-Empfängers auf Null, schaltet den LED-Ring ab, schaltet die Heizung der Misch- und ZF-Röhre mit Hilfe des Relais ein und unterbricht, ebenfalls über das Relais, die Einspeisung des UKW-NF-Signals.
Im zweiteren Fall fährt es die Lautstärke wieder hoch, schaltet den LED-Ring ein, unterbricht die genannten Heizspannungen und speist die UKW-NF wieder ein.
Der encoder wird in einer Interruptfunktion abgefragt. Eine Verriegelung mit dem ukw-flag sorgt dafür das bei AM keine Funktion ausgelöst wird. Dadurch wird beim Zurückschalten auf UKW der vorher eingestellte Sender wieder aufgegriffen.
Im UKW-Betrieb wertet die Interruptfunktion die Drehrichtung aus und löst einen Suchlauf entweder nach oben oder nach unten aus. In der Praxis sieht das so aus das eine minimale Bewegung des Encoders genügt um den nächsten empfangbaren Sender, dessen Feldstärke RSSI über dem eingestellten Schwellwert liegt, anzufahren.
Bei der AM/FM Umschaltung ist interessant daß die AM-Empfängerröhren nach Abschalten der Heizung noch mehrere Sekunden weiterlaufen. Umgekehrt verstummt das Radio bei der Umschaltung auf AM erst mal komplett, bis die Röhren wieder angeheizt sind.
Die Unterfunktionen für den Suchlauf stammen aus den Monk-Bibliotheken und für das LED-stripe aus dem Adafruit-Bibliotheken. Die UKW-Frequenz wird in das Arduino-EEPROM geschrieben und der Wert beim Einschalten des Radio wieder aufgegriffen.
Diverse Ausgaben für den seriellen Monitor hab ich im Quellcode belassen. Sie stören ja nicht:
08.05.2018
jetzt sind es schon einige Wochen geworden. Aber es findet allmählich seinen Abschluß. Den Drehkoantrieb hab ich wieder neu gebaut. Und zwar etwas kräftiger. Die Einzelteile sind jetzt nicht mehr verklebt, sondern verschraubt. Die Seilspannung konnte ich reduzieren, dadurch wird der Encoder nicht mehr so beansprucht. Der Antrieb läuft butterweich und präzise.
Den Stoff hatte ich abgelöst und gereinigt. Es ist zuerst wieder sehr schön geworden. Aber dann mein zweiter Lapsus mit Ponal. Beim Aufkleben hat der Holzleim Beize von der Schallwand gelöst und den Stoff verfärbt. Weil der Stoff so markant ist habe ich ihn nicht erneuert.
Keine Kommentare:
Kommentar veröffentlichen