ATtiny85 I2C ЖК

Моя настройка выглядит следующим образом:

  • Arduino IDE 1.6.11
  • Arduino Pro Mini as ISP
  • ATtiny85 1602A LCD с платой I2C

Библиотеки, которые я использую:

  • TinyWireM (источник: https://github.com/adafruit/TinyWireM)
  • LiquidCrystal_I2C (модифицировано для ATtiny) (источник: http://playground.arduino.cc/Code/USIi2c)

Скетч, который я использую для тестирования:

#include <TinyWireM.h>                 
#include <LiquidCrystal_I2C.h>         

LiquidCrystal_I2C lcd(0x3F,16,2);  // установить адрес и 16 символов / 2 строки

void setup()
{

  TinyWireM.begin();                    // инициализировать I2C lib
  lcd.init();                           // инициализация ЖК-дисплея 
  lcd.backlight(); 
  lcd.clear();  // Печать сообщения на ЖК-дисплее.
}

void loop()
{
  lcd.setCursor(0, 0);
  lcd.print("Hello World on Attiny85");
  delay(2000);
}

Адрес 0x3F, я нашел это с помощью скетча сканера, я также протестировал ЖК-дисплей с помощью Arduino Pro Mini напрямую, он отлично работает.

Результатом этой настройки является одна линия черных блоков. Я предполагаю, что инициализация каким-то образом не удалась. Я попробовал некоторые вещи, чтобы заставить его работать:

  • Подтягивания на ПДД и СКЛ
  • Изолирован от Arduino с регулируемым источником питания
  • Настройка контракта с помощью счетчика горшков на задней панели
  • переустановка ПК
  • переустановка Arduino IDE
  • 1MHz, 8MHz, TinyCore default и High-Low Tech
  • Заменен FTDI
  • Заменил Tiny85
  • Заменил ЖК
  • Заменил Arduino Pro Mini

Некоторые фотографии:

back of the display

the blocks

connections

[ПРАВИТЬ]

Окончательный скетч:

#include <TinyWireM.h>                  // I2C Master lib для ATTinys, которые используют USI
// #включить <LiquidCrystal_I2C.h>
#include "LiquidCrystal_attiny.h"
LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {

  // Теперь настройте ЖК-дисплей
  //lcd.begin(16,2); // инициализация
  pinMode(4, OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd.home ();                   // go home
  lcd.print("Weatherstation");
  lcd.setCursor ( 0, 1 ); // перейти в положение
  lcd.print("BMP180");
  delay(2000);
}
void loop() {
  digitalWrite(4, HIGH);
  delay(100);
  digitalWrite(4, LOW);
  delay(100);
}

, 👍7

Обсуждение

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен в чат] (http://chat.stackexchange.com/rooms/46142/discussion-on-question-by-thijs-attiny85-i2c-lcd )., @Nick Gammon

Похоже, вы не подключили линию SCL..... Убедитесь, что вы используете правильные контакты! по умолчанию они имеют значение pin0 для SDA и pin2 для SCL., @Mero55

Пожалуйста, оставляйте дополнительные комментарии в чате выше. Комментарии, размещенные здесь, скорее всего, будут удалены., @Nick Gammon

Просто вопрос, почему вы хотите использовать and ATtiny, когда вы можете просто запрограммировать любой I2C с помощью своего Arduino ??? P.S. Просто пытаюсь учиться, поэтому, пожалуйста, не ненавидьте этот вопрос., @Dat Ha

нет проблем, я пропущу свой обычный ответ с ненавистью :) Ник может возненавидеть-ответьте за то, что вы не используете окно чата, ха-ха. Я выбираю ATtiny вместо Arduino, потому что мой проект будет много спать и использовать источник питания от батареи 3,7 В. ATtiny будет работать неделями / месяцами, а Arduino - днями., @Thijs

потратил слишком много времени на эти устройства, пытаясь заставить их работать, использовать более раннюю версию, шапки, подтягивания, переустановить драйверы USB, модифицированные библиотеки yada yada yada. не тратьте свою жизнь на эти attiny, используйте 328P с предварительно установленным загрузчиком для ваших печатных плат., @royalecraig

в наши дни, возможно, Pi Pico W, работающий под управлением Micropython, является лучшим вариантом для затраченных средств, если высокое энергопотребление не является проблемой., @Thijs


3 ответа


Лучший ответ:

4

После нескольких часов поиска в Google я нашел сообщение в блоге Димитриса Платиса, где он описывает использование ATtiny85 с ЖК-дисплеем I2C. Я отправил парню электронное письмо, и он ответил ссылкой на свою библиотеку LCD I2C ATtiny на GitHub. Используя эту библиотеку с TinyWireM и правильным ядром, она мгновенно заработала.

Моя окончательная настройка - с резистором 4.7K на SDA и SCL, я добавлю окончательный скетч в исходный пост в разделе [EDIT]. Это приключение заняло у меня две недели, так что я надеюсь, что когда-нибудь оно поможет кому-то еще.

Используемая библиотека LCD: https://github.com/platisd/ATtiny85-LCD-library
TinyWireM используется: https://github.com/adafruit/TinyWireM
Используемый сердечник: https://github.com/vprimachenko/ArduinoTiny

,

0

Не похоже, что у вас есть Arduino Pro Mini. Линии I2C на Pro Mini находятся на контактах A4 для SDA и A5 для SCL, и эти 2 контакта расположены в нечетном месте - проверьте картинку.

Надеюсь, я был полезен :)

Arduino Pro Mini pinout

,

Он использует ATtiny85 для общения с ЖК-дисплеем. Другой Arduino предназначен только для программирования - насколько я могу судить., @Nick Gammon

вы правы :) но это не имеет значения, как сказал Ник, это просто программист, @Thijs

У меня есть несколько таких, это дешевые китайские клоны, контакты расположены немного по-другому., @Roberto Lo Giacco


0

Я потратил час на решение этой проблемы и много искал. Если вы все еще не нашли решение, сделав это. Пожалуйста, попробуйте уменьшить тактовую частоту с внутренней 8 МГц до внутренней 1 МГц. Таким образом, он работает мой.

,