Probleme bei SPI Kommunikation

Gast #1300143
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
...
Moderator (Firma: Titel) Persönliche Seite #1300167
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?
Gast #1300452
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);
Gast #1300686
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
Gast #1300740
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren