Flipflop Display mit Nano UDN ULN Push-Pull mit D-flipflop Register

Guten Tag Ich bin Neu aber nicht ganz "Taufrisch" >50

Persönlich habe ich schon einiges Bewerkstelligt In sachen Display LED Matrix

Nun ist mir eien Kontrastreiche Flipdot Matrix mit 6 Ziffern von je 5 Zeilen und 3 Spalten in die Finger gekommen
dies ist ein echtes TTL Grab 21 74HC574 Je Ziffer sind ULN2803 und UDN 2982 als pushpull Treiber Verbaut

ICH Habe eine Eagle Schaltplan erstellt

und mit einem Nano die ersten Schritte unternommen

void toggleEnable(){
  delay(5);
  mcp.digitalWrite(7, HIGH); // ON Enable alle 3 74HC138 
  delay(5);
  mcp.digitalWrite(7, LOW); // OFF Disable alle 3 74HC138 
  }

void setZiffer(int ziffer){
  if (ziffer & 1)mcp.digitalWrite(0, HIGH);else mcp.digitalWrite(0, LOW);
  if (ziffer & 2)mcp.digitalWrite(1, HIGH);else mcp.digitalWrite(1, LOW);
  if (ziffer & 4)mcp.digitalWrite(2, HIGH);else mcp.digitalWrite(2, LOW);
  delay(5);
  mcp.digitalWrite(3, LOW); // aktiviere !E1 vom 74HC138 der die ziffern Auswaehlt
  toggleEnable();
  mcp.digitalWrite(3, HIGH); // deaktiviere !E1 vom 74HC138 der die ziffern Auswaehlt
  }

ES Fehlt das Verständniss über die Schaltreienfolge der Signale

Bitte um Mithilfe
Danke

flipdot_neu_Register.pdf (31.8 KB)

Ein sehr interessantes Puzzle :slight_smile:

Mir ist vor allem nicht klar, ob der MCP auf dem Board sitzt (und bleibt), und was der Nano ansteuert (mcp.???). Ich sehe eine gewisse Chance, das I2C Protokoll des MCP auszuknobeln.

Die Chips muß ich mir erst noch anschauen, mir kommen nur die 74 und 138 aus alten Zeiten bekannt vor.

Der MCP ist die Porterweiterung des NANO
und sitzt nicht auf dem Display

Für Mich Als Metall er und nicht Logikfest wäre ein Stromlauf Schema durch die Spule beim Setzen und Rücksetzen das wichtigste das ist mir nicht klar

Dann sollte das kein Problem sein
Das Display setzt ja in weniger als 1sekunde alle Dots
Zu mindestens konnte ich das beim auffahren eines Fahrzeugs auf Die LKW Waage beobachten.

Ich bedanke mich schonmal für ein ersten Post welches das projekt im Forum Hier anerkennt

Sehe ich das richtig, daß die Segmente nur gekippt werden müssen, und dann so bleiben?

Was ich nicht verstehe: wenn die 74HC574 Tristate-Ausgänge haben, macht für mich das Abschalten der Ausgänge keinen Sinn. Hängen da noch pull-up/down Widerstände dran?

Die Dislay-Punkte werden von Spulen angesteuert und ich nehme an es Braucht positive und negative Impulse um ein Pixel des Displays zu komutieren. Danach bleibt das Pixel so wie es ist.

Die UDN und ULN mit den ganzen Dioden sind eine 5x3 H-Spar-Brücke, nsonsten bräuchte es 1 H-Brücke pro Pixel.

Da die Daten vom MCP auf eine 16 Bit Bus gehen sind die 574 zum Zwischenspeichern des Daten des Datenbusses, Die 138 zum erzeugen des Enable Signals (es wird immer nur 1e Ziffer angesteuert) und die anderen TTL ICs zum generieren der notwendigen Signale für die anderen iCs.

Grüße Uwe

