16 Bit Analog-Digital-Converter ADS1115 mit Attiny45/85

Testaufbau:

Verwendete Bauteile:

  • 1 Attiny45/85
  • 1 ADS1115 Breakout Board
  • 1 4-stellige 7-Segmentanzeige mit HT16K33 LED-Treiber oder z.B. von Sparkfun
  • 1 Taster (Reset)
  • 1 Kondensator 100 nF
  • 1 Trimmpoti 10 kOhm
  • 1 Batteriepack 3 V
  • 1 Netzteil 5 V DC, 100 mA



Beispiel 3 für Attiny45/85: Betrieb des ADC im kontinuierlichen Modus und Ausgabe auf einer 4-stelligen 7-Segment-Anzeige

Mit einer Messrate von 8 SPS (Samples Per Seconds) wird die über einen Trimmer (oder ein Poti) geteilte und am Analogeingang A0 gegen Masse anliegende Spannung in eine vorzeichenbehaftete 16 Bit Binärzahl (0 bis +32.767) gewandelt. Alle 200 ms wird das Wandlungsergebnis als berechneter Spannungswert aus dem ADS1115 ausgelesen und in Volt auf der 7-Semgent-Anzeige angezeigt.


Neben der Library MyADS1115 werden noch folgende Libraries benötigt:

  • MyHT16K33_7Seg: Meine Library für die 7-Segmentanzeige mit HT16K33 LED-Treiber kann hier heruntergeladen werden: 7-Segm.anz. HT16K33. Alternativ kann z.B auch meine 7-Segmentanzeige von Sparkfun verwendet werden, meine Library MySparkfun7SegI2C dazu ist hier zu finden: 7-Segm.anz. Sparkfun.
  • TinyWireM: Zur I2C-Kommunikation für Attiny, ein Link dazu ist hier zu finden: Fremd-Libraries

//Programmbeispiel 3 fuer ADS1115
//Code fuer Attiny45/85
//Author Retian
//Version 1.0


#include <MyADS1115.h>
#include <MyHT16K33_7Seg.h>
//oder bei Verwendung meiner 7-Segment-Anzeige von Sparkfun
//#include <MySparkfun7SegI2C.h>


MyADS1115 ADS;
MyHT16K33_7Seg Seg7(0x70);
//MySparkfun7SegI2C Seg7(0x71);


float voltage;


void setup() {
  Seg7.init();
  Seg7.test7Seg(); //Alle Segmente der Anzeige leuchten fuer 1 s
  delay(1000);
  if (ADS.isReady()) //Pruefe, ob der ADC ansprechbar ist ...
  {
    char txt[5] = "Run ";
    Seg7.sendString(txt);
  }
  else while(1); //sonst geht's hier nicht weiter
  delay(1000);
  ADS.init();
 
  //Parameter muessen nur eingegeben werden, wenn sie von
  //den nachfolgenden Default-Werten abweichen sollen:
  //Mux:  ADS1115_MUX_AIN0_AIN1 ...... Diff.Spannungsmessung A0->A1
  //Gain: ADS1115_PGA_2P048 .......... Verstärkung 2,048 V (Full Scale)
  //Rate: ADS1115_RATE_128 ........... Abtastrate 128 SPS (Samples Per Second)
  //Mode: ADS1115_MODE_SINGLESHOT .... Einzelmessung
   
  ADS.setMux(ADS1115_MUX_AIN0_GND); //Spannung gegen Masse A0->GND
  ADS.setGain(ADS1115_PGA_6P144); //Verstärkung auf 6,144 V (Full Scale)
  //Achtung: Auch wenn der Endausschlag (Full Scale) auf 6,144 V gestellt ist, darf
  //die an einm Analogeingang anliegende Spannung (Messspannung) nicht größer als
  //die Versorgungsspannung VDD (maximal VDD + 0,3 V) sein, sonst droht die
  //Beschädigung des ADC. Die Versorgungsspannung VDD darf maximal 5,5 V betragen.
  ADS.setRate(ADS1115_RATE_8); //Abtastrate 8 SPS
  ADS.setMode(ADS1115_MODE_CONTINUOUS); //Kontinuierliche Messung
  delay(150); //Warte, bis die erste Wandlung sicher fertig ist
}


void loop() {
  //Abfrage des Wandlungsergebnis in mV und Umrechung in Volt
  voltage = ADS.readVoltage() / 1000;
  //Ausgabe der Spannung auf der 7-Segmentanzeige
  Seg7.sendFloatVal(voltage);
  delay(200);
}


Zur Library ADC ADS1115