ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Wenn ihr was über bestimmte Bauteile wissen wollt

Moderator: dussel07

ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon dussel07 » 27.05.2016, 17:25

Habe mich endschieden das Netzteil jetzt doch mit ADCs und DACs zu bauen.
Um irgend eine Grundlage zu haben googelte ich erst mal nach ADC / 12Bit / Bascom.
Mit diesen Suchkriterien bin ich dann auf den ADS1115 gestoßen.
Der ADS1115 ist ein I2C vierfach ADC mit 16Bit Auflösung und internem Verstärker der auch noch bezahlbar ist.
Leider habe ich nur ein, nicht so toll dokumentiertes Bascom Beispiel für diesen Chip gefunden.
Nach studieren des Beispielprogramms und des Datenblattes meine ich nun verstanden zu haben wie dieses Bauteil tickt?!
Aufgrund dessen, kann ich nun ein solches Modul mein Eigen nennen.

Anhand des Programms aus dem Bascom Forum versuch ich jetzt mal zu erläutern, wie es vieleicht klappen könnte brauchbare Werte aus dem Chip zu locken -

Hier erst mal das komplette Bascom Programm -
Spoiler: show
Code: Alles auswählen
$regfile = "m2561def.dat"
$crystal = 16000000
$hwstack = 256
$swstack = 128
$framesize = 128
'$lib "i2c_twi.lbx"       '
Ddrb = &B00000000
Portb = &B00000000
Ddrc = &B10000000
Portc = &B00000000
Ddra = &B00000011
Porta = &B00000000
Ddrg = &B00000
Portg = &B0000
Ddrd = &B00000000
Portd = &B00000000
Const Timervorgabe = 3036

Portc.7 = 1

Config Lcd = 20 * 4 , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Porte.4 , Db5 = Porte.5 , Db6 = Porte.6 , Db7 = Porte.7 , E = Porte.2 , Rs = Porte.3
Config Timer1 = Timer , Prescale = 256
'Config Single = Scientific , Digits = 5

Const Ads1115_write = &B10010000       'Adress Pin auf Masse.
Const Ads1115_read = &B10010001

'Const Config_high = &B11000000       '6144
'Const Config_high = &B11000010       '4096
Const Config_high = &B11000100       '2048
'Const Config_high = &B11000110       '1024

Const Config_low = &B00000000


'Const Ad_wert = 1.024 / &H7FFF       '2048
Const Ad_wert = 2.048 / &H7FFF       '2048
'Const Ad_wert = 4.096 / &H7FFF       '4096
'Const Ad_wert = 6.144 / &H7FFF       '6144

Const Ad_wert_minus = 2.048 / &H8000
Config Scl = Porta.1
Config Sda = Porta.0
I2cinit

On Timer1 Timer_irq

Enable Timer1
Enable Interrupts


Cursor Off Noblink
Cls
Locate 1 , 6 : Lcd "Ads1115"

    I2cstart
    I2cwbyte Ads1115_write
    I2cwbyte &B00000001
    I2cwbyte Config_high
    I2cwbyte Config_low
    I2cstop       '



Dim Flag As Bit
Dim Hi_lo As Integer
Dim Ad_high As Byte At Hi_lo Overlay
Dim Ad_low As Byte At Hi_lo + 1 Overlay
Dim Volt As Single
Dim Milivolt As String * 10


'---------------------------------------- Main------------
Do
If Flag = 1 Then
Flag = 0

Gosub Read_ad
Volt = Ad_wert * Hi_lo



    If Volt < 1.000 Then
         Milivolt = Str(volt)
         Milivolt = Mid(milivolt , 3 , 5)
         Milivolt = Format(milivolt , "000.00")
         Locate 2 , 1 : Lcd "           "
         Locate 2 , 1 : Lcd Milivolt ; " mV"
    Else
         Locate 2 , 1 : Lcd "            "
         Locate 2 , 1 : Lcd Fusing(volt , "#.###") ; " Volt"
   End If

End If
Loop
End

'---------------------------------------- Main------------

Read_ad:
I2cstart  ' Generate start code
   I2cwbyte Ads1115_write       ' send address
   I2cwbyte 0

I2cstart 'start condition
    I2cwbyte Ads1115_read       'slave address
    I2crbyte Ad_low , Ack
    I2crbyte Ad_high , Nack
  I2cstop

Return


