Ein Beispiel, wie die Master-Funktionen aussehen:

Code:
#include <avr/io.h>
#include "i2cmaster.h"
#include "twi_register.h"

/***************************************
	sendet einen befehl plus parameter
	zum m8-slave
****************************************/
void twi_send( unsigned char befehl, unsigned char parameter )
{
	i2c_start_wait(TWI_ADR+I2C_WRITE);			// verbindung aufbauen
	i2c_write( befehl );						// befehl für den slave
	i2c_write( parameter );						// parameter des befehls
	i2c_stop();									// verbindung beenden
}

/**********************************************
	liest ein port-pinregister vom m8-slave
***********************************************/
unsigned int twi_get( unsigned char befehl )
{
unsigned char c;

	i2c_start_wait(TWI_ADR+I2C_WRITE);			// verbindung aufbauen
	i2c_write( befehl );						// befehl für den slave
	i2c_write( 0 );						        // befehl benötigt keinen parameter
	i2c_rep_start(TWI_ADR+I2C_READ);			// wiederhole start + read
	c = i2c_readNak();							// read byte
	i2c_stop();									// verbindung beenden
	return(c);
}

/**********************************************
	liest einen adc-kanal (2Byte) vom m8-slave
***********************************************/
unsigned int twi_get_adc( unsigned char befehl )
{
unsigned int i,j;

	i2c_start_wait(TWI_ADR+I2C_WRITE);			// verbindung aufbauen
	i2c_write( befehl );						// befehl für den slave
	i2c_write( 0 );						        // befehl benötigt keinen parameter
	i2c_rep_start(TWI_ADR+I2C_READ);			// wiederhole start + read
	i = (unsigned int)i2c_readAck();			// lower byte
	j = (unsigned int)i2c_readNak(); 			// upper byte
	i2c_stop();									// verbindung beenden

	i += (j <<= 8);

	return(i);
}
Für den Master benutze ich die Software i2cmaster.s von Peter Fleury's Homepage (man muss ja nicht immer das Rad neu erfinden).

http://jump.to/fleury

Peter (Ronny10)