Go Down

Topic: 74HC573 8-Bit D-Latch Problem (Read 5180 times) previous topic - next topic

bendoben

Guten Abend,
ich finde zur Zeit kein passende Erklärungen zur Ansteuerung eines 8 Bit Latch 74HC573 an ein Arduino mega.
Sofern jemand mir helfen könnte, würde ich mich sehr freuen.

Lg Ben

Korman

#1
Dec 19, 2010, 06:20 pm Last Edit: Dec 19, 2010, 06:22 pm by Korman Reason: 1
Wenn ich fragen darf, wo siehst du das Problem?

D0-D7 an beliebige digitale Ausgänge, wenn diese korrekt gesetzt sind LE  einmal auf HIGH dann wieder auf LO zum Durchschalten. Wenn du mit Tristate-Ausgängen spielen willst, bediene -OE auf einem anderen digitalen Ausgang. Effizienter geht es, wenn D0-D7 vom gleichen Arduino-Register bedient werden, aber das wäre schon eine Optimierung für später.

Was nun wirklich notwendig ist, hängt davon ab, was du mit dem Latch machen willst. Warum diesen IC?

Korman

bendoben

Vielen Dank Korman
Ich würde gerne einen 7x7x7 led Cube mit 7 Latches ansteuern ;)

Jedoch verstehe ich derzeit noch nicht ganz  was OE und LE machen?
Und was sind Tristate-Ausgänge?

Lg Ben

Megaionstorm

#3
Dec 19, 2010, 08:26 pm Last Edit: Dec 19, 2010, 08:30 pm by Megaionstorm Reason: 1
Datasheet 74HC573:
http://www.datasheetcatalog.org/datasheet/philips/74HC_HCT573_CNV_2.pdf

Funktionstabelle findet man auf Seite 4.

Da steht auch was ein Tristate-Ausgang ist. Einer der drei verschiedene Zustände haben kann. Tri = 3.

H = HIGH voltage level
L = LOW voltage level
Z = high impedance OFF-state
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Korman

#4
Dec 19, 2010, 08:27 pm Last Edit: Dec 19, 2010, 08:30 pm by Korman Reason: 1
OE ist Output Enable und schaltet die Ausgänge in einen hochohmigen Zustand. Wenn du keine Busse baust, brauchst es üblicherweise nicht und OE mit Masse verbinden.

LE ist Latch Enable. Damit werden alle 8 pins auf einmal durchgeschalten. Das ist besonders dann interessant, wenn auf der Leitung noch andere Dinge passieren, die du nicht durchschalten willst weil sie für jemanden anderen gedacht sind. Damit kannst du dem jeweiligen Chip sagen, daß die Daten für ihn sind. Interessiert dich das auch nicht, LE immer auf 5V legen (transparent mode heißt das im Datenblatt).

Ich nehme an, daß in deinem Fall 8 Pins auf alle D0-D7 von allen 7 Latsches gehen und 7 Pins zum LE von jeden Latch.

Korman

bendoben

Also sofern ich nun mehrere Latch´s parallel an den Eingängen schalten würde, müsste ich nur den LE von jedem IC benutzen, um ihn ansprechen zu können?
Und ist es möglich am ersten 74HC573 den Ausgang Q1 und gleichzeitig am zweiten den Ausgang Q2 auszugeben? (müsste ja dank der LE Leitung funktionieren)

lg

Korman

#6
Dec 19, 2010, 11:06 pm Last Edit: Dec 19, 2010, 11:07 pm by Korman Reason: 1
Bitte eine Schaltung zeichnen, damit wir wissen was du genau meinst. Und bitte auch kurz beschreiben, was du dir davon erhoffst und was es machen soll. Sonst kommen so antworten wie: Ja es ist möglich, nur wozu?

Im Notfall reicht als Schaltung das Photo einer Handskizze, wenn du dafür keine Programme hast.

Korman

bendoben

#7
Dec 21, 2010, 10:24 am Last Edit: Dec 21, 2010, 10:27 am by bendoben Reason: 1
So hier das gewünschte Bild

http://a.uploadingit.com/view/CBSGUZ0RPZTAKIVF/MobilePhotoDecember21,2010041055AM.jpg
Zur Zeit ist leider mein Internet ausgefallen, daher nur ein handyupload
Und noch einmal die Frage:

