Forum: Mikrocontroller und Digitale Elektronik SPI: Master-Modus wird trotz korrektem SS deaktiviert!?


von Jonathan K. (burgerohnealles)


Lesenswert?

Hallo,

ich versuche seit gestern das RFID-Modul mit RC522 selbst anzusteuern, 
was momenten wegen einem simplen (?) SPI-Problem nicht funktioniert.

Ich habe jetzt nach einigem Testen folgenden Code zusammen bekommen, 
dabei sollte die LED an PORTD6 leuchten, was sie aber nicht tut:
1
#include <avr/io.h>
2
3
4
int main (void) {
5
  PORTB |= (1<<2); // cs/ss
6
  DDRB |= (1<<2); // cs/ss
7
  
8
  SPCR = (1<<SPE) | (1<MSTR); // spi enable, master
9
  
10
  DDRB |= (1<<5) | (1<<3); // sck, mosi
11
  DDRB &= ~(1<<4); // miso
12
  
13
  
14
  DDRD |= (1<<6);
15
  if (SPCR & (1<<MSTR))
16
    PORTD |= (1<<6);
17
  
18
  
19
  for(;;);
20
  return 0;
21
}

Eigentlich ganz simpel, aber was ist der Fehler? Warum wird das MSTR-Bit 
wieder gelöscht? Habe nur gelesen, dass dies automatisch passiert, wenn 
SS ein Input ist und ein entsprechendes Signal bekommt.

Danke schon mal
burgerohnealles

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

SS MUSS als Ausgang definiert werden. Ob man dann es als CS benutzt oder 
für was anderes ist egal.

von Jonathan K. (burgerohnealles)


Lesenswert?

Falk Brunner schrieb:
> SS MUSS als Ausgang definiert werden.

Jonathan K. schrieb:
>   PORTB |= (1<<2); // cs
>   DDRB |= (1<<2); // cs

Hab ich doch, oder etwa nicht? Laut Datenblatt vom m328p ist PB2 SS/CS 
..

: Bearbeitet durch User
von holger (Gast)


Lesenswert?

>  SPCR = (1<<SPE) | (1<MSTR); // spi enable, master

  SPCR = (1<<SPE) | (1<<MSTR); // spi enable, master

von Jonathan K. (burgerohnealles)


Lesenswert?

holger schrieb:
>>  SPCR = (1<<SPE) | (1<MSTR); // spi enable, master
>
>   SPCR = (1<<SPE) | (1<<MSTR); // spi enable, master

Ok, und was ist da falsch?

: Bearbeitet durch User
von holger (Gast)


Lesenswert?

>Ok, und was ist da falsch?

< != <<
;)

von Jonathan K. (burgerohnealles)


Lesenswert?

Ahhh jetzt seh ichs, danke! Sry, stand total aufm Schlauch ..

von Falk B. (falk)


Lesenswert?

Da sollte der Compiler mindestens ne Warnung erzeugen.

von Jim M. (turboj)


Lesenswert?

Falk Brunner schrieb:
> Da sollte der Compiler mindestens ne Warnung erzeugen.

Den C Compiler zeig mir doch bitte, der da eine Warning ausgibt. Der 
Code ist nach C-Standard auch mit dem "<" statt "<<" syntaktisch völlig 
korrekt - nur halt semantisch verschieden.

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.