warum funktioniert mein ad9833 nicht?

OP #1337952
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
Angehängte Dateien:
Gast #1338200
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.
Gast #1343190
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
Angehängte Dateien:
Gast #1344544
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!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren