mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC SPI Master Slave


Autor: Diotor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich benutze zwei PIC18F4550 zur Kommunikation via SPI. Der Master kann 
Daten an den Slave senden, was aber zurueckkommt ist nicht so gewollt.
Ich will dass der Slave den Empfang mit z.B. 0x99 bestaetig, das klappt 
aber nicht, es wird immer irgendwas empfangen.
Master:
                CS = 0; // Begin
    SSPBUF = 0x33;
    while (!SSPSTATbits.BF); // Wait until receive buffer full
    receive = SSPBUF; // Copy data to variable
    CS = 1; // End

Slave:
    while (1)
    {
      if(SSPSTATbits.BF) // 
      {
        receive = SSPBUF;  /a
              SSPBUF = dummy; // Send ok back (0x99) 

      }
        if (SSPCON1bits.WCOL)
      {
        SSPCON1bits.WCOL = 0;
      }
      if (SSPCON1bits.SSPOV)
      {
        SSPCON1bits.SSPOV = 0;
      }
    }

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo gibtst Du dem Master den Befehl den Wert vom Slave zu lesen?

Um die Antwort zu lesen muß der Master nochmal ein Byte schicken damit 
der Slave getaktet wird.

Gruß Anja

Autor: Diotor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider kommt immer noch Random zurueck.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPI ist zwangsweise eine Vollduplex Kommunikation, es wird immer 
gleichzeitig gesendet und empfangen.

Der Master muss nach dem Schreiben der Daten an den Slave mindestens so 
lange warten, bis dieser die Antwort in sein SPI-Datenregister 
geschrieben hat.
Erst danach ist noch ein Dummybyte fällig, während dessen Aussendung 
gleichzeitig die Antwort eingelesen wird.

Autor: Diotor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das Warten nicht mit while (!SSPSTATbits.BF); erledigt?
Welches Bit muss ich dann abfragen?

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.