MAX127 12 Bit A/D-Wandler am I²C des IO-Warrior

Die Hardware...

... Ansteuerung des MAX127 ...

Dieser Abschnitt fehlt noch, siehe Datenblatt :-)

... und die Programmierung

Hab mir der Bequemlichkeit halber eine Funktion zum Lesen des MAX127 geschrieben. Diese nutzt die I²C-Funktionen meiner libiow und ist daher recht übersichtlich:

int iow_i2c_max127(iowh h, uint8_t i2c_addr, uint8_t chan, int *ret)
{
	uint8_t data[2];
	/* Control Byte: 1CCCRBPP => C=channel, 0-5 Volt RB=0, PP=0 */
	data[0]=0x80|((chan&0x07)<<4);
	/* 0xc0 => generate start and stop bits */
	if(iow_i2c_write(h, i2c_addr, data, 1) < 0) {
		fprintf(stderr, "i2c bus error\n");
		return -1;
	}
	if(iow_i2c_read(h, i2c_addr, data, 2) > 0) {
		*ret=(data[0]<<4)|(data[1]>>4);
	}
	return 0;
}

Das Ganze gibt es auch wieder als Codebeispiel zum download: i2c_max127.c

Achtung, es wird zwingend meine libiow Version 0.9 oder neuer benötigt.
Ältere Versionen funktionieren aufgrund einer anderen (falschen) Interpretation der I²C Adresse nicht