1 | #define F_CPU 32000000UL
|
2 | #define DDS_verzoegerung 100
|
3 | //<> standartverzeichnis
|
4 | //"" Verzechnis des Projektes
|
5 | #include <avr/io.h> //für die Ein- und Ausgänge
|
6 | #include <stdint.h> //um Variablen so zu deklarieren, dass ihre Länge ablesbar ist
|
7 | #include <util/delay.h> //für delays
|
8 | #include <avr/interrupt.h> //für interrupts
|
9 |
|
10 | #include "DDS_AD9833.h"
|
11 |
|
12 | void init_AD9833 (void)
|
13 | {
|
14 | //Alle 3 Datenleitungen als Ausgang setzen
|
15 | set_bit(DDS_SCLK_DDR, DDS_SCLK_PIN);
|
16 | set_bit(DDS_SYNC_DDR, DDS_SYNC_PIN);
|
17 | set_bit(DDS_DIN_DDR, DDS_DIN_PIN);
|
18 |
|
19 | //SYNC auf high setzen
|
20 | set_bit(DDS_SYNC_PORT_OUT, DDS_SYNC_PIN);
|
21 |
|
22 | //Fallende Flanke an SCLK erzeugen
|
23 | set_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
24 | _delay_us(DDS_verzoegerung);
|
25 | clear_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
26 | _delay_us(DDS_verzoegerung);
|
27 | }
|
28 |
|
29 | void DDS_uebertragung_starten (void)
|
30 | {
|
31 | //Steigende Flanke an SCLK erzeugen
|
32 | set_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
33 | _delay_us(DDS_verzoegerung);
|
34 |
|
35 | //SYNC auf Low setzen //SCLK Muss laut Datenblatt des AD9833 in diesem Fall auf high sein
|
36 | clear_bit(DDS_SYNC_PORT_OUT, DDS_SYNC_PIN);
|
37 | _delay_us(DDS_verzoegerung);
|
38 | }
|
39 |
|
40 | void DDS_uebertragung_stoppen (void)
|
41 | {
|
42 | //Steigende Flanke an SCLK erzeugen
|
43 | set_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
44 | _delay_us(DDS_verzoegerung);
|
45 |
|
46 | //SYNC auf high setzen
|
47 | set_bit(DDS_SYNC_PORT_OUT, DDS_SYNC_PIN);
|
48 |
|
49 | //Fallende Flanke an SCLK erzeugen
|
50 | clear_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
51 | _delay_us(DDS_verzoegerung);
|
52 | }
|
53 |
|
54 | void DDS_einzelnes_zeichen_senden (uint8_t zeichen)
|
55 | {
|
56 | //Steigende Flanke an SCLK erzeugen
|
57 | set_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
58 | _delay_us(DDS_verzoegerung);
|
59 |
|
60 | //Data ausgeben
|
61 | if (zeichen ==0) clear_bit(DDS_DIN_PORT_OUT, DDS_DIN_PIN);
|
62 | else if (zeichen ==1) set_bit(DDS_DIN_PORT_OUT, DDS_DIN_PIN);
|
63 | _delay_us(DDS_verzoegerung);
|
64 |
|
65 | //Fallende Flanke an SCLK erzeugen
|
66 | clear_bit(DDS_SCLK_PORT_OUT, DDS_SCLK_PIN);
|
67 | _delay_us(DDS_verzoegerung);
|
68 | }
|
69 |
|
70 | void DDS_aendern (uint16_t Wert)
|
71 | {
|
72 | //Data Bits
|
73 | for (int zaehler=15; zaehler>=0; zaehler--) //MSB muss zuerst gesendet werden
|
74 | {
|
75 | if(BitIsClr(Wert, zaehler))DDS_einzelnes_zeichen_senden(0);
|
76 | else DDS_einzelnes_zeichen_senden(1);
|
77 | }
|
78 | }
|