mikrocontroller.net

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


Autor: Armin (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
Du mußt auch SS auf Ausgang konfigurieren.

Autor: Armin (Gast)
Datum:

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

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

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

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: Armin (Gast)
Datum:

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

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.