Forum: Mikrocontroller und Digitale Elektronik [Hinweis] Fehler im MAX6675 Datenblatt (SPI-Interface)


von MAX6675 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier ein Fehler im Maxim Datenblatt zum MAX6675 Thermocouple IC: Im 
Datenblatt steht fälschlicher Weise, dass die Daten auf die fallende 
CLK-Flanke ausgelesen gehören. Das stimmt aber - wie man den angehängten 
Oszillogrammen entnehmen kann - definitiv nicht. Sie gehören auf die 
steigende CLK-Flanke (oder in der Mitte des pos. CLK-Pulses) ausgelesen.

Gruß

von Jojo S. (Gast)


Lesenswert?

an diesem Punkt bin ich jetzt auch, und auch 2009 hat das hier schon mal 
jemand gemeldet: Beitrag "MAX6675 Phänomen"
Ich habe meine MAX6675 aus China, sind das möglicherweise Nachbauten die 
sich so verhalten? Oder hat jemand sicher Originale und das Gleiche 
gemessen?

von spess53 (Gast)


Lesenswert?

Hi

>Das stimmt aber - wie man den angehängten
>Oszillogrammen entnehmen kann - definitiv nicht. Sie gehören auf die
>steigende CLK-Flanke (oder in der Mitte des pos. CLK-Pulses) ausgelesen.

Das hängt von den SPI-Einstellungen ab. Und die stimmen bei dir nicht. 
Lt. Datenblatt des MAX6675 hat SCK L als Ruhepegel. Bei dir ist es H. 
Welchen Controller benutzt du?

MfG Spess

von Jojo S. (Gast)


Lesenswert?

Die o.g. Bilder sind nicht von mir, ich habe einen LPC1347 und CPOL=0 
eingestellt, der Clock Ruhepegel ist dann 0. Bilder vom Logic Analyzer 
kann ich erst heute abend liefern, aber auch mit CPOL=0 ist der Effekt 
der Gleiche, wie auch in dem verlinkten noch älteren Thread.

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Ich hab vor kurzem noch ne Lib für den MAX6675 geschrieben und der 
verhält sich programmtechnisch und auch im DSO so wie im Datenblatt 
beschrieben. Sample bei falling edge.

SPI MODE I CPHA = 1 und CPOL = 0 bei einem Mega88A

: Bearbeitet durch User
von Jojo S. (Gast)


Lesenswert?

Danke Thomas. Hast du DSO Screenshots gespeichert und kannst du die hier 
hochladen?

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Ich hänge das Ding nur dran, wenn was nicht klappt. Dann fühle ich mich 
meist uncomfordable und sobald der Fehler gefunden ist kommt das Ding ab 
und ich arbeite weiter. An Fotos denke ich dann nicht. Ich hatte damals 
auch ein Problem mit der Modusfindung, deshalb erinnere ich mich aber 
noch genau daran, dass das Bild im DSO konform mit dem war was ich 
anhand des Datenblattes erwartet hatte, sobald ich das Bit für den SPI 
Modus 1 dann richtig gesetzt hatte im Controller. Wenn Du gar nicht 
weiter kommst kann ich das am Wochenende aber mal machen. SPI Mode I 
sollte aber klappen.

von spess53 (Gast)


Lesenswert?

Hi

>ich habe einen LPC1347 und CPOL=0 eingestellt, der Clock Ruhepegel ist dann >0.

Es gibt auch noch CPHA im SSP/SPI Control Register 0. Und das muss 1 
sein. Siehe S.252:

13.7.2.3 SPI format with CPOL=0,CPHA=1

MfG Spess

von Jojo S. (Gast)


Lesenswert?

spess53 schrieb:
> 13.7.2.3 SPI format with CPOL=0,CPHA=1

