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