Probleme mit der SPI library - LED Cube Projekt

Guten Abend :smiley:
Ich arbeite zur Zeit an einem LED Cube Projekt für die Schule (5v5v5, Arduino Micro)
Ich habe den Würfel ansich schon gebaut und auch einige Leiterplatten designet.
Da die SPI library schneller sein soll, als das normale shiftOut() habe ich mich nun mehr damit beschäftigt.
Leider konnte ich noch nicht einen einzigen Beispielcode erstellen, bei dem eine einfache LED Reihe mit einem 74hc505 angesteuert wird...
Der Schaltkreis sollte stimmen, denn mit shiftOut() gibt es keine Probleme.
Hier mal mein Test-Code

#include <SPI.h>

#define speicherPin 5
#define datenPin 11
#define taktPin 13
#define blank_pin 12

byte shiftZahl=0;
long data;

void setup()
{
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  
  pinMode(taktPin,OUTPUT);
  pinMode(speicherPin,OUTPUT);
  pinMode(datenPin,OUTPUT);
  pinMode(blank_pin, OUTPUT);
  SPI.begin();
}

void loop()
{
  shiftZahl = B11111111;
//  shiftOut(datenPin,taktPin,LSBFIRST,shiftZahl);
//  digitalWrite(speicherPin,HIGH);
//  digitalWrite(speicherPin,LOW);
  
  SPI.transfer(shiftZahl);
  PORTD |= 1 << speicherPin;
  PORTD &= ~(1 << speicherPin);
}

Ich hoffe ihr könnt mir helfen, ich hab auch nach viel Suchen nichts hilfreiches finden können. Sowas macht mich immer fertig :smiley:
LG und schönen Abend, Kenneth

Arduino Micro

Ich hoffe du hast deine Datenleitung nicht mehr auf Pin 11, sondern jetzt auf MOSI angeschlossen.
Auch der Takt muss an einen anderen Pin.

Bei vielen AVR muss SS auf OUTPUT gesetzt werden. Egal ob der Pin genutzt wird, oder nicht.

Der sketch st für einen Arduino mit ATmega328 Kontroller. Der Micro hat aber einen ATmega32U4 wo die SPI Schnittstelle an anderen Pins hängt.

Es gilt das für den Arduino Leonardo gesagte. Der SPI-Bus ist nur am ICSP Header herausgeführt.

Grüße Uwe

uwefed:
Der SPI-Bus ist nur am ICSP Header herausgeführt.

Der Micro ist da etwas anders, als der Leonardo

http://www.arduino.cc/en/Main/ArduinoBoardMicro

Vielen Dank für die Hilfe.
Nach erneuten Nachforschungen konnte ich meine Pin-Belegungen überarbeiten.

Die Pins müssen folgendermaßen verbunden werden:
Arduino -----> Schieberegister
MOSI (16) ------> DS (14)
SS (17) ------> STCP (12)
SCK (15) ------> SHCP (11)
MISO (14) ------> wenn erwünscht an OE, sonst nur auf OUTPUT setzen

Folgender Code funktioniert dann:

#include <SPI.h>

#define sck_clock 15
#define mosi_data 16
#define ss_speicher 17
#define miso_disable 14

byte shiftZahl=0;

void setup()
{
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  
  pinMode(miso_disable,OUTPUT);
  pinMode(mosi_data,OUTPUT);
  pinMode(sck_clock,OUTPUT);
  pinMode(ss_speicher, OUTPUT);
  SPI.begin();
}

void loop()
{
  shiftZahl = B00001111;
  
  SPI.transfer(shiftZahl);
  PORTD |= 1 << ss_speicher;
  PORTD &= ~(1 << ss_speicher);
}

Danke nochmal, schönen Nachmittag noch :stuck_out_tongue:

Schön!

Danke für die Rückmeldung, kann später jemand hier im Forum (Mücke) gebrauchen. :slight_smile: