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.