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
Achja was ich noch vergessen hatte dazuzusagen: Referenzspannung ist 5V (mittels LM336) und Analogspannung während der Messungen war 2V. MfG. Peter
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?
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
Was macht die Speisespannung des ADC's während eines Auslesens?
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
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.
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).
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
@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
Starte die erste Übertragung, warte in einer Schleife, und starte dann die zweite.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.