Problem mit Schieberegister

Gast #3257592
Lesenswert?

Hey Leute,
Ich hab ein kleines Problem mit meinem Schieberegister (74HC595).
Als Controller benutze ich ein Atmega 328p (Vom Arduino Uno).
So, nun möchte ich Daten per SPI an das Schieberegister geben was auch 
einmal gut funktioniert. Sobald ich das zweite Byte reinschieben will 
passiert nichts mehr, die LED bleibt einfach an :/
Hab die Verkabelung schon paar mal überprüft, sollte eigentlich alles 
stimmen.. Wo könnte ich einen Fehler gemacht haben?
Hier noch der Code:
1
#include <avr/io.h>
2

3
#define F_CPU 16000000UL
4

5
// SPI
6
#define DDR_SPI DDRB
7
#define DD_MOSI DDB3
8
#define DD_SCK DDB5
9
#define DD_SS DDB2
10

11
#include <util/delay.h>
12

13
void SPI_MasterInit(void);
14
void SPI_MasterTransmit(char cData);
15

16
int main(void)
17
{
18
  SPI_MasterInit();
19
  
20
    while(1)
21
    {
22
    // Alle an
23
    SPI_MasterTransmit((char) 0b00000000);
24
    _delay_ms(1000);
25
    
26
    // Alle aus
27
    SPI_MasterTransmit((char) 0b11111111);
28
    _delay_ms(1000);
29
    }
30
}
31

32
void SPI_MasterInit( void )
33
{
34
  /* Set MOSI, SS and SCK output, all others input */
35
  DDR_SPI = (1<<DD_MOSI)|(1<<DD_SS)|(1<<DD_SCK);
36
  /* Enable SPI, Master, set clock rate fck/2 */
37
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPI2X);
38
}
39

40
void SPI_MasterTransmit( char cData )
41
{
42
  PORTB |= (0<<DD_SS);
43
  /* Start transmission */
44
  SPDR = cData;
45
  /* Wait for transmission complete */
46
  while(!(SPSR & (1<<SPIF)));
47
  PORTB |= (1<<DD_SS);
48
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren