Probleme bei SPI Kommunikation

Gast #1300143
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
> 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
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.
Angehängte Dateien:
Gast
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!!
Angehängte Dateien:
Gast
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.