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/AbsoluteEncoders_Context/AbsoluteEncoders_Context_Technology_SSI_AppNote.pdf). 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
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).
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
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.
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....
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.