Also sofern ich nun mehrere Latch´s parallel an den Eingängen schalten würde, müsste ich nur den LE von jedem IC benutzen, um ihn ansprechen zu können?
Und ist es möglich am ersten 74HC573 den Ausgang Q1 und gleichzeitig am zweiten den Ausgang Q2 auszugeben? (müsste ja dank der LE Leitung funktionieren)

lg

Korman

#8
Dec 21, 2010, 11:28 am Last Edit: Dec 21, 2010, 11:58 am by Korman Reason: 1
Ganz genau so, nur daß du die LED verkehrt rum eingezeichnet hast. Die Daten gehen an alle IC und mit einem Latch-Enable HIGH-LOW sagst du dem jeweiligen IC, daß die Daten für ihn sind.

Nur um sicher zu gehen: Du verwendest die Ausgänge Analog1-8 nur als Digitalausgänge und weil sie gerade frei waren. Du solltest nicht hoffen, daß du dadurch die Leds dimmen könntest.

Ein kleines Detail, das dein Programm sehr vereinfachen wird: Nimm Ports Analog0-7 oder Analog8-15, nicht Analog1-8. In den ersten Fällen werden nämlich alle Leitungen von einem Register gesteuert (PORTF für Analog 0-7 oder PORTK für Analog 8-15). Damit kannst du alle Daten für ein Latch so rausschieben:
Code: [Select]
/*
rausdamit (latchport, daten)

Dieses Funktiönchen schreibt alle Daten in einen 74HC573,
der am ArduinoMega an den Ports Analog0-7 hängt.

latchport: die Leitung mit dem LE des richtigen Chips
daten: D0-D7 als Byte.
*/
inline void rausdamit(uint8_t latchport, uint8_t daten) {
  // Daten auf den Bus legen
  PORTF = daten;
  // Mit der LE-Leitung wedeln
  digitalWrite (latchport, HIGH);
  digitalWrite (latchport, LOW);
}

// Anwendungsbeispiel
void setup(){
  // Alle Datenpins auf Ausgang schalten.
  for (uint8_t pin = A0; pin <= A7; pin++) {
     pinMode (pin, OUTPUT);
  }
  // LatchEnable pin ebenfalls
  pinMode (A12, OUTPUT);
}

void loop (){
  rausdamit (A12, 0b10100011);
  delay(1000);
  rausdamit (A12, 0b01011100);
  delay(2000);
}
Der Code ist wie immer ungetestet.

Wenn du jetzt mehrere Latches hast, kannst du dir zwei Arrays machen, eines mit den Daten und eines mit den passenden Pinnummern der LatchEnable und deinen gesamten Würfel mit einer Schleife updaten. Du mußt dann nur mehr dazwischen die Daten im Datenarray anpassen. Das Programm wird dadurch nicht viel komplizierter als mein kleines Beispiel. Wenn du damit Probleme hast, einfach melden, dann kann ich mehr dazu schreiben.

Korman

bendoben

Okay ist es nun noch möglich das ganze im Multiplex zu steuern?

Korman

#10
Dec 21, 2010, 01:05 pm Last Edit: Dec 21, 2010, 01:05 pm by Korman Reason: 1
Was meinst du genau mit "das ganze im Multiplex steuern"? Das kann viel heissen. Bitte ein paar zusätzliche Details dazu.

Korman

bendoben

Also mein LED Cube hat 7 ebenen, wo jeweils die Anode + an den ebenen abgeschlossen hat.
Die anderen 7*7=49 Säulen hängen jeweils an der Kathode -
jedenfalls soll zB die LED in der Ebene 1/Säule 1 leuchten und die LED in Ebene 2/Säule 2 gleichzeitig leuchten. Jedenfalls geht dies nicht, da sofern Ebene 1/2 und Säule 1/2 aktiv ist, leuchten 4 anstatt 2 LED's.
Folge dessen wir müssen multiplexen ;)

Megaionstorm

#12
Dec 21, 2010, 01:50 pm Last Edit: Dec 21, 2010, 01:58 pm by Megaionstorm Reason: 1
Ich hätte jede der 7 Ebenen als eigenständige 7X7  Matrix gehandhabt und jede der 7 Ebenen über einen eigenen Leddriver gesteuert !
Über einen weiteren IC würde ich dann zwischen den Reihen aller Ebenen hin und her schalten, also alle 1. Reihen, dann alle 2. Reihen  etc.
Durch die verschiedenen Leddriver wird dennoch in den Reihen der einzelnen Ebenen etwas unterschiedliches dargestellt.
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Go Up