mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega88 USART SPI als Slave


Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte zwei MCUs(MSP430 <--> ATMEga88) über SPI kommunizieren 
lassen.
Der MSP430 muss SPI Master und der ATMega88 muss SPI Slave sein. 
Verdrahtet ist der ATMega:

   PD4   IN     SPI Clock vom MSP430
   PD0   IN     RXD (Daten vom MSP430)
   PD1   OUT    TXD (Daten zum MSP430)

Softwareseitig habe ich den ATMega wie folgt konfiguriert:

unsigned char spi_USARTInit(void)
{
  UCSR0B = 0x00; //disable
  UCSR0A = 0x00; //disable
  UCSR0C = 0x00; //disable

  UCSR0C |= (1 << 6);   // synchronus mode

  // set interrupts, enable rx/tx
  UCSR0B = (( 1 << RXCIE0 ) | ( 1 << RXEN0 ) | ( 1 << TXEN0 ));
}

void spi_USARTISR_Receive(void) __interrupt[USART_RX_vect]
{
  
  //uart has received a character in UDR
  unsigned char status, resh, resl;

  status  = UCSR0A;
  resh    = UCSR0B;
  resl    = UDR0;
  UDR0    = 'T';
  sys_ToggleLED();
}

Wenn ich den Code jetzt ausführe und der SPI Master ein Byte sendet, 
erkenne ich, dass der Interrupt im ATMega (SPI Slave) ausgeführt wird. 
Die LED toggelt und ein Byte wird über die TX Leitung geschickt.
Mein Problem ist jetzt, dass dieses Byte nicht dem gesendeten Byte ('T') 
entspricht(über OSZI angeschaut).

Jetzt meine Fragen:
- kann man das SPI Interface im ATMega via USART überhaupt als Slave 
betreiben?
- ist bei mir noch ein Fehler erkennbar?

Wäre für Input sehr dankbar

Gruss
Nobbie

Autor: TorstenS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nobbie,

wenn der Interrupt aktiviert wird, ist die Übertragung schon vorbei. 
Senden und Empfangen laufen doch parallel. Wenn du vor dem Senden des 
Masters im Slave das zu sendende Byte schon bereitstellst, sollte es 
funktionieren.

Gruß
Torsten

Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Torsten,

ich sende zyklisch(endlos) in der Mainloop vom MSP430. Somit sollte 
spätestens beim zweiten Schreibzyklus des MSP430 das Byte vom Slave 
übertragen werden.

Gruss
Nobbie

Autor: Nobbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich glaube, dass mit dem USART kein SPI Slav möglich ist. In den 
UserGuides steht folgende Zeile:

"...The USART can also be used in Master SPI mode,.."

Passiv betrachtet heißt das für mich, dass der Slave Mode nicht möglich 
ist.

Gruss
Nobbie

Autor: TorstenS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nobbie,

ich habe auch gerade einen Blick in die Anleitung geworfen und gesehen, 
dass nur der Master-Mode unterstützt wird.

Gruß
Torsten

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.