Hallo zusammen! Ich arbeite mit einem PIC18F (PIC18F87J72). Dieser besitzt SPI, I2C und USART (asynchronous und sogar synchronous irgendwie...). Ich möchte den PIC mit einem gewissen Sensor verbinden, welcher im Master Mode (leider kein Slave möglich) seinen Wert nach folgendem simplen Verfahren ausgibt: -2 Pins (Clock und Data) -Clock Frequency: 2 MHz -Clock inactive HIGH, data on rising edge -Data word length variable (~10-20 bit) Also alles in allem sehr simpel. Es gibt einfach hin und wieder mit großen zeitlichen Abständen seinen Wert durch, indem der Clock vom Sensor aktiviert wird für die Länge des Wortes. (Die Wortlänge bleibt fix, sobald einmal festgelegt). Der sensorwert wird direkt als integer bit für bit so übermittelt. Nun meine Frage: Was ist der einfachste, schnellste Weg die Daten in den PIC zu bekommen? Zur info: Das einzige was ich sonst im PIC machen muss ist von zwei solcher Sensoren den Wert einlesen und dann output=wert_a-wert_b rechnen... Bin gespannt auf eure Vorschläge! Swampy
Klingt ja im ersten Moment nach SPI, aber wahrscheinlich ist die Länge des SPI-Empfangsregisters unpassend (ich habe aber jetzt nicht ins Datenblatt geschaut, aber ich schätze mal 8 bit). Vermutlich ist der beste Weg, das ist Software zu machen: Den Clockpin mit einem interruptfähigen Eingang verbinden und dann bei jedem Interrupt den Zustand der Datenleitung lesen. Oder nur auf die erste Taktflanke warten und dann die Daten in einem festen Zeitraster einsamplen. Problematisch wirds nur, wenn beide Sensoren gleichzeitig funken. Kannst Du das irgendwie verhindern (z.B. zeitversetzt starten) ? 2MHz sind auch recht flott. Wie hoch kannst Du den PIC takten? Vermutlich wird der Interrupthandler zeitkritisch, d.h. du musst die Daten erstmal nur möglichst schnell und einfach wegspeichern und alle Berechnungen später in der langen Pause machen. Steht die Anzahl der Datenbits bereits zur Compilezeit fest?
Danke @Vancouver! Also erstmal bin ich shcon froh, wenn ich es schaffe, einen der beiden Sensoren einzulesen. Also lassen wir den zweiten erstmal außen vor. Der PIC ist auf dem Eval Board mit 12 MIPS. Ich muss auch nicht unbedingt jeden Wert mitbekommen. Etwas in der Art: Sequenz: 1. Warten bis Wert kommt. 2. Wert einlesen 3. Berechnung machen 4. Über seriell weitersenden 5. (repeat) ..wäre voll in Ordnung. Swampy
> Der PIC ist auf dem Eval Board mit 12 MIPS. Ok, d.h. Du kannst zwischen zwei Samplezeitpunkten 6 Maschinenbefehle abarbeiten. Das ist nicht viel. Evtl musst Du hier in die Assemblerkiste greifen (falls Du nicht sowieso Assembler programmierst). > Ich muss auch nicht unbedingt jeden Wert mitbekommen. Etwas in der Art: Nein, aber Du musst von einem Wert alle Bits richtig einlesen, das ist der weitaus schwierigere Teil an der Geschichte. Ich würde an Deiner Stelle damit anfangen, die Einlesefunktion zu schreiben und zunächst mal nur den eingelesenen Wert über UART wieder auszugeben. Bzw. hast Du einen Debugger und kannst den Speicher auslesen? Wenn Du die Werte richtig einlesen kannst, ist der Rest wahrscheinlich kein großer Act mehr.
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.