ist richtig, CPHA=1 hatte ich auch mal eingestellt und ich bekomme auch 
Daten. Allerdings ändert das nix am MAX sondern sagt nur dem µC wann er 
zupacken soll. Und wenn der MAX bei der fallenden Flanke die Daten 
ändert ist das Ergebnis stark Temperatur und Mondphasenabhängig.
Ich habe den Saleae LA mit 25 MHz samplen lassen und die Daten stehen 
nur für eine Samplephase von 40 ns nach dem fallenden Clock an, dann 
ändern sie sich wenn ein anderes Bit folgt. Das HW SPI mag da noch 
rechtzeitig abtasten können, bei SW SPI wird man aber zu spät kommen. 
Wie geschrieben, ich kann die Screenshots leider erst später liefern.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jojo S. schrieb:
> Und wenn der MAX bei der fallenden Flanke die Daten ändert ist das
> Ergebnis stark Temperatur und Mondphasenabhängig
Keineswegs! Denn er ändert sie wegen der Flanke und logischerweise 
garantiert danach.

> Ich habe den Saleae LA mit 25 MHz samplen lassen und die Daten stehen
> nur für eine Samplephase von 40 ns nach dem fallenden Clock an, dann
> ändern sie sich wenn ein anderes Bit folgt.
Das ist doch ok. Welche Hardware-SPI braucht eine längere Hold-Zeit?

spess53 schrieb:
> 13.7.2.3 SPI format with CPOL=0,CPHA=1
So sehe ich das auch...

MAX6675 schrieb im Beitrag #3535604:
> Im Datenblatt steht fälschlicher Weise, dass die Daten auf die fallende
> CLK-Flanke ausgelesen gehören. Das stimmt aber - wie man den angehängten
> Oszillogrammen entnehmen kann - definitiv nicht.
Dem angehängten Bild kann man entnehmen, dass die fallende Flanke zum 
Übernehmen der Daten genommen werden sollte. Sofort danach wird der 
nächste Ausgangswert angelegt. Das ist eine sehr durchsichtige 
Arbeitsweise, wenn man davon ausgeht, dass SPI nur verkettete 
Schieberegister sind.
Falls man einen Soft-SPI macht, dann müssen die Daten natürlich /direkt 
vor/ der Erzeugung den fallenden Flanke gelesen werden. Denn danach 
wäre zu spät...

von Jojo S. (Gast)


Lesenswert?

Lothar Miller schrieb:
> Das ist doch ok. Welche Hardware-SPI braucht eine längere Hold-Zeit?

ok, dann vergleiche ich nochmal beide Einstellungen. Die Hold Zeit ist 
für den LPC1347 mit min. 0 ns angegeben, den Atmega habe ich zum 
Vergleich noch rausgesucht und da steht typ. 10 ns.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jojo S. schrieb:
> ok, dann vergleiche ich nochmal beide Einstellungen. Die Hold Zeit ist
> für den LPC1347 mit min. 0 ns angegeben,
Das hätte ich erwartet.
> den Atmega habe ich zum
> Vergleich noch rausgesucht und da steht typ. 10 ns.
Uuuups, schon wieder was verpfuscht?
Trotzdem sollten die gemessenen 40ns noch locker ausreichen... ;-)

von Jojo S. (Gast)



Lesenswert?

so, hier sind noch meine Screenshots.
Eine Detailaufnahme, oben ist Clock und darunter MISO, abgetastet mit 
100 MHz. Mit der höheren Auflösung komme ich jetzt auf <= 20 ns hold 
time.
Dann zwei Bilder die das Gleiche Sample zeigen, aber einmal mit CPHA=0 
und einmal mit CPHA=1 ausgewertet. Liefern beide das Gleiche Ergebnis, 
nur das das Timing bei CPHA=1 wesentlich entspannter ist. So würde ich 
einen SPI Sklaven auch implementieren, Daten bei der einen Flanke 
bereitstellen und bei der anderen für gültig erklären. Bei 50 % duty 
cycle haben die Daten einen halben Takt lang Zeit sich zu beruhigen und 
der Master hat einen halben Takt zum abtasten.
Gut, wenn Maxim sagt das die Daten bei der fallenden Flanke abgeholt 
werden können und NXP sagt 0 ns hold time reichen dann lasse ich das 
CPHA=1 mal eingestellt.

von spess53 (Gast)


Lesenswert?

Hi

