2017
|
Software zu Digispark, AD9850 und SSB |
|
DigiSpark steuert AD9850
NAVTEX, RTTY, HFDL, WFAX, HAM auf allen Weltempfängern
Mit dem 'kleinsten Arduino der Welt' ergibt sich ein kompakter SSB-Zusatz für einfache Radios. Im Sketch müssen lediglich die Pins angepasst werden. Sechs Leitungen verbinden dann Digispark und AD9850-Board, wobei der Digipark bereits über einen USB-Stecker verfügt, der in jede Powerbank passt und somit die Spannungsversorgung unkompliziert löst.
Powerbank, Digispark, AD9850 als SSB-Hilfe für einfache AM-Radios.
Ab Seite 106 in Messen Steuern Regeln mit Smartphone und Tablet wird in Abschnitt 1.4 die Installation einer Arduino-IDE 1.5.8C erläutert, die über github und DigiStump erhältlich war und ist. Die Datei DigistumpArduinoInstall1.5.8C.exe installiert die IDE und im Verzeichnis drivers befinden sich die speziellen Windows-Treiber, damit der DigiSpark auch angesprochen werden kann.
Sketch im Digispark TouchSwitch P0
Der Digispark verfügt über drei Pins zur Spannungsversorgung, sechs Pins zur Steuerung und den als USB-Stecker ausgelegten Platinenausschnitt. Steckt der Digispark in einer Powerbank, so liegt am 5V-Pin die Spannung für weitere Bausteine, wie z. B. den AD9850, an. Dass die Masseanschlüsse bzw. GND verbunden sind, muss nicht weiter erwähnt werden. Die Steuerleitungen sind wie folgt verdrahtet und im Sketch entsprechend festgelegt.
DIGISPARK |
AD9850 |
FARBE |
P0 |
|
NC/SWITCH/TOUCH |
P1 |
W_CLK |
rot |
P2 |
FQ_UD |
gelb |
P3 |
DATA |
grün |
P4 |
RESET |
blau |
P5 |
|
NC |
Die Berührung des offenen Pin P0 schaltet zur nächsten Frequenz in der Liste, wie z. B.
Frequenz/Hz |
|
Beschreibung |
137410 |
- |
Timeswitch auf LW (10-Band-Weltempänger Elta u.Ä.) |
161500 |
- |
France Inter Zeitsignal (jedes LW-Radio) |
197500 |
- |
BBC Zeitsignal (jedes LW-Radio) |
1000000 |
- |
Mitten in der Mittelwelle (jedes MW-Radio) |
7075800 |
- |
JT65 im 40m-Amateurband (jedes Kurzwellenradio) |
14075800 |
- |
JT65 im höheren Amateurband (durchstimmbares Kurzwellenradio) |
517000 |
- |
NAVTEX (manche 10-Band-Weltempänger Elta u.Ä.) |
3853000 |
- |
DWD Wetterfax aus Pinneberg (durchstimmbares Kurzwellenradio) |
146500 |
- |
DWD Pinneberg RTTY2 50/85 (10-Band-Weltempänger Elta u.Ä.) |
4582000 |
- |
DWD Pinneberg RTTY1 (durchstimmbares Kurzwellenradio) |
5449940 |
- |
RAF VOLMET Voice (durchstimmbares Kurzwellenradio) |
5504990 |
- |
SHANNON VOLMET Voice (durchstimmbares Kurzwellenradio) |
8941950 |
- |
SHANNON HFDL (durchstimmbares Kurzwellenradio) |
5194000 |
- |
DRA5 Flensburg (durchstimmbares Kurzwellenradio) |
4625000 |
- |
THE BUZZER (durchstimmbares Kurzwellenradio) |
Der Originalquelltext wurde entsprechend den eigenen Anforderungen angepasst und zwar so, dass durch Berührung von P0 am Digispark die Frequenz entsprechend der fest abgelegten Frequenzliste weiter geschaltet wird.
Nach der Festlegung der Taktfrequenz des AD9850 folgen die zwei globalen Variablen ix und N. Dabei enthält N die Anzahl der Tabelleneinträge und ix ist der Index der gerade laufenden Generatorfrequenz in der Liste. Aus Übermut und Bequemlichkeit folgt dann das Tabellenarray mit double-Einträgen, gefolgt von den Anschlussdefinitionen der vier Verbindungen zwischen den Bausteinen, entsprechend obiger Tabelle. Das Leitungsklappern wird durch ein #define verkürzt. Dann folgen Routinen aus der Originalquelle. Am Ende die obligatorischen IDE-Routinen setup und loop. In der Dauerschleife erfolgt die Abfrage von PIN 0 des Digispark und die Verzweigung des Frequenzwechsels, welches durch die LED bestätigt und durch ein empirisch - in langen Versuchsreihen - gefundenes delay bei Dauertouch die Liste weiter durch geht, um nach Erreichen der letzten Frequenz wieder am Anfang zu beginnen.
#define AD9850_CLOCK 125000000 // Tweak here for accuracy.
int ix=0;int N;
double frequency[]={
1000000,//Test MW
9995000,//Test SW RWM moskau cw 1000hz
137410,//TIMESWITCH
146291,//DWD RTTY2 1000 hz
161500,//FRANCE TIMESIGNAL 500 hz
197500,//BBC TIMESIGNAL 500 hz
489000,//NAVTEX NAT
517000,//NAVTEX INT
7075800,//JT65
8941950,//SHANNON HFDL
10099575,//RTTY1 mark 1000
14075800,//JT65
14230000,//SSTV
3853000,//WFAX out of band
4581780,//RTTY1 mark=1000
5449940,//RAF VOLMET
5504990,//SHANNON VOLMET
5194000,//DRA5 (Kiel)
4625000 //THE BUZZZER
};
#define SW 0
#define W_CLK 1 // AD9850 Module pins. Digispark
#define FQ_UD 2
#define DATA 3
#define RESET 4
#define LED 1 //LED PIN DIGISPARK
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
void tfr_byte(byte data) // transfers a byte
{for (int i = 0; i < 8; i++, data >>= 1)
{digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
}
}
void sendFrequency(double frequency)
{int32_t freq1 = frequency * 4294967295/AD9850_CLOCK;
for (int b = 0; b < 4; b++, freq1 >>= 8)tfr_byte(freq1 & 0xFF);
tfr_byte(0x000);
pulseHigh(FQ_UD);
}
void setup()
{pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pinMode(SW, INPUT);
N=sizeof(frequency)/sizeof(double);
sendFrequency(frequency[ix]);
sendFrequency(frequency[ix]);
digitalWrite(LED,1);
}
void loop()
{if(digitalRead(0)==1)
{digitalWrite(LED,1);
delay(200);
ix++;
if(ix>N)ix=0;
sendFrequency(frequency[ix]);
sendFrequency(frequency[ix]);
delay(600);
}
digitalWrite(LED,0);
delay(0);
}
Hier liegt der obige Sketch für den Digispark im Klartext.
Mehr Radio und TV
|
|