Skip to content

wiring_analog.c doesn't properly set REFS2 bit on ATTiny platform(s). #1739

Closed
@nsayer

Description

@nsayer

If you search, you find a lot of folks suggesting the 2.56 volt analog reference with no external bypass cap by using an analogReference value of 6.

That ostensibly works if you look at the ATTiny data sheet... until you look up a bit and notice that the three bits of that value are not next to each other.

The original wiring_analog.c says:

if defined(ADMUX)

    ADMUX = (analog_reference << 6) | (pin & 0x07);

endif

But that shifts the top bit of the analogReference() value out of the byte. The correct thing to do - at least on the ATTiny platform - is

if defined(ADMUX)

    ADMUX = (analog_reference << 6) | (pin & 0x07) | ((analog_reference & 0x4)?0x10:0);

endif

That is, REFS0 is bit 6 in the ADMUX word, REFS1 is bit 7, and REFS2 is bit FOUR.

See 17.13.1 in the ATTiny85 data sheet.

Metadata

Metadata

Assignees

Labels

Component: CoreRelated to the code for the standard Arduino API

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions