Forum: Mikrocontroller und Digitale Elektronik Zwischen ADC & uC über SPI kommunizieren


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hey,

ich möchte mittels ADC081S021CIMF Analog-Digital Konverter (8bit) mit 
einem Atmel at90usb162 über SPI kommunizieren.

Habe ein Programm geschrieben, in dem ich einen Timer verwende, der alle 
0.5sec einen Interrupt auslöst, indem ich das CS# auf 0 ziehe, um eine 
Konversion zu starten. (Im SPI Transmition Complete Interrupt ziehe ich 
CS# wieder auf 1) Wie an angehängten Bildern zu sehen ist, klappt alles, 
bis auf die Ausgabe/Konversion der Daten. Aber der ADC ist nagelneu, 
also glaube ich nicht, dass der kaput ist?! Man beachte vor allem den 
Spannungspegel des Datensignals!.

Habt ihr eine Idee woran das liegen könnte?

Mit freundlichen Grüßen
Peter

von Peter (Gast)


Lesenswert?

Achja was ich noch vergessen hatte dazuzusagen:

Referenzspannung ist 5V (mittels LM336) und Analogspannung während der 
Messungen war 2V.

MfG. Peter

von Stefan E. (sternst)


Lesenswert?

Wie sieht das Signal auf der Datenleitung aus, wenn du alle 15(16) Bit 
ausließt, und nicht nur 8?

Wie ist der ADC081S021 an den AT90USB162 angeschlossen?

Wie sieht der SPI-Code aus?

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hey,

also im Anhang nun der relevante Teil der Schaltung und der Code.

@Schaltung.png
PB0...SS# (general purpose output bei mir)
PB1...SCLK
PB3...MISO

Bezüglich 16bit auslesen:
Ich verwende wie gesagt die SPI Einheit des at90usb162 und die erzeugt 
automatisch ein SCLK Signal wie in erstem Post, das 8 Flanken hat (weil 
ja auch das Datenregister nur 8 Bit hat) Um wirklich 16 Bit auszulesen 
müsste ich das SCLK Signal softwaremäßig erzeugen, oder?

Mit freundlichen Grüßen
Peter

von Peter (Gast)


Lesenswert?

Niemand ne Idee?

MfG. peter

von pedro (Gast)


Lesenswert?

Was macht die Speisespannung des ADC's während eines Auslesens?

von Peter (Gast)


Lesenswert?

Hey,

die ist Konstant auf 5V. Hab natürlich nen 1uF Kondensator wie im 
Datenblatt drinnen, den man auf der Schaltung nicht sieht, weil ich den 
vergessen hatte, aber er ist da und Spannung ist auch konstant.

MfG. peter

von Purzel H. (hacky)


Lesenswert?

Der Datenausgang des ADC haengt seinerseits an einem Ausgang des 
Controllers. Fehlt ein Pullup ? Allenfalls das Timing verlangsamen, zB 
1us pro Bit. Meist muss man den ADC auch noch konfigurieren, das waere 
auch ueber den Daten-Pin ? Dann koennte es sein, dass der ADC noch gar 
nicht im Auslese-Zustand ist.

von Stefan E. (sternst)


Lesenswert?

Peter schrieb:
> Um wirklich 16 Bit auszulesen
> müsste ich das SCLK Signal softwaremäßig erzeugen, oder?

Oder halt einfach zwei Transfers machen (natürlich ohne CS dazwischen 
auf High zu setzen).

von Peter (Gast)


Lesenswert?

Hey,

also im Datenblatt des ADC steht, dass eine Mindestfrequenz von SCLK von 
1MHz gefordert ist. Habs jetzt aber eben gerade mit einer niedrigeren 
Frequenz versucht. Keine Änderung.

MfG. peter

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

@Stefan Ernst
Das habe ich bereits ebenfalls versucht, doch leider ist die 
Interruptbehandlung nicht schnell genug, dass das komplett ohne Pause 
geht, auch wenn ich im Transmit Complete Interrupt sofort wieder eine 
Übertragung starte entsteht eine Pause (siehe Bild Anhang). Aba danke 
für den Tipp.

MfG. peter

von Stefan E. (sternst)


Lesenswert?

Starte die erste Übertragung, warte in einer Schleife, und starte dann 
die zweite.

von Peter (Gast)


Lesenswert?

Hey,

@Stefan Ernst
Ja so klappt es! Vielen vielen Dank! Man, dass ich da nicht slebst drauf 
gekommen bin, nachdem der Auslesevorgang ja sogar so im Atmel Datenblatt 
gezeigt wird facepalm. Naja Hauptsache es geht.

Danke!

MfG. peter

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.