//
// Differential ADC with Gain Example
// By PEK '2006
//
// Compiler: GCC
// MCU: ATTiny26
// Clock: 1 MHz
//

#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>

// Main
int main(void)
{
	// Setup Ports
	PORTA = 0x00;
	DDRA = 0x00;	// PortA as input
	PORTB = 0x00;
	DDRB = 0xFF;	// PortB as output

	// Setup A/D
	ADMUX = _BV(REFS1) | _BV(ADLAR);	// Internal 2.56V as AREF, Left Adjustment
	ADMUX |= 0b00001011;	// Differential inputs (ADC0 - ADC1) and 20x gain
	ADCSR = _BV(ADEN);	// Enable A/D, prescaler set to 2

	_delay_us(125);	// Need to stabilize the differential channel

	while(1)
	{
		ADCSR |= _BV(ADSC);	// Start conversion
		while(ADCSR & _BV(ADSC));	// Wait for conversion to finish

		PORTB = ADCH;	// The eight most significant bits

		_delay_ms(100);
	}

	return 1;
}

