www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit SPI kommunikation


Autor: Alicia R. (alicia_r)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein ATmega1280 und möchte über SPI daten einem anderen Gerät 
schicken. Leider klappt es nicht. Mein Code ist:
  DDRA |= _BV(PIN3)| _BV(PIN5); //SS PINA5
  PORTA = 0;

  DDRB = _BV(PIN1); //SCK output
  DDRB |= _BV(PIN2); //MOSI output

  SPCR = _BV(SPE);
  SPCR |= _BV(MSTR);
  SPCR |= _BV(SPR0);


  for (;;)
  {
     PORTA &= ~_BV(PIN3);  // LED on
     PORTA &= ~_BV(PIN5);  //SS am Slave Low --> Beginn der Übertragung
     SPDR = '1';
     _delay_ms(500);
     PORTA |= _BV(PIN5);  //SS High --> Ende der Übertragung
     PORTA |= _BV(PIN3);   // LED off
     _delay_ms(500);
  }

So soll ein LED blinken und gleichzeitig ein Byte über SPI geschickt 
werden.
Das LED blink aber wie ihr von der Abschnitt von der Oszilloskop sehen 
könnt, wird kein Byte über SPI geschickt.

Habt ihr eine Ahnung wo das Problem liegen kann?

Besten Dank!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm mal PB0 für den SS Pin.

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Nimm mal PB0 für den SS Pin.

Wozu sollte es helfen?
Der Code hier ist für einen SPI-Master, nicht Slave...

Ich habe selber unterschiedliche PINs (die kein SS sind) als Chip-Select 
benutzt, und hat immer funktioniert.

Außerdem, wie man vom Bild sehen kann, das Problem ist NICHT bei der 
Chip-Select.
Der bewegt sich. Sind MISO, MOSI und SCK, die kein Signal rausgeben...

Grüße
Luca Bertoncello

Autor: Bernd Brot (bernddasbrot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weißt aber schon, dass du die SPI-Schnittstelle mit 1/16 des 
MCU-Taktes betreibts? Bei 16MHz wären das 1MHz, damit würdest du auf dem 
Ozsi nichts sehen, die Übertragung ist in 10µs abgeschlossen!
Nimm mal 1µs als timebase und trigger auf SCK.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Nimm mal PB0 für den SS Pin.

>Der Code hier ist für einen SPI-Master, nicht Slave...

Ich weiss.

>Wozu sollte es helfen?

Wenn der ECHTE SS Pin floatet kann der Master ganz
schnell wieder zum Slave werden. Dann kommt nichts
mehr raus aus dem SPI.

Autor: Alicia R. (alicia_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
>>> Nimm mal PB0 für den SS Pin.
>
>>Der Code hier ist für einen SPI-Master, nicht Slave...
>
> Ich weiss.
>
>>Wozu sollte es helfen?
>
> Wenn der ECHTE SS Pin floatet kann der Master ganz
> schnell wieder zum Slave werden. Dann kommt nichts
> mehr raus aus dem SPI.


Obwohl ich skeptisch war, habe ich probiert SS auf 1 zu setzen und es 
geht!

Besten Dank!

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.