Forum: Digitale Signalverarbeitung / DSP / Machine Learning warum funktioniert mein ad9833 nicht?


von Christoph S. (christophst)


Angehängte Dateien:

Lesenswert?

folgendes problem, steuere den ad 9833 mit einem at mega 8535 an.
über spi. im anhang ist ein skop bild, von der signalform.
am ausgang des ad kommt kein signal.
kann mir jmd sagen wiso?
kommen die signale falsch??

prog:

1
#include <avr/io.h>
2
#include <stdlib.h>
3
4
5
#include <util/delay_basic.h>
6
7
unsigned char x; 
8
unsigned char y;     
9
10
void warte(unsigned char zahl)           //warteschleife. warte ist XXXµsek. * zahl
11
{
12
  do
13
  {
14
    _delay_loop_1(0x0002);
15
  } while (zahl--);              // solange zahl > 0
16
}
17
18
19
int main(void)
20
{
21
  DDRA = 0x00;
22
  DDRB = 0xff;
23
  DDRD = 0xff;  
24
    PORTD |= (1<<PD7) ; // FSYNC HIGH
25
while(1)
26
    {
27
    while (PINA & (1<<PA1))
28
      {
29
      }  
30
    while (!(PINA  &(1<<PA1))) 
31
      {
32
      }
33
    warte(250);
34
        SPCR = 0xD7;            // Spi Kontrollregister setzen
35
36
    warte(1);
37
    PORTD &=~(1<<PD7); // FSYNC LOW 
38
    SPDR = 0x20;  // Ausgabe an das Spi interface
39
       while (!(SPSR  &(1<<SPIF)))
40
      {
41
    y++;
42
      }
43
    warte(1);
44
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
45
    warte(1);
46
    PORTD &=~(1<<PD7);           // FSYNC LOW
47
    SPDR = 0x00;              // Ausgabe an das Spi interface      config  
48
       while (!(SPSR  &(1<<SPIF)))
49
      {
50
      y++;
51
      }      //
52
    warte(1);                   
53
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
54
    warte(1);
55
    PORTD &=~(1<<PD7);           // FSYNC LOW
56
      SPDR = 0x7F;              // Ausgabe an das Spi interface     
57
     while (!(SPSR  &(1<<SPIF)))
58
      {
59
    y++;
60
      }
61
    warte(1);
62
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
63
    warte(1);
64
    PORTD &=~(1<<PD7);           // FSYNC LOW
65
        SPDR = 0xFF;              // Ausgabe an das Spi interface      FREQU-0
66
       while (!(SPSR  &(1<<SPIF)))
67
      {
68
    y++;
69
      }
70
    warte(1);
71
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
72
    warte(1);                //                   
73
    PORTD &=~(1<<PD7);           // FSYNC LOW    
74
    SPDR = 0x7F;              // Ausgabe an das Spi interface      FREQU-0 
75
     while (!(SPSR  &(1<<SPIF)))
76
      {
77
    y++;
78
      }
79
    warte(1);
80
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
81
    warte(1);
82
    PORTD &=~(1<<PD7);           // FSYNC LOW
83
    SPDR = 0x87;              // Ausgabe an das Spi interface      FREQU-1
84
     while (!(SPSR  &(1<<SPIF)))
85
      {
86
    y++;
87
      }
88
    warte(1);
89
    PORTD |= (1<<PD7) ;         // FSYNC HIGH

von Christoph S. (christophst)


Lesenswert?

sorry vergessen hinzuzufügen...

blauer frequ.gang: takt
rot: fsync
grün: signal

von Michael (Gast)


Lesenswert?

Lies doch mal das Datenblatt richtig!!

Insbesondere den Teil wo es um das SPI Interface geht ....

Da steht:
"After FSYNC goes low, serial data will be shifted into the device’s 
input shift register on the falling edges of SCLK for 16 clock pulses. 
FSYNC may
be taken high after the 16th falling edge of SCLK, observing
the minimum SCLK falling edge to FSYNC rising edge time, t8."

Du hast das FSYNC nach 8 Bit und nicht nach 16 bit wieder auf High 
gezogen.

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

Ok, eine neues Problem ist aufgetreten, einmal steuere ich den AD9833 
mit einer selbst geschriebenen Spi architektur an, und beim 2. mal mit 
der internen des Avr(den Fsync fehler habe ich natürlich behoben, jedoch 
funktioniert es leider immer noch nicht.) Wenn ich die SPI mit meiner 
selbstgeschriebenen Architektur ansteuere funktioniert alles 
reibungslos, auf den von AVR programmierten SPI teil, im anderen 
Programm reagiert der Dsp jedoch nicht.
ich habe die Signalverläufe vom  oszillosSkop im anhang, beide sehen 
sehr ähnlich aus.
Die 1. beiden hochgeladenen Bilder zeigenden Signalverlauf des 
Programmes das fuktioniert(einmal den anfang hochaufgelößt, und einmal 
das Komplette Signal). Die beiden anderen Bilder zeigen den 
Signalverlauf des nicht funktionierenden Signales.

Vlt kennt ja jmd das Problem und kann mir weiterhelfen :)
Danke im Vorraus!
mfG: Christoph

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

...---

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

-.-.

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

So, dassist der signalverlauf des nicht funktionierenden Programmes

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

und hier nochmal der komplette signalverlauf des nicht funktionierenden 
Programmes

Danke

von ::: (Gast)


Lesenswert?

Das timing diagramm des datenbattes enthaelt einige Zeiten. sind die 
aller erfuellt ?

von Christoph (Gast)


Lesenswert?

ja, es enthält die zeiten data, clock und fsync.
dafür hab ich ja die skopbilder mit eingefügt, meiner einung nach passt 
das alles.

von Michael (Gast)


Lesenswert?

Stimmt nicht - Timing ist immer noch falsch!!

Du verletzt die Zweit T11 im Datenblatt "SCLK High to FSYNC Falling Edge 
Setup Time" auf Seite 3 des Datenblatts.

In diesem Fall könnte man einem Dreijährigen die zwei Bildchen vorlegen 
und fragen - wo ist der Unterschied!!

von NEWBIE (Gast)


Lesenswert?

??
was genau meinst du?
laut analog müssen das nur 5ns! sein.
Die halte ich doch ein?

von NEWBIE (Gast)


Lesenswert?

oder momentmal, was genau meinst du?

SCLK High to FSYNC Falling Edge
Setup Time

finde ich auf seite drei nicht.

von Michael (Gast)


Lesenswert?

Augen Auf

Dokument:
http://www.analog.com/static/imported-files/data_sheets/AD9833.pdf

Seite Drei
Ist die letzte Zeit in der Tabelle mit "T11" bezeichnet.

Dein SCL muss high sein BEVOR du die fsync von high nach low ziehst.
Wenn Du deine zwei Bilder anschaust dann ist das auch der AUGEFÄLLIGSTE 
Unterschied.

von christoph (Gast)


Lesenswert?

vielen vielen dank!!!
du hast mir super weitergeholfen!

von Michael (Gast)


Lesenswert?

Riesen Tip in solchen fällen ist immer:

Mach es so, wie es im Datenblatt steht :)

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.