Daten zum AD9833 in C übertragen

Gast #985446
Lesenswert?
• ▲
▼
Servus zusammen,


ich muss um den AD9833 anzusteuern 2 14-Bit Codewörter übertragen. Da 
meine AVR Kenntnisse fast 0 sind, wollte ich mal fragen, ob mir hier 
jmd. helfen kann...


Leider kommt der AD9833 nicht in Wallung, ich vermute aber einen 
gravierenden Fehler in meinem Code...


Besten Dank für alle Hinweise !


Lg



Christian


//includes
//////////
#include "avr/io.h"


//defines
/////////
#define DDS_MCLK     24000000    /* DDS Clock */
#define DDS_CONSTANT   268435456   /* 2^28 */
#define DDS_DDR      DDRD    /* data direction reg*/
#define DDS_PORT    PORTD
#define DDS_SDATA    PIN0
#define DDS_SCLCK    PIN1
#define DDS_FSYNC    PIN2



//predeclarations
void DDS_WriteBits(int16_t nValue);



//calculate codeword:
//CW = (Freq / DDS_MCLK) * DDS_CONSTANT
//for 5 mhz with 25 MHz clock:  0x33333333



int main(void)
{
  //variables
  ///////////
  int32_t dwFreq     = 5000000;
  int32_t dwCodeWord = (dwFreq / DDS_MCLK) * DDS_CONSTANT;

  //port init
  DDS_DDR = 0xFF;  //all output


  DDS_WriteBits(dwCodeWord & 0xFFFF);
  DDS_WriteBits((dwCodeWord & 0x0000FFFF) << 16);



  while(1)
  {
  }

  return 0;
}




void DDS_WriteBits(int16_t nValue)
{
  DDS_PORT &= ~_BV(DDS_FSYNC);

  SPDR = (nValue >> 8) & 0xFF;
  while(!(SPSR & _BV(SPIF)));

  SPDR = nValue & 0xFF;
  while(!(SPSR & _BV(SPIF)));

    DDS_PORT |= _BV(DDS_FSYNC);
}
Gast #986203
Lesenswert?
• ▲
▼
Servus,


niemand der da helfen kann ?

Ich habe am Code weiter gemchat und bekomme nun mittlerweile ein Signal 
aus dem AD9833, aber es bestehen immer noch 2 Probleme:


1. Die errechnete Frequenz wird nicht erreicht (statt 1 MHz messe ich 
150 KHz)

2. Wenn ich die Freuquenz veränder stürzt der Prozessor nach einigen (5 
- 10 Schaltvorgängen ab)



Lg


Christian
Angehängte Dateien:
(Firma: tktronic) #991585
Lesenswert?
• ▲
▼
Hallo Christian,

Frage: Warum benutzt Du nicht das SPI-Interface vom AVR (richtigen mode 
aber einstellen, spi mode2 und vorher CLK auf high setzen, bevor Du es 
als Output konfigurierst !) ?

Wenn ich mich recht erinnere muss der AD9833 auch noch richtig 
grundinitialisiert werden, bevor Du da die erwarteten Frequenzen 
herausbekommst.
Nach Power-On Reset haben benötigte interne Register nämlich 
undefinierte Zustände lt. datasheet.

Irgendwo hier im Forum oder über google findest Du C-code dazu.

Gutt lack, Tom.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.