From cbe641cb48db912e400884f0988c5b0ee3313674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=94=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=D1=87=D0=B5=D0=B2?= Date: Thu, 28 Sep 2023 14:24:13 +0000 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B0=20?= =?UTF-8?q?i2c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MyLCD.h | 22 ++++++++++ i2cmaster.h | 42 ++++++++++++++++++ twimaster.cpp | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100644 MyLCD.h create mode 100644 i2cmaster.h create mode 100644 twimaster.cpp 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<