Go Down

Topic: TLC5940 Mux Library & 74HC595 (Final Status) (Read 8923 times) previous topic - next topic

uwefed

http://arduino.cc/en/Tutorial/ShiftOut elektrischer Anschluß
http://arduino.cc/playground/Code/ShiftRegister595 Bibiothek
Grüße Uwe

moehoe

dabei ist egal, dass der tlc teilweise die selben pins benötigt?  :smiley-slim:

Megaionstorm

Der 74HC595 wird anders als im Shiftout Tutorial mit Analog 0, Analog 1 und Digital 9 verbunden.

Also ist nur Digital 9 mit dem TLC5940NT aber auch mit dem 74HC595 verbunden, dies dient vermutlich der Synchronisation beider IC's bei der Zeilenumschaltung.
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/


Megaionstorm

DIe von dir erfragte Routine wird übrigens von der ISR aufgerufen, das bedeutet das Multiplexen der Matrix geschieht dadurch automatisch.
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

uwefed

#35
Sep 20, 2012, 11:02 pm Last Edit: Sep 20, 2012, 11:04 pm by uwefed Reason: 1

dabei ist egal, dass der tlc teilweise die selben pins benötigt?  :smiley-slim:

Nein sollten schon verschiedene PINs sein.
Der TLC braucht einige bestimmte PINs weil diese die Ausgänge der Timer sind (3,9,10) und diese durch di Timer bestimmte frequenzen erhalten bzw automatisch ohne zusätzliche Programmierung funktionieren. Die andere PINs können beliebig gewählt werden. Die Pins des 595 können beliebig gewählt werden.
Grüße Uwe

Megaionstorm

Falls Du noch mehr Informationen über den TLC5940 brauchst dann schau dir mal dies an:
http://flipmu.com/files/2011/04/Demystifying-the-TLC5940.pdf
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

moehoe

So schwer ist es dann ja doch gar nicht, das multiplexen geschieht ja echt von alleine. :)


Die Pins des 595 können beliebig gewählt werden.


Muss ich irgendwo angeben, welche Pins ich für den 595 verwende?

uwefed


Muss ich irgendwo angeben, welche Pins ich für den 595 verwende?


Ja: Schau Dir mal den Beispielsketch auf http://arduino.cc/playground/Code/ShiftRegister595 an:

 
Code: [Select]
  #include "ShiftRegister595.h"
     
    byte latchPin = 8;  //Pin connected to ST_CP of 74HC595
    byte clockPin = 12; //Pin connected to SH_CP of 74HC595
    byte dataPin = 11;  //Pin connected to DS    of 74HC595
     
    ShiftRegister595 shiftRegister595 = ShiftRegister595( latchPin , clockPin , dataPin );
     
     
    void setup() {
    }
     
    void loop() {
      //count up routine
      for (int j = 0; j < 256; j++) {
        shiftRegister595.write(j);
        delay(1000);
      }
    }


Grüße Uwe

Megaionstorm

Der Pinanschluss des 74HC595 ist hier definiert, für die Ansteuerung durch die TLC5940Mux Library:

Atmega168/328
Code: [Select]
// SHIFT_DATA_PIN (PC0 is analog 0) = '595 SER pin (Pin 14)
#define SHIFT_DATA_PORT PORTC
#define SHIFT_DATA_PIN  PC0
#define SHIFT_DATA_DDR  DDRC
// SHIFT_CLK_PIN (PC1 is analog 1) = '595 SRCLK (Pin 11)
#define SHIFT_CLK_PORT  PORTC
#define SHIFT_CLK_PIN   PC1
#define SHIFT_CLK_DDR   DDRC
// '595 RCLK is hooked to tlc XLAT pin (Arduino digital Pin 9, 74HC595 Pin 12)


Atmega1280/2560
Code: [Select]
// SHIFT_DATA_PIN (PF0 is analog 0) = '595 SER pin (Pin 14)
#define SHIFT_DATA_PORT PORTF
#define SHIFT_DATA_PIN  PF0
#define SHIFT_DATA_DDR  DDRF
// SHIFT_CLK_PIN (PF1 is analog 1) = '595 SRCLK (Pin 11)
#define SHIFT_CLK_PORT  PORTF
#define SHIFT_CLK_PIN   PF1
#define SHIFT_CLK_DDR   DDRF
// '595 RCLK is hooked to tlc XLAT pin (Arduino digital Pin 11, 74HC595 Pin 12)


