Divi
June 7, 2015, 7:08pm
1
Guten Abend
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
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.
uwefed
June 7, 2015, 11:26pm
3
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.
The Arduino programming language Reference, organized into Functions, Variable and Constant, and Structure keywords.
Es gilt das für den Arduino Leonardo gesagte. Der SPI-Bus ist nur am ICSP Header herausgeführt.
Grüße Uwe
combie
June 8, 2015, 12:23am
4
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
Divi
June 8, 2015, 3:39pm
5
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
agmue
June 8, 2015, 3:51pm
7
Danke für die Rückmeldung, kann später jemand hier im Forum (Mücke) gebrauchen.