SPI-Schieberegister: Output-Ansteuerung fehlerhaft

Gast #2116626
Lesenswert?

hallo,

ich habe hier einen Brotbrett-Aufbau mit zwei funktionsfähigen 
HC595-Schieberegistern. Die Softwarelösung aus dem Tutorial funktioniert 
einwandfrei. Allerdings komme ich mit der SPI-Ansteuerung nicht ganz 
klar. Hier mal mein Quelltext:

------------------------------
#include <avr/io.h>

#define RCK PB3
#define SIN PB5
#define SCK PB7


void SchiebeClk()
{
  loop_until_bit_is_set(SPSR, SPIF);
  PORTB |=  (1<<RCK);
  PORTB &= ~(1<<RCK);
}

int main()
{
  // DDRB - die SPI Pins als Ausgänge konfigurieren
  DDRB |= (1 << SIN) | (1 << SCK) | (1 << RCK);
  // SPI-Modul konfigurieren; Takt gaanz langsam
  SPCR |= (1 << MSTR)| (1 << SPE) | (1 << SPR0)| (1 << SPR1);
  // Dummy Daten, um SPIF zu setzen
  SPDR = 0b00000001;

  char a = 0b10101010;

  while(1)
  {
    loop_until_bit_is_set(SPSR, SPIF);
    a = ~a;
    SPDR = a;
    SchiebeClk();
  }


  return 0;
}
-------------------------------

Die Verschaltung der drei Signale SIN, SCK, RCK ist mehrmals geprüft und 
daher korrekt. Während Programmieren über SPI sieht man eingehende 
Signale auch an den Schieberegistern (ca. 1sek "Rauschen").

Wenn man den Controller ohne SPI-Programmer anschaltet liegen die 
Schieberegisterausgänge stets auf anderen Pegeln. Sie sind aber konstant 
und wechseln nicht, wie eigentlich vom Programm vorgegeben. Man müsste 
ja aufgrund der Geschwindigkeit alle Ausgänge im Mittel als "halb 
aktiviert" sehen.

Mit angestecktem und vom PC über Spannung versorgtem SPI-Programmer 
wechselt der Ausgang nicht mehr bei jedem Starten des uCs, sondern nur 
noch ab und zu. Vom gewünschten "Flimmern" an den SReg-Ausgängen auch 
hier keine Spur.


was sehe ich nicht?
Gast #2117008
Lesenswert?

tatsache, und das obwohl ich SS jetzt gar nicht mehr nutze. Ich dachte, 
der fungiert im Tutorial nur als einfacher PORT-PIN, um das storageClock 
auszugeben. Das hab ich ja an einem anderen PIN gemacht!

Dass du das gesehen hast, dass mein PB3 nicht der SS-Pin ist, ist auch 
nicht schlecht ;)

danke auf jeden Fall!
#2117773
Lesenswert?

Armin schrieb:
> tatsache, und das obwohl ich SS jetzt gar nicht mehr nutze. Ich dachte,
> der fungiert im Tutorial nur als einfacher PORT-PIN, um das storageClock
> auszugeben.

Deshalb sollte man neben dem Tutorial auch immer das Datenblatt zu Rate 
ziehen. Da steht dann nämlich drinnen, dass die SPI Einheit nur dann als 
Master arbeitet, wenn SS auf Ausgang steht.
Gast #2119354
Lesenswert?

>> tatsache, und das obwohl ich SS jetzt gar nicht mehr nutze. Ich dachte,
>> der fungiert im Tutorial nur als einfacher PORT-PIN, um das storageClock
>> auszugeben.

Deshalb macht es Sinn, das SS gleich als das storageClock zu nutzen..
Gast #2119832
Lesenswert?

wohl wahr,

ich bin nur in der Experimentierphase und hab gestern noch das HC165 
zusätzlich dran gebaut. Ich wollte damals den SS frei halten, weil ich 
dachte, man braucht den möglicherweise für Eingangsports.

jetzt bin ich schlauer und SS ist verwendet =)

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