AVR als SPI Slave

OP #3159984
Lesenswert?
• ▲
▼
Hallo zusammen,

ich versuche momentan eine Verbindung zwischen zwei AVR's via SPI 
Interface aufzubauen. Der Slave soll bei jedem erfolgreich empfangenen 
Zeichen ein "0xAC" als Antwort senden. Im Screenshot sieht man 
allerdings, dass er regelmäßig nicht in den Interrupt springt und das 
empfangene Zeichen unverändert wieder rausschiebt.

Kann mir jemand sagen was ich falsch mache? Oo

Hier einmal der Code für den Slave:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
int main(void)
5
{
6
  /* MISO = output */
7
  DDRB |= (1<<PB6);
8
  
9
  /* SPI enable */
10
  SPCR0 |= (1<<SPE0) | (1<<SPIE0);
11
  
12
  /* global interrupt enable */
13
  sei();
14
  
15
  while(1);
16
}
17

18
ISR(SPI_STC_vect)
19
{
20
  SPDR0 = 0xAC; // send ACK;
21
}

Gruß,
Martin
Angehängte Dateien:
#3160026
Lesenswert?
• ▲
▼
Martin Wenske schrieb:
> Im Screenshot sieht man
> allerdings, dass er regelmäßig nicht in den Interrupt springt
Man sieht, dass er in den Interrupt springt. Oder wie kommt das 0xAC 
sonst auf die Leitung?

Martin Wenske schrieb:
> Kann mir jemand sagen was ich falsch mache?
Du hast die falsche Erwartung.
Der Master schiebt ein Byte rein und empfängt das, was zuletzt im SPDR 
des Slaves stand. Willst du das 0xAC empfangen, welches erst 
reingeschrieben wird, wenn das gesendete Byte angekommen ist, holt der 
Master es bei der nächsten Sendung ab. Genau das sieht man auch in 
deinem Screenshot.

mfg.
OP #3160042
Lesenswert?
• ▲
▼
Hi,

Thomas Eckmann schrieb:
> Man sieht, dass er in den Interrupt springt. Oder wie kommt das 0xAC
> sonst auf die Leitung?
Genau, also prinzipiell funktioniert die Übertragung. Allerdings springt 
er ab und zu nicht in den Interrupt und verliert das Zeichen (im 
Screenshot "0x15". Timingproblem? Hardwarefehler? Die gesendeten Daten 
des Masters sehen vom Timing her gut aus.

Nutze ich keinen Interrupt und Polle das SPIF-Flag übersieht er auch 
Daten.

Gruß,
Martin

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.