Hallo Gemeinde! Ich bekomme aus einer Schaltung die Clock- und die Datenleitung. Beide Signale sind 32 Bit lang und werden synchron und parallel ausgegeben. Diese 32 Bit Impulspakete trten ca alle 160ms auf. Die Pulsbreite ist nur 'wenige' µs breit. Meine Frage: Wie muss im Prinzip die Empfangsroutine in der MCU aussehen damit die MCU immer auf die erste Flanke des ankommenden Clocksignals synchronisiert? Viielen Dank für eure Antworten!
Prinzipal schrieb: > Meine Frage: Wie muss im Prinzip die Empfangsroutine in der MCU aussehen > damit die MCU immer auf die erste Flanke des ankommenden Clocksignals > synchronisiert? So wie jede andere auch, die auf eine Flanke an einem Eingang pollt. Ständiger Vergleich des aktuellen Pegels mit dem vorhergehenden Pegel. Sind die beiden unterschiedlich, dann ist die Flanke gekommen. Oder aber über eine Interrupt Routine, die aufgrund der Flanke am SCK Eingang des µC angesprungen wird. Du kannst aber auch dem Chip vorgeben, dass nicht er derjenige ist, der das SCK Signal generiert, sondern das er gefälligst auf deinen Clock hören soll, und damit löst sich dann das Problem ganz von alleine in Luft auf. Wenn du die Schaltung noch ändern kannst/darfst, selbstverständlich.
Danke für die schnelle Antwort! Ja, leider kann/darf ich die Schaltung nicht ändern, sondt hätte ich den Clock vorgegeben. Mit Polling/Interrupt des Clocksignals hab ich noch Verständnissproblem. Wenn ich z.B. auf die pos. Flanke teste, woher weiss ich, ob das der Anfang des Clocks ist, oder ob ich den Clock nicht mitten im 32-Bit-Strom erfasst habe. Ich muss da doch die Zeit mitberücksichtigen. Oder denke ich zu kompliziert?
(Sofern vorhanden) würde ich hier die SPI-Hardware des µC verwenden - verbunden mit einem Time-Out (kann man mit einem Timer machen)
Prinzipal schrieb: > Mit Polling/Interrupt des Clocksignals hab ich noch Verständnissproblem. > Wenn ich z.B. auf die pos. Flanke teste, woher weiss ich, ob das der > Anfang des Clocks ist, oder ob ich den Clock nicht mitten im > 32-Bit-Strom erfasst habe. Du startest je selber die Funktionalität, durch Bedienen des Chip Select Signals. Du ziehst Chip Select auf Low und dann kannst du schon anfangen auf die Flanke zu warten.
Hi, die Beschaltung die Du verwendest sendet kontinuierlich die Wandlungsergebnisse raus. Bevor das Ergebnis übertragen wird, ist der SCK auf "1". Also auf negative Flanke von SCK den Interrupt setzten, dann mit jeder folgenden positiven Flanke die Daten übernehmen. Die SPI Hardware ist vielleicht geeignet, aber üblicherweise nur 8Bit. Du mußt also die vier 8Bit Päckchen schnell genug abholen. Der Trick besteht jetzt im richtigen Timing zwischen Freigeben/Sperren des Trigger Interrupts und der Verarbeitung der SPI Daten. Basis ist aber im Grunde die 32Bit SPI Übertragung. Da gibt's doch bestimmt was von Ratiopharm ;) @Buchegger CS ist fest auf low, damit ist eine aktive Steuerung nicht möglich.
@Martin Fischer Wenn schon das Abholen der Bytes aus der SPI-Hardware Probleme bereiten sollte, wie sieht es da erst mit der Interrupt-Lösung aus? ;) Auf einem 8-Bit AVR würde ich das so machen: SPI-ISR liest Byte aus, speichert es in einem Array, setzt Flag, wenn vier erreicht sind, setzt TimerX auf null, löscht TimerX-Overflow-Flag und aktiviert TimerX-Overflow Interrupt (für Time-Out) TimerX-Overflow-ISR schaltet SPI aus und wieder ein (initialisiert sie dadurch wieder), setzt den Zähler für das Array wieder auf null und deaktiviert sich selbst. Die Hauptroutine muss zu Beginn die SPI-Schnittstelle konfigurieren und den SPI-Interrupt aktivieren. Ab da läuft alles im Hintergrund und man muss nur noch das Flag abfragen.
Martin Fischer schrieb: > @Buchegger > CS ist fest auf low, damit ist eine aktive Steuerung nicht möglich. Jetzt wo du es sagst: Hab ich übersehen. Wer macht denn aber auch sowas?
Besten Dank für eure Hilfe! Zuerst werde ich mal das Polling versuchen, sollte ich damit nicht zurecht kommen wird eine SPI-Lösung versucht. Mercie vielmals Prinzipal
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.