neulich habe ich in einer Schublade in der hintersten Ecke eine alte Blechbüchse entdeckt. Diese enthielt einen LS7447 von TI. Nun wollte ich wissen, ob das Teil noch funktioniert.
Ich habe folgenden Sketch geschrieben, der auf ein Knightbridge 7-Segment mit gemeinsamer Anode passt. Die Schaltung habe ich nach dem Texas Instrument – Datenblatt entnommen.
Falls eine andere 7-Segment Anzeige z.B. MAN etc. mit gemeinsamer Anode (sonst geht der 7447-er nicht ) vorhanden ist, so muss die Codierung evtl. angepasst werden.. RBI und RBO sind auf 5V zu legen. Mit LT lassen sich alle 7-Segmente auf deren Funktionalität testen.
Schaltplan 7447-Tester
Abb.: Schaltungsaufbau mit einer 7-Segmantanzeige
Ergebnis:
Der LS7447 funktionierte noch.
Lit: LS7447 Datenblatt von Texas Instruments Datenblatt von SA10-21EWA (7-Segmentanzeige) Michael Magolis Arduino Kochbuch Verlag:O'Reilly Arduino is a Trademark
1.Programm
/* * 7447-Test Sketch * Zeigt HEX-Ziffern zwischen 0 bis F auf einer LED-Reihe an */ // Die Bits repraesentieren die Segmente A bis D auf dem 7447-Chip const byte numeral[16] = { //ABCD B0000, // 0 B0001, // 1 B0010, // 2 B0011, // 3 B0100, // 4 B0101, // 5 B0110, // 6 B0111, // 7 B1000, // 8 B1001, // 9 B1010, // A B1011, // B B1100, // C B1101, // D B1110, // E B1111, // F }; // Pins die den 7447 ansprechen // ABCD const int segmentPins[4] = {7,6,5,4}; void setup() {Serial.begin(9600); for(int i=0; i < 4; i++) { pinMode(segmentPins[i], OUTPUT); // Pins als Ausgang festlegen } } void loop() { for(int i=0; i <= 15; i++) { showDigit(i); delay(2000); } // Der letzte Wert wurde erreicht delay(6000); // 6 Sekunden Pause mit ausgeschaltetem Display } void showDigit( int number) { boolean isBitSet; for(int segment = 0; segment < 4; segment++) { if( number < 0 || number > 15){ isBitSet = 0; } else{ // isBitSet ist "wahr", wenn das angegebene Bit 1 ist isBitSet = bitRead(numeral[number], segment); Serial.print("B=");Serial.print(isBitSet); } // zum Chip schreiben digitalWrite( segmentPins[segment], isBitSet); } }// END.
2.Versuch
8-bit Zaehler
Hallo Arduino-Fellows,
Hier präsentiere ich mit dem Auf/Ab Zähler LS74193, wie man mit 2 sparsamen Digital - Ausgängen zwei 7-LED-Segmente mit dem Arduino Uno zählen kann. Nachtteilig dieser zählweise ist, daß nur das HEX-Zahlenformat vorhanden ist. Aus diesem Grund habe ich ein 2. Programm geschrieben das auch die Dekaden zählen kann. Das wäre so, als wäre der LS7447 durch einen Chip ersetzt worden, der ab der Zahl 9 die nächsten Ziffern, also A,B,C,D,E,F, nicht mehr angibt.
Abb.: Schaltplan des 8bit HEX-Zähler
Abb.: Schaltungsaufbau mit zwei 7-Segmentanzeigen
Lit: LS7447 Datenblatt von Texas Instruments LS74193 Datenblatt von Texas Instruments Datenblatt von SA10-21EWA (7-Segmentanzeige) Michael Magolis Arduino Kochbuch Verlag:O'Reilly Arduino is a Trademark
2.Programm
/***************************************************************************** 2x74193 Synchronous 4 bit binary up/down counter with CLEAR */ int RESET = 2; // Verbindung Pin 14 on the IC int COUNT_UP = 3; // Verbindung Pin 5 on the IC void setup() { // Init of Pins pinMode(RESET,OUTPUT); pinMode(COUNT_UP,OUTPUT); // Default of Pins digitalWrite(COUNT_UP,HIGH); digitalWrite(RESET,LOW); // Reset of Status digitalWrite(RESET,HIGH); digitalWrite(RESET,LOW); } void loop() { // Timer digitalWrite(COUNT_UP,LOW); delay(200); //0,2sec Waiting digitalWrite(COUNT_UP,HIGH); delay(200); } // END
3.Versuch
10er Zaehler mit LS74193 und 7447
Hallo Arduino-Fellows, Bei weiterem suchen habe ich in der Blechdose noch ein paar LS74SN193 gefunden. Nun dachte ich mache daraus einen weiteren Zähler. Einen 10er Zähler.
Auf dieser Seite präsentiere ich mit dem Auf/Ab Zähler LS74SN193, wie man mit 4 sparsamen Digital-Ausgängen zwei 7-LED-Segmente mit dem Arduino Uno 10er zählen kann. Ein weiteres Programm zeigt wie man mit diesen 4 IC's Dekaden zählen kann. Das wäre so, als wäre der LS7447 durch einen Chip ersetzt worden, der ab der Zahl 9 die nächsten Ziffern, also A,B,C,D,E,F, nicht mehr angibt. Es gibt auch IC's die den ganzen Prozess in einem Bauteil erledigen.
Diesen IC möchte ich hier vorstellen. Es ist der CD4029BE von Texas Instruments (s.a Datenblatt). Mit drei Leitungen kann man diesen IC vom Arduino aus kontrollieren. Mit dem Preset, den ich auch als CLEAR ansehen, den CLOCK pulse, und den UP/DOWN Pin 10. Im dem sogenannten Sketch habe ich den Pin 10 auf HIGH gesetzt, damit dieser aufwärtszählt. Die JAM-Eingänge J1bis J4 habe ich auf Masse gelegt. Den Binary/Dezimal – Pin 9 habe ich auf GND für LOW also Dezimalsystem gelegt.
Abb.: Schaltplan vom 10er Up-Zaehler
Abb.: Schaltungsaufbau mit zwei 7-Segmentanzeigen
4.Programm /* CD4029 Synchronous 4 bit Decade/Binary up/down counter BI/DEC auf LOW for Decadecounting */ int UP = 2; // Aufwärtszäehlen Pin10 on the IC. /* If HIGH upcount wenn LOW downcount */ int CLOCK = 3; // Connect to Pin 15 on the IC int PRESET=4; // Clear Preset Pin 1 on IC int wait=200; // Millisec /*J1 Pin4 LOW J2 PIN 12 J3 PIN13 J4 PIN 3 on LOW because no input-value Carry Out Pin 7 ist auf X für 4bit Carry IN Pin 5 muß auf Low (4bit), bei 8bit siehe Schaltplan */ void setup() { // Initialise Pins pinMode(UP,OUTPUT); pinMode(CLOCK,OUTPUT); pinMode(PRESET,OUTPUT); // MyClear digitalWrite(PRESET,HIGH); digitalWrite(PRESET,LOW); // Set default pin states digitalWrite(UP,HIGH); digitalWrite(CLOCK,HIGH); } void loop() { // Clock Pulse digitalWrite(CLOCK,HIGH); delay(wait); digitalWrite(CLOCK,LOW); delay(wait); } //END
Lit:: LS7447 Datenblatt von Texas Instruments LS74193 Datenblatt von Texas Instruments CD4029BE Datenblatt von Texas Instruments Datenblatt von SA10-21EWA (7-Segmentanzeige) Michael Magolis Arduino Kochbuch Verlag:O'Reilly Arduino is a Trademark
3.Programm
/***************************************************************************** 74193 Synchronous 4 bit binary up/down counter (here up) and 7447 decoder for 7 - Segment display type */ int RESET = 2; // Connect to Pin 14 on the IC int RESET2 =5; // Connect to Pin 14 on the 2nd IC int COUNT_UP = 3; // Connect to Pin 5 on the IC int COUNT_UP2 = 4; // Connect to Pin 5 on the 2nd IC int m=0; int wait=100; //0,1sec void setup() { // Initialise Pins pinMode(RESET,OUTPUT); pinMode(COUNT_UP,OUTPUT); pinMode(COUNT_UP2,OUTPUT); pinMode(RESET2,OUTPUT); // Set default pin states digitalWrite(COUNT_UP,HIGH); digitalWrite(COUNT_UP2,HIGH); digitalWrite(RESET,LOW); dgitalWrite(RESET2,LOW); // Perform a reset. Clears outputs to low state i.e. 0000 digitalWrite(RESET,HIGH); digitalWrite(RESET,LOW); digitalWrite(RESET2,HIGH); digitalWrite(RESET2,LOW); //Startsequenz des Counters //Start linker Zähler { for (int k=0; k<=10; k++ ) //right 7-Segment if (k==9) {digitalWrite (RESET,HIGH); delay(wait); } //right 7-Segment // 1st Clock Up Pulse else { digitalWrite(COUNT_UP,LOW); delay(wait); digitalWrite(COUNT_UP,HIGH); delay(wait); digitalWrite (RESET,LOW); delay(wait); } { digitalWrite(COUNT_UP2,LOW); delay(wait); digitalWrite(COUNT_UP2,HIGH); delay(wait); digitalWrite (RESET2,LOW); delay(wait); m++; //Counter for left 7-Segment } m=2; // compensation of Overflow } } void loop() // Now let's go on { for (int k=0; k<=10; k++ ) //right 7-Segment if (k==9) {digitalWrite (RESET,HIGH); delay(wait); } //right 7-Segment // 1st Clock Up Pulse else { digitalWrite(COUNT_UP,LOW); delay(wait); digitalWrite(COUNT_UP,HIGH); delay(wait); digitalWrite (RESET,LOW); delay(wait); } if (m==10) { m=0; digitalWrite (RESET2,HIGH); delay(wait); } { //2nd Counter Pulse digitalWrite(COUNT_UP2,LOW); delay(wait); digitalWrite(COUNT_UP2,HIGH); delay(wait); digitalWrite (RESET2,LOW); delay(wait); m++; //Counter for left 7-Segment } // I'm thinking about a better programcode } // END