>Gut, wenn Maxim sagt das die Daten bei der fallenden Flanke abgeholt
>werden können und NXP sagt 0 ns hold time reichen dann lasse ich das
>CPHA=1 mal eingestellt.

Also war der 'Fehler im Datenblatt' wohl doch etwas vorschnell. Mit 
solchen Aussagen sollte man sehr, sehr vorsichtig sein.

MfG Spess

von Jojo S. (Gast)


Lesenswert?

spess53 schrieb:
> Also war der 'Fehler im Datenblatt' wohl doch etwas vorschnell. Mit
> solchen Aussagen sollte man sehr, sehr vorsichtig sein.

die stammte zwar nicht von mir, aber auch Datenblattschreiber sind nicht 
unfehlbar.
Ausserdem habe ich mich wieder umentschieden :-) Ich habe mir jetzt auch 
das Datenblatt vom Nachfolger MAX31855 angesehen, die Diagramme sind 
gleich und es werden die gleichen Characteristics beziffert. Der Neue 
ist nur schneller und liefert mehr Bits. Und die entscheidende Passage 
ist hier einfach anders formuliert: 'Bits D[30:18] contain the converted 
temperature in the order of MSB to LSB, and are presented to the SO pin 
within tD0 of the falling edge of SCK.'
Heisst für mich auf Deutsch: die Bits stehen spätestens nach tDO (40 ns 
beim 31855, 100 ns beim 6675) an. Das erste Bit (MSB) steht spätestens 
nach 100 ns nach CS an. Diese Zeit halte ich locker ein, >1 µs. Dann 
habe ich immer bis zur nächsten fallenden Flanke Zeit die Bits zu lesen 
- die steigende Flanke liegt also zu 100 % in diesem Fenster.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jojo S. schrieb:
> Dann habe ich immer bis zur nächsten fallenden Flanke Zeit die Bits zu
> lesen - die steigende Flanke liegt also zu 100 % in diesem Fenster.
Oder andersrum: du verschenkst die Hälfte der Zeit, weil du nicht bis 
zur fallenden Flanke wartest.

Jojo S. schrieb:
> Gut, wenn Maxim sagt das die Daten bei der fallenden Flanke abgeholt
> werden können
Dieser Ausdruck "bei der Flanke abgeholt werden können" dreht mir immer 
den Magen um. Richtig ist, dass MIT der Flanke übernommen werden sollen. 
Die Flanke taktet das Schieberegister...

von MWS (Gast)


Lesenswert?

Lothar Miller schrieb:
> Jojo S. schrieb:
>> Gut, wenn Maxim sagt das die Daten bei der fallenden Flanke abgeholt
>> werden können
> Dieser Ausdruck "bei der Flanke abgeholt werden können" dreht mir immer
> den Magen um. Richtig ist, dass MIT der Flanke übernommen werden sollen.

Nein, in diesem Fall sollen die Daten eben nicht MIT fallender Flanke 
übernommen werden, sondern die Daten stehen NACH der fallenden Flanke 
des Masters plus tDO bereit. So steht's im DB, für den 6675: "SCK Fall 
to Output Data Valid -> 100ns"

Nimmt man das SPI-Interface eines AVRs (ATM328p), dann gibt das DB Setup 
und Hold mit jeweils 10ns an, Mastermode. Das Timing kann damit von der 
SPI-HW bei der Übernahme auf fallende Flanke nicht eingehalten werden. 
Um das zu erreichen, übernimmt man bei steigender Flanke, dann ist tDO 
berücksichtigt. Das steht so aber nicht im DB des 6675, das muss man 
sich selbst denken.

von Lattice User (Gast)


Lesenswert?

