Re: čtení napětí z MCP3221 (1ch/12bit)
Tomas Chvatal
tchvatal na fordiag.cz
Úterý Duben 2 10:18:24 CEST 2019
Impedance na vstupu ??
z pdf:
Consequently, a larger source impedance increasesthe offset error, gain
error and integral linearity errors ofthe conversion. Ideally, the
impedance of the signalsource should be near zero. This is achievable
with anoperational amplifier such as the MCP6022, which hasa closed-loop
output impedance of tens of ohms
s přáním hezkého dne / best regards
Tomáš Chvátal
tchvatal na fordiag.cz
----- Původní zpráva -----
Od: <cizek.milan na seznam.cz>
Komu: "'HW-news'" <hw-list na list.hw.cz>
Odesláno: 2. dubna 2019 4:07
Předmět: čtení napětí z MCP3221 (1ch/12bit)
> Ahoj,
> potřeboval bych poradit, protože v bitových operacích nejsem tolik silný,
> hlavně nikde nevidím chybu.
>
> Snažím se přes MCP3221 číst napětí v rozsahu 0-60V.
> MCP3221 Vdd je 3V3 a Vss GND.
> Nějak mi to funguje, ale ne přesně. Jsem cca -0,5V, což mi přijde hodně i
> s
> ohledem na toleranci děliče (47k a 2,74k +-1%).
> Tak hledám chybu v kódu...
>
> Jde mi hlavně o tu část přepočtu value, trochu jsem to celé okomentoval
> pro
> lepší orientaci a daný, řádek, jak jej chápu.
>
> int value = 0x0;
> float voltage = 0.0;
> const float mcp_vdd = 3.3;
>
> // ADC (MCP3221) dělič spočítán na 0-60V
> // vestavěná/pevná přesnost 12 bitů, žádný konfigurační registr, pouze
> read-only čip
> // při Vdd=3.3V (a Vss GND) jsme schopni měřit napětí v rozsahu -0.3V až
> 3.6V (Vss-0.3V a Vdd+0.3V)
> // (approx) PoE-IN Ain
> // 0 0.00 0.00V
> // 2048 30.0 1.65V (1.655V)
> // 4095 60.0 3.31V
>
> value = wiringPiI2CReadReg16(fd, 0x0);
>
> // čteme celé 2 bajty, ale zajímá nás jen 12 spodních bitů (z MSB 4 bity
> a
> z LSB všech 8 bitů)
> // první jsme ale přijali MSB[0] následně LSB[1], takže prohazujeme
> // první závorka vymaskuje spodní bajt a šoupne je o 8 bitů vlevo
> // druhá závorka vymaskuje horní bajt a šoupne ho o 8 bitů vpravo,
> následně se sečtou, prakticky je to tedy záměna pořadí 2 bajtů
> value = (value & 0xFF) << 8 | (value & 0xFF00) >> 8;
>
> // 12bitů = 4096 možností = 2^12; 60/3.3 = 18.18 (max. 60V před děličem
> odpovídá 3V3 za děličem)
> voltage = (float) (mcp_vdd / 4096.0) * value * (60 / mcp_vdd);
>
>
> 17.31V mi měří kód, měřák 17.74V.
> Nemám problém v té úvaze/tabulce? Jestli hodnota 0 v registru neodpovídá
> -0.3V? Díky.
> Milan
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list