Datum: 07.05.2008 19:46
Hallo,
ich bräuchte etwas Hilfe bei der Terminierung des SPI. Folgende
Situation liegt vor:
Ich will zwei MAX6675 über ca. 3m langen SPI mit einem ATmega16
auslesen. Auf kurze Distanz ist das kein Problem und funktioniert
soweit. Aber jetzt muss ich das ganze über 3m Entfernung hinbekommen.
Der SPI wird mit dem Prescaler 128 bei 8MHz Clock = 62,5kHz betrieben.
Der MAX6675 braucht nur sehr wenig Strom und kann nur ausgelesen werden.
Ich habe mir schon den Artikel über Terminierung durchgelesen und bin
jetzt etwas ratlos, denn ich verwende ein Kabel, mit 6 Adern und einem
Schirm, von dem ich den Wellenwiderstand nicht weiss.
Welche Terminierung kann ich verwenden und wie berechne ich diese am
besten?
Wie sollte ich die Verbindung von den Master zu den Slaves wählen?
Möglichkeit 1) Durchschleifen:
Master-------*-Slave1
|
*---------------Slave2
Möglichkeit 2) Sternförmig:
Master*---------Slave1
|
*---------Slave2
Wie sieht die Terminierung bei beiden Möglichkeiten aus?
Danke im Vorraus.
Datum: 07.05.2008 20:07
spi ist für solche bossen nicht gemacht worden: ich würde dir empfehlen das mit rs232 zu machen und vor jeden spi slave dann noch irgent nen kleinen controller der dann dem max eintrichtert was er zu machen hat.
Datum: 07.05.2008 20:20
Ich weiss dass der SPI nicht für solche Distanzen gemacht wurde, aber es geht mit der entsprechenden Terminierung. Zumindest wenn man dem Forum glauben kann. Ich habe hier schon was von 14m gelesen... allerdings wurde dort immer nur ein Slave angesteuert, wie die Beschaltung bei mehreren Slaves aussieht weiss ich nicht, deshalb ja auch der neue Thread.
Datum: 07.05.2008 20:47
Terminierung brauchst du wenn Reflektionen auftreten können. Bei der unglaublichen Treiberleistung des MAX von 1.6mA wird es sich wohl eher um Übersprechen zwischen den Adern handeln. Nimm geschirmte Leitungen für jede einzelne Ader. Oder auf beiden Seiten einen niederohmigen Treiber mit ordentlich Bumms dahinter.
Datum: 07.05.2008 20:49
Trivial: Variante 2 mit Software-SPI und getrennten Signalen für beide MAXe. Was die Terminierung angeht ist natürlich ein Oszi von Vorteil. Aber probier mal 100 Ohm, vielleicht klappt es damit. Wobei, wie holger anführt, die Datenleitungen wohl schon selber hochohmig genug sind. Aber wenn ein kräftiger 5V-AVR in die CLK/CS-Leitungen bläst, dann dort lieber mit Serienterminierung.
Datum: 08.05.2008 16:26
Also einen Software SPI wollte ich jetzt nicht extra aufbauen. Dem Vorschlag mit den einzeln abgeschirmten Leitungen werde ich mal nachgehen... Oszi habe ich jetzt leider nicht. :-(
Datum: 08.05.2008 16:46
Software-SPI ist extrem einfach. Erst recht, wenn man nur eine Richtung hat.
Datum: 08.05.2008 20:28
Hast du vielleicht ein Beispielcode in C zum Software SPI? Aber wenn ich das Problem schon mit einem besseren Kabel hinbekommen würde, wäre das Softwar SPI hinfällig. Selbst mit Software SPI würde das Problem mit dem Übersprechen oder der Refelexion bestehen bleiben, dann wäre ich fast wieder am Anfang.
Datum: 08.05.2008 21:31
...oder mit der taktfrequenz runtergehen, wenn geschwindigkeit nicht so wichtig ist.
Datum: 08.05.2008 21:34
Also wenn die CPU schon SPI per Hardware kann und wir dann wieder alles per Bitbang rauswackeln, warum dann nicht gleich Morsen per Hand (schafft auch gleich Arbeitsplätze) ? Oder noch besser wären Rauchzeichen ...
Datum: 08.05.2008 21:45
Warum nicht ein Thermoelement mit 5 Meter Länge kaufen ? (oder entsprechend gewünschte Länge) Dann ergibt sich das Problem mit SPI doch gar nicht ? Gruß Sven
Datum: 09.05.2008 11:12
@Sven, so einfach ist das nicht, denn die Schaltung also der MAX6675 (die Vergleichsstelle) würde dann nicht im selben Außentemperaturbereich liegen wie das Thermoelement! Also wird die Messung verfälscht, da der MAX bei der Messung der Thermospannung gleich die Umgebungstmperatur bestimmt und diese dann verrechnet. http://de.wikipedia.org/wiki/Thermoelement @Peter Mit der Taktfrequenz kann ich ohne die CPU Clock zu verringern, nicht mehr runter gehen. Beim Prescaler ist 128 schon das Höchste. @Morsen Ich habe nicht vor einen Softwar SPI zu realisieren, wenn es schon diesen in Hardware gibt.
Datum: 09.05.2008 14:22
ich sehe bei 3 Metern und dieser niedrigen Frequenz keine Probleme auch ohne Terminierung. 100 Ohm als Serienterminierung schaden sichen nicht.
Datum: 09.05.2008 14:29
Bei der Datenleitung lässt sich die Länge durch Taktfrequenz kompensieren. Beim Taktsignal jedoch nicht, nämlich dann nicht wenn eine Reflektion aus einem Taktimpuls deren zwei macht. Wie in Wellenwiderstand dargelegt, ist dafür nicht die Taktfrequenz entscheidend, sondern die Signalflanke. Ein Serienwiderstand als Abschluss klappt prima, wenn der Empfänger des Signals am anderen Ende der Leitung sitzt. Wenn er in der Mitte sitzt klappt das jedoch nicht. Im diesem Fall könnte man also die Stern-Variante mit Serienterminierung des Taktsignals ausprobieren, wobei dann eher 2 100 Ohm Widerstände angesagt sind, einer pro Strang.
Datum: 09.05.2008 19:57
@Andreas
Also sollte ich sternförmig vorziehen und die Takt- und Datenleitung
jeweils bei beiden Slaves am Ende mit 100 Ohm Widerständen versehen.
___
Master Clk--*--------------|_100_|-Slave1 Clk
Master Data-|-*------------|_100_|-Slave1 Data
| | ___
| *------------|_100_|-Slave2 Clk
*--------------|_100_|-Slave2 Data
Datum: 09.05.2008 20:05
Master Clk--*-|_100_|--------------------------Slave1 Clk
|
*-|_100_|--------------------------Slave2 Clk
Master Data-*----------------------------------Slave1 Data
|
*----------------------------------Slave2 Data
Master CS1----|_100_|--------------------------Slave1 CS
Master CS2----|_100_|--------------------------Slave2 CS
Datum: 12.05.2008 15:08
@Andreas Ich habe deine Variante mal aufgebaut, allerdings mit 110 Ohm (was anderes war nicht greifbar), aber irgendiwe funktioniert es trotzdem nicht. :-( Liegt es an den 110 Ohm?
Datum: 12.05.2008 15:14
@olaf je länger die leitung desto geringer die geschwindigkeit mit der du spi übertragen kannst. habe mir jetzt nicht den gesamten beitrag angeschaut, aber mit welcher geschw. arbeitest du ? ggf runter mit der geschwindigkeit. in welcher umgebung arbeitest du ? hast du viele störquellen ? abschirmung wurde ja schon angesprochen. was vllt. auch noch bei der terminierung hilft sind kondensatoren die evtl. spannungspitzen glätten die dein signal verfälschen können. die größe des kondensators hängt dann an der spi geschwindigkeit.
Datum: 12.05.2008 15:37
SPI = Clk 62,5kHz Ich kann nicht weiter runter gehen (siehe erster Post). Störquellen sind jetzt so gut wie keine Vorhanden, vielleicht der CRT Monitor und eine Funkmaus, das war's. Kabel mit einzeln geschirmten Leitungen ist jetzt auch nicht so leicht aufzutreiben...
Datum: 12.05.2008 15:43
Ein kleine Kapazität wäre evenuell noch einen Versuch Wert, falls die Signalflanken (Oszi gucken) recht steil sind. Einige Bustreiber limitieren bewußt die Anstiegszeit (Slewrate), um das EMV-Verhalten günstiger zu gestalten.
Datum: 12.05.2008 15:47
versuchs mal mit nem kondensator von 1-10nf auf den leitungen (clock und daten) gegen masse. ansonsten dürfte nur noch ein abgeschirmtes kabel helfen, oder aber ein höherer pegel. was du versuchen kannst ist mit nem max232 die clock und datenleitung zu übertragen (durch die höhere spannung dürften störeinflüsse minimiert werden). aber 3m sind auch nicht die welt bei 5v und 62.5khz. eigentlich dürfte (sollte) es eigentlich keine größeren probleme geben.
Datum: 12.05.2008 16:38
So ein Mist, ich habe den MAX jetzt wieder direkt ohne 3m Leitung angeschlossen, er antwortet nicht mehr! Hab ich ihn durch das Probieren vielleicht zerstört???
Datum: 12.05.2008 16:58
Entwarnung, der MAX läuft wieder. Allerdings macht mir das Ergebnis noch sorgen, ich muss erstmal nachvollziehen ob die Bits so stimmen können. Was bedeutet die Aussage im Datenblatt über das Bit D0 = Threestate, welchen Zustand nimmt das Bit wann an?
Datum: 12.05.2008 17:40
Hm, so wie es aussieht, ist der MAX kaputt, die Werte haben keinen Bezug zur Realität. :-((
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel