Hallo Ich möchte die MSSP Schnittstelle eines PIC18F... mit SPI nutzen, um 18 bit zu empfangen. D.h. der Slave (ein Sensor) sendet genau 18 bit. Der Slave hat aber kein SPI, das nennt sich da SSI, funktioniert aber auch mit CLK, DO und CS. Nur, daß er eben 18 Clocks benötigt, um 18 bits zu senden. Keine Ahnung, was er macht, wenn da noch weitere CLKs kommen. Ein erneutes Senden wird mit CS HIGH und dann wieder CS LOW getriggert. Meine Frage jetzt: Mit SPI lese ich ja ein Byte ins Schieberegister ein, das wird in den Buffer kopiert, es wird ein Flag gesetzt und ich kann es aus dem Buffer lesen: Was passiert beim Spi dann, wie geht es weiter? Hält der CLK solange an, bis ich das Byte gelesen habe? Oder wird das Schieberegister weiter vollgeschrieben? Wenn ja, was passiert, wenn das Schieberegister wieder voll ist, ich aber den Buffer noch nicht ausgelesen habe? Hält dann der Clock an? Sprich, kann mir da was verloren gehen? Und was passiert mit den letzten 2 Bits, durch die wird der Buffer ja nicht mehr voll? Wie bekomme ich also das ENDE der ganzen Übertragung mit? Oder muß ich einfach nur 3x den Buffer auslesen, wenn das Flag Buffer voll kommt und mir weiter keine Sorgen machen? Danke für Hilfe Thomas
Hi Schade, das hat scheints noch niemand gemacht. Wenn der PIC da ist, probier ich es einfach mal aus was passiert. Ansonsten muß ich es eben selbst programmieren, also 18 Clocks senden und 18 Bits reinschieben. Die Arbeit wollte ich das SPI machen lassen. Gruß Thomas
Thomas W. schrieb: > Schade, das hat scheints noch niemand gemacht. Da sind einfach zu wenig Angaben ... Gruß Anja
Also ganz einfach, teilen wir die Frage mal in ihre Einzelteile auf: Was passiert, wenn man mit dem SPI Verfahren mehr als 1 Byte, also z.B. 10 bit übertragen möchte? Was passiert da auf der Master Seite, wenn die ersten 8 bits eingelesen wurden? Wie kommt man dann an die nächsten 2 bit, wenn der Slave nur noch 2 bit sendet, ein weiteres Byte also nicht voll wird? Gruß Thomas
Thomas W. schrieb: > Also ganz einfach, teilen wir die Frage mal in ihre Einzelteile auf: hilft immer noch nichts: - mir ist immer noch nicht klar wer Master und wer Slave ist (Slave "sendet" nie sondern ist passiv) normalerweise ist SPI ein einfaches Schieberegister. Mit einem Load-Impuls (CS) wird das Schieberegister parallel geladen oder ausgelesen. Der Master taktet dann die Info aus dem Schieberegister heraus. bei jedem Takt wird gleichzeitig ein neues Bit an der anderen Seite des Schieberegisters hereingetaktet. Wenn mehr Takte als Bits da sind erscheinen logischerweise die Bits die hereingetaktet wurden um X Takte verzögert am Ausgang. Wenn Du jetzt 18 Bits hast und der Master immer 24 Bits überträgt mußt Du nur darauf achten daß beim Lesen vom Slave immer die ersten 18 Bits gültige Info haben und beim Schreiben an den Slave die letzten 18 Bits ein gültiges Kommando darstellen. Gruß Anja
Hi Master: Mein PIC. Slave: Ein Sensor AS5145 mit CLK, DO und CS. Slave (der SENSOR) erwartet LOW CS, danach reagiert er auf CLK und sendet bei jedem Flankenwechsel ein Bit auf DO. Das macht er 18-mal, da die Information 18bit lang ist. Danach erwartet er an CS HIGH. Dadurch wir er wieder resettet, um für neue Anfragen bereit zu sein. Mit dem PIC als MASTER möchte ich die 18bit jetzt per SPI auslesen, anfordern. Also an einem Ausgang den CS auf LOW setzen. Dann SPI starten. Was im Sendebyte steht, von mir aus 0x00, ist egal, da ich ja nichts senden möchte. Durch das CLK SIGNAL erstmal 8 bits ins Empfangsbyte schieben. Dann kommt ja das Flag "Byte bereit zum Auslesen" Und nun meine erste Frage: Wartet der SPI Prozessor des PIC mit dem CLK Signal solange, bis ich das Byte ausgelesen habe, damit die nächsten Bits vom Sensor (Slave)reingeschoben werden können, oder gehen mir die verloren, wenn ich nicht schnell genug das Empfangsbyte leere? Was ich bräuchte ist also: Master sendet CS LOW Master sendet C C C C C C C C C Flag Byte voll wird gesetzt Master sendet keinen C mehr 1. Byte wird weggeschrieben Master sendet C C C C C C C C Flag Byte voll wird gesetzt Master sendet keinen C mehr 2. Byte wird weggeschrieben Master sendet C C (C C C C C C) tja und dann? wohl egal wie der Ausgang des Sensors dann aussieht. Flag Byte voll wird gesetzt Master sendet keinen C mehr 3. Byte wird weggeschrieben ( aber nur die beiden linken Bits relevant) Master sendet CS HIGH Denn der Slave sendet ja nicht byteweise, sondern erwartet 18 CLK Impulse hintereinander, um seine Bits rauszuschieben. D.h. es funktioniert hier nicht einen erneuten Austauschvorgang mit neuerlichem Chipselect für ein Byte zu starten, wie es bei SPI eigentlich üblich ist. Soweit sollte ich es doch klar beschrieben haben? Frage also: Funktioniert das mit SPI so, wie oben angenommen, obwohl der Slave (Sensor) kein richtiges SPI macht.? Gruß Thomas
du hast es richtig beschrieben Aber du kannst dem PIC-Interface nicht sagen, dass es nach 18 clocks aufhören soll, es sendet immer nur ganze Bytes. Da du die Daten nurin ein Puffer schreibst und dann wieder ausliest hast du da auch keinen Einfluss auf den Sendeprozess. Was der slave macht, wenn er mehr als die geforderten clocks bekommt weiß ich nicht, aber wenn du Glück hast schreibt er in ich überflüssigen Bits nur eine 0 rein. Da hilft wohl nur probieren. Eine Alternative wäre eine Software SPI, sie ist zwar um einiges langsamer, aber dafür kannst du genau die Bitanzahl senden die du möchtest.
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.