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