www.mikrocontroller.net

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


Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Warum nimmst du nicht das Beispiel aus dem Datenblatt?

MfG Spess

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: roboterheld (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verständnisfrage:

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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.