In diesem Experiment wird Spannung auf eine ziemlich unkonventionelle Weise gemessen und visualisiert. Für die Anzeige des gemessenen Wertes kommen
zwei Zähler CD74HCT193E zum Einsatz. Die zu messende Spannung wird mithilfe des Mikrocontrollers ATtiny85 aufgenommen. Der Mikrocontroller wandelt intern den analogen
Wert in eine Zahl, die einen Wert zwischen 0 und 1023 annehmen kann. Dies ist darauf zurückzuführen, dass der interne AD-Wandler des Mikrocontrollers über eine Auflösung
von 10 Bit verfügt. Diese Zahl wird umgewandelt und in Form von Impulsen zu den beiden Zählern CD74HCT193E weitergeleitet. Sie zählen die Impulse und wandeln den
aktuellen Zählerstand in eine BCD-codierte Zahl, die an ihren Ausgängen ausgegeben wird. An den Ausgängen der Zähler werden Leuchtdioden angeschlossen, die dann die
Zahl binär anzeigen. Des weiterem sind die Ausgänge der Zähler mit den Eingängen der BCD-Decoder 74HC4511 verbunden, die in der Lage sind, 7-Segmentanzeigen anzusteuern.
An die Decoder sind zwei 7-Segmentanzeigen angeschlossen, die die gemessene Spannung als Ziffern in Dezimalsystem anzeigen. Die Schaltung hat eine Spannungsversorgung
von 5 VDC. Das ist auch gleichzeitig die Spannung, die gemessen wird. Unsere Anzeigen, binär und dezimal, bestehen jeweils aus zwei Komponenten. Die erste Anzeige zeigt
den Wert der Spannung vor dem Komma, die zweite nach dem Komma. Mit einem „echten“ Voltmeter wird beim Testen der Schaltung geprüft, ob ein solcher Weg der
Spannungsmessung möglich ist und ob der gemessene und angezeigte Wert dem tatsächlichen
Spannungswert entspricht.
Mikrocontroller
Die Aufgabe des Mikrocontrollers ist es, die zu messende Spannung in eine Zahl umzuwandeln und sie in Form von nacheinander folgenden Impulsen über digitale
Ausgänge auszugeben. Damit der Vorgang des Zählens für menschliche Auge nicht wahrnehmbar bleibt, beträgt die Impulsdauer lediglich 1 Mikrosekunde. Erst nachdem die
Impuls-Pakete komplett abgeschickt wurden, erfolgt eine längere Pause (in unserem Beispiel 250 ms), die es erlaubt, die Leuchtdioden und 7-Segmentanzeigen einzuschalten
und den Endwert anzuzeigen. Bei der Methode wird die Tatsache genutzt, dass die Leuchtdioden über eine gewisse Trägheit verfügen. Wenn man sie für eine ausreichend
kurze Zeit ausschaltet und dann wieder einschaltet, bleibt der Vorgang für menschliche
Auge unsichtbar.
Bei dem Zähler handelt es sich um einen Vor- und Rückwärtszähler. Die Tatsache, dass er in beiden Richtungen zählen kann, wird in unserer Schaltung nicht
verwendet. Es bestünde nämlich die Gefahr, dass sich ein Impuls „verliert“ und eine Fehlanzeige erfolgt. Um dem vorzubeugen, wird nur vorwärts gezählt. Damit die
Methode wiederum zum Erfolg führt, müssen die Zähler, bevor ein neues Impuls-Paket in Empfang genommen werden kann, gelöscht werden. Bei jeder Neuzählung starten
die Zähler also mit 0. Damit auch der Reset-Vorgang unbemerkt bleibt, dauert er lediglich
eine Mikrosekunde.
Der BCD-Decoder 74HC4511 wurde speziell für die 7-Segmentanzeigen entwickelt. Er hat vier Eingänge, die Informationen in BCD-codierter Form empfangen. Der
Eingangswert wird intern umgewandelt und an sieben Ausgänge, die an eine 7-Segmentanzeige angeschlossen werden können, ausgegeben. Durch die Anwendung eines solchen
BCD-Decoders wird Verdrahtungsaufwand reduziert.
Die 7-Segmentanzeige 5101AH ist eine Anzeige, die über eine gemeinsame Kathode verfügt. Es werden demnach mit HIGH-Signalen die einzelnen Elemente der Anzeige
angesteuert. Eigentlich besteht die Anzeige nicht aus sieben, sondern aus acht Elementen. Bei der Nummer acht handelt es
sich um einen Punkt.
// *******************************************************************************************
// Voltmeter mit Zähler CD74HCT193E
// Eine Schaltung mit ATtiny85, 2 Zähler CD74HCT193E und 2 7-Segment-BCD-Decoder CD74HC4511E
// Arduino IDE 2.3.4
// *******************************************************************************************
int Impuls_vor_Komma = 2; // Impulse Ziffer vor Komma
int Impuls_nach_Komma = 1; // Impulse Ziffar nach Komma
int Zaehler_Reset = 0; // Impuls beide Zähler Reset
int Spannung_Pin = 3; // Analoger Eingang (Spannung Messung)
int Leuchtdioden_ein_aus = 4;
int Spannung; // Gemessene Spannung (0-1023)
int Spannungswert_vor_Komma; // Errechneter Wert Ziffer von Komma
int Spannungswert_nach_Komma; // Errechneter Wert Ziffer nach Komma
// *******************************************************************************************
void setup() {
pinMode(Impuls_vor_Komma, OUTPUT); // Pin 7 als Ausgang definiert
pinMode(Impuls_nach_Komma, OUTPUT); // Pin 6 als Ausgang definiert
pinMode(Zaehler_Reset, OUTPUT); // Pin 5 als Ausgang definiert
pinMode(Leuchtdioden_ein_aus, OUTPUT); // Pin 3 als Ausgang definiert
}
// *******************************************************************************************
void loop() {
Spannung = analogRead(Spannung_Pin); // Spannung Messung (Max 1023)
Spannungswert_vor_Komma = Spannung / 204; // Vereinfachte Rechenformeln
Spannungswert_nach_Komma = Spannung - (Spannungswert_vor_Komma * 204);
Spannungswert_nach_Komma = Spannungswert_nach_Komma / 22;
digitalWrite(Leuchtdioden_ein_aus, HIGH); // Leuchtdioden AUS
digitalWrite(Zaehler_Reset, HIGH); // Beide Zähler Reset, Impuls EIN
delayMicroseconds (1); // Wartezeit
digitalWrite(Zaehler_Reset, LOW); // Impuls AUS
delayMicroseconds(1); // Wartezeit
// Impulse ausgeben, Ziffer vor Komma
for (int i=0; i < Spannungswert_vor_Komma; i++) {
digitalWrite(Impuls_vor_Komma, HIGH); // Impuls EIN
delayMicroseconds (1); // Wartezeit (Impulsdauer)
digitalWrite(Impuls_vor_Komma, LOW); // Impuls AUS
delayMicroseconds (1); // Wartezeit
}
// Impulse ausgeben, Ziffer nach Komma
for (int i=0; i <Spannungswert_nach_Komma; i++) {
digitalWrite(Impuls_nach_Komma, HIGH); // Impuls EIN
delayMicroseconds (1); // Wartezeit (Impulsdauer)
digitalWrite(Impuls_nach_Komma, LOW); // Impuls AUS
delayMicroseconds (1); // Wartezeit
}
digitalWrite(Leuchtdioden_ein_aus, LOW); // Leuchtdioden EIN
delay(250); // Anzeige Zeit
}
// *******************************************************************************************