SPI mit ATMega162 und 74HC595

Gast #3089616
Lesenswert?
• ▲
▼
Hallo zusammen,

ich möchte über ein Schieberegister eine LED-Zeile steuern. Leider tut 
sich da aktuell gar nichts...

Folgende Verbindungen von Prozessor zu Schieberegister hab ich gelötet:

PB7(SCK)  --> SH_CP
PB5(MOSI) --> DS
PB4(SS)   --> ST_CP

Und folgendes kleine Programm geschrieben:

// Init Port
DDRB = (1<<PB4) | (1<<PB5) | (1<<PB7);
PORTB = (1<<PB4);

// Init SPI
SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);

output = 1;

// Sende Output
SPDR = output;
while (!(SPSR & (1<<SPIF)));

// Daten von Schieberegister in Latches
PORTB &= ~(1<<PB4);
PORTB |= (1<<PB4);

Wie gesagt leuchtet keine LED in der Zeile...

Ist an den Verbindungen und/oder am Coding etwas grundlegend 
falsch/vergessen? Muss ich den MR-Pin vom Schieberegister zwingend mit 
VCC verbinden (hab ich irgendwo als empfehlenswert gelesen, aber noch 
nicht gemacht)?

Vielen Dank!
#3089634
Lesenswert?
• ▲
▼
Mike schrieb:
> Ist an den Verbindungen und/oder am Coding etwas grundlegend
> falsch/vergessen? Muss ich den MR-Pin vom Schieberegister zwingend mit
> VCC verbinden (hab ich irgendwo als empfehlenswert gelesen, aber noch
> nicht gemacht)?

ja, das solltest Du aber tun (!MR = Master Reset für das 
Schieberegister).
Somit wäre das Schieberegister immer zurückgesetzt.
Und wie hast Du !OE beschaltet?
(Firma: KHTronik) #3089707
Lesenswert?
• ▲
▼
Hallo Holzknüppel,

der Hinweis auf ein Datenblatt ist sicher hilfreich, denn wenn man nicht 
lernt Datenblätter zu lesen wird man nie eine Schaltung so entwerfen 
können, dass man das geplante Ergebnis ohne endloses Fummeln erreicht. 
Selbst mit guten Datenblättern bleibt, gerade bei SPI u.ä., noch genug 
Raum für klärende Schaltungsanalyse. Drei Signale mit verschiedenen 
Phasenbeziehungen und Polaritäten reichen schon für 1-2 Tage Fehlersuche 
aus :-).
Es ist also ein guter Rat, wenn man Mike das Studium der Datenblätter 
nahelegt.
Grüße, Kurt
Gast #3089751
Lesenswert?
• ▲
▼
Mike schrieb:
> auch gar nicht, hängt in der Luft... muss das an GND?

Manchmal fragt man sich, wofür die Hersteller in ihren Datenblättern 
sinntragende Pin-Bezeichnungen verwenden, Logik-Diagramme zeigen und 
Pin-Beschreibungen aufnehmen.

Was ist an dem Satz "Data in the storage register appears at the output 
whenever the output enable input (\OE) is LOW" so schwer zu verstehen?
#3089846
Lesenswert?
• ▲
▼
T.Roll schrieb:
> Mike schrieb:
>> auch gar nicht, hängt in der Luft... muss das an GND?
>
> Manchmal fragt man sich, wofür die Hersteller in ihren Datenblättern
> sinntragende Pin-Bezeichnungen verwenden, Logik-Diagramme zeigen und
> Pin-Beschreibungen aufnehmen.
>
> Was ist an dem Satz "Data in the storage register appears at the output
> whenever the output enable input (\OE) is LOW" so schwer zu verstehen?

Naja, eben ob es wirklich muss. Wegrenn ;-)
Gast #3089925
Lesenswert?
• ▲
▼
Danke für die Tips. Mit den beiden zusätzlichen Verbindungen 
funktioniert es prinzipiell - sorry, da hätte ich durch etwas 
sorgfältigere Recherche im Datenblatt sicher selbst drauf kommen können.

Aber ein kleines Problem gibt es noch: also ich habe zwei 
Schieberegister kaskadiert und daran zwei 8er-LED-Zeilen gehängt (also 
insgesamt 16 LEDs). Jetzt habe ich das Phänomen, dass bei der 
Ansteuerung die LEDs immer eine Stelle "zu weit rechts" reagieren - z. 
B. ich möchte mit folgendem Code LED 8 und LED 16 zum Leuchten bringen, 
aber es sind LED 7 und LED 15 an.
Ist da noch ein Fehler im Coding, oder gibt es einen "Trick"?

int main(void)
{
  uint8_t output = 0;

  // Init Port
  DDRB = (1<<PB4) | (1<<PB5) | (1<<PB7);

  // Init SPI
  SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPI2X) | (1<<SPR1) | (1<<SPR0);

  output = 0b01111111;
  sendOutput(output);
  output = 0b01111111;
  sendOutput(output);

  activateOutput(output);
}

void sendOutput(uint16_t output)
{
  // Send output
  SPDR = output;
  while (!(SPSR & (1<<SPIF)));
}

void activateOutput()
{
  // Daten von Schieberegister in Latches
  PORTB &= ~(1<<PB4);
  PORTB |= (1<<PB4);
}

Thx.

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