mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme bei SPI Kommunikation


Autor: m&m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
...
setup_spi(SPI_MASTER|SPI_L_TO_H| SPI_XMIT_L_TO_H| SPI_CLK_DIV_64);
...
output_low(PIN_D4);   
delay_us(10); 
     
spi_write(0xFF);
delay_us(10);          
output_high(PIN_D4);    
       
delay_ms(10); 
...

Slave:
...
setup_spi(SPI_SLAVE|SPI_L_TO_H| SPI_XMIT_L_TO_H);
...
#int_SSP
SSP_isr()
{


    unsigned int val;

    val = spi_read();
...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: m&m (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: m&m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auflösung 2V, schlechtes Foto, Sorry

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: m&m (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!!

Autor: m&m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
       output_low(PIN_D4);    
       delay_us(10);          
       spi_write(0x55);        

       delay_us(10);          
       output_high(PIN_D4);   

       delay_ms(10);



       output_low(PIN_D4);
       delay_us(10);

       spi_write(0x66);
       delay_us(10);
       output_high(PIN_D4);

       delay_ms(10);


       output_low(PIN_D4);
       delay_us(10);

       spi_write(0x77);
       delay_us(10);
       output_high(PIN_D4);

       delay_ms(10);


       output_low(PIN_D4);
       delay_us(10);

       spi_write(0xFF);
       delay_us(10);
       output_high(PIN_D4);

       delay_ms(10);



Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: m&m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: m&m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.