DDS AD9834/ PIC SPI Problem

Gast #5366143
Ich habe einen PIC24FJ128GB204 über SPI(16 Bit Mode) mit einem AD9834 
zusammengeschlossen. Ich habe einen MCLK für den AD9834 von 2.048MHz und 
die SPI - Schnittstelle läuft auch über 2Mhz. Mein Problem ist, dass die 
DDS konstant einen Sinus mit 192.123kHz liefert. Ich habe versucht 
diverse Frequenzworte an den Chip zu senden, aber die Frequenz ändert 
sich nur im Bereich von 192kHz bis 214kHz. Ich habe mich an die 
Spezifikationen für den Chip bezüglich dem Chip (fallende Flanke, Idle 
Low für Fsynch und Clk). Ich versuche einen Sinus mit 100kHz zu 
realisieren. Kann mir jemand bei der Fehlersuche helfen.

LG

Hier mein Code:
1
void main(){
2
     SPI1_Init_Advanced(_SPI_MASTER, _SPI_16_BIT, 0, _SPI_SS_DISABLE,  _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_IDLE_2_ACTIVE);
3
     SPI1CON1L.SPIEN       = 0;
4
     SPI1CON1L.SPIFE =   1; //Frame Synch kommt gleichzeitig mit dem First Bit
5
     SPI1CON1H.FRMEN       = 0; //Framed Support aus
6
     SPI1CON1H.FRMSYNC     = 1; //FSYNCH als Master Output
7
     SPI1CON1H.FRMPOL      = 0; //Soll bei active LOW sein => AD9834
8
     SPI1CON1H.MSSEN       = 1; //Master Mode FSYNCH wird vom Modul gesteuert
9
     SPI1CON1H.FRMSYPW     = 1; //FSYNCH ist eine Wortbreite(16Bit) lang
10
     SPI1CON1H.FRMCNT2     = 0; //Erzeugt bei jedem Wort einen neuen    Frameimpuls EVENTUELL ÄNDERN
11
     SPI1CON1H.FRMCNT1     = 0; 
12
     SPI1CON1H.FRMCNT0     = 0; 
13
     SPI1CON1L.CKP =     1; //Invertierter Clock
14
     ANSC.RC9 = 0;
15
     TRISC.RC9 = 0;
16
     set_peripheral_pps_pins();
17
     DDS_Init();
18
     Delay_ms(1);
19
}
1
void DDS_Init(){
2
     SPI1_Write(0x20);  //Daten werden im FREQ0 angenommen für den Phasenakkumulator
3
     while(SPITBE == 0){} //solange der Buffer nicht leer ist warte
4
     PORTC.RC9 = 1;       //RESET PIN
5
     while(SPITBE == 0){} //solange der Buffer nicht leer ist warte                   //RESET muss für den gesamten Zyklus (beim Daten senden) an bleiben
6
     SPI1_Write(0x4000); //LSB für 100kHz laden   0x0
7
     while(SPITBE == 0){} //solange der Buffer nicht leer ist warte
8
     SPI1_Write(0x40C8); //MSB für 100kHz laden
9
     while(SPITBE == 0){} //solange der Buffer nicht leer ist warte
10
     PORTC.RC9 = 0;
11
}
12
void set_peripheral_pps_pins(){
13
     RPOR11.RP22R0 = 1;
14
     RPOR11.RP22R1 = 0;
15
     RPOR11.RP22R2 = 0;
16
     RPOR11.RP22R3 = 1;
17
     RPOR11.RP22R4 = 0;
18
     RPOR11.RP22R5 = 0; //RP22 auf SS1OUT zugewiesen
19
     RPOR11.RP23R0 = 0;
20
     RPOR11.RP23R1 = 0;
21
     RPOR11.RP23R2 = 0;
22
     RPOR11.RP23R3 = 1;
23
     RPOR11.RP23R4 = 0;
24
     RPOR11.RP23R5 = 0; //RP23 auf SCK1OUT zugewiesen
25
     RPOR12.RP24R0 = 1;
26
     RPOR12.RP24R1 = 1;
27
     RPOR12.RP24R2 = 1;
28
     RPOR12.RP24R3 = 0;
29
     RPOR12.RP24R4 = 0;
30
     RPOR12.RP24R5 = 0; //RP24 auf SDO1OUT zugewiesen
Gast
Es läuft jetzt. Wie es aussieht, ist der externe RESET - Pin nicht 
geeignet, für diese Art von Ansteuerung. Man muss den Software - Reset 
durchführen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.