Forum: Mikrocontroller und Digitale Elektronik AD9833 mit MSP430F233


von Benjamin B. (benjamin_b320)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich bin seit mehreren Wochen nun am Fehler suchen und komme einfach 
nicht mehr weiter.
Ich versuche einen Sinus Signalgenerator von 10-ca 500 Hz mithilfe eines 
AD9833 zu realisieren.
Der MSP430 läuft auf mit einem 4MHz Resonator und gibt dann den 
Mainclock auf den AD9833 MCLK.
Die Signale kommen beim IC an, dies habe ich an den Beinen Nachgemessen.


Über den MSP430F233 wird der AD9833 per SPI angesteuert, dazu folgende 
Funktionen:
1
void AD9833_SetRegisterValue(unsigned short regValue)
2
{
3
  SPI_Write( regValue  >> 8, (unsigned char)regValue);
4
}
1
void SPI_Write(unsigned char data1, unsigned char data2)
2
{
3
    ADI_CS_LOW;  //Ich bleibe solange in der Funktion wie die übertragung läuft, darum kann ich hier direkt mit dem übertragen beginnen
4
    UCB0TXBUF = data1;
5
6
    //while (UCB0STAT & UCBUSY);   //Braucht zulange darum mit cycles
7
    __delay_cycles(3);
8
    UCB0TXBUF = data2;     
9
    //while (UCB0STAT & UCBUSY);
10
    __delay_cycles(6);          //Warten bis fertig
11
    ADI_CS_HIGH;
12
}
Im Main ist dann nach dem Datenblatt AN-621 die folgenden Daten 
übermittelt worden:
1
        AD9833_SetRegisterValue(0xF800);    //Einstellungen
2
        AD9833_SetRegisterValue(0x3333);    //H MSBs
3
        AD9833_SetRegisterValue(0x2233);    //L MSBs
4
        AD9833_SetRegisterValue(0x3133);    //H LSBs
5
        AD9833_SetRegisterValue(0x2033);    //L LSBs
6
        AD9833_SetRegisterValue(0xC000);    //Out of Sleep

Der AD9833 bringt am Ausgang nichts. Speisung ist kontrolliert und liegt 
bei ca 3.3V (+- 0.2V). So wie ich das sehe kann ich FSYNC zwischen den 
einzelnen 2 Bytes ohne bedenkte auf HIGH setzten oder liege ich falsch?
Im Anhang habe ich euch noch mehrere Screenshots angehängt von der 
Messung.

Ich hoffe sehr das mir jemand helfen kann, denn ich bin langsam ratlos.

Grüsse
Benjamin

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mit welcher Taktrate betreibst Du die SPI-Schnittstelle?

