Forum: Mikrocontroller und Digitale Elektronik PIC18F SSI slave (eigentlich sehr simpel.)


von Swampy (Gast)


Lesenswert?

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

von Vancouver (Gast)


Lesenswert?

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?

von Swampy (Gast)


Lesenswert?

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

von Vancouver (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.