Sinus Frequenzgenerator

 

Erzeugt eine Sinusfrequenz von 1Hz - 125MHz -> u-Spitze/Spitze 4V
Am Keypad kann in folgenden Stufen die Frequenz erhöht oder verringert werden:
1Hz, 10Hz, 100Hz, 1kHz, 10kHz, 100kHz

Das 12 Tastenkeyboard sowie die restliche Schaltung wurde auf einer 70 x 50 mm Lochrasterplatine aufgebaut.


Ansicht AD9850

Pinbelegung / Schaltplan

 

Pinbelegung Arduino Nano:

Serial Display
--------------
VCC - 5V
GND - GND
SDA - A4
SCL - A5

AD9850
------
W_CLK - D11
FQ_UD - D12
DATA - D13
GND - GND
VCC - 3,3V

Frequenz Ausgang
ZOUT1
ZOUT2

Keypad
------
Spalte
8 - D2
7 - D3
6 - D4
5 - D5
4 - D6
3 - D7
Zeile
2 - D8
1 - D9

 

SKIZZE Abschlussplan

 

 

Beispielcode

 


/*
Signalgenerator
===============
FQG V 1.1
2015 Juergen Lessner

Pinbelegung Arduino Nano:

Serial Display
--------------
VCC - 5V
GND - GND
SDA - A4
SCL - A5

AD9850
------
W_CLK - D11
FQ_UD - D12
DATA - D13
GND - GND
VCC - 3,3V

Frequenz Ausgang
ZOUT1
ZOUT2

Keypad
------
Spalte
8 - D2
7 - D3
6 - D4
5 - D5
4 - D6
3 - D7
Zeile
2 - D8
1 - D9

Keypad Funktion:
Keypad Taste 1,2,3 und 7,8,9 = Frequenz erhöhen
Keypad Taste 4,5,6 und *,0,' = Frequenz reduzieren
Max. 125 MHz, min. 0 Hz

*/

// Verweise
#include <AD9850.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

// Keypad Typ Definition
const byte ROWS = 2; //2 Zeilen
const byte COLS = 6; //6 Spalten

// Keypad Layout
char keys[ROWS][COLS] =
{{'9','8','7','3','2','1'},
{'#','0','*','6','5','4'}};

// Keypad Pins am Arduino
byte rowPins[ROWS] = {9,8};
byte colPins[COLS] = {2,3,4,5,6,7};

// Erstelle Keypad Objekt
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

// Zuweisung Pins am Arduino - Pins am AD9850
AD9850 ad(11,12,13); // Pins : w_clk, fq_ud, d7

// Setze LCD addresse auf 0x27 für 16 Zeichen / 2 Zeilen Display
LiquidCrystal_I2C lcd(0x27,16,2);

// Variablendeklaration
long Hertz = 1000; //Start Frequenz für AD9850

void setup()
{
// Für Debug Serial.begin
// Serial.begin(9600); //Starte Serial Konsole

lcd.init(); // initialisiere LCD
lcd.clear(); // lösche Display
lcd.backlight(); // LCD Hintergrundbeleuchtung ein
lcd.print("FQG V1.1 created"); // Version anzeigen
lcd.setCursor(0,1); // Cursor Pos 1, Zeile 2
lcd.print("2015 J.Lessner"); // Ausgabe auf Display
delay(3000); // 3 Sekunden anzeigen

ad.setfreq(Hertz); //Setze Frequenz
//Ausgabe auf Display
lcd.clear();
lcd.setCursor(0,0);
lcd.print(Hertz);
lcd.print(" Hz ");

}

void loop()
{
char key = keypad.getKey();
if (key != NO_KEY)
{
// lcd.print(key);
// delay(3000);
switch(key)
{
case 49: //1 = ASCII 49 . + 1Hz
setHertz(+1,"+ 1 Hz "); // + 1 Hz
break;
case 50: //2
setHertz(+10,"+ 10 Hz "); // + 10 Hz
break;
case 51: //3
setHertz(+100,"+ 100 Hz "); // + 100 Hz
break;
case 52: //4
setHertz(-1,"- 1 Hz ");//-1Hz
break;
case 53: //5
setHertz(-10,"- 10 Hz ");//-10Hz
break;
case 54: //6
setHertz(-100,"- 100 Hz ");//-100Hz
break;
case 55: //7
setHertz(+1000,"+ 1 kHz ");//+1kHz
break;
case 56: //8
setHertz(+10000,"+ 10 kHz ");//+10kHz
break;
case 57: //9
setHertz(+100000,"+ 100 kHz "); //+100kHz
break;
case 42: //*
setHertz(-1000,"- 1 kHz "); //-1kHz
break;
case 48: //0
setHertz(-10000,"- 10 kHz "); //-10kHz
break;
case 35: //#
setHertz(-100000,"- 100 kHz "); //-100kHz
break;
}
}
}

void setHertz(long hrtz,char* erMsg)
{
Hertz = Hertz + (hrtz); //+- Hz
// Absicherung min und max Hz
if(Hertz > 125000000)
{
Hertz = 125000000;
erMsg = "max. 125 MHz ";
}
if(Hertz < 0)
{
Hertz = 0;
erMsg = "min. 0 Hz ";
}
// Hz setzen und LCD Ausgabe
ad.setfreq(Hertz);
lcd.setCursor(0,0);
lcd.print(Hertz);
lcd.print(" Hz ");
lcd.setCursor(0,1);
lcd.print(erMsg);
}

 

 

Ansicht


Angeschlossen am Oszilloskop DSO 203

Screenshot vom DSO 203

 

Gehäuse

Das Gehäuse wurde mit OpensCAD konstruiert und am 3D Drucker produziert.

 

Upgrade

Das Gehäuse wurde überarbeitet, sodaß nun 2 BNC Buchsen Platz finden.

Es kann gleichzeitig das Sinus- und das Rechtecksignal entnommen werden.

 

Link zu Thingiverse