Forum: Mikrocontroller und Digitale Elektronik AD Wandler ADS8320


von Axel (Gast)


Lesenswert?

Hat von Euch schon jemand mit dem AD Wandler ADS8320 von TI via SPI an
einem Atmel AVR gearbeitet? Ich habe das Problem, dass ich diesen nicht
am SPI des Atmel zum Laufen bekomme.

Jedenfalls bekomme ich nur 0xff´s zurück und weiss nicht wieso. Ich
habe mir ein Testboard gebaut gemäß der Schaltung im Datenblatt um
einige Tests bezüglich der Geschwindigkeit zu fahren. Das Board haben
sich auch schon drei Leute angeschaut und finden Schaltungstechnisch
keinen Fehler. Daran wird es also wahrscheinlich nicht liegen.

Gibt es sonst einige Kniffe zu diesem Wandler die ich vielleicht nicht
berücksichtige?

Ich werde morgen mal ein Bild vom Oszi mit den Signalen vom MISO, SCLK,
SS anhängen damit das Problem vielleicht etwas verständlicher ist.

Aber vielleicht hat ja schon jemand eine Idee. Es gibt wohl auch schon
einen ähnlichen Thread, aber wie das meist in Foren so ist werden nach
einer Erleuchtung des Fragenden die Erkenntnisse nicht mehr
weitergeposted so dass das Problem für die "Nachwelt" damit nicht
gelöst ist.

Ciao Axel

von Axel (Gast)


Angehängte Dateien:

Lesenswert?

So da habe ich nun mal den Oszi Bildschirm mit angehängt.

oben Ch1 -> Das was am Dout des AD Wandlers rauskommt.
            (Immer dasselbe, egal ob der Signalpin direkt an Masse oder
Vref liegt)

mitte Ch2 -> die generierte SPI Clock (schiebe 3 mal ein Byte ins SPDR
damit die Clock vom Controller erzeugt wird.

unten Ch3 -> Das Chip Select Signal.

Ich nutze bei einer Clock von 3.6864x10^6 einen Teiler von 4, habe aber
auch schon mit anderen Clocks rumexperimentiert. Hat aber leider auch
nichts gebracht.

Vielleicht weiss ja jemand von Euch weiter.

Axel

von Axel (Gast)


Lesenswert?

Niemand eine Idee?

Schade

von Wolfram (Gast)


Lesenswert?

bist du dir sicher dass dein MC als Master läuft und nicht
zwischenzeitlich in den Slave Modus geschaltet hat? (siehe SS Pin im
Datenblatt!)
Was für eine Skalierung haben CH1,CH2 und CH3 (5V,1V,10V)???/DIV
Warum zieht CH1 von 3,3V ? auf 5V

von Michael (Gast)


Lesenswert?

Ich schicke 'mal einen Codeschnipsel ohne Kommentar; vielleicht ist
eine Anregung dabei.

#ifdef ADS8320
uint get_adc()    // 7822 und 8320
{
uint temp;
char n, samples=0;
  PORTC &= ~ADC_CS;    // cs auf 0
  n = SAMPLES_8320;
  do {
    PORTC &= ~ADC_CLK;    // clk auf 0
    kurz();
    samples++;
  //  kurz();
    PORTC |= ADC_CLK;    // clk auf 1
//    kurz();
  } while(PINC & ADC_DAT && n--);  // bis 0-bit erscheint
  n = 16;      // immer 16 bit lesen
  while(n--) {      // 16 bit einlesen
    PORTC &= ~ADC_CLK;    // clk auf 0
    temp <<= 1;      // ergebnis schieben
    PORTC |= ADC_CLK;    // clk auf 1
    if(PINC & ADC_DAT) temp++;  // bit 1 uebernehmen
  }
  PORTC &= ~ADC_CLK;    // clk auf 0
  PORTC |= ADC_CS;    // cs auf 1
  if(samples <= SAMPLES_7822) return(temp &0xfff0);
  else  return(temp);
}

von Axel (Gast)


Lesenswert?

@Wolfram
Ich habe heute im Datenblatt auch gelesen dass es wohl sehr wichtig ist
den /SS korrekt zu schalten bzw. auf High zu legen. Den lasse ich aber
offen da ich den /CS vom Slave über PINB0 ansteuere. Mit offen meine
ich ihn nicht auf High Pegel zu ziehen.

Was mich eher interessiert ist, dass der ADC ja zum Wandeln auch eine
Clk(Ch2) braucht, diese aber (siehe Oszi Pic) erst nach dem Chip
Select(Ch3)und dem High-Pegel des ADC Dout(Ch1) beginnt.

@Michael
Danke für Deine Anregung. Der Code ist gut wenn man nicht das
integrierte SPI nutzen möchte. Das ist aber meine Voraussetzung es
darüber zu machen. Trotzdem nocheinmal Danke!

von Axel (Gast)


Lesenswert?

Achso, nochmal zu den Oszi Einstellungen:

Die Clock scheint im Pegel nur falsch zu sein. An dem Kanal hing ein
x10 Tastkopf. Ausserdem wollte ich nur mal schnell ein Bild haben und
hab da an das Layout des Bildes keine Zeit verschwendet.

Die Frage warum der Dout nach dem Tristate Zustand jedoch auf 3,3V geht
und nach den 3 gesendeten Bytes nicht auch wieder auf High geht, stelle
ich mir auch gerade. Die Schaltung hängt bei mir am STK500 und der gibt
bekanntlich 5V als VTG ab. Jo jo.
Vielleicht habe ich das Teil ja schon beim einlöten gehimmelt. Mist nur
dass ich vom Baustein  keinen mehr habe.

Noch jemand eine Idee?

von Axel (Gast)


Lesenswert?

Auch nach der Kontrolle des /SS PINs ist das Ergebnis das gleiche.

@Wolfram

Wo bitte siehst Du dass der Baustein als Slave fungiert?


Axel

von Axel (Gast)


Lesenswert?

Hier mal mein Sourcecode.
 Vielleicht findet da ja jemand einen Fehler.

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

int main(){
PORTB  =  0x11;
DDRB  =  (1<<PINB0)|(1<<PINB7)|(1<<PINB5)|(1<<PINB4);
SPSR  =  0x00;
SPCR  =  0x50;
unsigned char i;


while(1){
  PORTB&=FE; //CS auf LOW
  for(i=0;i<3;i++){
     SPDR=  0xFF;
     while(!(SPSR&(1<<SPIF)));
     }
  PORTB|=0x01; //CS auf HIGH
}
return 0;
}

von Drei N. (3_newton)


Lesenswert?

Wasn das für ein Oszi?
3N

von Axel (Gast)


Lesenswert?

Es ist ein Yokogawa. Typnummer habe ich nicht im Kopf fängt aber glaub
ich mit ner 15 an! Hat zudem einen Bernsteinfarbenes Display und ein
Disklaufwerk rechts am Bildschirm.

Axel

von Axel (Gast)


Lesenswert?

Nur als Info. Das mit dem ADS8320 habe ich nun sein gelassen. Das
Bauteil scheint wohl defekt zu sein. Daher habe ich nun einen ADS8344
von TI genommen. War eh sinniger, da ich mehrere Eingänge eh gebraucht
hätte. Passt so also ganz gut.

Und vor allem....... der läuft. War nur eine Krux den auf eine
Testplatine zu löten.

Danke nochmal für die zahlreichen Tipps ;-)

Axel

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.