Muss die so hoch sein, wie sie es anscheinend ist (das legt Dein "while 
(UCB0STAT & UCBUSY); ist zu langsam"  nahe)?

Benjamin B. schrieb:
> So wie ich das sehe kann ich FSYNC zwischen den einzelnen 2 Bytes ohne
> bedenkte auf HIGH setzten oder liege ich falsch?

Das sieht das Datenblatt anders:

> When data or control information is written to the AD9833, FSYNC
> is taken low and is held low until the 16 bits of data are
> written into the AD9833.

Das ist auch irgendwie klar, das Ding muss ja schließlich wissen, welche 
Bits jeweils zusammengehören.

In welchem Zusammenhang steht "ADI_CS_LOW/HIGH" mit FSYNC? Wenn es das 
gleiche ist: Warum benennst Du das unterschiedlich?


Dein Schaltplan ist unvollständig und schlecht lesbar; womit hast Du das 
Bild so kaputtgemacht?

: Bearbeitet durch User
von Beo Bachta (Gast)


Lesenswert?

Benjamin B. schrieb:
> Ich hoffe sehr das mir jemand helfen kann, denn ich bin langsam ratlos.

Nach deinem Schaltplan bekommt der AD9833 keinen Referenzclock,
üblicherweise 10 MHz oder 25 MHz. Wenn nichts reinkommt, kommt
auch nichts raus ....

Wenn allerdings dein Schaltplan unvollständig ist dann willst
du uns vielleicht verarschen.

von Benjamin B. (benjamin_b320)


Angehängte Dateien:

Lesenswert?

Beo Bachta schrieb:
> Wenn allerdings dein Schaltplan unvollständig ist dann willst
> du uns vielleicht verarschen.

Naja ich dachte das sei verständlich das ich hier nur der AD9883 
abgebildet zeige. Im Anhang habe ich der ganze Schaltplan angehängt.

Rufus Τ. F. schrieb:
> Das sieht das Datenblatt anders:
>
>> When data or control information is written to the AD9833, FSYNC
>> is taken low and is held low until the 16 bits of data are
>> written into the AD9833.

Also evtl habe ich es falsch gesagt, aber meinte es so. Ich muss ja 
verschiedene Register beschreiben mit jeweils 2 Bytes und zwischen 
diesen darf ich "beliebig lang" auf HIGH sein.

Rufus Τ. F. schrieb:
> Muss die so hoch sein, wie sie es anscheinend ist (das legt Dein "while
> (UCB0STAT & UCBUSY); ist zu langsam"  nahe)?

ALso wir arbeiten mit 4 MHZ, also mit dem MCLK des MSP430. Der AD9883 
kann mit bis zu 40MHz betrieben werden, daher kein Problem.
Mit zulangsam meine ich, da ich nur ein 8 Bit register zum rausschieben 
habe, aber eigendlich 16 am Stück haben möchte ist diese FLAG zu spät.

Rufus Τ. F. schrieb:
> In welchem Zusammenhang steht "ADI_CS_LOW/HIGH" mit FSYNC? Wenn es das
> gleiche ist: Warum benennst Du das unterschiedlich?

Ja ist das gleiche, kommt daher das ich einen Header benutzte den ich 
Allgemein für SPI Kommunikation gebrauche. Zu faul zum anpassen ;)

von Beo Bachta (Gast)


Lesenswert?

Benjamin B. schrieb:
> Im Anhang habe ich der ganze Schaltplan angehängt.

... und welchen Wert hat GEN_MCLK? Kommt da auch was
raus aus deinem MSP430 für den AD9833?

von Beo Bachta (Gast)


Lesenswert?

Benjamin B. schrieb:
> Der AD9883
> kann mit bis zu 40MHz betrieben werden, daher kein Problem.

Aus dem Datenblatt für den AD9833 lesen wir aber auf Seite 21:

>>CRYSTAL OSCILLATOR VS. EXTERNAL CLOCK
>>The AD9833 can operate with master clocks up to 25 MHz.


Wenn du allerdings einen neuen Chip ins Spiel bringen willst

Benjamin B. schrieb:
> Der AD9883

dann bringst du uns vollständig durcheinander.

von Benjamin B. (benjamin_b320)


Lesenswert?

Beo Bachta schrieb:
> ... und welchen Wert hat GEN_MCLK? Kommt da auch was
> raus aus deinem MSP430 für den AD9833?

Hier kommt 4 MHz raus und habe ich auch so ausgemessen.

Beo Bachta schrieb:
> Aus dem Datenblatt für den AD9833 lesen wir aber auf Seite 21:
>
>>>CRYSTAL OSCILLATOR VS. EXTERNAL CLOCK
>>>The AD9833 can operate with master clocks up to 25 MHz.
auf Seite 1 Steht bis zu 40MHz, wobei mir das nun egal sein kann, da ich 
Faktor 10 kleiner bin.

Beo Bachta schrieb:
> Wenn du allerdings einen neuen Chip ins Spiel bringen willst
>
> Benjamin B. schrieb:
>> Der AD9883
>
> dann bringst du uns vollständig durcheinander.

Naja wollte euch nicht verwirren. Meinte den AD9833


schon mal danke für eure Mühe

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.