Universelles analoges Meßgerät
Ein analoges Meßgerät hat immer Zeiger und Skale.
Ich weiß, ich weiß: diese Behauptung erregt oft Widerspruch. Machmal
handelt es sich bei dem Zeiger auch nur um einen mit Farbe aufgemalten
Punkt oder eine mit dem Taschenmesser eingeritzte Kerbe oder, wie bei
der Sonnenuhr, nur um einen Schatten.
Der Zeiger auf dem Meßgerät, das wir bauen wollen, ist ein
leuchtender Punkt oder ein leuchtender Balken. Beides realisiert mit
LEDs.
Was macht nun die Universalität unseres Meßgerätes aus:
- es kann eine oder zwei oder drei oder vier oder fünf oder gar
sechs analoge Größen "gleichzeitig" oder nacheinander messen und diese
gleichzeitig oder nacheinander anzeigen
- es kann mit einem Punkt (oder mehrere) oder einem (oder mehrere)
Balken den Meßwert anzeigen
- es kann linear oder logarithmisch skaliert sein (nicht schlimm,
wenn Du noch nicht weißt, wozu das nützlich ist)
- es kann beim Überschreiten und/oder Unterschreiten von Dir
festgelegter Werte igendwelche Schaltvorgänge oder Sonderaktionen
ausführen
- es kann Kaffee, Kakao und Tee kochen
Klingt nach viel Arbeit, was?
Ist es aber gar nicht. Wir benutzen einfach
unser universelles Experimentierboard
und schreiben nur Programme dazu.
Mehr noch: Ich schreibe sie Dir. Du brauchst sie nur noch ins Board zu
schieben. Vorher kannst Du sie Deinen Wünschen anpassen (und dann eben
wieder alles ganz anders machen...).
Hier das Board, wie wir es für unser Meßgerät benutzen. Im Bild benutze
ich einfach einen 10K-Poti als
Spannungsteiler:
Variante 1:
Bargraph - eine analoge Größe
(0...5V) an ADC0 (Pin 23 am Atmega / bei uns Buchse
S0) wird als LED-Balken auf
den 14 LED
angezeigt.
#include <avr/io.h>
#include "boarddefs.h"
#include "messen.h"
int main(void){
int value=0;
DDRB=255; DDRD=255; // PORTs als Ausgabe
DDRC &= ~_BV(PC0); // PC0 als Eingang
while(1){
value=MESSWERT();
if (value >
68) led1on; else led1off;
if (value > 136) led2on; else led2off;
if (value > 204) led3on; else led3off;
if (value > 272) led4on; else led4off;
if (value > 340) led5on; else led5off;
if (value > 408) led6on; else led6off;
if (value > 476) led7on; else led7off;
if (value > 544) led8on; else led8off;
if (value > 612) led9on; else led9off;
if (value > 680) led10on; else
led10off;
if (value > 748) led11on; else
led11off;
if (value > 816) led12on; else
led12off;
if (value > 884) led13on; else
led13off;
if (value > 952) led14on; else
led14off;
}
return 0;
}
Hier der Ordner zum
Programmieren.
Variante 2:
Dotgraph - eine analoge Größe
(0...5V) an ADC0 (Pin 23 am Atmega / bei uns Buchse
S0) wird als LED-Punkt auf den
14 LED
angezeigt
#include <avr/io.h>
#include "boarddefs.h"
#include "messen.h"
int main(void){
int value=0;
DDRB=255; DDRD=255; // PORTs als Ausgabe
DDRC &= ~_BV(PC0); // PC0 als Eingang
while(1){
value=MESSWERT();
if (value<68)
led1on; else led1off;
if ( (value >=68)&& (value<136
)) led2on; else led2off;
if ( (value >=136)&& (value<204
)) led3on; else led3off;
if ( (value >=204)&& (value<272
)) led4on; else led4off;
if ( (value >= 272)&& (value<340
)) led5on; else led5off;
if ( (value >= 340)&& (value<408
)) led6on; else led6off;
if ( (value >= 408)&& (value<476
)) led7on; else led7off;
if ( (value >= 476)&& (value<612
)) led8on; else led8off;
if ( (value >= 612)&& (value<680
)) led9on; else led9off;
if ( (value >= 680)&& (value<748
)) led10on; else led10off;
if ( (value >= 748)&& (value<816
)) led11on; else led11off;
if ( (value >= 816)&& (value<884
)) led12on; else led12off;
if ( (value >= 884)&& (value<952
)) led13on; else led13off;
if (value >= 952) led14on; else led14off;
}
return 0;}
Hier der Ordner zum
Programmieren.
Ein Bargraph für Attiny13 gibt es hier.
|