diff --git a/MyLCD.h b/MyLCD.h new file mode 100644 index 0000000..1584207 --- /dev/null +++ b/MyLCD.h @@ -0,0 +1,22 @@ + +#ifndef MYLCD_H_ +#define MYLCD_H_ + + +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "lcdpcf8574.h" +#include "pcf8574.h" +#include "i2cmaster.h" + + +#endif \ No newline at end of file diff --git a/i2cmaster.h b/i2cmaster.h new file mode 100644 index 0000000..7ce5314 --- /dev/null +++ b/i2cmaster.h @@ -0,0 +1,42 @@ +#ifndef _I2CMASTER_H +#define _I2CMASTER_H + +// , i2c +#define I2C_READ 1 + +// , i2c +#define I2C_WRITE 0 + +// +#define SCL_CLOCK 100000L + +// +void i2c_init(void); + +// +void i2c_stop(void); + +// +unsigned char i2c_start(unsigned char addr); + +// () +unsigned char i2c_rep_start(unsigned char addr); + +// , - , +void i2c_start_wait(unsigned char addr); + + // +unsigned char i2c_write(unsigned char data); + +// +unsigned char i2c_readAck(void); + +// +unsigned char i2c_readNak(void); + +// +unsigned char i2c_read(unsigned char ack); + +// +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); +#endif diff --git a/twimaster.cpp b/twimaster.cpp new file mode 100644 index 0000000..6265ba3 --- /dev/null +++ b/twimaster.cpp @@ -0,0 +1,117 @@ +#include "MyLCD.h" + +// инициализация интерфейса i2c +void i2c_init(void) +{ + // предделитель тактовой частоты равен 1 + TWSR = 0; + // рассчет скорости передачи данных + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; +} + +// передача условия СТАРТ на шину +unsigned char i2c_start(unsigned char address) +{ + uint8_t twst; + + // отправка условия СТАРТ + TWCR = (1<