MWS schrieb:
> Lothar Miller schrieb:
>> Jojo S. schrieb:
>>> Gut, wenn Maxim sagt das die Daten bei der fallenden Flanke abgeholt
>>> werden können
>> Dieser Ausdruck "bei der Flanke abgeholt werden können" dreht mir immer
>> den Magen um. Richtig ist, dass MIT der Flanke übernommen werden sollen.
>
> Nein, in diesem Fall sollen die Daten eben nicht MIT fallender Flanke
> übernommen werden, sondern die Daten stehen NACH der fallenden Flanke
> des Masters plus tDO bereit. So steht's im DB, für den 6675: "SCK Fall
> to Output Data Valid -> 100ns"
>
> Nimmt man das SPI-Interface eines AVRs (ATM328p), dann gibt das DB Setup
> und Hold mit jeweils 10ns an, Mastermode. Das Timing kann damit von der
> SPI-HW bei der Übernahme auf fallende Flanke nicht eingehalten werden.
> Um das zu erreichen, übernimmt man bei steigender Flanke, dann ist tDO
> berücksichtigt. Das steht so aber nicht im DB des 6675, das muss man
> sich selbst denken.

das ganze Datenblatt lesen, auch die minimal erlaubten High bzw Low 
Zeiten für die Clock sowie deren maximale Frequenz.

Bei maximaler Geschwindigkeit wirst du bei Verwendung der steigenden 
Flanke Probleme bekommen die Setupzeit im Worstcase einzuhalten. Füge 
dann noch ein etwas längeres Kabel und eventuell (aktive) Optokoppler 
oder Leitungstreiber hinzu und schon geht gar nichts mehr.

Ich schliesse mich Lothar an, die fallende Flanke sollte verwendet 
werden, dann ist das alles unkritisch, auch wenn die Holdzeit des 6675 
leider nicht spezifiziert ist, bzw nur duch den angemeckerten Satz 
impliziert wird, dass sie >0 ist.

von MWS (Gast)


Lesenswert?

Lattice User schrieb:
> das ganze Datenblatt lesen, auch die minimal erlaubten High bzw Low
> Zeiten für die Clock sowie deren maximale Frequenz.

Ein ausgezeichneter Ratschlag, wenn Du den jetzt noch selbst beherzigst, 
dann wird alles gut. ;-)

Max. Clock = 4,3MHz = 232ns / Periode, min. Clock H/L = 100ns.

Zuerst kommt die fallenden Flanke des Masters, welche dem Slave sagt, er 
möge Daten bereitstellen, wofür dieser bis zu 100ns benötigen darf. 1:1 
Clockratio vorausgesetzt, kommt nach 116ns die steigende Flanke, zu 
welchem der Master die Daten übernimmt. Das ist doch vom Timing 
einwandfrei und genug Zeit bis der Master wieder auf Low zieht.

Wenn jedoch der Master auf seinen fallende Clock sampelt und der Slave 
bis zu 100ns benötigt, bis die Daten sicher stehen, wie soll er da 
irgendwie im Timing liegen? Besonders, wenn das hier auch noch zuträfe:

> Bei maximaler Geschwindigkeit wirst du bei Verwendung der steigenden
> Flanke Probleme bekommen die Setupzeit im Worstcase einzuhalten. Füge
> dann noch ein etwas längeres Kabel und eventuell (aktive) Optokoppler
> oder Leitungstreiber hinzu und schon geht gar nichts mehr.

D.h. Clock zum Master verzögert sich zum Slave, die rücklaufenden Daten 
auch, während in der Zwischenzeit der Master bereits irgendetwas 
übernommen hat.

Aber wenn Du schon diese Meinung vertrittst, dann erklär' doch mal an 
einem einfachen Beispiel, wie Du Dir eine Abholung bei fallender Flanke 
so vorstellst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

MWS schrieb:
> Nein, in diesem Fall sollen die Daten eben nicht MIT fallender Flanke
> übernommen werden
Steht aber so im Datenblatt. Ganz oben rechts im Screenshot...

> sondern die Daten stehen NACH der fallenden Flanke des Masters plus tDO
> bereit. So steht's im DB, für den 6675: "SCK Fall to Output Data Valid
> -> 100ns"
Damit ist also die fallende Flanke der sicherste weil stabilste 
Zeitpunkt, wo die Daten übernommen werden könnten. Denn nach oder besser 
wegen der fallenden Flanke kommt ja wieder Bewegung in den Laden...

