Forum: Mikrocontroller und Digitale Elektronik Probleme bei SPI Kommunikation


von m&m (Gast)


Lesenswert?

Hallo,
ich habe ein Problem mit der SPI kommunikation zwischen zwei PICs. Ich 
versuche gerade mit spi_write() mehrer hex Werte vom "Master-PIC" zum 
"Slave-PIC" zu senden. Allerdings kommt von den gesendeten Befehlen 
meist nur einer an... Schließe ich ein Oszi zum Messen an, funktioniert 
die Übertragung aufeinmal besser?! Brauch ich vielleicht noch 
irgendwelche wiederstände/Kondensatoren...an den Datenleitungen, oder wo 
könnte es sonst Probleme geben?! Von den SPI-Modi habe ich schon 
verschiedene getestet.
Vielen Dank!

Master:
1
...
2
setup_spi(SPI_MASTER|SPI_L_TO_H| SPI_XMIT_L_TO_H| SPI_CLK_DIV_64);
3
...
4
output_low(PIN_D4);   
5
delay_us(10); 
6
     
7
spi_write(0xFF);
8
delay_us(10);          
9
output_high(PIN_D4);    
10
       
11
delay_ms(10); 
12
...

Slave:
1
...
2
setup_spi(SPI_SLAVE|SPI_L_TO_H| SPI_XMIT_L_TO_H);
3
...
4
#int_SSP
5
SSP_isr()
6
{
7
8
9
    unsigned int val;
10
11
    val = spi_read();
12
...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Allerdings kommt von den gesendeten Befehlen meist nur einer an.
Kommt der korrekt an? Dann scheint das an sich ja schon mal zu gehen...

> Schließe ich ein Oszi zum Messen an,
> funktioniert die Übertragung aufeinmal besser?
Und was zeigt das Oszi an? Überschwinger? Wie sieht das Signal aus?
Wie lang ist die Leitung zwischen den beiden PICs? Wie ist die Masse 
verbunden?

von m&m (Gast)


Angehängte Dateien:

Lesenswert?

Sende ich nur einen Befehl, kommt dieser richtig an....sende ich mehrere 
so scheint es das "ab und zu" der richtige ankommt?!
Die PICs sind über ein ca. 30cm langes Kabel verbunden inklusiv Masse 
und Vdd.

von m&m (Gast)


Lesenswert?

Auflösung 2V, schlechtes Foto, Sorry

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das sieht nach bösen Über- (bzw. Unter-) schwingern aus (fast -2,5V)...

Probiers doch (um Hardwareprobleme auszuschliessen) mal mit 
Serienterminierung: 100 Ohm jeweils an den Ausgangspin der 
entsprechenden SPI-Leitung. Siehe auch 
Beitrag "Re: Signalproblem bei langem Kabel"

von m&m (Gast)


Angehängte Dateien:

Lesenswert?

Sieht nach dem Einbau der 100ohm Widerstände deutlich besser aus und nun 
scheint auch die Übertragung zu funktionieren! werde nochmal gründlich 
testen! Vielen Dank für die Hilfe!!

von m&m (Gast)


Lesenswert?

Also so ganz richtig funktioniert es noch nicht, wenn ich 
0x55,0x66,0x77,0xFF sende empfange ich lediglich 0x55,0x77,0xFF ?! Muss 
ich nach einem spi_write() noch irgendwas tun?

Der Master sendet:
1
       output_low(PIN_D4);    
2
       delay_us(10);          
3
       spi_write(0x55);        
4
5
       delay_us(10);          
6
       output_high(PIN_D4);   
7
8
       delay_ms(10);
9
10
11
12
       output_low(PIN_D4);
13
       delay_us(10);
14
15
       spi_write(0x66);
16
       delay_us(10);
17
       output_high(PIN_D4);
18
19
       delay_ms(10);
20
21
22
       output_low(PIN_D4);
23
       delay_us(10);
24
25
       spi_write(0x77);
26
       delay_us(10);
27
       output_high(PIN_D4);
28
29
       delay_ms(10);
30
31
32
       output_low(PIN_D4);
33
       delay_us(10);
34
35
       spi_write(0xFF);
36
       delay_us(10);
37
       output_high(PIN_D4);
38
39
       delay_ms(10);

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> empfange ich lediglich 0x55,0x77,0xFF
> Muss ich nach einem spi_write() noch irgendwas tun?
Was spielt sich auf den SPI-Leitungen ab (Oszi)?
Werden wirklich nur 3 Bytes gesendet?
Oder empfängst du nur jedes 2. Byte?

von m&m (Gast)


Lesenswert?

Also die Bytes werden übertragen. Zur Zeit ist es so, dass wenn ich das 
oszi an der clock leitung habe alle Daten ankommen?! das ist sehr 
seltsam!?

von Gast (Gast)


Lesenswert?

Hast du die SCK Leitung auch mit einem Serienwiderstand abgeschlossen?

Ansonsten kannst du ja mal versuchen die Taktrate runter zu drehen. Was 
für Kabel verwendest du denn? Und wie sind die verlegt?

Mfg

von m&m (Gast)


Lesenswert?

Ganz "normales" Kabel(0,25), hab ich mir selbst zusammengebastelt...ca 
30cm lang mit stecker für das PICDEM2 Board.
Serienwiderstand hab ich drin, allerdings nur auf der Slave Seite?! 
müsste man da auf der anderen auch noch einen rein machen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Serienwiderstand hab ich drin, allerdings nur auf der Slave Seite?!
Ein Serienwiderstand muß in jede Leitung auf der Sender-Seite.
Also MOSI, CS und SCLK auf der Master-Seite, MISO auf der Slave-Seite.

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.