Forum: Mikrocontroller und Digitale Elektronik SPI Signal bricht zusammen


von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Lesenswert?

Hallo erstmal.
Ich möchte mit einem µC (ATMEGA32M1) via SPI einen AD- Wandler auslesen 
(AD7922 von Analog Devices).
Wenn ich den Datenausgang des AD-Wandlers mit dem Oszi verbinde ohne den 
AT-Mega angeschlossen zu haben sieht das Signal gut aus.
Verbinde ich MISO mit dem Datenausgang des AD-Wandlers,so bricht das 
Signal zusammen (nur noch Rauschen im mV Bereich Messbar).
Ich verwende eine Software SPI, mit Hardware SPI trit jedoch der gleiche 
Fehler auf.
Miso ist auch korrekt als Eingang definiert.
Am AD Wandler ( direkt am Pinn gemessen) liegen 5V an.

Bin für jede Anregung dankbar.

von Benjamin U. (utzus)


Lesenswert?

Martin Ettrichraetz schrieb:
> Am AD Wandler ( direkt am Pinn gemessen) liegen 5V an.

Während er am Atmega angeschlossen ist und dort nur mV Rauschen ist??

Zeig mal etwas Code, etwas Schaltung (Pläne, Fotos).  So kann man nur 
Raten!!

Grüße

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin Ettrichraetz schrieb:
> Verbinde ich MISO mit dem Datenausgang des AD-Wandlers,so bricht das
> Signal zusammen (nur noch Rauschen im mV Bereich Messbar).
Während einer Übertragung mit aktivem Slaveselect?
Könnte es sein, dass der uC-Pin als Ausgang konfiguriert ist?

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Angehängte Dateien:

Lesenswert?

So,
Pin ist def. als eingang Definiert
(via Debugwire überprüft, um sicherzustellen dass nicht irgendwo im 
Programm das DDR geändert wird)
Senderoutine:
1
  cli();                            // für Zeit der Konvertierung Interrupts deaktivieren
2
   uint16_t buffer =0;                    // buffer für Empfangswert initialisieren
3
   setbit(PORT_SPI_S,PIN_MOSI_S);                // Mosi auf 1 setzten --> Sende nur 111111.....
4
  // setbit(PORT_SPI_S,PIN_SCK_S);
5
   setCS();                          // ADC CS setzten
6
   for(uint8_t i =0;i<16;i++){                // 16 mal 1 senden, und ADC Ergebniss empfangen
7
    asm volatile("nop");                  // Nops zur Homogenisierung des Clocks (50/50 Verhältniss zwischen 1 und 0)
8
    asm volatile("nop");
9
    asm volatile("nop");
10
    clearbit(PORT_SPI_S,PIN_SCK_S);              // fallende CLK-Flanke generieren
11
    if(getbit(PIN_SPI_S,PIN_MISO_S)) setbit(buffer,0);    // Wenn auf MISO 1 empfangen LSB von Buffer
12
    buffer<<=1;
13
    setbit(PORT_SPI_S,PIN_SCK_S);
14
   } 
15
   
16
   clearCS();
17
   sei();
18
   buffer>>=1;
19
   buffer &=0x0FFF;
20
   ADCValues[1]=buffer;
21
   ADCs[0].data[1]= buffer;


Initialisierung:
1
void initADC_AD9722(uint8_t usedADC,uint8_t ch1,uint8_t ch2,CAN_message *msg11, CAN_message *msg12,uint8_t pos11, uint8_t pos12,CAN_message *msg21, CAN_message *msg22,uint8_t pos21, uint8_t pos22){
2
   DDR_SPI_S |= (1<<PIN_MOSI_S)|(1<<PIN_SCK_S);      // Clock und MOSI auf Ausgang
3
 //  PORT_SPI_S|= (1<<PIN_MISO_S);              // Pull Up Resistor
4
   DDR_CS_S  |= (1<<PIN_CS_S1);                // DDR-Chip Select auf Ausgang
5
   setbit(PORT_SPI_S,PIN_SCK_S);              // Clock auf 1 setzten
6
  usedCH = usedADC;
7
  switch(usedCH){                      // Chip selects setzten                
8
    case 1:                        // 1 verwendeter ADC
9
      setbit(PORT_CS_S,PIN_CS_S1);          // Chip Select 1 auf 1 setzten ( disable ADC1)
10
11
      break;
12
    
13
    default:                      
14
      break;
15
  }  
16
}