MWS schrieb:
> kommt nach 116ns die steigende Flanke, zu welchem der Master die Daten
> übernimmt. Das ist doch vom Timing einwandfrei und genug Zeit bis der
> Master wieder auf Low zieht.
Aber wenn der Master nochmal 116ns warten würde, wären die Daten noch 
stbiler...

> Wenn jedoch der Master auf seinen fallende Clock sampelt und der Slave
> bis zu 100ns benötigt, bis die Daten sicher stehen, wie soll er da
> irgendwie im Timing liegen?
Wenn sich die Daten wegen der fallenden Flanke ändern, dann ist die 
nächste fallende Flanke die Flanke mit dem größten Abstand und der 
längsten Setup-Zeit.

> Aber wenn Du schon diese Meinung vertrittst, dann erklär' doch mal an
> einem einfachen Beispiel, wie Du Dir eine Abholung bei fallender Flanke
> so vorstellst.
Ein Schieberegister "holt" nichts ab, sondern wird einfach mit der 
fallenden Flanke getaktet. Und laut der Rechnung hat das Signal 
zwische zwei solcher Flanken insgesamt 232ns Zeit, sich zu 
stabilisieren. Davon geht weg: der Slave braucht 100ns, der Koppler 
50ns, die Leitung 17ns, das Schieberegister hat eine Setup-Zeit von 10ns 
(alles halbwegs realistische Beispielwerte!!), bleiben zur 
Signalstabilisierung noch: 232-100-50-17-10 = 55ns. Und nur so kann es 
funktionieren...

: Bearbeitet durch Moderator
von Jojo S. (Gast)


Lesenswert?

nur warum sollte man Treiber und damit Verzögerungen nur in einer 
Leitung einbauen? Takt und Daten gehören gleichmässig 
getrieben/verzögert, wer das einseitig verzögert ist doch selber Schuld.
Dazu kommt das die tDS = 100 ns eine max. Angabe ist, nach meiner 
Messung ändert sich der Pegel schon nach 10..20 ns (bei 100 MHz kann ich 
nur mit 10 ns auflösen). Damit ist man beim ATMega schon sehr nah an den 
min. 10 ns Haltezeit dran. Aber da ich einen LPC benutze ist mir das 
gerade egal :-) Und auch das Auslesen mit 4 MHz läuft sauber.

von Jojo S. (Gast)


Lesenswert?

MWS schrieb:
> Zuerst kommt die fallenden Flanke des Masters, welche dem Slave sagt, er
> möge Daten bereitstellen, wofür dieser bis zu 100ns benötigen darf. 1:1
> Clockratio vorausgesetzt, kommt nach 116ns die steigende Flanke, zu
> welchem der Master die Daten übernimmt. Das ist doch vom Timing
> einwandfrei und genug Zeit bis der Master wieder auf Low zieht.

das wäre allerdings auch sehr knapp, mein Master hat eine Setup time von 
15 ns, damit bin ich dann noch 1 ns im grünen Bereich :) Also begnüge 
ich mich mit 4 MHz max. Takt und warte eine knappe µs länger auf das 
Ergebnis. Da der MAX eh erst nach 220 ms einen neuen Wert liefern kann 
ist das auch nicht so tragisch.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jojo S. schrieb:
> Takt und Daten gehören gleichmässig getrieben/verzögert, wer das
> einseitig verzögert ist doch selber Schuld.
Das ist nur die halbe Wahrheit, denn für den Master wird ja tasächlich 
nur das MISO-Signal verzögert. Der Schiebetakt ist ja "sofort" im 
Master, denn er wird vom Master erzeugt...

Die gesammelten Verzögerungen sind aus sicht des Masters also: Laufzeit 
Takt vom Master bis zum Slave plus der Verzögerung im Datenpfad vom 
Slave zum Master.

von Jojo S. (Gast)


Lesenswert?

gut, ich ergebe mich und bin froh keine Treiber und kurze Leitungswege 
zu haben.
Es ist wichtig die richtige Flanke zu nehmen vor allem wenn die 
Taktfrequenz hoch wird oder Treiber ins Spiel kommen. Und beim SW SPI 
aufpassen wann die Datenleitung gelesen oder gesetzt wird.
Danke für die gute Aufklärung!

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.