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);
}