mikrocontroller.net

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


Autor: Christoph Steinmann (christophst)
Datum:
Angehängte Dateien:

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

#include <avr/io.h>
#include <stdlib.h>


#include <util/delay_basic.h>

unsigned char x; 
unsigned char y;     

void warte(unsigned char zahl)           //warteschleife. warte ist XXXµsek. * zahl
{
  do
  {
    _delay_loop_1(0x0002);
  } while (zahl--);              // solange zahl > 0
}


int main(void)
{
  DDRA = 0x00;
  DDRB = 0xff;
  DDRD = 0xff;  
    PORTD |= (1<<PD7) ; // FSYNC HIGH
while(1)
    {
    while (PINA & (1<<PA1))
      {
      }  
    while (!(PINA  &(1<<PA1))) 
      {
      }
    warte(250);
        SPCR = 0xD7;            // Spi Kontrollregister setzen

    warte(1);
    PORTD &=~(1<<PD7); // FSYNC LOW 
    SPDR = 0x20;  // Ausgabe an das Spi interface
       while (!(SPSR  &(1<<SPIF)))
      {
    y++;
      }
    warte(1);
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
    warte(1);
    PORTD &=~(1<<PD7);           // FSYNC LOW
    SPDR = 0x00;              // Ausgabe an das Spi interface      config  
       while (!(SPSR  &(1<<SPIF)))
      {
      y++;
      }      //
    warte(1);                   
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
    warte(1);
    PORTD &=~(1<<PD7);           // FSYNC LOW
      SPDR = 0x7F;              // Ausgabe an das Spi interface     
     while (!(SPSR  &(1<<SPIF)))
      {
    y++;
      }
    warte(1);
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
    warte(1);
    PORTD &=~(1<<PD7);           // FSYNC LOW
        SPDR = 0xFF;              // Ausgabe an das Spi interface      FREQU-0
       while (!(SPSR  &(1<<SPIF)))
      {
    y++;
      }
    warte(1);
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
    warte(1);                //                   
    PORTD &=~(1<<PD7);           // FSYNC LOW    
    SPDR = 0x7F;              // Ausgabe an das Spi interface      FREQU-0 
     while (!(SPSR  &(1<<SPIF)))
      {
    y++;
      }
    warte(1);
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
    warte(1);
    PORTD &=~(1<<PD7);           // FSYNC LOW
    SPDR = 0x87;              // Ausgabe an das Spi interface      FREQU-1
     while (!(SPSR  &(1<<SPIF)))
      {
    y++;
      }
    warte(1);
    PORTD |= (1<<PD7) ;         // FSYNC HIGH
  
  
  

Autor: Christoph Steinmann (christophst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry vergessen hinzuzufügen...

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

Autor: Michael (Gast)
Datum:

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

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

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

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

Bewertung
0 lesenswert
nicht lesenswert
...---

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

Bewertung
0 lesenswert
nicht lesenswert
-.-.

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

Bewertung
0 lesenswert
nicht lesenswert
So, dassist der signalverlauf des nicht funktionierenden Programmes

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

Bewertung
0 lesenswert
nicht lesenswert
und hier nochmal der komplette signalverlauf des nicht funktionierenden 
Programmes

Danke

Autor: ::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das timing diagramm des datenbattes enthaelt einige Zeiten. sind die 
aller erfuellt ?

Autor: Christoph (Gast)
Datum:

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

Autor: Michael (Gast)
Datum:

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

Autor: NEWBIE (Gast)
Datum:

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

Autor: NEWBIE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder momentmal, was genau meinst du?

SCLK High to FSYNC Falling Edge
Setup Time

finde ich auf seite drei nicht.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Augen Auf

Dokument:
http://www.analog.com/static/imported-files/data_s...

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.

Autor: christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen vielen dank!!!
du hast mir super weitergeholfen!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Riesen Tip in solchen fällen ist immer:

Mach es so, wie es im Datenblatt steht :)

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.