Selecting cheap resistors for a precision voltage divider - Page 1
Forum section: electronics / projects

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 12:23:08 pm
content: In this thread below I've explored component combination simulators: trying different combinations to get a desired target value.https://www.eevblog.com/forum/projects/how-about-combining-some-components/That thread was more about user interface implementations of these simulators, but initially they where ment to be used in scripts to get any (replacement) resistor value, with a decent precision of around 1%-%2.There're simulators for 3 levels of availability:Simulating E-Serie values - matching values on a spec level can be bought (easily)Simulating resistors on stock - matching values on a spec level, that are availableSimulating measured resistors - matching values that actually existsIn this thread I'll be using a combination of Simulating resistors on stock and Simulating measured resistors using scripts, specifically to get an precise voltage divider.The target was set to get an "circumference voltage divider": radius in, circumference / 10 out. Thus a ratio of 2/10 pi which I rounded to 0.628318.For those who ask themselves why I would want to invest this much effort in this. Scripting around electronics is for me a hobby on itself. I like exploring, measuring and puzzle in this way.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 12:38:25 pm
content: I choose 2x the resistor configuration 13 (the best performing configuration on precision when using e12 values). And place 2 of those in series.Another option was to have one part (B) with only 3 resistors. In this way the power dissipation could be a bit more evenly spread.This is important in the case of self heating. Where the resistance of the same material will relatively change differently when power ratio's are different and power is significant. This is a risk to take into account when combining resistors.When choosing the resistor values I purposely choose values with significant power consumption at 10V.