Timer_irq:
Timer1 = Timervorgabe
Flag = 1
Return


Die Adressierung
Const Ads1115_write = &B10010000 'Adress Pin auf Masse.
Const Ads1115_read = &B10010001


Mögliche I2C Adressen des ADS1115
1001000 Adress Pin auf Masse
1001001 Adresspin auf Vdd
1001010 Adresspin auf den SDA Pin
1001011 Adresspin auf den SCL Pin
Das achte Bit bestimmt dann ob ich schreiben oder lesen möchte
Beispiel: 10010000 - Schreibadresse / 10010001 - Leseadresse

Die Konfiguration
'Const Config_high = &B11000000 '6144 (16 Bit Auflösung)
'Const Config_high = &B11000010 '4096 (14 Bit)
Const Config_high = &B11000100 '2048 (12 Bit)
'Const Config_high = &B11000110 '1024 (10 Bit)

Const Config_low = &B00000000


Das Config Register muss mit zwei 8Bit Byts beschrieben werden -
das Low Byte von Bit 0 bis Bit 7
das "High" Byte von Bit 8 bis Bit 15
Mit diesen Byts kann ich dem ADS1115 sagen wie er arbeiten soll.

Beispielprogramm Highbyte:

Code: Alles auswählen
15  14  13  12  11  10  9   8
1   1   0   0   0   1   0   0

