>> Am Anfang der Funktion wird wie ich schon überallgelesen habe mit
>> SPI_DDR der gesamte PORTB auf Ausgang geschaltet
>> damit sollte auf jedenfall MOSI,SCLK und /SS auf Ausgang stehen und
>> der übertragung sollte nichts mehr im wege stehn.
Zum ersten Teil: Das gilt natürlich nur, wenn Du irgendwo ein
#define SPI_DDR DDRB
stehen hast (und auch wirklich PORTB bzw. dessen Pins PB4 = /SS, PB5 =
MOSI, PB6 = MISO und PB7 = SCK nutzt).
Zum zweiten Teil wurde schon was gesagt.
Die Tabelle lautet:
PIN Direction, Master SPI Direction, Slave SPI
MOSI User defined Input
MISO Input User defined
SCK User defined Input
/SS User defined Input
Also schau Dir nochmal die Bedeutung/Folgen Deiner SPI_DDR-Anweisung an
(sofern Du mit der SPI-Schnittstelle auch mal was empfangen willst).
When configured as a Master, the SPI interface has no automatic control
of the SS line. This must be handled by user software before
communication can start.
DATA_H und DATA_L hast Du vermutlich als uint16_t definiert, könntest
zum RAM-Sparen aber auch uint8_t nehmen und nur mit 0xFF verUNDen. Müßte
aber sowieso ein Problem geben, wenn Du SPDR (8 bit) einen 16 bit Wert
(DATA_x) übergeben willst ohne zu casten.
Am besten noch mal in aller Ruhe das Datenblatt lesen (SPI ist ja zum
Glück wirklich nicht viel). Wie auch schon gesagt wurde, solltest Du die
SPI_Init-Funktion separat lassen und eine SPI_Transmit-Funktion separat
haben.
Du schriebst "Oszilloskop und Endlosschleife", weshalb ich ein zu
schnelles Senden ohne ein Pause zum Pegelmessen ohne Oszilloskop mal
ausschließe.