Hallo, ich taste mich an das SPI heran und habe wohl gleich einen Schritt ins Leere gemacht. Die Hardware Hardware besteht aus dem µC Atmega 169 (Butterfly) und einem 74HC595, Ausgangsseitig habe ich 8 LED's. Aus dem Datenblatt und Beispielen hier im Forum habe ich mir ein Testprogramm zusammen gestrickt. Das Compilieren und Flashen (via ISP - Druckerschnittstelle) läuft ohne Feher, nur meine LED's rühren sich nicht. Hier mein C-Programm. Kann mir jemand sagen wo da mein Fehler ist?
1 | /* SPI-Test.c */
|
2 | |
3 | #include <stdio.h> |
4 | #include <avr/io.h> |
5 | #include <avr/interrupt.h> |
6 | #include "util/delay.h" |
7 | |
8 | void spi_Masterinit (void); |
9 | void spi_Mastershiftout(uint8_t data); |
10 | |
11 | #ifndef F_CPU
|
12 | #define F_CPU 10000000UL // Takt CPU wird auf 1Mhz gesetzt
|
13 | #endif
|
14 | |
15 | int main(void) |
16 | {
|
17 | void spi_Masterinit (void) { |
18 | // Set MOSI and SCK
|
19 | DDRB = (1<<DDB2)|(1<<DDB1); // DDB2 is MOSI, DDB1 is SCK |
20 | // enable|as master|CPHA|1/16clk
|
21 | SPCR |= (1<<6)|(1<<4)|(1<<2)|(1<<0); |
22 | }
|
23 | |
24 | char data=170; |
25 | |
26 | while(1){ |
27 | |
28 | void spi_Mastershiftout(char data){ |
29 | //=== Start transmission
|
30 | SPDR = data; |
31 | //=== Wait for transmission complete (bit7 in SPSR get 1)
|
32 | while(!(SPSR & (1<<7))); //7=SPIF bit in SPSR |
33 | }//spi_writetoshift |
34 | |
35 | } //while |
36 | for(;;); |
37 | } /* end main */ |
Dank für Eure Hilfe Gruß Dietmar