Forum: Mikrocontroller und Digitale Elektronik SPI ohne Bauteil


von Sebastian M. (sebmuell)


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 :).

von isidor (Gast)


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.

von isidor (Gast)


Lesenswert?

Sebastian M. schrieb:
> Sollte also der Code ok sein, was ich glaube und man kein Bauteil
> braucht,

... und ja, zum Senden von Daten über SPI braucht man keine
externe Bauteile.

von spess53 (Gast)


Lesenswert?

Hi

>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.

Was ist an deinem SS-Pin. Unbeschaltet und als Eingang kann das zum 
Abschalten des Mastermodes führen.

MfG Spess

von Jim M. (turboj)


Lesenswert?

1
DDRB = (1<<5)|(1<<3);

Das sind nur zwei Pins als Ausgang. SPI im Master Modus braucht 3 
Ausgänge:
NSS, CLK und MOSI. Wenn NSS nicht Ausgang, dann sind o.g. Probleme die 
Folge.

Und nein, ich schau jetzt nicht nach, welcher Pin bei Dir NSS sein 
müsste.

von isidor (Gast)


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

von spess53 (Gast)


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

von isidor (Gast)


Lesenswert?

Ist schon klar dass er nicht als Eingang stehen darf.
Ich wollte damit sagen dass er für die Erzeugung des
Datenstroms nicht erforderlich ist.

von holger (Gast)


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.

von isidor (Gast)


Lesenswert?

holger schrieb:
> Deswegen sollte man IMMER SS auf Ausgang setzen. Was
> man mit diesem Ausgang macht ist widerum egal.

Bestätigung.

von Sebastian M. (sebmuell)


Lesenswert?

Es lag in der Tat am SS :)

Danke euch.

von isidor (Gast)


Lesenswert?

Sebastian M. schrieb:
> Danke euch.

... und Danke für die Rückmeldung.

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.