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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.