Forum: Mikrocontroller und Digitale Elektronik SPI , Problem


von Markus S. (markus_s21)


Lesenswert?

Ich wollte 2 µC(ATmega 8, Atmega 328P) über SPI verbinden. Jedoch 
funktioniert es nicht so richtig. Da der Slave (ATmega 8) auf einem 
Myavr mk2 Board sitzt konnte ich in mit dem Mysmartusb debuggen. Wenn 
ich in aber mit dem Master verbinde funktioniert nichts mehr.

Hier die dafür verwendeten Funktionen:
1
void Masterinit( void )
2
{
3
  DDRB = (1<<PB5)|(1<<PB4)|(1<<PB2);//Set MOSI and SCK output all others are INPUT
4
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//Enable SPI, Master, set clock rate fcl/16
5
}
6
void transmit( char data )
7
{
8
  PORTB = PORTB & 0xfe;
9
  SPDR = data; 
10
  while(!(SPSR & (1<<SPIF))); //Wait for transmission is complete
11
  PORTB = (1<<PB2);
12
}

von spess53 (Gast)


Lesenswert?

Hi

>  PORTB = PORTB & 0xfe;
>  .....
>  PORTB = (1<<PB2);

Was soll das bezwecken?

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

spess53 schrieb:
> Hi
>
>>  PORTB = PORTB & 0xfe;
>>  .....
>>  PORTB = (1<<PB2);
>
> Was soll das bezwecken?

Ich schätze mal, der Hinweis war etwas zu subtil.

0xFE ist NICHT der Pin PB2. (SS der SPI)

SChreibs halt so

   PORTB &= ~( 1 << PB2 );

dann passiert dir so ein Scheiss nicht. Immer diese unangebrachten 
brachial Binär und Hex Schreibweisen. Man handelt sich damit mehr Fehler 
ein als einem lieb ist.

Und wenn du es so machst
1
#define MASTER_SS  PB2
2
3
...
4
  PORTB &= ~( 1 << MASTER_SS );
5
  ...
6
  PORTB |= (1 << MASTER_SS );
7
...

dann kann es dir nicht mal mehr passieren, dass du im 0-Setzen und 
1-Setzen der SS-Leitung verschiedene Pins erwischt. Plus: man kann dann 
sogar im Code sehen und ablesen, dass es um die SS Leitung geht.

von Markus S. (markus_s21)


Lesenswert?

OK das war ein Fehler mit der SS Leitung. Habe es aber in der zwischen 
Zeit mit einem Arduino Sketch probiert und es funktioniert trotzdem 
nicht??      (vielleicht Mysmartusb entfernen da er SPI belegt ???

von Julius (Gast)


Lesenswert?

den msu2 kannst ja mal testweise abziehen aber eigentlich ist der 
neutral wenn er nicht gerade im progmodus oder in diesem spezialmodus 
für twi/spi ist ist

gruß J.

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.