Obsługa przetwornika ADS1110

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Obsługa przetwornika ADS1110

Post autor: Michał6201 » 16 maja 2020, 2:26

Witam

Jako, że zabieram się za budowę zasilacza, postanowiłem przy okazji przyjrzeć się przetwornikowi ADS1110 do pomiaru napięcia. Jest to 16 Bitowy przetwornik analogowo cyfrowy z własnym napięciem odniesienia.
Kupiłem go już dawno temu, ale nigdy nie miałem okazji sprawdzić jak on działa.
Dzisiaj w końcu wykonałem malutką płytkę pod ten przetwornik.
Komunikacja z mikrokontrolerem odbywa się poprzez i2c. ADS1110 dostępny jest w ośmiu różnych wersjach adresowych. Każdy z nich oznaczony jest jako EDx. gdzie x oznacza dany wariant. Mi trafił się ED7. Czyli jego adres to 10011110 (158). Wykaz adresów podany jest w datascheet.

Przy napisaniu kodu do obsługi przetwornika posłużyłem się fragmentami kodów znalezionych w internecie.

Po każdym uruchomieniu układ sam resetuje się i pracuje z ustawieniami fabrycznymi. Jeśli chcemy je mienić, to musimy zapisać rejestr konfiguracji.
Oto Bity rejestru DEFAULT:
7 - W trybie ciągłej konwersji STRD określa kiedy nowe dane do odczytu są gotowe. Jeśli 1, to dane są już odczytane, jeśli 0, to dane są nowe i nie odczytane
6 - bez zmian. Musi być 0
5 - bez zmian. Musi być 0
4 - Wartość 1 dla ustawienia pojedynczej konwersji, zaś wartość 0 ustawia nam ciągłą konwersję
3 i 2 - tu wybieramy szybkość magistrali I2C. Wartości 1 i 1 ustawiają prędkość domyślną
1 i 0 - ustawienie wartości wzmocnienia (1,2,4,8) Dla obydwóch bitów wartość 0 daje nam wzmocnienie = 1 i jest to standardowe ustawienie.

W załączeniu działający kod:
  1. ' OBSŁUGA ADS1110 VER.2
  2.  
  3.  
  4.  $regfile = "m8adef.dat"
  5. $crystal = 8000000
  6.  
  7. ' Konfiguracja LCD 2X16
  8.     Config Lcdpin = Pin , E = PortD.0 , Rs = PortD.1 , Db7 = PortD.2 , Db6 = PortD.3 , Db5 = PortD.4 , Db4 = PortD.5
  9.     Config Lcd = 16x2
  10.     Cursor Off
  11.     Cls
  12.  
  13. ' Konfiguracja I2C
  14. $lib "i2c_twi.lbx"
  15. Config Scl = Portc.5
  16. Config Sda = Portc.4
  17. I2cinit
  18. Config Twi = 100000
  19.  
  20. ' Konfiguracj zmiennych
  21. Dim Default As Byte
  22. Dim Napiecie As Single
  23. Dim Pga As Integer
  24. Dim Addressw As Byte
  25. Dim Addressr As Byte
  26. Dim Pomiarh As Byte
  27. Dim Pomiarl As Byte
  28. Dim Voltages As String * 10
  29. Pga = 1     'stopien wzmocnienia
  30.  
  31. ' Default = &B10001100  ' ustawienie parametrów pracy, Bez tego rejestru układ ma fabryczne ustawienia
  32. Addressw = &B10011110 '158; adres zapizu danych dla [ED7]
  33. Addressr = &B10011111 '159; adres odczytu danych dla [ED7]
  34.  
  35. '=====GŁÓWNA PĘTLA=====
  36.  
  37. Do
  38. Gosub Odczyt                                                'Skoko do procedury odczytu danych
  39. Cursor Off
  40. Gosub Wyswietl                                              'Skok do proceduty wyświetlenia wyniku na LCD
  41. Waitms 250
  42. Waitms 250
  43. Loop
  44. End
  45. '=====KONIEC GŁÓWNEJ PĘTLI=====
  46.  
  47.  
  48. '-------PROCEDURA ODCZYTU DANYCH Z ADS1110-----
  49. Odczyt:
  50. I2cstart
  51. I2cwbyte Addressr                                           'Adres Do Odczytu
  52. I2crbyte Pomiarh , Ack                                      'Odczyt Pomiaru
  53. I2crbyte Pomiarl , Nack
  54. I2cstop                                                     'Bit Stopu
  55. Napiecie = Pomiarh * 256                                    'Przekształcenie
  56. Napiecie = Napiecie + Pomiarl
  57.                                   'Dla ADS1100 wpisujemy napięcie referencyjne = 2.048V
  58. Napiecie = Napiecie * 2.048
  59. Napiecie = Napiecie / 32768
  60. Napiecie = Napiecie / Pga
  61. Napiecie = Napiecie * 10.6        'Współczynnik K podziału (dzielnik rezystorowy)
  62. Return
  63.  
  64. '-----PROCEDURA WYŚWIETLENIA WARTOŚCI MIERZONEGO NAPIĘCIA NA LCD-----
  65. Wyswietl:                                                   'Wyświetlenie Pomiaru Na Lcd
  66. Voltages = Fusing(napiecie , "00.&&&&")                    'Zaokrąglenie Wart. Napięcia
  67. Locate 1 , 1
  68. Lcd "ADS1110[ED7] V.2"
  69.  Locate 2 , 1
  70. Lcd "U=" ; Voltages ; "V       "                                                          '
  71. Return