Was soll dann die Ansteuerung der ULN/UDN mit Tristate-Ausgängen? Was passiert mit ihren Ausgängen, wenn die Eingänge hochohmig gemacht werden? Werden dann die Ausgänge auch (sicher?) abgeschaltet?

So weitergehts nun die Enable routinen und die DOT Codierung

const int CLK_TRIG_EN = 8; // LOW Activ 
const int CLK_TRIG = 9; //Puls = Low  dann High  


// die Zeichenkodierung 
uint8_t hex2dot[11][5] = { {0x7, 0x5, 0x5, 0x5, 0x7}, // 0
        {0x2, 0x2, 0x2, 0x2, 0x2}, // 1  
        {0x7, 0x1, 0x7, 0x4, 0x7}, // 2  
        {0x7, 0x1, 0x3, 0x1, 0x7}, // 3  
        {0x5, 0x5, 0x7, 0x1, 0x1}, // 4  
        {0x7, 0x5, 0x7, 0x1, 0x7}, // 5  
        {0x4, 0x4, 0x7, 0x5, 0x7}, // 6  
        {0x7, 0x5, 0x1, 0x1, 0x1}, // 7  
        {0x7, 0x5, 0x7, 0x5, 0x7}, // 8  
        {0x7, 0x5, 0x7, 0x1, 0x1}, // 9  
        {0x0, 0x7, 0x0, 0x7, 0x0}, // =  
        };

Die OR Gatter (IC1) verhindern, daß die Treiber IC7 (UDN: high) und IC12 (ULN: low) gegeneinander arbeiten. Das gilt einmal für die Spalten (Q1..Q3 von IC3/5) und nochmal für die Zeilen (Q4..Q8 von IC3/4). Zum Löschen von Segmenten müssen die Zeilen mit SetZeile in IC4 eingetragen werden, und die Spalte sowie Nullen für die Zeilen mit SetZiffer in IC3. Zum Setzen die Spalte mit SetSpalte in IC5, die Zeilen sowie Nullen für die Spalten mit SetZiffer in IC3.

Wie die Impulse mit IC10/11 erzeugt werden, wäre noch auszuknobeln.

und weiter im Takt mit der Ziffer Zeilen Spalten setung in die IC

void setze_ziffer(int ziffer, int wert){
  if (ziffer > 0x07) return;
  if (ziffer & 1)mcp.digitalWrite(0, HIGH);else mcp.digitalWrite(0, LOW);
  if (ziffer & 2)mcp.digitalWrite(1, HIGH);else mcp.digitalWrite(1, LOW);
  if (ziffer & 4)mcp.digitalWrite(2, HIGH);else mcp.digitalWrite(2, LOW);

  for (int z=0; z<5; z++) {
    if (z == 0 )mcp.digitalWrite(8, HIGH);else mcp.digitalWrite(8, LOW);
    if (z == 1 )mcp.digitalWrite(9, HIGH);else mcp.digitalWrite(9, LOW);
    if (z == 2 )mcp.digitalWrite(10, HIGH);else mcp.digitalWrite(10, LOW);
    if (z == 3 )mcp.digitalWrite(11, HIGH);else mcp.digitalWrite(11, LOW);
    if (z == 4 )mcp.digitalWrite(12, HIGH);else mcp.digitalWrite(12, LOW);
    uint8_t spaltewert = hex2dot[wert][z];
    if (spaltenwert > 0x07) return;
    if (spaltewert & 1)mcp.digitalWrite(15, HIGH);else mcp.digitalWrite(15, LOW);
    if (spaltewert & 2)mcp.digitalWrite(14, HIGH);else mcp.digitalWrite(14, LOW);
    if (spaltewert & 4)mcp.digitalWrite(13, HIGH);else mcp.digitalWrite(13, LOW);

  }
}

Ich würde die Ports so verwenden, wie sie sind. Es ist ziemlich umständlich und unnötig, sie bitweise zu ändern. Hilfreich wären dafür Funktionen bzw. Methoden

void SetZeile(byte z);
void SetSpalte(byte s);
void SetZiffer(byte z; byte s);