Hallo,
ich bekomme leider keine Antwort (DOUT) vom oben genannten Chip.
MOSI, SCK, CS passen soweit (mit dem Oszi gemessen).
Habe das EVAL Board von AD (sollte also an der HW wohl nicht liegen).
Hier mal meine Config.:
1
/* set MOSI and SCK output, all others input */
2
MOSI_DDR|=(1<<MOSI_BIT);
3
MISO_DDR&=~(1<<MISO_BIT);
4
SCK_DDR|=(1<<SCK_BIT);
5
SS_DDR|=(1<<SS_BIT);// software slave select signal
6
SS_HA_DDR|=(1<<SS_HA_BIT);// hardware slave select signal
Jan H. schrieb:> MOSI, SCK, CS passen soweit (mit dem Oszi gemessen).
Hast du das gegen das Timing im Datenblatt kontrolliert?
Die Namen sind doch sehr gewöhnungsbedürftig:
spi_enable_chip();
spi_disable_chip(); // start transmission condition
Wenn was disbled ist, dann ist es inaktiv.
Oder andersrum: der Slave ist aktiv, wenn sein low aktiver SS# Eingang
low ist...
> MOSI, SCK, CS passen soweit (mit dem Oszi gemessen).
Zeig doch mal...
> ich bekomme leider keine Antwort (DOUT) vom oben genannten Chip.
Die MISO Leitung ist also komplett ruhig?
BTW: welches Register willst du denn da auslesen? Ich würde mit dem
Versionsregister anfangen...
Ich kann aktuell leider kein Foto machen.
Ja, ist vielleicht wirklich ein bisschen Irreführend. Passt aber. Er
wechselst von High --> Low und zum Schluss wieder auf High.
Das Timing, habe ich noch nicht in Betracht gezogen, dass sollte doch
wohl für das auslesen des ID Register okay sein.
Übrigens versuche ich das ID Register zu lesen (0x05) und die
Entsprechenden Bits werden dafür auch gesetzt (hoffe ich doch mal das
dass so richtig ist laut Datenblatt)
Sch*** KommunikationsRegister...
Lothar M. schrieb:> Jan H. schrieb:>> Das Timing, habe ich noch nicht in Betracht gezogen> Aber auf Bitebene (Position Pegelwechsel von MOSI und SCLK) schon, oder?
Wie genau meinst du das jetzt???
Also die Pegel sind vorhanden MOSI, SCLK, CS
Habe auch zwischen CS mal ein delay gepackt, verschiedene SPI Modes
getestet. Vom Chip keine Reaktion auf MISO...
Jan H. schrieb:> Wenn ich die Leitungen "MOSI - MISO" Verbinde, bekomme ich auch die> Daten die ich sende.
Das ist klar, da hat der Empfänger den gleichen SPI Mode wie der
Sender...
>> Aber auf Bitebene (Position Pegelwechsel von MOSI und SCLK) schon, oder?> Wie genau meinst du das jetzt???> Also die Pegel sind vorhanden MOSI, SCLK, CS
Mir geht es nicht um die Pegel sondern darum, wann die Pegel wechseln.
Oder mit anderen Worten: den SPI Mode. Hast du den ausgewählt, der zum
Timing m Datenblatt passt?
Jan H. schrieb:> hat jemand eine Idee???
Zwei Sachen: Zum einen benötigt das Teil ein "Delay between consecutive
read/write operations" in Abhängigkeit des Power Modes zw. 3/MCLK ns bis
12/MCLK ns. Dazu nach dem Aufwachen aus dem Standby 130 MCLK-Zyklen.
Zum anderen, siehe Abschnitt Digital Communication, ist der Ablauf dort
etwas anders als im Programm:
Jan H. schrieb:> Hier mal mein aktueller Stand.
Liest du auch die Fragen? Und suchst Antworten darauf?
Hast du schon mal das Timing deines SPI-Interfaces gegen das Datenblatt
kontrolliert? Und zwar Bit für Bit? Klar is das Arbeit, aber dieses
blinde Herumgestochere hier bringt dich auch nicht weiter...
Jan H. schrieb:> Wo genau ist in meinem Programm waitforSPI(); ?
Das da ist es: while(!(SPSR & (1<<SPIF)));
> Meinst du damit das Empfangen?
SPI sendet und empfängt gleichzeitig. Um etwas zu empfangen muss etwas
gesendet werden. Nach dem Senden ist auch der Empfang fertig...
Insofern könnte man diese Routine universeller machen:
Morgen,
nein das habe ich leider noch nicht gemacht. Werde ich gleich mal
messen.
Du meinst sicherlich vom ersten Pegelwechsel zum nächsten (erste
steigende Flanke bis zur nächsten steigenden Flanke).
\CS -> Pulsdauer = 2,2µS (454KhZ), Bis nächste Flanke = 134µS
(7,440KHz)
\SCLK -> Pulsdauer = 4,0µS (250KhZ), Bis nächste Flanke = 8µS (125KHZ)
Jan H. schrieb:> Du meinst sicherlich vom ersten Pegelwechsel zum nächsten (erste> steigende Flanke bis zur nächsten steigenden Flanke).
Ich meine, dass du das Timingdiagramm im Datenblatt mit allen seinen
Zeiten und Bezügen kontrollieren und einhalten musst. Denn im Datenblatt
steht, wie man diesen Chip ansteuert. Und DU musst sicherstellen, dass
du diese Parameter einhältst.
Dort auf den Seiten 11 und 12 findet sich das Timing auf Hardware- und
Bitebene:
http://www.analog.com/media/en/technical-documentation/data-sheets/AD7124-4.pdf
Und auf den Seiten 38 und 50 findet sich die Kommunikation auf der
Protokollebene...
Hallo,
kann es sein, dass ich einen großen Fehler gemacht habe und den Chip
(was das Digitalteil angeht) mit 5V Pegeln bedient habe? Kann ich
dadurch das Digitalteil toasten?
Der Chip arbeitet mit 3,3V...?!
Moin zusammen,
ich studiere gerade das Datenblatt.
Da steht geschrieben: "wenn sie etwas lesen möchten, müssen sie zuerst
ein register beschreiben".
Nur mal so als Anregung, ich mache nur die Hardware, nicht das Programm.
Im übrigen bin ich ziemlich sicher, dass der ADC mit 5V "getoastet"
wird, sofern diese zwischen AVDD und AVSS anliegen (vgl. "absolute
maximum ratings)
Viel Erfolg!