Nie wiem czy to wina programu, a czy projektu tej malutkiej płytki jednostronnej, którą zrobiłem na potrzeby przetestowanie ADS1110, ale bez podłączenia do mierzonego napięcia końcówek przetwornika, na wyświetlaczu mam wartość: 0,0145V
Niby niewiele, ale dlaczego tak się dzieje? Jakieś zakłócenia?

Natomiast po podłączeniu do mierzonego napięcia (+5V) zarówno ADS1110 a także miernika, różnica wyświetlanej wartości, to 0.006V -> ADS1110 pokazał 5,0489V natomiast miernik 5,0423V

Co tym sądzicie?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 16 maja 2020, 23:07 przez Michał6201, łącznie zmieniany 1 raz.
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Obsługa przetwornika ADS1110

Post autor: Pikczu » 16 maja 2020, 21:05

Michał6201 pisze:
16 maja 2020, 2:26

Nie wiem czy to wina programu, a czy projektu tej malutkiej płytki jednostronnej, którą zrobiłem na potrzeby przetestowanie ADS1110, ale bez podłączenia do mierzonego napięcia końcówek przetwornika, na wyświetlaczu mam wartość: 0,0145V
Niby niewiele, ale dlaczego tak się dzieje? Jakieś zakłócenia?

Natomiast po podłączeniu do mierzonego napięcia (+5V) zarówno ADS1110 a także miernika, różnica wyświetlanej wartości, to 0.006V -> ADS1110 pokazał 5,0489V natomiast miernik 5,0423V

Co tym sądzicie?
Jest to jak najbardziej normalne zachowanie, wejście nigdzie nie podłączone działa jak antena.

Jak już ogarniesz to może mógł byś z tego zrobić bibliotekę z rozszerzeniem *.inc i udostępnił w dziale bibliotek?

Fajny scalak już widzę fajne zastosowanie dla niego jako moduł klawiatury ADC.

Pozdrawiam
Pikczu
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: Obsługa przetwornika ADS1110

Post autor: Michał6201 » 16 maja 2020, 22:22

Pytanie tylko, czy ten mój kod jest poprawnie napisany?

Doradź mi proszę, jak jeszcze mogę zabezpieczyć wejście ADC tego przetwornika przed wszelkimi przepięciami? Jakieś transile może?

Vin-połączyć z GND, a czy nie?
ODPOWIEDZ