INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
RGB Cube mit tpic6b595
28.03.2014, 18:56 (Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2014 11:46 von KennoBe91.)
Beitrag #1
RGB Cube mit tpic6b595
Hey Leute

Ich mach als Schulprojekt einen 4x4x4 RGB LED Cube.

Ich versuche nun erstmal zu verstehen wie der Schieberegister funktioniert.
Habe rumgegoogelt und viele Sachen gefunden, doch nie mit dem tpic6b595 Schieberegister mit dem Arduino Uno.

Einen Code hab ich mal gefunden bei dem wenigstens schonmal die ersten 4 LED's die an dem Schieberegister angesteckt sind nacheinander kurz aufblinken, doch 100% verstehen tu ich den Code doch nicht Big Grin

Code:
#include <SPI.h>
//Pin to clear the register
const int clearPin = 7;
//Pin connected to latch pin (RCK) of TPIC6B595
const int latchPin = 8;
//Pin connected to clock pin (SRCK) of TPIC6B595
const int clockPin = 12;
////Pin connected to Data in (SER IN) of TPIC6B595
const int dataPin = 11;

int counter = 0;
int numLedsInUse = 4;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(clearPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("*");
  
  // Always start by setting SRCLR high
  digitalWrite( clearPin, HIGH);

  // delay a little and then set
  delay(100);
}

void loop() {
  // Display LED's running
  if( counter >= (numLedsInUse-1) ){
    counter = 0;
  } else {
    counter++;
  }
  
  // write to the shift register with the correct bit set high:
  registerWrite(counter, HIGH);
  delay( 100 );
}

// This method sends bits to the shift register:

void registerWrite(int whichPin, int whichState) {
  Serial.println(whichPin);
    
  // the bits you want to send
  byte bitsToSend = 0;
  // write number as bits
  bitWrite(bitsToSend, whichPin, whichState);

  // turn off the output so the pins don't light up
  // while you're shifting bits:
  digitalWrite(latchPin, LOW);
  Serial.println(bitsToSend);
  Serial.println("_");
  
  // shift the bits out
  shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);

  // turn on the output so the LEDs can light up:
  digitalWrite(latchPin, HIGH);
}

meine 1. Frage ist. was macht er am anfang im setup mit:
Serial.begin(9600);
Serial.println("*");

dann versteh ich nicht warum er in der Funktion "registerWrite":
bitWrite(bitsToSend, whichPin, whichState);
--> was tut er da? in den Arduino anleitung wird das nie verwendet. da reicht immer nur shiftOut() sonst nichts. darum bin ich verwirrt

Serial.println
--> was bringt diese Funktion 2 zeilen drunter?

Laut Seite enthält der code noch fehler. und wie funktioniert es das vielleicht auch mal die LED's anbleiben und nicht nur einzeln nach der reihe blinken?

ich muss später mal 6 Schieberegister ansteuern und sollte bald mal kapieren wie das funkioniert Big Grin

Kenntnisse in C, C++ vorhanden Smile

------
Ich hab den Code mal verändert, sodass nurnoch die 1. LED angesprochen wird, diese leuchtet jetzt durchgehend und blinkt nicht

Code:
#include <SPI.h>

const int clearPin = 7; //löschen
const int latchPin = 8; //anzeigen
const int dataPin = 11; //Daten
const int clockPin = 12; //Takt

void setup() {

  pinMode(clearPin, OUTPUT); //Pins als Output deklarieren
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("*");
  
  digitalWrite( clearPin, HIGH); //Schieberegister erstmals löschen
  delay(100); //kurz warten
}

void loop() {

Serial.println(0);
    
  // the bits you want to send
  byte bitsToSend = 0;
  // write number as bits
  bitWrite(bitsToSend, 0, HIGH); //0=LED nummer

  digitalWrite(latchPin, LOW); //solang geschoben wird ausgabe "verbergen
  
  Serial.println(bitsToSend);
  Serial.println("_");
  
  shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend); //bits in den Schieberegister laden

  digitalWrite(latchPin, HIGH); //ausgabe wieder "zeigen"
  
  delay(100); //wartezeit zwischen erneutem schieben
}

Ich brauch dringend Hilfe Big Grin


Angehängte Datei(en)
.pdf  tpic6b595.pdf (Größe: 802,62 KB / Downloads: 99)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2014, 20:06
Beitrag #2
RE: RGB Cube mit tpic6b595
Hallo,

zu deinem modifizierten Code:

Bisher schreibst du 0 (in hex, was 00000000 in binär entspricht) in dein Schieberegister. Im nächsten Durchlauf deiner Loop wird allerdings wieder 0 geschrieben. Versuch mal nach dem delay am Ende 0xFF (11111111 in binär) zu schreiben, deine LED sollte nun ausgehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste