mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SSI via SPI mit RS-485


Autor: Niels göran Blume (ngblume)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen !

Ich habe eine Frage bezüglich der SSI Schnittstelle, die man sehr häufig 
an Rotary Encodern findet. Ich habe von der Firma Posital, die selbst 
auch diese Drehgeber herstellt, eine Application Note gefunden, die 
beschreibt wie man eine solche SSI Schnittstelle mit Hilfe des 
SPI-Busses am ATMega88 implementiert 
(http://www.posital.de/de/products/POSITAL/Absolute...).

Nun habe ich zusätzlich ein Display, das auch über den SPI-Bus 
angesteuert wird (http://www.watterott.com/de/MI0283QT-2-Adapter und 
http://www.watterott.net/mi0283qt2/mi0283qt-2_v10.pdf).

Nun meine Idee: Ich würde gerne aus dem RS-485 Treiber, der für das SSI 
Interface notwendig eine Art Tri-State SPI Device machen, sprich einen 
SS-Pin (oder vielleicht eher Chip-Select) hinzufügen.
Ich habe besonders den MAX491 
(http://datasheets.maxim-ic.com/en/ds/MAX1487-MAX491.pdf) ins Auge 
gefasst, da er Full-Duplex mit Receiver-Enable und Driver-Enable ist. 
Nun ist es ja normalerweise so, dass man DE und RE-Invert direkt 
verbindet und so mit einem Pin das umschalten durchführt. Dann ist aber 
immer einer der beiden (Sender oder Empfänger) aktiv. Daher würde ich 
die beiden auf einzelne PINs legen und invertiert schalten um 
gleichzeitig Receiver und Driver auszuschalten und somit den Tri-State 
des SPI-Busses zu reproduzieren, da ja beide dann laut Datenblatt hohe 
Impedanzen haben sollten.

Ist dies so sinnvoll und machbar oder ist gar nicht nötig, weil es eine 
viel einfachere Lösung gibt?
Ich bin bzgl. des Displays festgelegt, kann aber bei den RS-485 
Transceivern variieren.

Vielen Dank für Eure Hilfe !

MfG
Niels Göran

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dunkel sind deine Absichten, ganz habe ich deine Frage nicht verstanden.
Aber wenn du offenbar den SPI für mehrere Geräte verwenden willst und 
einen
Multiplexer mittels verschiedener CS-Signale machen willst, dann musst 
du
sicherstellen, dass der Takt des SSI-Signals für den Absolutwertgeber 
während aller Schaltvorgänge auf H hängen bleibt. Ansonsten ruckelt das 
Schieberegister des Absolutwertgebers einen Datenimpuls raus und bleibt 
in dieser Stellung hängen, was bei der nächsten regulären Abfrage zu 
falschen Daten führen kann, besonders dann, wenn das innerhalb der sog. 
Monoflopzeit passiert (SRG ist noch nicht zurückgesetzt).

Autor: Niels göran Blume (ngblume)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Danke für die Antwort.
Meine Frage zusammengefasst, ist, ob ich aus einem Full-Duplex-RS-485 
Driver mit Receiver / Sender-Enable einen Tri-State-SPI-Baustein basteln 
kann (in dem ich Driver und Receiver des RS-485 Baustein gleichzeitig 
deaktiviere).


Ich dachte, dass ich das von dir angesprochene Problem mit dem Tri-State 
gehandhabt hätte. Aber es macht Sinn, dass der Clock-Pegel für den 
SSI-Sensor auf Low fällt, wenn ich auf Tri-State schalte.
Da meine Anwendung nicht so stark zeitgebunden ist, würde ich das lösen, 
in dem ich nach Wechsel auf dem SPI-Bus zum Sensor dort den Pegel für 
eine milli sekunden auf high halte, bis die Monoflop-Zeit überschritten 
ist und der Sensor sich einen neuen Messwert holt.
Würde das reichen, um das Problem zu umgehen?

Ich verstehe gerade nicht, wo du in meiner Beschreibung den Multiplexer 
gesehen hast.

MfG
Niels Göran

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal doch mal auf, was du machen willst:
Controller mit SPI, DG mit SSI, Anzeige mit SPI, CS (mehrere?) vom 
Controller.
Wenn du mehre Geräte (hier: DG und Anzeige) über einen SPI mit CS 
ansteuern willst, hast du bereits einen Multiplexer.

> Aber es macht Sinn, dass der Clock-Pegel für den
> SSI-Sensor auf Low fällt, wenn ich auf Tri-State schalte.

Nein, das ist Murks.

Autor: Niels göran Blume (ngblume)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo...

anbei die Skizze der Schaltung.

Die Aussage "ber es macht Sinn, dass der Clock-Pegel für den SSI-Sensor 
auf Low fällt, wenn ich auf Tri-State schalte." war so gemeint, dass, 
wenn ich im MAX491 gleichzeitig Sender und Receiver ausschalte, was dann 
auf der Clock-Line für Signale liegen.
Wenn ich das Datenblatt des MAX 491 richtig interpretiere, dann müsste 
der Driver und der Receiver auf High-Impedance gehen, wenn ich 
DriverEnable=0 und ReceiverEnableInverted=1 setze (Seite 10 im 
Datenblatt). Das wäre für mich die Simulation des High-State des SS Pins 
des SPI-Devices.
Da aber High-Impedance des Drivers and Receivers ja kein High auf dem 
CLK, sprich Driver, Output bedeutet, würde ja der Drehgeber anfangen, 
den Wert einfrieren (fallende Flanke) und dann so bleiben.
Wenn man dann zum Drehgeber zurück switched, müsste man den Port auf 
Hoch setzen (Clock Idle High) und dann durch eine neue fallende Flanke 
desn Wert einfrieren und dann durch fallende und steigende Flanken die 
Bits transferieren. Hoffe, dass ist jetzt etwas klarer.

Wahrscheinlich ist die pinToggling Variante um einiges einfacher..

MfG
Niels Göran

P.S.: Ich müsste auch mal schauen, ob das Display Clock Idle High 
überhaupt verarbeiten kann....

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, probier es, vllt geht es. Aber meiner Meinung nach bleibt es 
Murks.
Ein Controller hat doch heutzutage unendlich viele Pins, da kannst du 
doch den DG irgendwoanders draufpacken, als ausgerechnet auf das 
Display.
Irgendwann verstreuselst du irgendwas in der SW und weißt bei dieser 
Abenteuerei nicht mehr, was du getan hast.
Für Basteleien mag das, was du vorhast, angehen, aber in ernsthaften 
Anwendungen würde ich das tunlichst vermeiden.

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem: was passiert auf CLK und \CLK, wenn der Treiber High-Z macht?
Die Potentiale verbleiben ja dort nicht, wo sie zuletzt waren.
Die DG-Hersteller sehen so etwas nicht vor.
Sehr wacklig und außerhalb der Spezifikationen.

Autor: cwa.frb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Niels,

muesste so wie beschrieben funktionieren. Der SSI Wert wird bei der 
ersten fallenden Flanke eingefroren und gehalten. Gleichzeitig läuft die 
Tm Zeit (siehe Posital Application note), läuft diese ab ermittelt der 
SSI-Drehgeber wieder neue Winkelwerte. Die Tm Zeit wird bei jeder neuen 
fallenden Flanke zurückgesetzt. Was ansonsten passiert ist dem Drehgeber 
egal, der wird also nicht abstürzen oder sowas.

Schöne Grüsse

cwa

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.