Pages: [1]   Go Down
Author Topic: 4 Digit Display sinnvoll betreiben (Multiplexing) 74HC595  (Read 987 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

ich habe aus nem alten Radiowecker folgendes geschlachtet:
http://pdf1.alldatasheet.com/datasheet-pdf/view/105712/LITEON/LTC-637D1P.html

Habs jetzt soweit das es mit zwei 74HC595 jedes LED schalten kann.

Ich hab ein wenig rumprobiert wie ich jetzt sinnvoll meine Code schreibe damit ich jede der vier Zahlen per Variable anzeigen kann.
=> Ich möchte die Segmente 1 bis 4 jeweils alle 10 Ziffern darstellen können.

Leider glaube ich, dass ich das viel zu kompliziert mache. Mir fällt aber keine Systematik ein wie ich die jeweiligen Segmente und Zahlen definiere und per Multiplexing abarbeite.

Mein erster Ansatz war:

Ich arbeite ohne Delay und lasse erst die Variable auf der ersten Ziffer, dann der zweiten usw per Multiplexing ablaufen.

1. Ich definiere für jedes der 4 Ziffern welche Pins für welche Zahl geschaltet werden müssen und welche Werte ich dem shiftout geben muss.
2. Ich arbeite dann halt für jede Ziffer die möglichen Werte durch.

Mal als Beispiel wie ich auf der ersten der 4 Ziffern eine 1 darstelle:
Code:
  if (segment1 = 1){
    // rechts oben wird angezeigt
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    shift11 = B0000010;
    shift12 = B0000000;
   
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, shift12);
    shiftOut(dataPin, clockPin, MSBFIRST, shift11);
    digitalWrite(latchPin, HIGH);
   
    // rechts unten wird angezeigt
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    shift11 = B0010000;
    shift12 = B0000000;
   
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, shift12);
    shiftOut(dataPin, clockPin, MSBFIRST, shift11);
    digitalWrite(latchPin, HIGH);
.
.
. und so alle 4 Segmente nacheinander abarbeiten
  }

Das ist aber 1 if abfrage für 1 Ziffer und gerade mal 1 Segment. Der Code wird riesig und hat doch viel zu viele if abfragen wenn ich das für jede Ziffer mache.

Also wie fasse ich das am besten zusammen?
Logged

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

=> Ich möchte die Segmente 1 bis 4 jeweils alle 10 Ziffern darstellen können.

Geht nicht. Dem ersten Digit fehlt das F-Segment.

Das Ding scheint sehr speziell auf einen bestimmten Anwendungszweck zugeschnitten zu sein, zumindest deutet die interne Verdrahtung darauf hin. Ich würde das Ding wohl einfach entsorgen und mir ne Handvoll normale 7-Segment-Anzeigen nehmen....
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21656
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie gesagt es ist aus einem Wecker und der muß Zahlen von 00:00 bis 24:59 anzeigen und darum ist Segnet F des linken Ziffer nicht notwendig.
Grüße Uwe
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das eine fehlt nur bei der ersten Ziffer mit den restlichen 3 Ziffern kann ich 0-9 darstellen.

Es ist halt echt blöd das ich teilweise bis zu drei mal das Shiftregister beschreiben muss um eine Ziffer zu multiplexen.
Wenn mir nix einfällt wie ich das etwas sauberer und einfacher programmiert bekomme bringt das leider nicht soviel.

Wäre aber schön, war halt kostenlos und Temp oder kleine Werte kann man ja dann anzeigen.

==
/OT
Bin jetzt über das S65 Display gestolpert und hab zufällig sogar zwei davon (ls020) rumliegen smiley
Jetzt muss ich mal schaun ob ich das hinbekomme. Ist leider nen ganzes Stück über meinem Horizont und extra den S65 Shield möchte ich nicht kaufen.
Vor allem da ich mit dem Ethernet-Shield schon Spi blocke und das glaub net gut zusammenspielt.
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21656
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das S65 Display braucht 10V für die Hintergrundbeleuchtung.
https://github.com/watterott/S65-Shield

Grüße Uwe
Logged

Germany, Dresden
Online Online
Sr. Member
****
Karma: 16
Posts: 437
30 Jahre Elektronikbastelei, Programmieren null Ahnung!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Guck dir mal den MAX7219 an. Dazu gibt es die LedControl.zip der kann sogar 8 Stellen muxen. Allerdings muß das Display gemeinsame Kathoden haben. Wenn dir der MAX etwas zu überdimensioniert ist kannst du auch einen sogenannten BCD-7 Segment Decoder nehmen. Das spart ebenfalls Ausgänge ein. Denn du benötigst dann 4 Leitungen zum Decoder und eine pro Stelle zum muxen. Dabei hast du sogar noch die Wahl, ob du ein 74'er Derivat für gemeinsame Anode (z.B. 74LS247) oder einen 4000'er CMOS Typ (z.B. 4511) für gem. Kathode nimmst.

Gruß Gerald
Logged

rot ist blau und Plus ist Minus

Pages: [1]   Go Up
Jump to: