#ifndef _I2CMASTER_H
-#define _I2CMASTER_H 1
+#define _I2CMASTER_H
/*************************************************************************
* Title: C include file for the I2C master interface
* (i2cmaster.S or twimaster.c)
-* Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
-* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
-* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
+* Author: Peter Fleury <pfleury@gmx.ch>
+* File: $Id: i2cmaster.h,v 1.12 2015/09/16 09:27:58 peter Exp $
+* Software: AVR-GCC 4.x
* Target: any AVR device
* Usage: see Doxygen manual
**************************************************************************/
-#ifdef DOXYGEN
/**
+ @file
@defgroup pfleury_ic2master I2C Master library
@code #include <i2cmaster.h> @endcode
Replaced the incorrect quarter period delays found in AVR300 with
half period delays.
- @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
-
+ @author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury
+ @copyright (C) 2015 Peter Fleury, GNU General Public License Version 3
+
@par API Usage Example
The following code shows typical usage of this library, see example test_i2cmaster.c
@endcode
*/
-#endif /* DOXYGEN */
+
/**@{*/
/**
@brief initialize the I2C master interace. Need to be called only once
- @param void
@return none
*/
extern void i2c_init(void);
/**
@brief Terminates the data transfer and releases the I2C bus
- @param void
@return none
*/
extern void i2c_stop(void);
/**
@brief read one byte from the I2C device
- Implemented as a macro, which calls either i2c_readAck or i2c_readNak
+ Implemented as a macro, which calls either @ref i2c_readAck or @ref i2c_readNak
@param ack 1 send ack, request more data from device<br>
0 send nak, read is followed by a stop condition
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
/**@}*/
#endif
/*************************************************************************
* Title: I2C master library using hardware TWI interface
* Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
-* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $
+* File: $Id: twimaster.c,v 1.4 2015/01/17 12:16:05 peter Exp $
* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
* Target: any AVR device with hardware TWI
* Usage: API compatible with I2C Software Library i2cmaster.h
#include <i2cmaster.h>
-/* define CPU frequency in Mhz here if not defined in Makefile */
+/* define CPU frequency in hz here if not defined in Makefile */
#ifndef F_CPU
-#define F_CPU 16000000UL
+#define F_CPU 4000000UL
#endif
/* I2C clock in Hz */
-#define SCL_CLOCK 400000L
+#define SCL_CLOCK 100000L
/*************************************************************************
*************************************************************************/
void i2c_init(void)
{
- /* initialize TWI clock
- * minimal values in Bit Rate Register (TWBR) and minimal Prescaler
- * bits in the TWI Status Register should give us maximal possible
- * I2C bus speed - about 444 kHz
- *
- * for more details, see 20.5.2 in ATmega16/32 secification
- */
+ /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
- TWSR = 0; /* no prescaler */
- TWBR = 10; /* must be >= 10 for stable operation */
+ TWSR = 0; /* no prescaler */
+ TWBR = ((F_CPU/SCL_CLOCK)-16)/2; /* must be > 10 for stable operation */
}/* i2c_init */