Przetwornik A/D ADS1110 16-bit I2C
Jeden z najlepszych przetworników analogowo-cyfrowych w układzie delta-sigma. Posiada wewnętrzne źródło referencyjne o niespotykanej jak na tę klasę przyrządów dokładności. Już oddzielny zakup samego źródła odniesienia o takiej precyzji byłby porównywalny z ceną samego przetwornika. Idealna stabilność, dokładność i stabilność temperaturowa daje bezpośredni pomiar bez żadnych obwodów ani bez obróbki matematycznej z rozdzielczością 0,01mV i dokładnością 1mV !
ADS1110 to kompletny system akwizycji danych, zamknięty w miniaturowej obudowie SOT23-6. Obejmuje on 16-bitowy przetwornik A/C typu delta-sigma, źródło napięcia referencyjnego, wzmacniacz programowalny (PGA), oscylator i interfejs szeregowy I2C. Zakres zastosowań to przede wszystkim różnego typu aplikacje pomiarowe wymagające małego poboru mocy i miniaturowych podzespołów, między innymi przenośne urządzenia medyczne. Wewnętrzny przetwornik A/C oferuje w pełni różnicową architekturę, mechanizm autokalibracji i 16-bitową charakterystykę bez tzw. gubienia kodów. Konwersje są przeprowadzane w oparciu o wewnętrzne źródło referencyjne 2,048V o dokładności 0,05% i dryfcie temperaturowym 5ppm/° C z szybkością 15, 30, 60 lub 240 próbek na sekundę. Maksymalne wzmocnienie bloku PGA wynosi 8V/V. ADS1110 pracuje z pojedynczym napięciem zasilania z zakresu od 2,7V do 5,5V. W stanie aktywnym pobiera około 240uA prądu zasilania, przy czym istnieje możliwość automatycznego przechodzenia w tryb power-down po każdej konwersji.
Zdjęcie pokazuje równoczesny pomiar dokładnego miernika i naszego przetwornika ADS1110 i jak widać wyniki nie różnią się. Doskonała stabilność i powtarzalność czyni ten przetwornik idealny dla profesjonalnych zastosowań jak i dla hobbystów dzięki cenie, zintegrowaniu i łatwości oprogramowania (nie jest potrzebna żadna procedura uśredniająca wyniki).
Przykładowy kod w BASCOMie:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = P1.4 , Db5 = P1.5 , Db6 = P1.6 , Db7 = P1.7 , E =
P1.3 , Rs = P1.2
Config Scl = P3.5
Config Sda = P3.4
Dim Napiecie As Single , Pga As Integer
Dim Addressw As Byte , Addressr As Byte , Pomiarh As Byte , Pomiarl As Byte
Dim Napiecies As String * 10
Dim Sig As String * 1 'Deklaracja dodatkowej zmiennej - znak
Addressw = &B10[zasłonięte]000 'adresy do zapisu dla ukladów A0 i E0
Addressr = &B10[zasłonięte]001 'adresy do odczytu dla ukladów A0 i E0
Pga = 1 'stopien wewnetrznego podzialu
Cls
'------- Petla glowna ---------------
Do
Sig = "+" 'Wstepne ustawienie znaku wartosci
Gosub Odczyt 'Odczyt Pomiaru
Cursor Off
Gosub Wyswietl 'Wyświetlenie Na Lcd
Waitms 250
Waitms 250
Loop
End
Odczyt:
I2cstart
I2cwbyte Addressr 'Adres Do Odczytu
I2crbyte Pomiarh , Ack 'Odczyt Pomiaru
I2crbyte Pomiarl , Nack
I2cstop 'Bit Stopu
Napiecie = Pomiarh * 256 'Przekształcenie
Napiecie = Napiecie + Pomiarl
'------------------------------------------------
'konieczna modyfikacja procedury
If Napiecie >= 32767 Then 'jesli Napiecie(word) >= 32767
Napiecie = 65535 - Napiecie 'oblicz wartosc dopelnienia do 65535
Sig = "-" 'i ustaw zmienna Sig na znak minus
End If
'koniec glownej modyfikacji
'------------------------------------------------
'Dla ADS1100 wpisujemy zamiast 2.048 wartość napięcia zasilania, im dokladniej tym lepiej, od tego zalezy dokladność pomiarów
Napiecie = Napiecie * 2.048
Napiecie = Napiecie / 32768
Napiecie = Napiecie / Pga
Napiecie = Napiecie * 1 'w tej linii zamiast 1 w przypadku
Zastosowania Dzielnika Napiecia W Celu Rozszerzenia Zakresu , Wpisujemy
Wspólczynnik Podzialu.
Return
Wyswietl: 'Wyświetlenie Pomiaru Na Lcd
Upperline
Napiecies = Fusing(napiecie , 0.&&&) 'Zaokrąglenie Wart. Napięcia
Lcd " Nap: " ; Sig ; Napiecie ; " V" '... Oraz Jego Wyświetlenie - tu tez
Zmiana - Wyswietlenie Znaku Zmierzonej Wartosci
Return 'Powrót Z Podprocedury
----------------------------------------------------------------------
'Procedura obslugujaca przetwornik ADS1100/ADS1110, wynik pomiaru wyswietlany jest na LCD
'Nalezy zwrocic uwage na adresy przetwornikow, jesli sa inne niz A0/E0 nalezy je zmienic wg. wzoru zapis-1001xxx0, odczyt 1001xxx1
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = P1.4 , Db5 = P1.5 , Db6 = P1.6 , Db7 = P1.7 , E = P1.3 , Rs = P1.2
Config Scl = P3.5
Config Sda = P3.4
Dim Napiecie As Single , Pga As Integer
Dim Addressw As Byte , Addressr As Byte , Pomiarh As Byte , Pomiarl As Byte
Dim Napiecies As String * 10
Addressw = &B10[zasłonięte]000 'adresy do zapisu, adres dla ukladów A0 i E0
Addressr = &B10[zasłonięte]001
Pga = 1 'Odczytu
Cls
Do
Gosub Odczyt 'Odczyt Pomiaru
Cursor Off
Gosub Wyswietl 'Wyświetlenie Na Lcd
Waitms 250
Waitms 250
Loop
End
Odczyt:
I2cstart
I2cwbyte Addressr 'Adres Do Odczytu
I2crbyte Pomiarh , Ack 'Odczyt Pomiaru
I2crbyte Pomiarl , Nack
I2cstop 'Bit Stopu
Napiecie = Pomiarh * 256 'Przekształcenie
Napiecie = Napiecie + Pomiarl 'Dla ADS1100 wpisujemy zamiast 2.048 wartość napięcia zasilania, im dokladniej tym lepiej, od tego zalezy dokladność pomiarów
Napiecie = Napiecie * 2.048
Napiecie = Napiecie / 32768
Napiecie = Napiecie / Pga
Napiecie = Napiecie * 1 'w tej linii zamiast 1 w przypadku zastosowania dzielnika napiecia w celu rozszerzenia zakresu, wpisujemy wspólczynnik podzialu.
Return
Wyswietl: 'Wyświetlenie Pomiaru Na Lcd
Upperline
Napiecies = Fusing(napiecie , 0.&&&) 'Zaokrąglenie Wart. Napięcia
Lcd " Nap: " ; Napiecies ; " V" '... Oraz Jego Wyświetlenie
Return 'Powrót Z Podprocedury