Отключение внутренних подтягивающих резисторов i2c
Как это сделать? Я покопался и вижу, что мне следует сделать это и поставить собственные внешние подтягивающие резисторы, но я не знаю, как их отключить. На страницах, которые я читал, нигде не указано, как это сделать.
Я пытаюсь включить I2C между leonardo и uno, но мне кажется, что шина i2c значительно замедляется из-за внутренних подтягивающих резисторов. Я хочу перейти на два резистора 4,7 кОм, но не могу понять, как отключить внутренние. Я знаю, что библиотека Wire включает внутренние резисторы по умолчанию, но как мне отредактировать библиотеку или отключить подтягивающие резисторы в моем скетче?
Возможно, я просто не читал нужные форумы или статьи, но если кто-то мог бы указать мне правильное направление, я был бы очень признателен.
EDIT: Так что проблема, вероятно, в моей настройке или коде, я запишу это здесь. Все, что у меня есть до настройки, это импорт библиотек и переменных, таких как мой mac, ip, заполнители для вывода, pwm и т. д.
Мастер:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while(!Serial){
}
Wire.begin();
Ethernet.begin(mac, ip);
delay(1000);
server.begin();
if(server.available()){
Serial.println("Client Available");
}
}
void loop() {
// put your main code here, to run repeatedly:
ethernetwrite();
}
void ethernetwrite() {
EthernetClient client = server.available();
while(client) {
if(client.find("P")) {
output = client.parseInt();
pwm = client.parseInt();
Serial.println("Begin Transmitting");
Wire.beginTransmission(14);
Wire.write(output);
Wire.write('\t');
Wire.write(pwm);
Wire.endTransmission();
Serial.println("Done Transmitting");
Serial.print(output);
Serial.print('\t');
Serial.println(pwm);
}
}
}
Раб:
void setup() {
Wire.begin(14);
Wire.onReceive(wirewrite);
// * - Base frequencies:
// * o The base frequency for pins 3, 9, 10, and 11 is 31250 Hz.
// * o The base frequency for pins 5 and 6 is 62500 Hz.
// * - Divisors:
// * o The divisors available on pins 5, 6, 9 and 10 are: 1, 8, 64,
// * 256, and 1024.
// * o The divisors available p1on pins 3 and 11 are: 1, 8, 32, 64,
// * 128, 256, and 1024.
// Leg 1
pinMode(leg[1], OUTPUT); setPwmFrequency(leg[1],8); analogWrite(leg[1], offset);
// Leg 2
pinMode(leg[2], OUTPUT); setPwmFrequency(leg[2],8); analogWrite(leg[2], offset);
// Leg 3
pinMode(leg[3], OUTPUT); setPwmFrequency(leg[3],8); analogWrite(leg[3], offset);
// Leg 4
pinMode(leg[4], OUTPUT); setPwmFrequency(leg[4],8); analogWrite(leg[4], offset);
// Mirror
pinMode(leg[0], OUTPUT); setPwmFrequency(leg[0],clkdivisor); analogWrite(leg[0], 255);
}
void loop() {
int time = 10;
time = time*128/clkdivisor;
// box(time, 255, 1); // box(delay time, radius pwm, pwm step size);
// autodisplay();
updateL();
}
void updateL(){
if (output == 0) pwm = 255 - pwm;
switch (output) {
case 1: pin = 3; break;
case 2: pin = 9; break;
case 3: pin = 10; break;
case 4: pin = 11; break;
case 0: pin = 5; break;
}
//if (output < 5) {
analogWrite(pin, pwm);
//}
}
void wirewrite(int numBytes) {
String message;
while(Wire.available()>0) {
char c = Wire.read();
message.concat(c);
}
output = Wire.parseInt();
pwm = Wire.parseInt();
}
Когда я отправляю данные на ведущее устройство, на последовательном мониторе он зависает на первой передаче проводов или на нескольких последующих, а мое ведомое устройство, похоже, не отвечает на сообщение, отправляемое по i2c. Мои элементы управления для моего устройства и настройки работали до моих попыток с библиотекой Wire, так что здесь нет никаких проблем.
EDIT: Я также отправляю сообщение, которое выглядит так: "П1 103" каждые 0,4 секунды или около того, но обычно я не могу пройти дальше первой передачи между ардуинами
@David Tran, 👍2
1 ответ
Из технического описания:
Обратите внимание, что внутренние подтягивающие резисторы в контактных площадках AVR можно включить, установив биты PORT, соответствующие контактам SCL и SDA, как описано в разделе «Порт ввода-вывода».
Чтобы отключить внутренние подтягивания:
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);
или
digitalWrite(2, LOW);
digitalWrite(3, LOW);
- Минимальное значение I2C-подтягивающий резистор для arduino
- Как использовать SPI на Arduino?
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- OVF в последовательном мониторе вместо данных
- ЖК-дисплей I2C отображает странные символы
- Соединение I2C зависает Ведущий если ведомый отключается