Forum: Mikrocontroller und Digitale Elektronik ext. 16bit - ADC über SPI einlesen


von Uwe Seidel (Gast)


Lesenswert?

Hi Leute.
Nachdem ich hier schon oft geholfen wurde.....

Ich würde gern über SPI nen MAX186 (12bit) oder gar nen 16-bitter über
SPI betreiben, aber irgendwie hakt bei mir ne Hirnwindung.
Sehe ich das richtig, dass der AVR nur nen SCK ausgibt, wenn ich was in
SPDR schreib?
Das heißt also , ich sende dem Maxim-ADC ein Befehlswort und dann 2mal
8bit(irgendwas) damit der SCK den Maxim-ADC veranlasst, mir die Daten
zu senden !?
Scheint mir "komisch". grübel
Oder hat da jemand ne bessere Idee ???

Danke

von Rockhound (Gast)


Lesenswert?

Ja, das ist leider so.
Habe selbst einen MAX1270, der laut Datenblatt praktisch das gleiche
Protokol benutzt.

von Uwe Seidel (Gast)


Lesenswert?

Hmmmm. na gut , dann werd ich das wohl auch so machen.

Danke

von Peter D. (peda)


Lesenswert?

"Ja, das ist leider so."

Nein, das ist gut so, sonst könnte es nämlich überhaupt nicht
funktionieren.

Der Takt muß stehenbleiben, sonst sind die Daten ja sofort wieder
rausgeschoben, ehe Du den Latchimpuls gesetzt hast.


Peter

von Manfred Glahe (Gast)


Lesenswert?

Hallo Uwe,

ich benutze zwar den MAX1284 aber das funktioniert doch etwas anders
als beschrieben. Der ADW wird über CS\ aktiviert, damit startet er!
Allerdings muß ihm von außen der Takt dazu bereitgestellt werden. Die
16 Bit Takt ergeben also sofort 2 Byte Daten. Mit der pos Flanke des CS
ist der Vorgang abgeschlossen.
Lediglich die dazu passenden DAW (wie hier der MAX5712) müssen nach
StromEIN einmalig konfiguriert werden.
Falls Dich eine Schaltung dazu interessiert melde Dich bitte.

MfG  Manfred Glahe

von Uwe Seidel (Gast)


Lesenswert?

Hallo Manfred,

das Protokoll für den ADC ist mir schon klar. Das was du beschreibst,
ist die Option External-Clk-Conversion, kommt aber
prinzipiell auf das gleiche raus. Bei Internal-Clk-Conversion steht
das Ergebnis halt schon bereit , wenn die 16 Takte kommen.

Mein Problem , wenn man das überhaupt so nennen kann, war die Erzeugung
des Taktes im AVR , wenn man nichts zu senden hat.
Deswegen "unfug" senden (damit SCK erzeugen) und gleichzeitig
die beiden Datenbyte nacheinander empfangen. Der Punkt steht ja
immernoch im Raum. Ich dachte halt nur , man kann ein Register setzen,
wonach der Takt weiter ausgegeben wird um externe Daten lesen zu
können.

Aber ich bin trotzdem an deinem Projekt interessiert, man lernt ja nie
aus, und vielleicht kann ich mein Projekt ja "anlehnen" ;-)

Danke
Uwe

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Uwe,

den AVR kenne ich nicht. Da habe ich dann wohl etwas mißverstanden.
Ansonsten ist der Übertragungsvorgang SPI schon sinnvoll, denn einem
ADW mit MISO und MOSI kann man dann z.B. mit einer Übertragung eine
neue Kanalnummer zuweisen und gleichzeitig den aktuellen Kanal
auslesen. Die Redundanz im anderen Fall ist akzeptabel.
Im Anhang mal das Datalogger Projekt mit einem HC811E2 als Steuer- µP
an der Schnittstelle (dort könnte auch ein anderer µP eingreifen).

MfG  Manfred Glahe

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Der steuerteil.

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Die Frontplatte.

von Uwe Seidel (Gast)


Lesenswert?

Danke,

sieht recht interessant aus. Werde ich heute abend bei nem Bier mal
unter die Lupe nehmen.... ;-)

Uwe Seidel

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Uwe,

die restlichen Dateien (HC11 Assembler und TXT) erklärt vorab einiges.
Falls Du Fragen hast melde Dich.

MfG  Manfred Glahe

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Und nochmal:

von Peter D. (peda)


Lesenswert?

@Uwe

> Mein Problem , wenn man das überhaupt so nennen kann, war die
> Erzeugung
> des Taktes im AVR , wenn man nichts zu senden hat.
> Deswegen "unfug" senden (damit SCK erzeugen) und gleichzeitig
> die beiden Datenbyte nacheinander empfangen. Der Punkt steht ja
> immernoch im Raum. Ich dachte halt nur , man kann ein Register
> setzen,
> wonach der Takt weiter ausgegeben wird um externe Daten lesen zu
> können."


Richtig, das ist "unfug".

Wenn der Takt freilaufen würde, wüßte das SPI ja nicht wann denn
überhaupt die Daten anfangen. Und es würden auch schon die nächsten
Bits rausgeschoben, wärend Du noch nicht das 1. Byte gelesen hast.
Damit wäre spätestens das 2. Byte voll fürn Arsch.

Sei also froh, daß das SPI nur exakt 8 Pulse pro Byte macht und dann
schön geduldig wartet, bis Du das Byte ausgewertet hast.

Ich benutze auch den MAX1270 und setze ihn auf internen
Konversionstakt. Damit ist ein externer Takt völlig überflüssig.

Für 12 Bit liest man einfach 2*8 Bit aus und schmeißt die letzten 4
Bits weg (siehe das 16 Cycle Taktdiagramm).


Peter

von Rockhound (Gast)


Lesenswert?

Richtig Peter.

von Uwe Seidel (Gast)


Lesenswert?

Ich habs ja verstanden, ist mir auch vorher schon klar gewesen, ich hab
nur nach ner eventl. vorhandenen anderen Möglichkeit gesucht.

Hätte ja auch sein können, dass ne Antwort kommt á la :
"Mach es doch so, oder hast du das nicht gewusst?"

Trotzdem danke für eure Antworten.

Uwe

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.