Dziwny błąd pomiaru napięcia ADS1110

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

Re: Dziwny błąd pomiaru napięcia ADS1110

Post autor: Michał6201 » 29 mar 2021, 2:26

Nie wiem czy do dobrze policzyłem
Pomiarh = 65527
Pomiarl = 65536

65527 - 65536 = -9

Popróbuję jutro z innymi wartościami
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: Dziwny błąd pomiaru napięcia ADS1110

Post autor: Michał6201 » 29 mar 2021, 2:38

Z miernikiem na pewno ok :)
Wrzuciłem ten kod:

I mierzę napięcie.

Na lcd mam wynik 0.0010V
miernik pokazuje 10,57mV
  1. $regfile = "m32def.dat"
  2.     $crystal = 11059200
  3.  
  4.     ' Konfiguracja LCD 2X16
  5.         Config Lcdpin = Pin , E = PortA.3 , Rs = PortA.2 , Db7 = PortA.7 , Db6 = PortA.6 , Db5 = PortA.5 , Db4 = PortA.4
  6.         Config Lcd = 16x2
  7.         Cursor Off
  8.         Cls
  9.  
  10.     ' Konfiguracja I2C
  11.     $lib "i2c_twi.lbx"
  12.     Config Scl = Portc.0
  13.     Config Sda = Portc.1
  14.     I2cinit
  15.     Config Twi = 100000
  16.  
  17.  
  18.  
  19.     ' Konfiguracj zmiennych
  20.     Dim Default As Byte
  21.     Dim Napiecie As Single
  22.     Dim Pga As Integer
  23.     Dim Addressw As Byte
  24.     Dim Addressr As Byte
  25.     Dim Pomiarh As Byte
  26.     Dim Pomiarl As Byte
  27.     Dim Voltages As String * 10
  28.     Pga = 1 'stopien wzmocnienia
  29.  
  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.     'Addressw = &B10010110 '150; adres zapizu danych dla [ED3]
  36.     'Addressr = &B10010111 '151; adres odczytu danych dla [ED3]
  37.  
  38.     '=====GŁÓWNA PĘTLA=====
  39.  
  40.     Do
  41.     Gosub Odczyt                                                'Skoko do procedury odczytu danych
  42.     Cursor Off
  43.     Gosub Wyswietl                                              'Skok do proceduty wyświetlenia wyniku na LCD
  44.     Waitms 250
  45.     Waitms 250
  46.     Loop
  47.     End
  48.     '=====KONIEC GŁÓWNEJ PĘTLI=====
  49.  
  50.  
  51.     '-------PROCEDURA ODCZYTU DANYCH Z ADS1110-----
  52.  
  53.     Odczyt:
  54.     I2cstart
  55.     I2cwbyte Addressr       'Adres Do Odczytu
  56.     I2crbyte Pomiarh , Ack  'Odczyt Pomiaru
  57.     I2crbyte Pomiarl , Nack
  58.     I2cstop 'Bit Stopu
  59.  
  60.  
  61.         Const K = 2.048 / 32768
  62.         Dim New_adc As Integer
  63.         New_adc = Makeint(Pomiarl,Pomiarh)
  64.     'tu możesz dodać offset
  65.        'Napiecie = Napiecie + 9            'na przykład
  66.  
  67.        Const Offset = 32768 /(2.048 / 0.0005)
  68.          Napiecie = Napiecie + Offset
  69.        Napiecie = New_adc * K
  70.  
  71.     Return
  72.  
  73.     '-----PROCEDURA WYŚWIETLENIA WARTOŚCI MIERZONEGO NAPIĘCIA NA LCD-----
  74.     Wyswietl:'Wyświetlenie Pomiaru Na Lcd
  75.     Voltages = Fusing(napiecie , "&&.&&&&") 'Zaokrąglenie Wart. Napięcia
  76.     Locate 1 , 1
  77.     Lcd "ADS1110[ED7] V.4"
  78.      Locate 2 , 1
  79.     Lcd Voltages ; "V       "
  80.     Return
  81.  
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dziwny błąd pomiaru napięcia ADS1110

Post autor: niveasoft » 29 mar 2021, 2:51

No i czego chcieć więcej :D
Zmień sobie tylko w Fusing te dwa pierwsze && na ## po pisze o tym w Helpie, że && można wstawić dopiero po kropce.
Hash`e po kropce zaokrąglają, a te znaki łączenia (nie pamiętam nazwy "Ampercoś") to właśnie nie zaokrąglają.
Awatar użytkownika
Michał6201
Posty: 127
Rejestracja: 03 paź 2015, 20:07

Re: Dziwny błąd pomiaru napięcia ADS1110

Post autor: Michał6201 » 29 mar 2021, 22:04

Wprowadziłem tą zmianę, ale nadal miernik pokazuje 10,57mV a na lcd mam 10,00mV
W ogóle nie ma reakcji na ten offset. Nic się nie zmienia w odczycie.

To działa :)

Zrezygnowałem z zaokrąglania wartości wyświetlanej.
I dopisałem:
  1.  Napiecie = Napiecie + 0.0005
Teraz mam różnice w pomiarze pomiędzy miernikiem i wyświetlona wartością na lcd 0,01mV
Jeszcze raz bardzo Ci dziękuję za pomoc. Mogę teraz dalej działać z moim zasilaczem :D
  1. $regfile = "m32def.dat"
  2.     $crystal = 11059200
  3.  
  4.     ' Konfiguracja LCD 2X16
  5.         Config Lcdpin = Pin , E = PortA.3 , Rs = PortA.2 , Db7 = PortA.7 , Db6 = PortA.6 , Db5 = PortA.5 , Db4 = PortA.4
  6.         Config Lcd = 16x2
  7.         Cursor Off
  8.         Cls
  9.  
  10.     ' Konfiguracja I2C
  11.     $lib "i2c_twi.lbx"
  12.     Config Scl = Portc.0
  13.     Config Sda = Portc.1
  14.     I2cinit
  15.     Config Twi = 100000
  16.  
  17.  
  18.  
  19.     ' Konfiguracj zmiennych
  20.     Dim Default As Byte
  21.     Dim Napiecie As Single
  22.     Dim Pga As Integer
  23.     Dim Addressw As Byte
  24.     Dim Addressr As Byte
  25.     Dim Pomiarh As Byte
  26.     Dim Pomiarl As Byte
  27.     Dim Voltages As String * 10
  28.     Pga = 1 'stopien wzmocnienia
  29.     Dim New_adc As Integer
  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.     'Addressw = &B10010110 '150; adres zapizu danych dla [ED3]
  36.     'Addressr = &B10010111 '151; adres odczytu danych dla [ED3]
  37.  
  38.     '=====GŁÓWNA PĘTLA=====
  39.  
  40.     Do
  41.     Gosub Odczyt                                                'Skoko do procedury odczytu danych
  42.     Cursor Off
  43.     Gosub Wyswietl                                              'Skok do proceduty wyświetlenia wyniku na LCD
  44.     Waitms 250
  45.     Waitms 250
  46.     Loop
  47.     End
  48.     '=====KONIEC GŁÓWNEJ PĘTLI=====
  49.  
  50.  
  51.     '-------PROCEDURA ODCZYTU DANYCH Z ADS1110-----
  52.  
  53.     Odczyt:
  54.     I2cstart
  55.     I2cwbyte Addressr       'Adres Do Odczytu
  56.     I2crbyte Pomiarh , Ack  'Odczyt Pomiaru
  57.     I2crbyte Pomiarl , Nack
  58.     I2cstop 'Bit Stopu
  59.  
  60.  
  61.         Const K = 2.048 / 32768
  62.         New_adc = Makeint(Pomiarl,Pomiarh)
  63.         Napiecie = New_adc * K
  64.        Napiecie = Napiecie + 0.0005
  65.  
  66.     Return
  67.  
  68.     '-----PROCEDURA WYŚWIETLENIA WARTOŚCI MIERZONEGO NAPIĘCIA NA LCD-----
  69.     Wyswietl:'Wyświetlenie Pomiaru Na Lcd
  70.     Voltages = Fusing(napiecie , "&&.&&&&") 'Zaokrąglenie Wart. Napięcia
  71.     Locate 1 , 1
  72.     Lcd "ADS1110[ED7] V.4"
  73.      Locate 2 , 1
  74.     Lcd Voltages ; "V       "
  75.     Return
  76.  

Jeszcze mam takie pytanie techniczne - Pomiędzy wyjściem wzmacniacza operacyjnego a wejściem in+ ADS mam rezystor 220R. Dawać malutki kondensatorek ceramiczny np 3.3nF na wejście ADC. ( pomiędzy ADC IN+ a GND)?
ODPOWIEDZ