Bit 15 = 1 sagt dem Chip das er, sollte er sich im Powerdown Modus befinden, eine Umwandlung starten soll.
Bit 12-14 sind für den Multiplexer zuständig. Hier wir festgelegt wie und an Welchem Pin er die Spannung messen soll
(100 = Spannung zwischen AIN0 und Gnd)
Bit 9 bis 11 legt den Verstärkungsfaktor fest (hier muß ich mich durch Messen mal schlau machen)
(010 = FS = +-2048)
Bit 8 legt die Umwandlung fest
0 = dauerhafte Umwandlung
1 = nur eine Umwandlung
(0 = dauerhafte Umwandlung

Zum Lowbyte muß ich mich noch schlau machen.

Weiter mit dem Beispielprogramm
I2cstart
I2cwbyte Ads1115_write
I2cwbyte &B00000001
I2cwbyte Config_high
I2cwbyte Config_low
I2cstop

Mit diesem Teil wird das Config Register jetzt beschrieben
Das erste Byte überträgt die Adresse (I2cwbyte Ads1115_write)
das Zweite ist zuständig für das Pointer Register und folgt immer auf die Adresse.
Das Pointerregister gibt an auf welches der 4 möglichen Register im folgenden Byte zugegriffen werden soll.
00000000 = Umwandlungsregister (hier können die eigentlichen Wert nach einer Umwandlung ausgelesen werden)
00000001 = Configregister
00000010 = low_thresh_register (?)
00000011 = High_thresh_register (?)
Beispielprogramm
I2cwbyte &B00000001 = zugriff auf das Configregister
Das dritte und vierte Byte schreibt die zuvor festgelegten Daten ins Configregister
I2cwbyte Config_high
I2cwbyte Config_low

Und der letzte Teil des Programms:
I2cstart ' Generate start code
I2cwbyte Ads1115_write ' send address
I2cwbyte 0

I2cstart 'start condition
I2cwbyte Ads1115_read 'slave address
I2crbyte Ad_low , Ack
I2crbyte Ad_high , Nack
I2cstop


I2cwbyte Ads1115_write ' send address
I2cwbyte 0
setzt das Pointerregister auf das Umwandlungsregister
I2cwbyte Ads1115_read 'slave address
I2crbyte Ad_low , Ack
I2crbyte Ad_high , Nack
liest die 16 Bit des Umwandlungsregisters ein.

Ist doch eigentlich ganz einfach, Gell!

zumindest im Geiste - mal schauen was die Praxis zeigt - - - - - -
Dateianhänge
ADS1115.jpg
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1627
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 28.05.2016, 16:45

Das ist ein recht interessantes Bauteil das du da gefunden hast.
16Bit- Auflösung, dies ist ja gewaltig.
Ich könnte mir vorstellen, das man die Genauigkeit nur hinkriegt, wen die Versorgungsspannung sehr genau ist.


Bei un ind Firma soll ich eine Software für dieses Modul entwickeln.
http://www.quancom.de/quancom/quancom01 ... ac2_14.htm
Dieses Modul hat aber nur 14Bit und kostet das 20fache des ADS1115.
Vor 4 Monaten bestellt aber ist noch nicht bei uns in der Firma angekommen.

Wie sieht der ADS1115 ESD-Mässig aus ?
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon dussel07 » 29.05.2016, 10:06

"Ich könnte mir vorstellen, das man die Genauigkeit nur hinkriegt, wen die Versorgungsspannung sehr genau ist."
Ich vermute das es eine integrierte Referenzspannungsquelle hat?
Ja, - ich bin Zwilling
Benutzeravatar
dussel07
 
Beiträge: 1627
Registriert: 30.04.2009, 21:04
Wohnort: Goslar

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 15.06.2016, 19:16

Ich habe mir so ein Teil gekauft und an meinen Arduino angeschlossen.

Unglaublich, wie schnell und genau der arbeitet.
Und das für nicht mal für sFr 7.--

Nur mir der Kommunikation zum PC haut es noch nicht richtig hin.
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon alterhase » 15.06.2016, 19:20

Das bekommst du sicherlich auch noch in den Griff. :D
Löten verbindet ...manchmals. :mrgreen:
73 55
alterhase
 
Beiträge: 12033
Registriert: 14.11.2008, 08:58
Wohnort: Wien/Kapfenberg

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 17.06.2016, 19:53

Es sieht langsam besser aus, aber so wie es aussieht, hat der COM-Port, einen recht grossen Overhead.
Vor allem macht sich das bemerkbar, wen ich Wert für wert auslese.

Leider bringt es nichts, wen ich die Baudrate höher schraube. :cry:


Vielleicht könnte man das Problem mit sowas umgehen

http://www.elv.ch/usb-i2c-interface-kom ... kabel.html

Oder sonst irgend einem I²C to USB-Adapter ?

Eine ATtiny-Lösung würde es auch noch geben.

Im Anhang sieht man das Ergebniss von ADS1115
Dateianhänge
Messwert_000000-1.pdf
(12.8 KiB) 116-mal heruntergeladen
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 23.06.2016, 17:27

Ich bin um einiges weiter gekommen.
Die Bremse ist in der lib des ADS1150, ich habe diese ein bisschen ausgemistet, jetzt ist es um einiges schneller geworden.
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon alterhase » 23.06.2016, 22:12

Hab dein pdf.File angesehen. Die Quantisierung scheint mir ein wenig "grob".

...das sind schätzomativ 8 Bits.
Löten verbindet ...manchmals. :mrgreen:
73 55
alterhase
 
Beiträge: 12033
Registriert: 14.11.2008, 08:58
Wohnort: Wien/Kapfenberg

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 23.06.2016, 22:27

Hab dein pdf.File angesehen. Die Quantisierung scheint mir ein wenig "grob".

...das sind schätzomativ 8 Bits.

Das muss so sein, die Messonde besteht aus einer Reedkette.
Je mehr Reeds, desto feiner wird die Treppe.
Die Messonde, welche ich zuhause habe ist relativ kurz.

Ich konnte die Geschwindigkeit nochmals verdoppeln.
Im PC-Seitigen Programm, habe ich versehentlich 2 Messzugriffe pro Messung gehabt.

Im Anhang die neuste Messung.

Was ich unterdessen noch festgestellt habe, wen man mit nur einem Kanal misst, kann man viel schneller messen, als wen man 2 Kanäle braucht.
Dies macht über das doppelte aus.
Wen man beim Messen immer Kanal-Wechsel machen muss, muss man ein recht hohes Delay dazwischen schalten.
Wen man dies nicht macht, nimmt er Daten vom falschen Kanal, oder hat sonstige Fehlmessungen.

Aber unter dem Strich bekommt man sehr viel AD-Wandler fürs Geld.
Dateianhänge
Messwert_000000-1.pdf
(25.53 KiB) 93-mal heruntergeladen
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 24.06.2016, 17:52

Jetzt stehe ich vor einem sehr grossen Rätsel.

Wen ich eine Unterbruch der Stromversorgung zum Ads mache, misst das Ding frisch und fröhlich weiter. :?
(Verbindung 5V Arduino --> ADS-VDD)

Aber wen ich das Messen unterbreche und weiter messen will, dann geht es nicht mehr.

Kann es sein, das eine gewisse Versorgung über SCL und SDA kommt ?
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon alterhase » 24.06.2016, 19:41

...Kann es sein, das eine gewisse Versorgung über SCL und SDA kommt ?...
So ist es.

Info:
...üblicherweise sind in jeden Eingang von C-MOS ICs jeweils zwei Dioden als ESD-Schutz
eingebaut.
Die eine von Eingang = Anode zu Kathode = VDD und schließt Spannungen größer VDD gegen VDD kurz
Die andere vom selben Eingang = Kathode zu Anode = GND und macht das Gleiche mit negativen Spannungen. So sieht es der Entwickler vor.

Bei dir funktioniert es so:
Du hast einen Pfad von einem High-Signal zum VDD falls diese offen liegt. Beim I²C Takt hast du in rascher Abfolge high/low das High lädt über die VDD-Diode die Stützkondensatoren auf der Modulplatine. An diesen entsteht jetzt quasi der High-spannungswert des Taktsignals der wie bei C-MOS üblich der Betriebsspannung entspricht. Die Diode "schluckt" 600mV bleibt immer noch genügend "Saft" für den ADC.

Der ADC selbst arbeitet lt. Datenblatt bis runter auf ca. 2,5V


Ich hatte vor nicht allzulanger Zeit ein ähnliches Problem. Da funktionierte ein C-MOS IC über längere Zeit klaglos nur manchmals gabs einen "Hoppala" ...nämlich immer dann, wenn alle Eingänge auf low waren. Grund war, der VDD Pin war verbogen und kam nicht an VDD zu liegen. Da half auch kein Stützkondensator.
Löten verbindet ...manchmals. :mrgreen:
73 55
alterhase
 
Beiträge: 12033
Registriert: 14.11.2008, 08:58
Wohnort: Wien/Kapfenberg

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 24.06.2016, 21:36

Danke,

Man lehrnt nie aus. :wink:
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 26.06.2016, 15:42

...üblicherweise sind in jeden Eingang von C-MOS ICs jeweils zwei Dioden als ESD-Schutz eingebaut.

Wen da angeblich ein Schutz eingebaut ist, wieso sind da die ICs so heikel auf ESD ?

Oder habe ich es falsche verstanden, die Dioden befinden sich auf der Platine und nicht auf dem IC ?
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon alterhase » 27.06.2016, 21:41

Nein die Dioden sind schon im IC drinnen aber nix ist perfekt.
Die Bauteile waren früher noch viel heikler. ...Mit den heutigen kannst dagegen eh fast sorglos umgehen.

...mein erster FET war ein J-FET. ...der hat eine Lawine gekostet und hatte über die Abschlußbeinchen einen Leitgummiring und eine Anleitung diesen erst zu entfernen, wenn der J-FET in die Schaltung eingebaut und gewährleistet ist, dass kein Anschluss mehr offen ist.
Damals waren grad Kunststoffteppiche, Nylonhemden und sonstiges elektrostatisch bedenkliche Zeug in Mode.

ESD war/ist auch bei Tankstellen ein großes Thema. ...man hat eben Erfahrung gesammelt.

...und so wie es mit "allgemeinen Erkenntnissen" ist. ...bis die sich durchgesetzt haben isses praktisch eh schon wieder vorbei. ...aber die "Erkenntnisse" halten dafür ewig.

PS:
Ich habe es selber erlebt, wie Techniker mit einer Giesskanne den Teppichboden im Videoschnittbereich befeuchtet haben um einigermaßen störungsfrei ihren Job erledigen zu können.
Löten verbindet ...manchmals. :mrgreen:
73 55
alterhase
 
Beiträge: 12033
Registriert: 14.11.2008, 08:58
Wohnort: Wien/Kapfenberg

Re: ADS1115 I2C Analog zu Digital Wandler (Bascom Auswertung)

Beitragvon Mathias » 01.07.2016, 18:04

Ein bisschen sollte man schon aufpassen, das man nicht gerade einen Wollen-Pullover über ein Polyester Hemd zieht, und dabei ein paar ICs in den Händen hält.
Und vor allem erst den Tisch oder die Verpackung angreifen, bevor man sich die ICs in die Hände nimmt.
Mathias
 
Beiträge: 148
Registriert: 14.04.2016, 17:23
Wohnort: Zürcher Oberland

Nächste

Zurück zu Bauteile

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste