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.
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
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?
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
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)
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?
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.
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.
Und wie schaut das OSZI ohne ATmega aus? Gleiche Messspannung am ADC, etc. Hast du die Defines schon gecheckt?
Defines habe ich Kontrolliert. ADC-Messspannung ist immer die gleiche. Anbei ein Oszibild mit vom ATMEGA getrenntem MISO
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
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.
Ist ein TSOT. Das mit dem Pullup test ich morgen. bis dahin. Schonmal danke für die schnellen Antworten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.