Forum: Mikrocontroller und Digitale Elektronik Zu blöd zum SPI!


von TheMason (Gast)


Lesenswert?

Hallo,

ich bin mit einem ATMega16 an einem Projekt dran. Ich benutze AVR Studio 
und einen Billig ISP Parallelport Programmer (2 Widerstände). An dem SPI 
hängt ein Dataflash und ein FPGA (später noch eine SD-Card). 
Funktioniert alles wunderbar.
Jetzt habe ich aus Speicherplatz gründen einen ATMega644 eingesetzt. 
Alle Register angepasst und habe nun das Problem, das das senden von SPI 
(warten auf das SPIF-Bit) nur für ein einziges Byte funktioniert.
Sprich : Ich sende ein Byte, und beim 2. Byte bleibt der uC in der 
While-Schleife hängen.

Ich habe den ganz normalen "Standard" Code für SPI verwendet

void vSPIInit (void)
{
  PRR  &= ~(1 << PRSPI);
  DDRB |= (1<<5)|(1<<7);
  SPCR  = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
  SPSR  = 0;
}


UCHAR ucSPITransceiveByte (UCHAR ucData)
{
  PRR  &= ~(1 << PRSPI);
  SPDR = ucData;
  while(!(SPSR & (1<<SPIF)));
  return SPDR;
}

Im Datenblatt steht auch nicht viel mehr (bis auf das man PRR auf 0 bzw. 
das 2. Bit im PRR löschen sollte/muß)
Was kann das sein, das so etwas einfaches nicht funktioniert ?! Vor 
allem hatte ich auf dem ATMega16 keine solchen Probleme. Und das 
SPI-Interface sollte doch so einfach sein das es sich ohne größere 
Probleme portieren (zumindest auf den ATMegas) lässt oder ?

Gruß
Rene

von Spess53 (Gast)


Lesenswert?

Hi

Warum nimmst du nicht das Beispiel aus dem Datenblatt?

MfG Spess

von TheMason (Gast)


Lesenswert?

wo soll denn der unterschied zwischen meinem code und dem aus dem 
datenblatt sein ?!
ich sehe da keinen (bis auf die geschichte mit PRR)
das ist ja das was ich nicht verstehe. der code ist auf dem mega16 und 
dem mega644 derselbe (laut datenblatt), aber es funktioniert einfach 
nicht.
port-pins gesetzt laut datenblatt. initialisierung laut datenblatt und 
es läuft einfach nicht.

von Spess53 (Gast)


Lesenswert?

Hi

Was hängt an deinem SS-Pin. Wird das SS-Pin als Eingang auf Low gezogen, 
wird der Mastermode abgeschaltet.

MfG Spess

von TheMason (Gast)


Lesenswert?

habs gefunden. der ss pin war nicht als ausgang geschaltet.
den ss pin selbst nutze ich nicht da ja mehrere sachen (im moment nur 2) 
am spi hängen.

danke noch und gruß

rene

von roboterheld (Gast)


Lesenswert?

verständnisfrage:

wenn ich nur master(mega32) und slave(mega32) habe, brauche ich also nur 
mosi,miso und clock, richtig?
mfg

von Spess53 (Gast)


Lesenswert?

Hi

Wenn du nur zum Slave senden willst: MOSI am Master und MOSI am 
Slave.SLK sowiso. Ansonsten noch MISO an MISO (Datenblatt S.137):

MfG Spess

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.