Beiträge: 7.047
Themen: 605
Registriert seit: Sep 2013
30.03.2018, 23:36
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2018, 23:39 von saarfranzose.)
Gruß,
Jupp
-----------------------------
was du baust ist immer mit dir verbunden
(Lego)
Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Beiträge: 7.047
Themen: 605
Registriert seit: Sep 2013
30.03.2018, 23:36
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2018, 23:53 von saarfranzose.)
der zweite post ist wieder der software gewidmet.
Sie ist diesmal sehr knapp gehalten. Den 4 Leitungen des Drehschalters gebe ich Wertigkeiten (1, 2, 4, 8), die mit dem Abfrageergebnis der Schalter (1 oder 0) multipliziert werden. Weil ich gegen Masse schalte sind die internen PullUp's aktiviert und ich muss die Schalterabfragen jeweils negieren. Die 4 Ergebnisse werden addiert und es entsteht ein Wert von 1 bis 15. Bei der Abfrage des arrays wird wieder eine 1 subtrahiert, weil das array nicht mit 1 sondern mit 0 beginnt.
Desweiteren habe ich noch eine Entprellung eingebaut. Erst wenn eine Wertänderung 200ms ansteht wird der Sender umgeschaltet. Das wäre wahrscheinlich nicht notwendig gewesen, aber es verhindert unnötige Frequenzumschaltungen beim zappen.
Code: /// 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 |
#define NUMBER_STATIONS 15 // Anzahl Feststationen
#include <Arduino.h>
#include <Wire.h>
#include <radio.h>
#include <Si4703_Breakout.h> //Monk
int frequency = 880; ///< The station that will be tuned by this sketch is 88.00 MHz
int volume = 0; ///< The volume that will be set by this sketch is level 4.
/*SI4703 - Pins*/
int resetPin = 2;
int SDIO = A4;
int SCLK = A5;
int RDSInterruptPin = 3; // GPIO2 for RDS Interrupt
Si4703_Breakout radio(resetPin, SDIO, SCLK, RDSInterruptPin);
const int PA = 3;
const int PB = 4;
const int PC = 5;
const int PD = 6;
int preset = 0;
int preset_neu = 0;
#define REFRESH_PERIOD_MS 100
struct STATIONS {
char name[17];
int frequency;
} stations[NUMBER_STATIONS] = {{"SR 1 Europawelle", 880},
{"DLF Kultur ", 886},
{"SWR 3 ", 900},
{"SWR 2 ", 930},
{"RTL Radio ", 933},
{"SR3Saarlandwelle", 955},
{"SWR 1 RP ", 977},
{"big fm ", 995},
{"RPR 1 ", 1001},
{"ClassicRockRadio", 1009},
{"Radio Salue ", 1017},
{"ClassicRockRadio", 1028},
{"SWR 4 ", 1071},
{"SR Unser Ding ", 1037},
{"DLF Kultur ", 1079}};
void setup()
{
Serial.begin(9600);
// Initialize the Radio
//Initialize and Power up the SI4703
radio.powerOn();
radio.powerOn();
radio.setVolume(volume);
radio.setMono(false);
//radio.setChannel(frequency);
pinMode (PA, INPUT_PULLUP);
pinMode (PB, INPUT_PULLUP);
pinMode (PC, INPUT_PULLUP);
pinMode (PD, INPUT_PULLUP);
}
void loop()
{
preset_neu = (!digitalRead(PA) + !digitalRead(PB) * 2 + !digitalRead(PC) * 4 + !digitalRead(PD) * 8);
if (preset_neu != preset) {
radio.setVolume(0);
delay (200);
if (preset_neu = (!digitalRead(PA) + !digitalRead(PB) * 2 + !digitalRead(PC) * 4 + !digitalRead(PD) * 8)) {
preset = preset_neu;
Serial.print(preset);
Serial.print(" ");
frequency = (stations[preset-1].frequency);
Serial.println(frequency);
//radio.setChannel(stations[preset].frequency);
radio.setChannel(frequency);
radio.setVolume(30);
}
}
delay (REFRESH_PERIOD_MS);
}
Gruß,
Jupp
-----------------------------
was du baust ist immer mit dir verbunden
(Lego)
Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Beiträge: 1.607
Themen: 72
Registriert seit: Sep 2013
Desweiteren habe ich noch eine Entprellung eingebaut. Erst wenn eine Wertänderung 200ms ansteht wird der Sender umgeschaltet. Das wäre wahrscheinlich nicht notwendig gewesen, aber es verhindert unnötige Frequenzumschaltungen beim zappen.
zusätzlich wird während der Verzögerung die Lautstärke auf Null reduziert, so dass keine Knackgeräusche etc.
bei der Senderumschaltung entstehen.
Clever gemacht, schönes Projekt Jupp!
Grüße aus Wassenberg,
Norbert.
Beiträge: 6.313
Themen: 327
Registriert seit: Oct 2014
Was ihr macht...
Ich kann nur träumen es zu lernen.
Respekt!
Gruß,
Ivan
Beiträge: 7.047
Themen: 605
Registriert seit: Sep 2013
(31.03.2018, 06:48)norbert_w schrieb: Desweiteren habe ich noch eine Entprellung eingebaut. Erst wenn eine Wertänderung 200ms ansteht wird der Sender umgeschaltet. Das wäre wahrscheinlich nicht notwendig gewesen, aber es verhindert unnötige Frequenzumschaltungen beim zappen.
zusätzlich wird während der Verzögerung die Lautstärke auf Null reduziert, so dass keine Knackgeräusche etc.
bei der Senderumschaltung entstehen.
Clever gemacht, schönes Projekt Jupp!
richtig, das muting hatte ich vergessen zu erwähnen. Ich hab mir auch schon überlegt den Ton sanft aus- und einzublenden.
Was ich in der Monk-Bibliothek nicht gefunden habe ist den Empfänger auf Mono umzuschalten, um etwas Empfangsempfindlichkeit zu gewinnen. So klemme ich einfach nur über 2 Widerstände das Stereosignal zusammen.
Danke für eure Anerkennung!
Gruß,
Jupp
-----------------------------
was du baust ist immer mit dir verbunden
(Lego)
Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Beiträge: 1.115
Themen: 94
Registriert seit: Sep 2013
Das ist wirklich sehr interessant. Mit Autotune meinst du wahrscheinlich den Suchlauf wie bei einem Scanradio.
Das Umprogrammieren wäre bei wechselnden Standorten auch zu umständlich.
Ich muss mich da auch mal mit beschäftigen.
sicheres Auftreten bei völliger Ahnungslosigkeit
Beiträge: 7.047
Themen: 605
Registriert seit: Sep 2013
ein einfacher Suchlauf wäre nicht das Problem. Ich stelle mir vor daß man die Taste auf der Platine drückt und einen scan auslöst, wobei die Frequenzen ab einem bestimmten Empfangspegel ins eeprom geschrieben werden. Auf Tastendruck wird also die Tabelle selbstständig angelegt. Da dies nur selten vorkommt (bei Standortwechsel oder wenn sich an den lokalen Sendern was ändert) kann die Taste im Geräteinneren verbleiben, oder sie kommt an die Rückseite. Im Betrieb wird wie jetzt auch mit dem Drehschalter zwischen den Senderplätzen umgeschaltet.
So ist es z.B. auch bei dem Bluetooth Decoder Board sowie bei dem Serial Port Frequency Board gelöst. Diese beiden boards kann man aber nicht mit einem Drehschalter oder mit einem Rotary-Encoder kombinieren ohne einen µPC zwischenzuschalten. Der µPC muss bei Einsatz eines Rotary-Encoder die Drehrichtung erkennen und dann einen Tastendruck simulieren. Bei einem Drehschalter sehe ich gar keine Möglichkeit gezielt einen Programmplatz bei einem der erwähnten Module anzusteuern.
Gruß,
Jupp
-----------------------------
was du baust ist immer mit dir verbunden
(Lego)
Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Beiträge: 7.047
Themen: 605
Registriert seit: Sep 2013
da hätte ich noch mal eine kleine Bilderserie. Die Antenne hab ich an einer Buchse angeschlossen welche ich an einer Rückwandöffnung angeschraubt habe. Das Radiomudul musste ich austauschen, da ist mir durch Zug an der Antennenleitung eine Miniaturleiterbahn abgerissen die zum Antenneneingang des Chip führt. Keine Chance mehr auf Kontaktierung. Den Umbau auf externe Antenne führe ich jetzt anders aus, so daß ich noch Halt bekomme an dem SMD-Kondensator vor dem Antenneneingang.
Nach einer Stunde Spielzeit begann der Ton zu verzerren. Ich vermute einen Defekt an der ECC40. Ich muss im Lager erst noch eine andere raussuchen. Es sind aber auch noch ein paar Papierkondensatoren drin die sehr gut vergossen sind und eine überdurchschnittlich gute Qualität vermuten lassen. Evtl. muss ich da auch noch ran.
Gruß,
Jupp
-----------------------------
was du baust ist immer mit dir verbunden
(Lego)
Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Beiträge: 789
Themen: 80
Registriert seit: Sep 2013
Moin,
eine sehr schöne Arbeit. So erfüllt das Radio wieder seinen Zweck und schön anzusehen ist es auch noch.
Beste Grüße
Peter
|