mikrocontroller.net

Forum: Compiler & IDEs 74HC595 am SPI-Interface


Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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:
void SPI_MasterInit(void)
{
  // Set MOSI and SCK output, all others input
  DDRB = (1<<PB5)|(1<<PB7)|(1<<PB4);
  // disable \ss
  PORTB |= (1 << PB4);
  // Enable SPI, Master, set clock rate fck/16
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Supi...danke das wars!!

Mfg

Sascha

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ist eigendlicg das ladepin?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RCK

Laden der Outputlatches vom momentanen Zustand der Schieberegister
http://www.mikrocontroller.net/articles/AVR-Tutori...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René schrieb:
> was ist eigendlicg das ladepin?

Der Takteingang des Ausgangs-Latches, Pin 12.

Bitte mach für eine völlig unverwandte Frage einen neuen Thread auf.
Das hat mit GCC auch gar nichts zu tun, hätte besser nach "Allgemeine
Elektronik" gepasst.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.