author: Kleinstein
author_rank: Super Contributor
timestamp: May 21, 2022, 12:51:18 pm
content: An important principle in getting a reasonable stable divider from cheap resistors is using multiple equal resistors from the same batch to at least get the approximate value. The fine tuning is than the less critical part. Using a few more resistors can also help in statistical avering way. So for the 0,628 example one could start with 4 and 7 resistors on each side (give a ratio of 0.636 and thus reasonable close). Even if the cheap reasistors have quite some TC, chances are much of it is correlated and the relatice TC can be considerably better. A similar effect applies to drift, at least as long as the porblem is steady drify and not a chance for sudden total failure.The idea of using same value resistors also applies to ready made resistor arrays.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 01:04:52 pm
content: The first simulations where used to get resistor values that:Where on stockWould dissipate less than 50% of their rated power at 10VI solved this by calculating the resistance values (replacement A) in case of maximum allowed power, and in case of best power spread (25% x4).Then repeatedly increasing the replacement values and simulating stock values targetting replacement A and replacement B.Saving optimal combinations each time the actual power consumption (due to non-optimal ratio's) would be OK. After 5 successes this process would stop.The best combinations score well on a metric that takes not only precision, but also power ratio's into account.Provides calculated values - dividerconsumesProvides choosen values - dividerQ_DividerRatioTarget :0,628318V_DividerMax :10,000 VQ_DividerResistorPowerRatioMax :50,000%Q_SimRelativeInputAccuracy :0,1%Q_SimRelativeTargetAccuracy :0,01%Provides specified values - dividerP_DividerResistorMax :250,000 mWChoosenProcess_ComponentCombinationInfointermediateP_DividerResistorTargetMax :125,000 mWP_DividerReplacementResistorTargetMax :500,00 mWR_DividerTotalTargetMin :125,66 ΩIteration 1P_DividerTotalMax :795,8 mWP_ReplacementResistorMaxA :500,0 mWP_ReplacementResistorMaxB :295,8 mWQ_ReplacementResistorPowerRatioMaxA :25,000%Q_ReplacementResistorPowerRatioMaxB :42,26%R_ReplacementResistorTargetA :78,96 ΩR_ReplacementResistorTargetB :46,71 ΩTarget ANon conformity A :5,11Relative weigth A :24,17%Relative weigth B :24,17%Relative weigth C :31,42%Relative weigth D :20,25%..Iteration 11P_DividerTotalMax :488,5 mWP_ReplacementResistorMaxA :306,96 mWP_ReplacementResistorMaxB :181,6 mWQ_ReplacementResistorPowerRatioMaxA :40,72%Q_ReplacementResistorPowerRatioMaxB :68,84%R_ReplacementResistorTargetA :128,61 ΩR_ReplacementResistorTargetB :76,08 ΩTarget ANon conformity A :5,489Relative weigth A :19,11%Relative weigth B :15,93%Relative weigth C :29,23%Relative weigth D :35,72%Target BNon conformity B :5,662Relative weigth A :31,85%Relative weigth B :5,41%Relative weigth C :39,69%Relative weigth D :23,05%Iteration 12P_DividerTotalMax :465,3 mWP_ReplacementResistorMaxA :292,34 mWP_ReplacementResistorMaxB :172,9 mWQ_ReplacementResistorPowerRatioMaxA :42,76%Q_ReplacementResistorPowerRatioMaxB :72,28%R_ReplacementResistorTargetA :135,04 ΩR_ReplacementResistorTargetB :79,88 ΩTarget ANon conformity A :5,453Relative weigth A :33,44%Relative weigth B :20,07%Relative weigth C :26,63%Relative weigth D :19,86%Target BNon conformity B :5,039Relative weigth A :28,07%Relative weigth B :22,46%Relative weigth C :27,28%Relative weigth D :22,19%OptimalIteration :12Nonconformity A :5,453Nonconformity B :5,039providesR_R101_Optimal :180 ΩR_R102_Optimal :300 ΩR_R103_Optimal :56 ΩR_R104_Optimal :680 ΩR_R105_Optimal :120 ΩR_R106_Optimal :150 ΩR_R107_Optimal :36 ΩR_R108_Optimal :360 ΩOpti_TargetA :135,04 ΩOpti_TargetB :79,88 ΩTask "Provides calculated values - divider" was successfully executed (50,75915 s)

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 01:13:10 pm
content: Quote from: Kleinstein on May 21, 2022, 12:51:18 pmThat would be a more practical approachBypassing the "Simulating resistors on stock", the "Simulating measured resistors" fase would still be handy, but I implemented only a maximum of 4 resistors. However fixating 3 resistor values and calculating 4 variable ones, that could get good simulation results as well..A side note:One drawback of combing a equal resistors this way could be, that in case parameterizing the schematic calculations it can cause trouble. In this case the ratio is know, in other cases it might be subject to change.One of the goals of the simulators is to tackle those cases, so that the schematic does not need to structurally change - only its values.

author: MasterT
author_rank: Frequent Contributor
timestamp: May 21, 2022, 02:39:36 pm
content: https://jansson.us/resistors.html

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 09:10:55 pm
content: After the first simulation it was known which resistor specs could be used.Code:R_R101_Optimal : 180 ΩR_R102_Optimal : 300 ΩR_R103_Optimal : 56 ΩR_R104_Optimal : 680 ΩR_R105_Optimal : 120 ΩR_R106_Optimal : 150 ΩR_R107_Optimal : 36 ΩR_R108_Optimal : 360 ΩEach of those specs needed around 10 measured values. Here I could use a "Workbench" script that can operate my devices via SCPI.(PSU, AWG, DMM, Scope) This is mostly done by setting inifile style settings. In this case a DMM6500 with the following settings:Code:Dmm=TCPIP0::dmm::inst0::INSTRWaitBeforeMeasurement=0 sCompareToValue=36 Ω;SenseFunction=DCVoltage|Resistance|Temperature|DCVoltageRatio|ACVoltage|FourWireResistance|CONT|DigitizeVoltage|DCCurrent|Diode|ACFrequency|DigitizeCurrent|ACCurrent|Capacitance|ACPeriodSenseFunction=FourWireResistanceAutoRange=0Range=100 ΩNPLCycles=12 cycleLineSync=1Average=0AutoZero=1AutoDelay=1Only small changes for each new spec are needed (CompareToValue, Range). A single measurement is taken by pressing a single button BT keyboard. This can be done while also holding 2 Kelvin clips.Measurements are reported: (Mistake: I used the dutch version of the script..)Multimeter metingenMeting 1Waarde :35,421 Ω ± 6 mΩVerschil :-579 mΩ ± 6 mΩAbsoluut verschil :579 mΩ ± 6 mΩRelatief verschil :1,634% ± 0,016%Meting 2Waarde :34,972 Ω ± 5 mΩVerschil :-1,028 Ω ± 5 mΩAbsoluut verschil :1,028 Ω ± 5 mΩRelatief verschil :2,940% ± 0,016%Meting 3Waarde :35,269 Ω ± 6 mΩVerschil :-731 mΩ ± 6 mΩAbsoluut verschil :731 mΩ ± 6 mΩRelatief verschil :2,072% ± 0,016%But also saved in a xml-file.Code:<?xml version="1.0" encoding="utf-8" standalone="no"?><Measurements xsi:schemaLocation="urn:schemas-www-wisware.nl-data-visa-measurements Measurements.xsd" xmlns="urn:schemas-www-wisware.nl-data-visa-measurements" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Measurement Identifier="Meting 1" Value="35.421163145483392 Ω ± 5.542116314548339 mΩ"/><Measurement Identifier="Meting 2" Value="34.9717974791970176 Ω ± 5.497179747919702 mΩ"/><Measurement Identifier="Meting 3" Value="35.269157314204416 Ω ± 5.526915731420442 mΩ"/><Measurement Identifier="Meting 4" Value="35.348477335148992 Ω ± 5.534847733514899 mΩ"/><Measurement Identifier="Meting 5" Value="35.3744555930588608 Ω ± 5.537445559305887 mΩ"/><Measurement Identifier="Meting 6" Value="35.3959110878948672 Ω ± 5.539591108789487 mΩ"/><Measurement Identifier="Meting 7" Value="35.3302254434915776 Ω ± 5.533022544349158 mΩ"/><Measurement Identifier="Meting 8" Value="35.311559324765824 Ω ± 5.531155932476583 mΩ"/><Measurement Identifier="Meting 9" Value="35.7066487007243136 Ω ± 5.570664870072432 mΩ"/><Measurement Identifier="Meting 10" Value="35.576831095158464 Ω ± 5.557683109515847 mΩ"/><Measurement Identifier="Meting 11" Value="35.2708770017754368 Ω ± 5.527087700177544 mΩ"/><Measurement Identifier="Meting 12" Value="35.1665278161315264 Ω ± 5.516652781613153 mΩ"/><Measurement Identifier="Meting 13" Value="35.4263189318421824 Ω ± 5.542631893184218 mΩ"/><Measurement Identifier="Meting 14" Value="35.5015522500265664 Ω ± 5.550155225002657 mΩ"/><Measurement Identifier="Meting 15" Value="35.401218083143616 Ω ± 5.540121808314362 mΩ"/><Measurement Identifier="Meting 16" Value="35.3641791893184192 Ω ± 5.536417918931842 mΩ"/><Measurement Identifier="Meting 17" Value="35.315394593523584 Ω ± 5.531539459352358 mΩ"/></Measurements>From the latter precise values can be read again and used in the simulations.129 resistors where measured this way in about 20 min.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 09:19:41 pm
content: The following settings where used to import the measured values. More files can be added. Values can also be used for multiple inputs.The "measured resistors" simulation discards values that already have been used.Code:[ElectronicsTasks.ComponentValuesManager.TargetB.Init]Filename.1=..\004\Measurements.xmlRef.1=120ΩInputs.1=AFilename.2=..\005\Measurements.xmlRef.2=150ΩInputs.2=BFilename.3=..\002\Measurements.xmlRef.3=36ΩInputs.3=CFilename.4=..\008\Measurements.xmlRef.4=360ΩInputs.4=D[ElectronicsTasks.ComponentValuesManager.TargetA.Init]Filename.1=..\006\Measurements.xmlRef.1=180ΩInputs.1=AFilename.2=..\007\Measurements.xmlRef.2=300ΩInputs.2=BFilename.3=..\003\Measurements.xmlRef.3=56ΩInputs.3=CFilename.4=..\009\Measurements.xmlRef.4=680ΩInputs.4=D

author: Zero999
author_rank: Super Contributor
timestamp: May 21, 2022, 09:23:29 pm
content: Quote from: MasterT on May 21, 2022, 02:39:36 pmThat's the site I use. There's no point in using more than three 1% tolerance resistors from the E24 series, in a potential divider. It will always give a value with a much closer tolerance than 1% and it's pointless to get much closer with 1% tolerance parts.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 09:47:37 pm
content: After simulating those values I found out that about all values where lower than specified. This would mean all highest values would be optimal in reaching the target value and even then matching would be poor (resistance wise).However ratio wise these (highest values) combinations where pretty close to the target ratio.But not good enough and a bit to dependend on luck (after bad luck).I could have solved this by introducing extra resistors of one e12 step away. But these would be probably a step to large.This because the weight of the resistors, which are:Code:Target ARelative weigth A : 33,44%Relative weigth B : 20,07%Relative weigth C : 26,63%Relative weigth D : 19,86%Target BRelative weigth A : 28,07%Relative weigth B : 22,46%Relative weigth C : 27,28%Relative weigth D : 22,19%Which also mean how much small (relative) changes of each will contribute to the replacement value. The smallest single step change would be something like:19,86% * 20% / 100 % = 3.972%But because the true target is an precise ratio, there's nothing wrong with scaling the 2 resistance targets.The script does that in small steps (1.001x and 1/1.001x) both ways (to make it usable in other situations as well).After getting optimal targets, this is repeated around these optimal targets with even smaller steps.This resulted in the following report (ratio diff = 1,00000003617322):Ratio diff :1,00000003617322Target A :132,405 Ω ± 13 mΩTarget B :78,32 Ω ± 30 mΩDivider part AA :176,71 Ω ± 20 mΩB :290,78 Ω ± 30 mΩC :55,263 Ω ± 8 mΩD :667,33 Ω ± 70 mΩRelative weigth A :33,178%Relative weigth B :20,162%Relative weigth C :26,819%Relative weigth D :19,841%Source ref A :180Ω:Meting 1Source ref B :300Ω:Meting 8Source ref C :56Ω:Meting 2Source ref D :680Ω:Meting 14Divider part BA :117,873 Ω ± 17 mΩB :145,082 Ω ± 19 mΩC :35,269 Ω ± 6 mΩD :357,43 Ω ± 40 mΩRelative weigth A :27,934%Relative weigth B :22,695%Relative weigth C :27,457%Relative weigth D :21,913%Source ref A :120Ω:Meting 13Source ref B :150Ω:Meting 1Source ref C :36Ω:Meting 3Source ref D :360Ω:Meting 14providesQ_DividerRatio :0,62832R_R101 :176,71 ΩR_R102 :290,78 ΩR_R103 :55,26 ΩR_R104 :667,3 ΩR_R105 :117,87 ΩR_R106 :145,08 ΩR_R107 :35,27 ΩR_R108 :357,43 ΩTask "CalculatedValues_ComponentSimulation" was successfully executed (374,0387 ms)With this the individual resistors can be found and used.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 09:57:58 pm
content: Quote from: Zero999 on May 21, 2022, 09:23:29 pmI've done some precision benchmarking (10.000 simulations) using e12 valueshttps://www.eevblog.com/forum/projects/how-about-combining-some-components/msg4087474/#msg4087474When cherry picking individual resistors, one could get very close. The problem is whether it's stable enough. I guess a voltage divider can get more precise/accurate even with TC included than the used components.I was hoping for 0.1%, but it seems to be better. And that is with very cheap resistors.

author: Zero999
author_rank: Super Contributor
timestamp: May 21, 2022, 10:04:43 pm
content: Quote from: HendriXML on May 21, 2022, 09:57:58 pmI would expect stability would be m more consent over the same resistance range. IF you've got a 1k and 100k resistor, then it probably won't act in your favour the way it would with two 10k resistors.0.1% resistors are cheap, when you consider the time spent messing around,

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 10:09:05 pm
content: After picking the individual resistors I remeasured them using the benchmark script with the following settingsCode:WaitBeforeMeasurement= 0 sMatchWithESerie=E24SenseFunction=FourWireResistanceAutoRange=1NPLCycles=12 cycleLineSync=1Average=0AutoZero=1AutoDelay=1With these settings the nearest e24 value is used to compare the measurement against. (Not needed for these measurements though)Multimeter measurementsR101Value :176,82 Ω ± 20 mΩValue E-serie :180 ΩDifference E-serie :-3,18 Ω ± 20 mΩAbsolute difference E-serie :3,18 Ω ± 20 mΩRelative difference E-serie :1,800% ± 0,012%R102Value :290,93 Ω ± 30 mΩValue E-serie :300 ΩDifference E-serie :-9,07 Ω ± 30 mΩAbsolute difference E-serie :9,07 Ω ± 30 mΩRelative difference E-serie :3,117% ± 0,011%R103Value :55,293 Ω ± 8 mΩValue E-serie :56 ΩDifference E-serie :-707 mΩ ± 8 mΩAbsolute difference E-serie :707 mΩ ± 8 mΩRelative difference E-serie :1,279% ± 0,014%R104Value :667,72 Ω ± 70 mΩValue E-serie :680 ΩDifference E-serie :-12,28 Ω ± 70 mΩAbsolute difference E-serie :12,28 Ω ± 70 mΩRelative difference E-serie :1,839% ± 0,010%R105Value :117,931 Ω ± 17 mΩValue E-serie :120 ΩDifference E-serie :-2,069 Ω ± 17 mΩAbsolute difference E-serie :2,069 Ω ± 17 mΩRelative difference E-serie :1,754% ± 0,014%R106Value :145,152 Ω ± 19 mΩValue E-serie :150 ΩDifference E-serie :-4,848 Ω ± 19 mΩAbsolute difference E-serie :4,848 Ω ± 19 mΩRelative difference E-serie :3,340% ± 0,013%R107Value :35,280 Ω ± 6 mΩValue E-serie :36 ΩDifference E-serie :-720 mΩ ± 6 mΩAbsolute difference E-serie :720 mΩ ± 6 mΩRelative difference E-serie :2,041% ± 0,016%R108Value :357,63 Ω ± 40 mΩValue E-serie :360 ΩDifference E-serie :-2,37 Ω ± 40 mΩAbsolute difference E-serie :2,37 Ω ± 40 mΩRelative difference E-serie :0,664% ± 0,011%They where all a bit off from the initial measurement. Probably due to a temperature difference (1.2 K).These resistors have a high TC.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 10:14:11 pm
content: The PCB design was such that the resistors of part A and part B (of the divider) where mixed.I had been thinking about thermo coupling them some more, but eventually didn't bother with that.

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 10:27:09 pm
content: Finally I could measure the ratio. For that the Workbench script was used with the following settings:Code:WaitBeforeMeasurement=0 sCompareToValue=0.628318MatchWithESerie=E24SenseFunction=DCVoltageRatioAutoRange=1NPLCycles=12 cycleLineSync=1Average=0AutoZero= 1AutoDelay= 1Resulting in this report, measuring 1V increments on the input:Multimeter measurements1VValue :0,62839996295304550400000000000000 ± 0Difference :0,000081962953045411340800000000000000 ± 0Absolute difference :0,000081962953045411340800000000000000 ± 0Relative difference :0,013043118694699171200000000000000% ± 0%2VValue :0,62838020793605836800000000000000 ± 0Difference :0,000062207936058378265600000000000000 ± 0Absolute difference :0,000062207936058378265600000000000000 ± 0Relative difference :0,0098997287426831718400000000000000% ± 0%3VValue :0,62837080755629478400000000000000 ± 0Difference :0,000052807556294776070400000000000000 ± 0Absolute difference :0,000052807556294776070400000000000000 ± 0Relative difference :0,0084038844038828326400000000000000% ± 0%4VValue :0,62835496905920064000000000000000 ± 0Difference :0,000036969059200586681600000000000000 ± 0Absolute difference :0,000036969059200586681600000000000000 ± 0Relative difference :0,0058834673108320140800000000000000% ± 0%5VValue :0,62833842142405388800000000000000 ± 0Difference :0,000020421424053784774400000000000000 ± 0Absolute difference :0,000020421424053784774400000000000000 ± 0Relative difference :0,0032500676956061446400000000000000% ± 0%6VValue :0,62830822357674188800000000000000 ± 0Difference :-0,0000097764232581676326400000000000000 ± 0Absolute difference :0,0000097764232581676326400000000000000 ± 0Relative difference :0,0015559916122876492800000000000000% ± 0%7VValue :0,62827671647082355200000000000000 ± 0Difference :-0,000041283529176427968000000000000000 ± 0Absolute difference :0,000041283529176427968000000000000000 ± 0Relative difference :0,0065709150274304524800000000000000% ± 0%8VValue :0,62822916308786752000000000000000 ± 0Difference :-0,000088836912132461696000000000000000 ± 0Absolute difference :0,000088836912132461696000000000000000 ± 0Relative difference :0,014140844989718582400000000000000% ± 0%9VValue :0,62818043776265536000000000000000 ± 0Difference :-0,00013756223734462392000000000000000 ± 0Absolute difference :0,00013756223734462392000000000000000 ± 0Relative difference :0,021898522952190192000000000000000% ± 0%10VValue :0,62812450745954022400000000000000 ± 0Difference :-0,00019349254045986086400000000000000 ± 0Absolute difference :0,00019349254045986086400000000000000 ± 0Relative difference :0,030804806716178713600000000000000% ± 0%11VValue :0,62806336209636569600000000000000 ± 0Difference :-0,00025463790363433603200000000000000 ± 0Absolute difference :0,00025463790363433603200000000000000 ± 0Relative difference :0,040543346261179641600000000000000% ± 0%Sorry for all the digits. For the ratio function of the DMM I didn't implement uncertainties (lack of documentation if I remember correctly).The performance is around 0.01%, worsening at higher voltages. This could be better when the resistors took the same amount of power.Which where calculated for 10V:CalculatedValues_ComponentSimulationPowerconsumesChoosen values - dividerV_DividerMax :10,000 VintermediateR_Replacement_A :132,41 ΩR_Replacement_B :78,32 ΩR_Replacement_Tot :210,73 ΩP_Replacement_Tot :474,5 mWQ_R101 :20,846%Q_R102 :12,668%Q_R103 :16,851%Q_R104 :12,466%Q_R105 :10,383%Q_R106 :8,435%Q_R107 :10,205%Q_R108 :8,145%providesP_R101 :98,92 mWP_R102 :60,12 mWP_R103 :79,96 mWP_R104 :59,16 mWP_R105 :49,27 mWP_R106 :40,03 mWP_R107 :48,43 mWP_R108 :38,65 mWTask "CalculatedValues_ComponentSimulationPower" was successfully executed (122,3 μs)

author: HendriXML
author_rank: Super Contributor
timestamp: May 21, 2022, 10:33:37 pm
content: Values thats are calculated can be reported to a xml-file, which can be used by my BOM reporter script.In the designator view these values can then be checked against what's in the KiCad schematics.In this case resistance and power values. Normally resistance values are mapped to e-series, so a lot less digits...

author: HendriXML
author_rank: Super Contributor
timestamp: May 22, 2022, 10:42:35 pm
content: After doing this exercise I think simulations targetting a certain divider ratio are maybe more usefull than those targetting a single replacement resistor value.I went through the configurations and transfered them to ratio configurations (leaving out those who don't make sense).Programming wise these could be handled by sub-classes of the transferred configurations. This would make the replacement resistor value, resistor weights etc. also available to the sub-class.The simulations would need the target ratio as a parameter. But IMO also the replacement resistor low/high bounds.

author: HendriXML
author_rank: Super Contributor
timestamp: May 24, 2022, 10:37:19 am
content: There were 2 duplicate configs and some naming inconsistencies.P.S.The way I create high res images out of KiCad svg plot files is via Krita (https://krita.org/en/).

author: HendriXML
author_rank: Super Contributor
timestamp: May 24, 2022, 04:55:53 pm
content: There's one app I'm really fond off on an Android tablet (with s-pen) and that is:Conceptshttps://concepts.app/en/Very usefull when sketching schematics or sketching on imported schematics or just visualizing ideas.It's vector based which makes editing a lot easier. There's also support for layers.Imported images keep their high res and exporting can be high res too.It's very feature rich and is still getting better. Very affordable as well.