www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Daten zum AD9833 in C übertragen


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Christian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tomas Kuckenburg (Firma: tktronic) (tktronic)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tomas,


danke für die Antwort, ich habe den SPI Bus sinnigerweise für den 
Programmierdongel vorgesehen, werde es am Wochenende aber mal mit SPI 
versuchen...


Lg


Christian

Autor: so nicht (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die SPI pins kann man doppelt besetzen, denn der Programmieradapter ist 
nur waehrend Reset=0 aktiv, und sollte waehrend Reset=1 auf tristate 
sein.

Autor: Tomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...hmmm - gönne Dir ruhig einen JTAG-Dongle.
Damit kannst Du dann vernünftig source-level debugging machen.
Burn-and-learn über ISP ist nicht mehr ganz Stand der Technik.

Gruss, Tomas.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Infos, mittlerweile habe ich es aber am laufen -> siehe 
Codesammlung


Lg


Christian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.