74HC595 am SPI-Interface

Gast #802822
Lesenswert?

Hallo,

bin gerade erst in die Welt der µC's eingestiegen...
Jetzt stehe ich "mal wieder" vor einer Hürde.
Ich möchte einen 74HC595 am SPI des Atmega32 betreiben.
Problem:
Die Daten erscheinen erst nach dem zweiten aufruf der Funktion 
SPI_MasterTransmit() am Schieberegister.

Ich hoffe ihr könnt mir helfen.

#include  <avr\io.h>
#include   "uart.h"

void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */

DDRB = (1<<PB5)|(1<<PB7)|(1<<PB4);

/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

void SPI_MasterTransmit(char cData)
{
PORTB |= (1 << PB4);
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
PORTB &= ~(1 << PB4);
}

int main( void )

{
unsigned char temp=0;

  SPI_MasterInit();

  uart_init( MYUBRR);

  while(1)
  {
    temp=uart_Receive();

  if( temp=='1') {SPI_MasterTransmit(0b11111111);}
  if( temp=='2') {SPI_MasterTransmit(0b11111110);}
  if( temp=='3') {SPI_MasterTransmit(0b11111100);}
  if( temp=='4') {SPI_MasterTransmit(0b11111000);}





}
return 0;
}



Mfg

Sascha
Gast #802829
Lesenswert?

>Die Daten erscheinen erst nach dem zweiten aufruf der Funktion
>SPI_MasterTransmit() am Schieberegister.

Du meinst, am Ausgang des 74HC595?

Falls du an PB4 das Ladepin des 595 (Pin 12) angeschlossen hast, dann 
versuch es mal so:
1
void SPI_MasterInit(void)
2
{
3
  // Set MOSI and SCK output, all others input
4
  DDRB = (1<<PB5)|(1<<PB7)|(1<<PB4);
5
  // disable \ss
6
  PORTB |= (1 << PB4);
7
  // Enable SPI, Master, set clock rate fck/16
8
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
9
}
10

11
void SPI_MasterTransmit(char cData)
12
{
13
  // Start transmission
14
  PORTB &= ~(1 << PB4);
15
  // shift out data
16
  SPDR = cData;
17
  // Wait for transmission complete
18
  while(!(SPSR & (1<<SPIF)));
19
  // disable \ss
20
  PORTB |= (1 << PB4);
21
}

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