Hallo zusammen,
habe 3 Schieberegister 74595 kaskadiert und an den SPI Port des MC
(Atmega644) angeschlossen.
Habe die Ports des MCs wie folgt mit den Eingängen der Schieberegister
verbunden:
MC Schieberegister
MOSI SER an das 1. Schieberegister
SCK SCK von allen
PB0 RCK von allen
SCL von allen an VCC
G von allen an GND
Schaltplan der Schieberegister hängt auch an!!
Mein programm lautet wie folgt:
1 | #include <avr/io.h>
|
2 | #define F_CPU 20000000ul
|
3 | #include <util/delay.h>
|
4 | #define DDR_SPI DDRB
|
5 | #define DD_MOSI DDB5
|
6 | #define DD_MISO DDB6
|
7 | #define DD_SCK DDB7
|
8 | #define DD_SS DDB4
|
9 | #define DD_RCK DDB0
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | void SPI_MasterInit(void)
|
16 | {
|
17 | /* Set MOSI and SCK output, all others input */
|
18 | DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
|
19 | /* Enable SPI, Master, set clock rate fck/16 */
|
20 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
21 | }
|
22 | void SPI_MasterTransmit(unsigned char cData)
|
23 | {
|
24 | /* Start transmission */
|
25 | SPDR = cData;
|
26 | /* Wait for transmission complete */
|
27 | while(!(SPSR & (1<<SPIF)));
|
28 | }
|
29 |
|
30 |
|
31 | int main(void)
|
32 | {
|
33 |
|
34 | SPI_MasterInit();
|
35 |
|
36 | SPI_MasterTransmit(255);
|
37 | SPI_MasterTransmit(255);
|
38 | SPI_MasterTransmit(255);
|
39 |
|
40 | }
|
Nur leider tun die Schieberegister nicht das was sie sollen. In diesem
Fall sind nicht alle Ausgänge "1".
Egal welchen Wert ich in die Klammern (cData) schreibe. Die Ausgänge
haben nicht die richtigen Werte.
Habe auch schon mal jeden Port einzeln angesprochen und das hat
funktioniert. Insofern gehe ich davon aus, dass es nicht an der
Schaltung liegt.
Auf eine Antwort freue ich mich!!