Forum: Mikrocontroller und Digitale Elektronik Probleme mit SPI kommunikation


von Alicia R. (alicia_r)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe ein ATmega1280 und möchte über SPI daten einem anderen Gerät 
schicken. Leider klappt es nicht. Mein Code ist:
1
  DDRA |= _BV(PIN3)| _BV(PIN5); //SS PINA5
2
  PORTA = 0;
3
4
  DDRB = _BV(PIN1); //SCK output
5
  DDRB |= _BV(PIN2); //MOSI output
6
7
  SPCR = _BV(SPE);
8
  SPCR |= _BV(MSTR);
9
  SPCR |= _BV(SPR0);
10
11
12
  for (;;)
13
  {
14
     PORTA &= ~_BV(PIN3);  // LED on
15
     PORTA &= ~_BV(PIN5);  //SS am Slave Low --> Beginn der Übertragung
16
     SPDR = '1';
17
     _delay_ms(500);
18
     PORTA |= _BV(PIN5);  //SS High --> Ende der Übertragung
19
     PORTA |= _BV(PIN3);   // LED off
20
     _delay_ms(500);
21
  }

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!

von holger (Gast)


Lesenswert?

Nimm mal PB0 für den SS Pin.

von Luca B. (lucabert)


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

von Bernd B. (bernddasbrot)


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.

von holger (Gast)


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.

von Alicia R. (alicia_r)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.