Hallo, ich verwende spezielle Hardware basierend auf der ARM Architektur. Mir stehen nur Analoge uind Digitale IO's zur Verfügung, darüber hinaus gibt es noch einen PWM-Ausgang. Es gibt KEINE Rs232/485, Parallell oder SSI Schnittstelle. Folgende Frage: Ich muß mit dieser Hardware einen Sensor mit SSI Schnittstelle auslesen. ich denke den notwendgen Takt könnte ich mit PWM generieren. Benötigt SSI zwingend den invertierten Clock-Kanal - dies wäre nicht ohne weitere Hardware möglich, oder wie genriert man zwei PWM, wobei ein PWM das invertierte vom anderern ist? Wie kann ich aber die Datenleitungen (sind wohl in RS485 Standard) mit einem AD-Wandler auslesen synchron zum Takt, ohne entsprechende RS485-INterface-Bausteine? Vielen Dank im voraus für Anregregungen oder Hinweise of mögliche Denkfehler. Peter
Habe ich das richtig verstanden: Du hast einen Sensor, dessen SSI (das ist für mich in erster Näherung eine I2C mit getrennter Hin- und Rückleitung, oder?) CLK und /CLK braucht? Seltsam, was ist das für ein Bauteil, warum hat es den Inverter nicht selbst eingebaut? Sparst Du soviel mit PWM? Mach den Takt doch selbst auf einem O-Pin (und ggf. den invertierten Takt auf einem zweiten). Dann kannst Du Dir die Clock per Interrupt machen; immer das Clock-Bit toggeln und auf fallende Clock die Datenbits auf den Ausgangsport setzen bzw. auf steigende Flanke Datenbits lesen. Oder reden wir aneinander vorbei?
Hallo, mit der getrennten Hin-Und Rückleitung bin ich mir nicht sicher. Ich denke das Data / Data -, unc Clock / Clock - nur aus Redundanz-Gründen existieren. Ich hab eben mit dem Oszi getestet. D.h. der Sensor liefert auch Daten ohne Clock -. Ich muß also nur einen Takt erzeugen. Ablauf: Sende 26 Takte in 100 kHz, und bekomme jeweils zur steigenden Flanke die 25 Bit der Position. Dann beliebige Pause, und wiederholen. Du denkst DA-Wandler wäre sinnvoller als PWM? Der 2. Teil meiner Frage ist mir immer noch nicht gan klar: Ich muß irgendwie die RS485 Daten synchroniziert zum Takt einlesen. Bin mir nicht sicher, ob ich einen Dig IN verwenden kann.
DA-Wandler statt PWM? Du willst doch nur einen Takt erzeugen, das ist doch ein einfaches Digitalsignal. Reden wie noch aneinander vorbei? Zum anderen wird mir langsam klar, daß es sich offenbar um eine differentiell übertragene SSI handelt, vermutlich lange Leitung? Dann ist es freilich besser, CLK + und CLK - zu setzen, damit die Störungsunterdrückung auch funktioniert. Und den RS485-Pegel kannst Du (wenn galvanischer Bezug gegeben ist und Deine differentiellen Potentiale nicht außerhalb des Toleranzbereichs vom µC liegen, auf einen differentiellen Eingang legen, den bieten viele µC nicht zuletzt für solche Fälle. Falls er keinen hat (wirklich gut im Datenblatt geschaut? Was ist es denn?), wirklich zwei Analogwerte messen und schauen, welcher größer ist.
Hi Peter, soweit ich weiss, handelt es sich bei dem SSI-Signalen um differentielle Signale, du hast damit je ein positives un negatives Bezugspotential. Hast du das SSI Signal schon mal versucht über die SSI-Schnittstelle zu lesen ? Dies sollte eigentlich gehen wenn du mehrere Bytes hintereinander einliest. Der Zeit-Abstand darf zwischen den Bytes max 25uS sein. Eine Pause von 35 uS oder grösser bewirkt am Geber ein Neubeginn des Datenframes. Gruss, Peter
hallo als Interfacebaustein reicht ein LS75176, Signale am besten mit Optokoppler (6N137) von deiner Hardware trennen SSI (für alle Unwissenden) = synchrones serielles Interface wird oft bei Längenmesssystemen in der Industrie verwendet, wenn der Sensor Gray Code liefert, kannst du Ihn mit (lächerlich) einfacher Zusatzhardware umwandeln (müsste ich aber erst ausgraben) Peter
@PeterL "wenn der Sensor Gray Code liefert, kannst du Ihn mit (lächerlich) einfacher Zusatzhardware umwandeln" lächerlich ist daran nur, noch extra überflüssige Hardware zu verschwenden. Graycode läßt sich prima in Software in Binär umwandeln. Entweder mit Tabelle oder mit Logik. Jedes Bit invertiert alle niederwertigeren, z.B. für 4 Bit: if( i & (1<<1) ) i ^= 1<<0; if( i & (1<<2) ) i ^= 1<<1^1<<0; if( i & (1<<3) ) i ^= 1<<2^1<<1^1<<0; Peter
Danke für die Hinweise. Ich denke mit dem Takt bin ich mir jetz klar - dachte nur das PWM sinnvoll sein könnte, da durch einen FPGA unterstützt --> Ressourcen-Schonung vom µC. Die Umrechnung binär-Gray geht auch dirket im µC - ist mir lieber als Extra-HArdware. Aber: Rs-485, differential Signal?, sorry - ich steh immer noch auf dem Schlauch: Ich habe 2 Datenleitungen, die eine enthält das invertierte Signal des anderen. D.h. eigentlich habe ich nur eine Datenleitung --> Wie soll ich da die Difffernez zwischen zwei Analog-Signalen messen? Leider habe ich keinen Differenzeingang, und auch keine SSI, RS-485, etc.
Du verrätst ja leider immer noch nicht, welchen µC Du verwendest und ob Du durch die Leitungslänge überhaupt auf den differentiellen Eingang angewiesen bist. Im Prinzip hast Du ja wirklich eine Leitung mit 5 V aktiv und 0 V inaktiv und eine zweite, wo es umgekehrt ist. Wenn der Sender direkt nebenan liegt, reicht vermutlich eine Datenleitung auf einem Digitaleingang und fertig. Wenn aber ein paar Kilometer Leitung dazwischen liegen, bringt ein Aktivpegel mit etwas Glück noch einen rundlichen Peak von 2,51 V auf der einen Leitung und 2,49 V auf der anderen Leitung zustande, beim Low-Pegel andersherum. Wenn noch irgendwo eine ordentliche induktive Störung zuschlägt, vielleicht 4,55 V gegen 4,57 V. Irgendwas. Dem Differenzeingang ist es egal, solange da noch ein paar Millivolt dazwischen sind, weiß er, was gemeint ist. Der RS-485-Treiberbaustein auch. Mangels Differenzialeingang mußt Du also zwei Analogeingänge nehmen. Wenn A größer B, hast Du ein High-Signal, sonst low. Natürlich mußt Du Deine Clock entsprechend langsam machen, damit der ADC mit der Konversion fertig wird.
Ahh, so langsam wird mir die Sache klarer. Ich verwende einen 166MHz ARM922T µC, und die Leitungslänge ist < 50 cm, und alles unter Laborbedingungen. Ich werde also momentan keine Differenz benötigen, insbesondere da ein Einlesen von negativen Spannungen von meinem AD-Wandler nicht unterstützt wird. Also entsprechen die Pegel des Signals high,high,low, etc. direkt dem Bitmuster des Sensorwertes (in Gray-code)- richtig?
Auch bei kurzer Leitung würde ich einen standard RS-485 Pegelkonverter nehmen, z.B. LTC490. Der macht Dir dann auch die 3V/5V-Anpassung und schützt den ARM gegen ESD. Peter
Negative Spannungen wirst Du auch nicht haben, da bleibt eigentlichen alles zwischen 0 und 5 V, das macht die Sache ja auch so sympatisch gegenüber RS-232. Richtig. Nur ob Gray-Code oder nicht, wissen wir nicht, aber das wird das Datenblatt Deines Sensors wissen. Peter Mahler muß ich widersprechen, SSI ist m.W. nicht zwangsläufig differentiell, läßt sich aber differentiell übertragen, wie in diesem Fall hier offenbar. µC mit Hardware-SSI haben üblicherweise keine differentielle SSI. Den Unterschied zwischen SSI, SPI, SCP, Microwire, I2C, TWI und wie sie alle heißen, habe ich nie verstanden, außer daß SSI getrennte Sende- und Empfangsleitung für Full-Duplex unterstützt (aber natürlich durch Brücken des SI und SO auch mit TWI usw. kommunizieren kann).
OK, alles klar. Jetzt gehts ans Auspropieren. by the way: Das Forum ist klasse!
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.