Forum: Compiler & IDEs SPI-Schieberegister: Output-Ansteuerung fehlerhaft


von Armin (Gast)


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?

von Karl H. (kbuchegg)


Lesenswert?

Du mußt auch SS auf Ausgang konfigurieren.

von Armin (Gast)


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!

von Karl H. (kbuchegg)


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.

von Matthias L. (Gast)


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..

von Armin (Gast)


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 =)

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.