Forum: Mikrocontroller und Digitale Elektronik PIC32 SPI Daten einlesen


von Klatec (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen

Ich habe ein Problem mit der Datenerfassung über die SPI Schnittstelle.

Fünf PIC32MX795F512L bilden eine Erfassung von Lok-Adressen (Modellbahn) 
wobei vier davon im Slave-Mode arbeiten und einer als Master. Jeder der 
vier Slave ermitteln vier Lok-Adressen (je 16 Bit) und die vier Slave 
sind in Reihe mit dem Master geschalten und liefern die Daten an den 
Master. Der Start erfolgt durch einen INT0 bei jedem Slave wodurch die 
ersten vier Adressen in das Sende-Register geladen werden. Der Master 
schreibt dann viermal den Wert 0x5555 in sein Sende-Register und schiebt 
damit die Daten in seinen Puffer und liest diese aus. Gleichzeitig wird 
der SPI RX INT bei den Slave ausgelöst und die nächsten Adressen werden 
in den Sende-Puffer geschrieben und durch den Master wieder eingelesen. 
Dieser Vorgang wird dreimal mal wiederholt bis alle 16 Adressen vom 
Master eingelesen wurden.

Nun das Problem, leider funktioniert die Einlesung nicht immer und es 
kommt immer in den ersten beiden Schleifen zum Fehlern. Bei der ersten 
Schleife werden von allen Slave die 1. Adressen und bei der 2. Schleife 
die zweiten Adressen eingelesen und bei diesen kommt es manchmal zum 
Fehler.
Ich verwende vorerst nur vorgegebene Zahl um die Richtigkeit einfach 
überprüfen zu können und somit

Slave 0:   1. Adr.: 5001, 2.Adr.: 5002, 5003, 5004
Slave 1:   1. Adr.: 6001, 2.Adr.: 6002, 6003, 6004
Slave 2:   1. Adr.: 7001, 2.Adr.: 7002, 7003, 7004
Slave 3:   1. Adr.: 8001, 2.Adr.: 8002, 8003, 8004


Wenn richtig eingelesen wird:
8001
7001
6001
5001

8002
7002
6002
5002

usw.

Falsch einlesen

8001
7001
21445=0x5555
21445=0x5555

8002
7002
6002
5002

usw.

Es sieht so aus als würde der Slave0 und 1 den Aufruf zur Aussendung der 
Adressen nicht mitbekommen (es ist auch manchmal nur einer) und daher 
habe ich eine Verzögerung beim Master eingebaut, hat aber nix geholfen.

1.Frage:
Es gibt den Frame-Mode würde der mir weiterhelfen und ist der auch für 
mehr als einem Slave geeignet?

2.Frage:
Hat jemand Erfahrung mit solchen Kommunikationen oder hat jemand eine 
Idee wie ich das Problem in den Griff bekomme.

Bitte. Danke.

Lg.
Johann K.

von Klatec (Gast)


Lesenswert?

Hallo Zusammen

Habe vergessen

Master: SPI4CON = 0x00018662;
Slave:  SPI1CON = 0x00018442;

von DirkF (Gast)


Lesenswert?

Hallo Klatec,
wie groß ist denn die Entfernung der Slaves und Master ?
Bei > 20 cm geschätzt könnte es Probleme mit Echo auf der Clock Leitung 
geben.
Dann >>  Terminierung.

Gruß Dirk

von Klatec (Gast)


Lesenswert?

Hallo Dirk

Nein die Länge ist bei weiten keine 20 cm.
Ich habe aber seit heute eine Lösung für mein Problem, ich habe 
festgestellt das dieser Fehler nur bei der ersten Schleife auftritt und 
habe statt den vier Schleifen nun fünf Schleifen ausgeführt, wobei ich 
die erste Schleife am Master nur einlese und die 4 x 0x5555 erkennen 
muss und die Slave keine Daten in das Senderegister schreiben. Jetzt 
funktioniert es wunder bar. Danke für deine Anregung.

Schönen Tag.

Johann K.

von Frank K. (fchk)


Lesenswert?

Klatec schrieb:
> Hallo Zusammen
>
> Ich habe ein Problem mit der Datenerfassung über die SPI Schnittstelle.
>
> Fünf PIC32MX795F512L bilden eine Erfassung von Lok-Adressen (Modellbahn)

Warum hast Du so viele Prozessoren? Normalerweise vermeidet man 
tunlichst Multiprozessorsysteme, weil der Entwicklungs- und Testaufwand 
sehr viel höher ist. Ausnahmen sind räumlich verteilte Systeme.

Mir scheint das Implementierungskonzept optimierungsfähig.

fchk

von schnuremaus (Gast)


Lesenswert?

hei,

so wie ich es vestehe, nutzt du ein µC je Block, um die bis zu vier 
befindene Decoder(Lok) Adressen zu erkennen.

Kann man auch mit einem µC und bis zu 16 Block machen.

schönen Abend

von Dirk F (Gast)


Lesenswert?

>>>Warum hast Du so viele Prozessoren? Normalerweise vermeidet man
tunlichst Multiprozessorsysteme, weil der Entwicklungs- und Testaufwand
sehr viel höher ist.

Also bei meinem Testsystem steuert ein PIC32  15 Stück PIC18 über SPI 
an. An jedem PIC18 hängen 24 Relais.
Ich denke, die Zeiten vom 8255 sind vorbei.
Kleine MCUs sind doch so billig....

von Frank K. (fchk)


Lesenswert?

Dirk F schrieb:
>>>>Warum hast Du so viele Prozessoren? Normalerweise vermeidet man
> tunlichst Multiprozessorsysteme, weil der Entwicklungs- und Testaufwand
> sehr viel höher ist.
>
> Also bei meinem Testsystem steuert ein PIC32  15 Stück PIC18 über SPI
> an. An jedem PIC18 hängen 24 Relais.
> Ich denke, die Zeiten vom 8255 sind vorbei.
> Kleine MCUs sind doch so billig....

schon mal über MCP23S17 nachgedacht? Da spart man sich die Weichware. In 
einem kommerziellen Produkt sind das auch Kosten - für die 
Programmierung während der Fertigung, Updates, QM,...

fchk

von Klatec (Gast)


Lesenswert?

Hallo Zusammen

ich benötige zusätzlich 4 serielle Schnittstellen mit 250000 bps um die 
Lokadresse aus dem Digitalsystem (Lenz) auszulesen und daher verwende 
ich 4 Controller. Die Software ist kein Problem weil diese für alle vier 
die gleiche ist.

Lg.

Johann K.

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.