2017
HOME

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

.
Startseite Bücher Software Digital RTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt