Hallo ! zusammen ich muss ein Funktion Generator, der die Frequenz-Modulation eines Sinus-signals führt, implementieren. dieses soll mit hilfe ein Phase-Akkumulator gebastelt werden. - der Ausgangssignal hat ein 16 bit Auflösung - beim jedem Interrupt auftaucht ein werte der sinus Tabelle - beim jedem interrupt wird der Phase Akku mit ph_inkr inkrementiert. - die normale(ursprüngliche)sinus wird mit ein frequnz von 1 KHz berechnet. ich habe so eine kleine Idee gehabt aber weiß ich nicht, warum es nicht klappt. ob jemand ein anderen Vorschlag hätte.
1 | #define freq 1000 /*freq 1kHz */ |
2 | uint16 counter = 10µs /* Timer0 womit jeder wert der Sin auftaucht */ |
3 | uint16 Sin[50]={}; /*sinus 50 werte look up Tabelle */ |
4 | uint16 mod[150]={}; /* für 3 hintereinander modulierten Sinus */ |
5 | uint16 ph_akku ; /* phase akkumulator */ |
6 | uint16 ph_inkr ; /* phase inkrement */ |
7 | uint8 start_ph; /* start phase in grad */ |
8 | |
9 | void akk(void) |
10 | {
|
11 | int i=0; |
12 | ph_inkr = counter; |
13 | start_ph = 0; /* o° phase */ |
14 | ph_akku = start_ph; |
15 | while(i < 150) |
16 | {
|
17 | for(i=0;i<50;i++) |
18 | {
|
19 | mod[i]= sin[i]; |
20 | }
|
21 | ph_akku = ph_akku + ph_inkr ; /* ph_inkr = counter*/ |
22 | for(i=0;i<100;i++) |
23 | {
|
24 | mod[i+50]= sin[i]; |
25 | }
|
26 | ph_akku = ph_akku + ph_inkr ; /* ph_inkr = counter*/ |
27 | for(i=0;i<150;i++) |
28 | {
|
29 | mod[i+100]= sin[i]; |
30 | }
|
31 | ph_akku = ph_akku + ph_inkr ; /* ph_inkr = counter*/ |
32 | }
|
33 | }
|
34 | /********************************************************************
|
35 | Ausgeben am DAC output für die 3Sinus-Darstellung am Oscilloscop ****/
|
36 | |
37 | void v_sin_tabel(void) |
38 | {
|
39 | |
40 | if (counter <= (149)) |
41 | {
|
42 | |
43 | LPC_DAC->DACR = (mod[counter] << 6) | DAC_BIAS; //DAC-OUTPUT |
44 | if(counter == 149) |
45 | {
|
46 | counter = 0; |
47 | }
|
48 | else
|
49 | {
|
50 | counter++; |
51 | };
|
52 | |
53 | };
|
54 | |
55 | };
|