Atmega644/1284 (Sanguino)
Code: [Select]
/ SHIFT_DATA_PIN (PA0 is analog 0) = '595 SER pin (Pin 14)
#define SHIFT_DATA_PORT PORTA
#define SHIFT_DATA_PIN  PA0
#define SHIFT_DATA_DDR  DDRA
// SHIFT_CLK_PIN (PA1 is analog 1) = '595 SRCLK (Pin 11)
#define SHIFT_CLK_PORT  PORTA
#define SHIFT_CLK_PIN   PA1
#define SHIFT_CLK_DDR   DDRA
// '595 RCLK is hooked to tlc XLAT pin (Sanguino digital Pin 13, 74HC595 Pin 12)
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Megaionstorm

#40
Sep 24, 2012, 04:26 am Last Edit: Feb 28, 2013, 02:31 am by Megaionstorm Reason: 1
Anschluss des TLC5940 an den Arduino/Sanguino:

Atmega168/328
Arduino digital pin 11 (MOSI) -> SIN (Tlc pin 26)
Arduino digital pin 13 (SCK) -> SCLK (Tlc pin 25)
Arduino digital pin 9 (OC1A) -> XLAT (Tlc pin 24)
Arduino digital pin 10 (OC1B) -> BLANK (Tlc pin 23)
Arduino digital pin 3 (OC2B) -> GSCLK (Tlc pin 18)

Atmega1280/2560
Mega pin 51 (MOSI) -> SIN (Tlc pin 26)
Mega pin 52 (SCK) -> SCLK (Tlc pin 25)
Mega pin 11 (OC1A) -> XLAT (Tlc pin 24)
Mega pin 12 (OC1B) -> BLANK (Tlc pin 23)
Mega pin 9 (OC2B) -> GSCLK (Tlc pin 18)

Atmega644/1284 (Sanguino)
Sanguino pin 5 (MOSI) -> SIN (Tlc pin 26)
Sanguino pin 7 (SCK) -> SCLK (Tlc pin 25)
Sanguino pin 13 (OC1A) -> XLAT (Tlc pin 24)
Sanguino pin 12 (OC1B) -> BLANK (Tlc pin 23)
Sanguino pin 14 (OC2B) -> GSCLK (Tlc pin 18)
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Megaionstorm

Quote
Muss ich irgendwo angeben, welche Pins ich für den 595 verwende?


Code: [Select]
#define SHIFT_DATA_PORT PORTC
#define SHIFT_DATA_PIN  PC0
#define SHIFT_DATA_DDR  DDRC


In diesem Code wird definiert das Du den Pin PC0 des Ports C für die Übertragung der Daten an den 74HC595 benutzt, hierbei handelt es sich um den Analog 0 Pin des Arduinos !

Würdest Du den Analog 2 Pin für die Übertragung der Daten an den 74HC595 benutzen wollen müsstest Du den Code folgendermassen ändern, Analog 2 ist PC2.

Code: [Select]
#define SHIFT_DATA_PORT PORTC
#define SHIFT_DATA_PIN  PC2
#define SHIFT_DATA_DDR  DDRC
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Megaionstorm

Diesem Bild kannst Du entnehmen welcher Arduino Pin zu welchem Port gehört und welche Bezeichnung er hat:


Z.B.
Digital Pin 2 befindet sich beim Port D also PORTD, er hat die Bezeichnung PD2.
Digital Pin 12 hingegen findet man beim Port B und hat die Bezeichnung PB4 !!!
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

moehoe

Danke, danke, danke!
Das Bild hab ich gebraucht. Somit kann ich jedem Pin die Funktionen des Clock- und Datapins zuweisen, sehe ich das richtig?
Nur die Latch muss zusammen mit der Latch des Tlcs zusammengeschlossen werden, und die kann man auch nicht ändern?
Aus dem Pin Mapping steht bei Pin 9 'OC1A/PCINT1' und dieses 'PCINT' steht ja auch noch bei den Analogen Eingängen, bzw. das 'OC..' auch noch bei den Pins 10 und 11.

Noch mals vielen Dank für all die Hilfe!
Grüße Moritz

Megaionstorm

Quote
Nur die Latch muss zusammen mit der Latch des Tlcs zusammengeschlossen werden, und die kann man auch nicht ändern?


Nein, dies kann man nicht ändern weil der TLC5940 im SPI-Modus läuft und an die 3 SPI Pins angeschlossen werden muss.

Der TLC5940 kann auch im Bitbang Modus betrieben werden, wird dann aber llllaaannnngggsssaammmm !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Go Up