Акселерометр AtTiny85 и MMA8452Q не могут подключиться с помощью i2c
Я пытаюсь подключить MMA8452Q к AtTiny85 с помощью библиотеки TinyWireM.
Я сделал правильную аппаратную настройку с подтягиванием выводов SCL и SDA — протестировал на Arduino.
Uno, и это работает, однако, когда я подключаю Tiny, я даже не могу получить рукопожатие.
Следующий код выводит 13
вместо 42
(0x2A)
НАСТРОЙКА ОБОРУДОВАНИЯ
Прорыв MMA8452 ------------ AtTiny85
3,3 В ------- регулятор напряжения ------ 5 В
SDA -----------^^(330)^^----------- PB0 (на программаторе attiny помечен как 5)
SCL -----------^^(330)^^----------- PB3 (на программаторе attiny отмечен как 2)
Земля --------------------------------- Земля
(Я также безуспешно пробовал разные контакты)
КОД
//---связь с консолью bluetooth---//
#include <SoftwareSerial.h>
#define rxPin 1 //не важно - нужен для инициализации
#define txPin A2
SoftwareSerial blueTooth(rxPin, txPin);
// --- //
#include "TinyWireM.h" // Используется для I2C
// Плата SparkFun по умолчанию установлена на 1, устанавливается на 0, если установлена перемычка SA0 в нижней части платы
#define MMA8452_ADDRESS 0x1D // 0x1D, если SA0 высокий, 0x1C, если низкий
#define WHO_AM_I 0x0D
void setup() {
blueTooth.begin(9600);
delay(1000);
TinyWireM.begin(); //Подключаемся к шине как ведущий
delay(1000);
}
void loop() {
byte c =0;
c = readRegister(WHO_AM_I);
blueTooth.println(c);
delay(1000);
}
// Читаем один байт из addressToRead и возвращаем его как байт
byte readRegister(byte addressToRead) {
TinyWireM.beginTransmission(MMA8452_ADDRESS);
TinyWireM.send(addressToRead);
TinyWireM.endTransmission(); //завершить передачу, но оставить соединение активным
TinyWireM.requestFrom(MMA8452_ADDRESS, 1); // Запрашиваем 1 байт, после этого шина освобождается по умолчанию
while(!TinyWireM.available()) ; //ждем возврата данных
return TinyWireM.receive(); //Вернуть этот один байт
}
Кто-нибудь знает, как это сделать правильно?
@Chris, 👍2
Обсуждение2 ответа
используя библиотеку TinyWireM.
Убедитесь, что i2c действительно работает. Библиотеки Arduino, как правило, низкого качества, и то, что кто-то написал их, не означает, что они на самом деле работают. Подключите к шине логический анализатор или осциллограф и посмотрите, что происходит.
Как только вы это подтвердите, получите техническое описание процессора 8452, посмотрите, как он работает, и напишите для него код.
Я попытался сделать то, что вы предложили, а также попытался подключить i2c attiny в качестве ведомого к uno в качестве ведущего. тоже не работал. Как правило , то, что я получаю на осцилляторе, представляет собой некоторый беспорядок, отличный от того, что я получаю при подключении uno. На uno я получаю хорошие прямоугольные сигналы на часах и цифровые сигналы на sda. Я провел несколько тестов и использовал контакты pb0, pb2 и pb3 на attiny для последовательной связи, чтобы контакты работали (я думаю?). Может все-таки проблема в чипе? Кажется, что многим людям удалось использовать TinyWireM в качестве библиотеки i2c... я не знаю, что делать дальше, @Chris
я сканировал устройства i2c, и он обнаруживает устройство i2c по каждому сканируемому адресу... так странно, @Chris
На ATtiny85 контакт 5 (PB0) — это SDA, а контакт 7 (PB2) — это SCL для интерфейса I2C. Вы используете неправильный контакт для SCL.
Кроме того, ваши подтягивающие резисторы слишком мощные. Где-то между 4,7 кОм и 10 кОм рекомендуется для подтяжки на линиях SDA и SCL.
- OVF в последовательном мониторе вместо данных
- I2C с ATtiny85 на частоте 8 МГц с использованием библиотеки TinyWireM
- ATtiny85 I2C ЖК
- Библиотека Wire.h работает на Uno, но не компилируется для ATtiny85
- Связь I2C между Attiny85 в качестве ведущего устройства и Arduino UNO в качестве ведомого устройства
- Какой правильный способ запроса устройства I2C из процедуры обслуживания прерывания?
- Использование MPU-6050 без I2C
- Связь AtTiny44 и AtTiny 85
Подтягивающие резисторы I2C имеют сопротивление от 4,7 кОм до Vcc (при напряжении 5 В). SCL — это PB2 (вывод 7 микросхемы), а SDA — это PB0 (вывод 5 микросхемы)., @Mikael Patel
поменял резисторы. все еще получаю тот же результат, @Chris