Microexperimente

Experimente mit dem Arduino.

Press homeNext page
1.Versuch
7447 - Tester

Hallo Arduino-Fellows,

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.


Placeholder Picture
Schaltplan 7447-Tester
Placeholder Picture
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.

Placeholder Picture
Abb.: Schaltplan des 8bit HEX-Zähler
Placeholder Picture
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. 

Placeholder Picture
Abb.: Schaltplan vom 10er Up-Zaehler
Placeholder Picture
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