Im Anhang Schaltplanauschnitte für AD Wandler und µC

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Lesenswert?

Habe gerade das Problem auf das ADC Board einschränken können:
-ATMEGA mit ADC Board verbunden
-MISO und CLK auf Oszi
-Multimetermessung der Spannung:
    -An Stützkondensator 5V keine Veränderung des Oszibildes
    -an Versorgungspin des ADC : Das gewünschte Signal ist auf dem Oszi 
Messbar ( jedoch etwas verrauscht)

von Benjamin U. (utzus)


Lesenswert?

Martin Ettrichraetz schrieb:
> DDR_CS_S  |= (1<<PIN_CS_S1);                // DDR-Chip Select auf Ausgang
>    setbit(PORT_SPI_S,PIN_SCK_S);

Also so seh ich jetzt keinen Fehler. Aber check doch mal deine Defines. 
Vielleicht hat sich dort ein PIN-Dreher eingeschlichen!

Martin Ettrichraetz schrieb:
> -Multimetermessung der Spannung:
>     -An Stützkondensator 5V keine Veränderung des Oszibildes
>     -an Versorgungspin des ADC : Das gewünschte Signal ist auf dem Oszi
> Messbar ( jedoch etwas verrauscht)

Was ist "keine Veränderung" ? Gehts oder gehts nicht?

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Lesenswert?

Keine Veränderung sollte bedeuten "geht nicht"
Allerdings scheint dieser Effekt( dass eine Messung mit Multimeter zur 
scheinbaren Funktion führt) ein Zufall gewesen zu sein.
Er ist nicht reproduzierbar.
Ich messe 5 V an den Eingangspins des ADC auch wenn der µC Angeschlossen 
und Kommunikation in Betrieb.

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Angehängte Dateien:

Lesenswert?

Wenn ich den Pull Up an MISO aktiviere bekomme ich das angehängte 
Oszibild.
Oben CLK unten MISO.
Der ADC zieht den Pegel nach unten.

von Benjamin U. (utzus)


Lesenswert?

Und wie schaut das OSZI ohne ATmega aus? Gleiche Messspannung am ADC, 
etc.

Hast du die Defines schon gecheckt?

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Angehängte Dateien:

Lesenswert?

Defines habe ich Kontrolliert.
ADC-Messspannung ist immer die gleiche.
Anbei ein Oszibild mit vom ATMEGA getrenntem MISO

von Bernhard S. (b_spitzer)


Lesenswert?

Pinout fürs falsche Gehäuse genommen?? Dein gezeigtes Pinout ist für das 
TSOT-Gehäuse (SOT-23 mit 8 Pins). Das MSOP-Gehäuse hat eine andere 
Pinbelegung... (der Die liegt da wohl auf dem Rücken)
http://www.analog.com/static/imported-files/data_sheets/AD7912_7922.pdf

tschuessle
Bernhard

von tip (Gast)


Lesenswert?

Pack doch an deinen MISO-Pin mal einen Pull-UP-Widerstand und schau ob 
der den PIN nach oben gezogen bekommt. Dadurch kannst du ausschließen, 
dass dein Pin als Ausgang fungiert.

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Lesenswert?

Ist ein TSOT.
Das mit dem Pullup test ich morgen.
bis dahin.
Schonmal danke für die schnellen Antworten.

von Martin E. (Firma: Fraunhofer) (ettrichraetz)


Lesenswert?

MISO Pin gerade mit PULL UP getestet, Pegel wird nach oben gezogen und 
korrekt erkannt ( mit DW getestet).
ich bin grade am ende mit meinem Latein.

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.