SPI ohne Bauteil

#3970711
Lesenswert?

Hallo,

ich habe folgenden Code:
1
#ifndef F_CPU
2
#define F_CPU 16000000UL
3
#endif
4

5
#include <avr/io.h>
6
#include <util/delay.h>
7

8
void spi_init_master (void)
9
{
10
  DDRB = (1<<5)|(1<<3);
11
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
12
}
13

14
void spi_tranceiver (uint8_t cmd)
15
{
16
  SPDR = cmd;
17
  while(!(SPSR&(1<<SPIF)));
18
}
19

20

21
int main(void)
22
{
23
  spi_init_master();
24
  uint8_t x = 0x01;
25

26
  while(1)
27
  {
28
    spi_tranceiver(x);
29
  }
30
}

Das ganze habe ich auch schon wie im Datenblatt vorgemacht versucht
dh. die tranceiver Funktion mit anderem Datentypen.
1
 unsigned char spi_tranceiver (unsigned char data)

Nun meine Frage:

Ich habe kein Bauteil angeschlossen und messe mit einem Logic Analyzer. 
Hier kommt nur Müll raus und der MCU sendet auch nur für kurze (paar 
Sekunden) Zeit und hört dann auf. (egal mit welcher Funktion ich sende 
und was ich sende, es sieht immer gleich aus)

Ist also ein antwortendes Bauteil unumgänglich? Oder liegt es an etwas 
anderem? Grundsätzlich funktioniert der MCU, auch der externe Quarz mit 
16 MHz läuft prima. UART läuft ohne Probleme.

Sollte also der Code ok sein, was ich glaube und man _kein_ Bauteil 
braucht, dann liegts an meinem Steckbrett. Bevor ich da aber von vorn 
beginne, wollte ich mal fragen was ihr so meint :).
Gast #3970732
Lesenswert?

Zur Klärung müsstest du noch den Controller angeben,
sowie die Schaltung die du aussen dazu angebracht hast.
Irgendwie musstest du den Controller ja programmieren,
und an die SPI hinkommen.

Wenn du einen jungfräulichen Arduino bekommst dann ist
dieser mit einem Bootloader ausgestattet und die
Fuses sind auf "Blootloader" gesetzt. Das kann für
dein Vorhaben hinderlich sein.

Also bitte etwas mehr Details.
Gast #3970774
Lesenswert?

Jim Meba schrieb:
> NSS, CLK und MOSI. Wenn NSS nicht Ausgang, dann sind o.g. Probleme die
> Folge.

Slave Select ist als Master nicht unbedingt erforderlich.

Jeder andere Pin der als Ausgang verwendbar ist kann den SS
als Chip Select ersetzen. SS wird erst relevant wenn der
Controller als Slave arbeiten soll.

Zum elementaren Senden von SPI Daten ist nur ein Clock- und
ein Daten-Ausgang erforderlich, sonst nichts. So jedenfalls
bei den AVR Controllern. Dass damit kein SPI Slave korrekt
angesteuert werden kann ist ein anderes Thema. Der Datenstrom
fliesst trotzdem
Gast #3970791
Lesenswert?

Hi

>Zum elementaren Senden von SPI Daten ist nur ein Clock- und
>ein Daten-Ausgang erforderlich, sonst nichts. So jedenfalls
>bei den AVR Controllern. Dass damit kein SPI Slave korrekt
>angesteuert werden kann ist ein anderes Thema. Der Datenstrom
>fliesst trotzdem

Dan lies mal den Abschnitt : 'SS Pin Functionality' im Datanblatt.

MfG Spess
Gast #3970799
Lesenswert?

>Slave Select ist als Master nicht unbedingt erforderlich.

Bei AVR schon.

>SS wird erst relevant wenn der
>Controller als Slave arbeiten soll.

SS ist auch beim Master relevant. Ist der Pin Eingang und
wird auf Low gezogen schaltet der Mastermode einfach ab.
Deswegen sollte man IMMER SS auf Ausgang setzen. Was
man mit diesem Ausgang macht ist widerum egal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren