Nie wiem czy do dobrze policzyłem
Pomiarh = 65527
Pomiarl = 65536
65527 - 65536 = -9
Popróbuję jutro z innymi wartościami
Dziwny błąd pomiaru napięcia ADS1110
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Dziwny błąd pomiaru napięcia ADS1110
Z miernikiem na pewno ok
Wrzuciłem ten kod:
I mierzę napięcie.
Na lcd mam wynik 0.0010V
miernik pokazuje 10,57mV
Wrzuciłem ten kod:
I mierzę napięcie.
Na lcd mam wynik 0.0010V
miernik pokazuje 10,57mV
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m32def.dat"
- $crystal = 11059200
- ' Konfiguracja LCD 2X16
- Config Lcdpin = Pin , E = PortA.3 , Rs = PortA.2 , Db7 = PortA.7 , Db6 = PortA.6 , Db5 = PortA.5 , Db4 = PortA.4
- Config Lcd = 16x2
- Cursor Off
- Cls
- ' Konfiguracja I2C
- $lib "i2c_twi.lbx"
- Config Scl = Portc.0
- Config Sda = Portc.1
- I2cinit
- Config Twi = 100000
- ' Konfiguracj zmiennych
- Dim Default As Byte
- Dim Napiecie As Single
- Dim Pga As Integer
- Dim Addressw As Byte
- Dim Addressr As Byte
- Dim Pomiarh As Byte
- Dim Pomiarl As Byte
- Dim Voltages As String * 10
- Pga = 1 'stopien wzmocnienia
- 'Default = &B10001100 ' ustawienie parametrów pracy, Bez tego rejestru układ ma fabryczne ustawienia
- Addressw = &B10011110 '158; adres zapizu danych dla [ED7]
- Addressr = &B10011111 '159; adres odczytu danych dla [ED7]
- 'Addressw = &B10010110 '150; adres zapizu danych dla [ED3]
- 'Addressr = &B10010111 '151; adres odczytu danych dla [ED3]
- '=====GŁÓWNA PĘTLA=====
- Do
- Gosub Odczyt 'Skoko do procedury odczytu danych
- Cursor Off
- Gosub Wyswietl 'Skok do proceduty wyświetlenia wyniku na LCD
- Waitms 250
- Waitms 250
- Loop
- End
- '=====KONIEC GŁÓWNEJ PĘTLI=====
- '-------PROCEDURA ODCZYTU DANYCH Z ADS1110-----
- Odczyt:
- I2cstart
- I2cwbyte Addressr 'Adres Do Odczytu
- I2crbyte Pomiarh , Ack 'Odczyt Pomiaru
- I2crbyte Pomiarl , Nack
- I2cstop 'Bit Stopu
- Const K = 2.048 / 32768
- Dim New_adc As Integer
- New_adc = Makeint(Pomiarl,Pomiarh)
- 'tu możesz dodać offset
- 'Napiecie = Napiecie + 9 'na przykład
- Const Offset = 32768 /(2.048 / 0.0005)
- Napiecie = Napiecie + Offset
- Napiecie = New_adc * K
- Return
- '-----PROCEDURA WYŚWIETLENIA WARTOŚCI MIERZONEGO NAPIĘCIA NA LCD-----
- Wyswietl:'Wyświetlenie Pomiaru Na Lcd
- Voltages = Fusing(napiecie , "&&.&&&&") 'Zaokrąglenie Wart. Napięcia
- Locate 1 , 1
- Lcd "ADS1110[ED7] V.4"
- Locate 2 , 1
- Lcd Voltages ; "V "
- Return
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Dziwny błąd pomiaru napięcia ADS1110
No i czego chcieć więcej
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ą.
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ą.
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Dziwny błąd pomiaru napięcia ADS1110
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:
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
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)?
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:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Napiecie = Napiecie + 0.0005
Jeszcze raz bardzo Ci dziękuję za pomoc. Mogę teraz dalej działać z moim zasilaczem
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m32def.dat"
- $crystal = 11059200
- ' Konfiguracja LCD 2X16
- Config Lcdpin = Pin , E = PortA.3 , Rs = PortA.2 , Db7 = PortA.7 , Db6 = PortA.6 , Db5 = PortA.5 , Db4 = PortA.4
- Config Lcd = 16x2
- Cursor Off
- Cls
- ' Konfiguracja I2C
- $lib "i2c_twi.lbx"
- Config Scl = Portc.0
- Config Sda = Portc.1
- I2cinit
- Config Twi = 100000
- ' Konfiguracj zmiennych
- Dim Default As Byte
- Dim Napiecie As Single
- Dim Pga As Integer
- Dim Addressw As Byte
- Dim Addressr As Byte
- Dim Pomiarh As Byte
- Dim Pomiarl As Byte
- Dim Voltages As String * 10
- Pga = 1 'stopien wzmocnienia
- Dim New_adc As Integer
- 'Default = &B10001100 ' ustawienie parametrów pracy, Bez tego rejestru układ ma fabryczne ustawienia
- Addressw = &B10011110 '158; adres zapizu danych dla [ED7]
- Addressr = &B10011111 '159; adres odczytu danych dla [ED7]
- 'Addressw = &B10010110 '150; adres zapizu danych dla [ED3]
- 'Addressr = &B10010111 '151; adres odczytu danych dla [ED3]
- '=====GŁÓWNA PĘTLA=====
- Do
- Gosub Odczyt 'Skoko do procedury odczytu danych
- Cursor Off
- Gosub Wyswietl 'Skok do proceduty wyświetlenia wyniku na LCD
- Waitms 250
- Waitms 250
- Loop
- End
- '=====KONIEC GŁÓWNEJ PĘTLI=====
- '-------PROCEDURA ODCZYTU DANYCH Z ADS1110-----
- Odczyt:
- I2cstart
- I2cwbyte Addressr 'Adres Do Odczytu
- I2crbyte Pomiarh , Ack 'Odczyt Pomiaru
- I2crbyte Pomiarl , Nack
- I2cstop 'Bit Stopu
- Const K = 2.048 / 32768
- New_adc = Makeint(Pomiarl,Pomiarh)
- Napiecie = New_adc * K
- Napiecie = Napiecie + 0.0005
- Return
- '-----PROCEDURA WYŚWIETLENIA WARTOŚCI MIERZONEGO NAPIĘCIA NA LCD-----
- Wyswietl:'Wyświetlenie Pomiaru Na Lcd
- Voltages = Fusing(napiecie , "&&.&&&&") 'Zaokrąglenie Wart. Napięcia
- Locate 1 , 1
- Lcd "ADS1110[ED7] V.4"
- Locate 2 , 1
- Lcd Voltages ; "V "
- Return
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)?