Forum: Mikrocontroller und Digitale Elektronik Schieberegister mit SPI


von Thomas (Gast)


Lesenswert?

Hallo ihr,

ich versuche gerade die ersten Schritte in Richtung LED-Matrix zu 
machen. Jedoch scheitere ich schon bei den Grundlagen.

Ich will lediglich ein Bitmuster per Hardware SPI-Modul meines Atmega 
328P an ein 74HC595 Schieberegister senden.

Was passiert ist jedoch, dass ich an keinem Ausgang des Schieberegisters 
einen High Pegel feststellen kann. Lediglich der MOSI Pin des AVR hat 
ständig 5V(Was ja eigentlich auch nicht sein sollte). Gemessen mit 
meinem Multimeter, da ich nur ein analoges Oszi habe.

Bin total ratlos wo der Fehler liegt. Ich habe die Schaltung schon auf 
zwei verschiedenen Breadboards und mit zwei Verschiedenen Registern 
getestet, jedoch mit dem gleichen Ergebnis.

Ich häng hier mal meinen Code an, wäre toll wenn jemandem ein Fehler 
auffällt.


Danke schonmal!! :)

1
 
2
#include <avr/io.h>
3
4
#define F_CPU 16000000UL
5
6
#define output_DDR DDRB
7
#define output_port PORTB
8
9
#define data_pin PB3
10
#define clock PB5
11
#define latch PB2
12
13
void output_init(void){
14
  output_DDR |= ((1<<data_pin) | (1<<clock) | (1<<latch));
15
  //Pins als Ausgang und Low schalten  
16
  output_port &= ~((1<<data_pin) | (1<<clock) | (1<<latch));
17
}
18
19
void SPI_init(void){
20
  SPCR = (1<<SPE) | (1<<MSTR);
21
  //SPI in Master Mode aktivieren
22
}
23
24
int main(void)
25
{
26
  output_init();
27
  SPI_init();
28
  //output_port &= ~(1<<latch); //Latch low ziehen um SPI Kommunikation zu starten
29
  SPDR=0b10101010;      //Daten an Schiebereister senden
30
  while(!(SPSR & (1<<SPIF)));  //Warten bis Übertragung beendet ist
31
  
32
  output_port |= (1<<latch);
33
  output_port &= ~(1<<latch);  //Latch togglen um Daten auf Ausgänge zu übernehmen
34
  
35
    while(1)
36
    {
37
    }
38
}

von uwe (Gast)


Lesenswert?

Du mußt noch den richtigen SPI modus einstellen mit CPHA und CPOL im 
SPCR Register.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?


von Thomas (Gast)


Lesenswert?

uwe schrieb:
> Du mußt noch den richtigen SPI modus einstellen mit CPHA und CPOL
> im
> SPCR Register.

Hallo,
danke schonmal. Aber von Haus aus müsste CPHA, sowie CPOL auf 0 sein, 
das bedeutet Clock ist 0 im Ruhezustand und es wird auf die steigende 
Flanke gesampelt. Also genau so wie ich es möchte. Oder hab ich da jetzt 
einen Denkfehler?

von S. Landolt (Gast)


Lesenswert?

Hardware: wie ist der 595 angeschlossen?

von Thomas (Gast)


Lesenswert?

S. Landolt schrieb:
> Hardware: wie ist der 595 angeschlossen?

  uC --- 595
MOSI --- SI-Pin
SCK  --- SCK - Data Input Clock
SS   --- RCK - Register Clock

Output Enable auf GND
Shift register Clear auf GND

von S. Landolt (Gast)


Lesenswert?

> Shift register Clear auf GND

Falls damit Pin 10 (heißt bei mir /SCLR) gemeint ist, das gehört auf 
Vcc.

von Thomas (Gast)


Lesenswert?

S. Landolt schrieb:
>> Shift register Clear auf GND
>
> Falls damit Pin 10 (heißt bei mir /SCLR) gemeint ist, das gehört auf
> Vcc.

Das war's, manchmal zweifle ich schon stark an mir.. Gesichtspalme
Danke :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.