ATtiny85 LM75 I2C

Я хотел бы считать температуру с LM75 с помощью ATtiny85 запуск ядра SpenceKonde и использование TinyWireM библиотека.

Мой логический анализатор не улавливает никакой связи I2C, когда я подключаю его к Arduino Nano, он работает нормально. В Nano нет необходимости в TinyWireM, так что это большая разница.

Поэтому я делаю вывод, что ATtiny85 не говорит с устройством на правильном сленге I2C.

Я также использую SoftwareSerial, и это работает нормально. Это видно в логическом анализаторе.

Библиотека LM75 не предназначена для ATtiny или TinyWireM, я заменяю ссылки Wire на разместить по ссылке TinyWireM.

Можно ли «просто» заменить Wire на TineWireM в библиотеке и можно ли таким образом ожидать получения значимых данных?

[обновленный код]

#include <Arduino.h>
#include <TinyWireM.h>
#include <LM75.h>
#include <SoftwareSerial.h>

#define SOFTWARE_SERIAL_TX_PIN 3
#define SOFTWARE_SERIAL_RX_PIN -1

LM75 sensor;
SoftwareSerial mySerial(SOFTWARE_SERIAL_RX_PIN, SOFTWARE_SERIAL_TX_PIN);

void setup() {
  TinyWireM.begin();
  mySerial.begin(2400);
  mySerial.print("Starting..");
}

void loop() {
delay(1000);
mySerial.println("SO");
mySerial.println(sensor.temp());
delay(1000);
} 

, 👍3

Обсуждение

Не могли бы вы опубликовать свой код?, @Gerben

Я добавил код, который использую для тестирования, @Thijs

Похоже, что в setup() отсутствует вызов TinyWireM.begin(). Также не забудьте подтягивающие резисторы., @Mikael Patel

TinyWireM.begin() является частью библиотеки, и у меня есть подтягивающие устройства, эта настройка работает на Arduino Nano., @Thijs

i2c довольно легко реализовать как аппаратно, так и программно. так что вам может быть полезно просто написать свой собственный., @dannyf

@Thijs Установка не может работать на Nano, поскольку она не поддерживает USI, который является аппаратным модулем ATtiny., @Mikael Patel

Используйте LM35, который является аналогом., @Mert Gülsoy


2 ответа


2

Текущее ядро ATtiny включает библиотеку Wire для оборудования USI, используемого в Tinys. Таким образом, вам не нужно изменять библиотеку LM75, которая подвержена ошибкам.

,

Спасибо, этот фрагмент кода пропал, когда я редактировал вопрос (6 месяцев назад). Проблема остается., @Thijs

Может помочь, если вы обновите код до того, что вы на самом деле используете. Имейте в виду, что вы ничего не увидите в разрешении, которое вы выбрали в логическом анализаторе, поскольку I2C примерно в 50 раз быстрее последовательного порта., @Pylon

Я обновил вопрос шестимесячной давности, на который вы ответили, кодом, который я, возможно, использовал тогда. Но расскажите, пожалуйста, подробнее о скорости I2C., @Thijs

Привет и добро пожаловать в сообщество Arduino SE. Пожалуйста, расширьте свой ответ. Вы выявили некоторые проблемы, но, пожалуйста, обновите свой ответ, указав, как их решить. Например, вы можете продемонстрировать решение с помощью некоторых фрагментов кода и объяснения того, как оно устраняет проблемы, с которыми сталкивается ОП., @sa_leinad


1

Я знаю, что это старый пост, но, надеюсь, эта информация кому-то будет полезна. Я модифицировал библиотеку lm75, заменив все экземпляры Wire на TinyWire, и, как указано выше, ничего не получилось, но оказалось, что подтягивание 10 КБ на SCL / SDA является необходимостью для Attiny 85. По какой-то причине i2c отлично работает на Arduino UNO без pull ИБП, но не на Attiny 85. Короче говоря, добавьте подтягивающие резисторы, и все заработает. Бонусное изображение картофеля Attiny, LM75 и модуля дисплея, показывающего температуру.

,

привет Том, спасибо за ответ и отличную картинку :D не могли бы вы поделиться информацией о своем коде? какую библиотеку и ядро вы использовали, например. Я попробую, но, кажется, у меня тогда были подтягивания.., @Thijs

Я практически просто использовал библиотеку lm75 и TinyWireM, сделал копию библиотеки lm75, переименовал ее в lm75tiny и заменил все экземпляры Wire на TinyWireM. Закончилось этим: #include <TinyWireM.h> #include <lm75tiny.h> Термо TempI2C_LM75 = TempI2C_LM75(0x49,TempI2C_LM75::nine_bits); Затем прочитайте температуру следующим образом: int temp = termo.getTemp(); Единственная проблема: адрес lm75 необходимо подтвердить и обновить для любого датчика, который вы используете. Я думаю, что значение по умолчанию — 0x48, но мой датчик был 0x49., @Tom