My setup is as follows:
- Arduino IDE 1.6.11
- Arduino Pro Mini as ISP
- ATTiny85 1602A LCD with I2C board
The libraries I use are:
- TinyWireM (source: https://github.com/adafruit/TinyWireM)
- LiquidCrystal_I2C (modified for ATTiny) (source: http://playground.arduino.cc/Code/USIi2c)
The Sketch I use to test with:
#include <TinyWireM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // set address & 16 chars / 2 lines
void setup()
{
TinyWireM.begin(); // initialize I2C lib
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear(); // Print a message to the LCD.
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Hello World on Attiny85");
delay(2000);
}
The address is 0x3F, I found this using the scanner sketch, I also tested the LCD using the Arduino Pro Mini directly, it works fine.
The result of this setup is a single line of black blocks. My guess is that the initialization failed in some way. I have tried some things to make it work:
- Pull-ups on SDA and SCL
- Isolated from Arduino with regulated power supply
- Setting contract with the pot meter on the back
- reinstall of PC
- reinstall of Arduino IDE
- 1MHz, 8Mhz, TinyCore default and High-Low Tech
- Replaced FTDI
- Replaced Tiny85
- Replaced LCD
- Replaced Arduino Pro Mini
Some pictures:
[EDIT]
Final sketch:
#include <TinyWireM.h> // I2C Master lib for ATTinys which use USI
// #include <LiquidCrystal_I2C.h>
#include "LiquidCrystal_attiny.h"
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
// Now set up the LCD
//lcd.begin(16,2); // initialize the lcd
pinMode(4, OUTPUT);
lcd.init();
lcd.backlight();
lcd.home (); // go home
lcd.print("Weatherstation");
lcd.setCursor ( 0, 1 ); // go to position
lcd.print("BMP180");
delay(2000);
}
void loop() {
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
}
-
Comments are not for extended discussion; this conversation has been moved to chat.Nick Gammon– Nick Gammon ♦2016年10月01日 00:02:03 +00:00Commented Oct 1, 2016 at 0:02
-
It looks like you did not connect the SCL line..... Make sure you're using the correct pins! they default to pin0 for SDA and pin2 for SCL.Mero55– Mero552016年10月01日 14:35:59 +00:00Commented Oct 1, 2016 at 14:35
-
Please post further comments in the chat room above. Comments posted here are likely to be deleted.Nick Gammon– Nick Gammon ♦2016年10月02日 21:29:03 +00:00Commented Oct 2, 2016 at 21:29
-
Just a question, why do you want to use and ATtiny when you can just program any I2C with your Arduino??? P.S. Just trying to learn so no hate for this question please.Dat Ha– Dat Ha2016年10月05日 22:47:10 +00:00Commented Oct 5, 2016 at 22:47
-
no problem, I will skip my usual hate-reply :) Nick may hate-reply for not using the chat box though, haha. I choose the ATTiny over the Arduino because my project will sleep a lot and use a battery 3.7V power source. ATTiny will run for weeks/months vs Arduino for days.Thijs– Thijs2016年10月06日 06:31:04 +00:00Commented Oct 6, 2016 at 6:31
3 Answers 3
After hours of Googling, I found a blog post by Dimitris Platis where he describes using an ATTiny85 with I2C LCD. I emailed the guy and he replied with a link to his LCD I2C ATTiny library on GitHub. Using this library with the TinyWireM and the right core, it instantly worked.
My final setup is with a 4.7K resistor on SDA and SCL, I will add the final sketch in the original post under [EDIT]. This adventure took me two weeks so I hope it helps someone else some day.
LCD library used: https://github.com/platisd/ATtiny85-LCD-library
TinyWireM used: https://github.com/adafruit/TinyWireM
Core used: https://github.com/vprimachenko/ArduinoTiny
It doesn't look like you have an Arduino Pro Mini. I2C lines on a Pro Mini are on pins A4 for SDA and A5 for SCL and those 2 pins are placed at an odd location - check picture.
Hope I was helpful :)
-
2He is using an ATtiny85 to talk to the LCD. The other Arduino is just for programming - as far as I can tell.2016年10月04日 20:06:12 +00:00Commented Oct 4, 2016 at 20:06
-
Well his Arduino seems still not like a Pro Mini so I don't know if it makes a difference.user27130– user271302016年10月04日 20:13:17 +00:00Commented Oct 4, 2016 at 20:13
-
you are right :) but it does not matter, as Nick said it is just a programmerThijs– Thijs2016年10月04日 20:49:23 +00:00Commented Oct 4, 2016 at 20:49
-
I own a few of those, they are cheap Chinese clones, pins are located slightly differently.Roberto Lo Giacco– Roberto Lo Giacco2016年10月04日 23:35:22 +00:00Commented Oct 4, 2016 at 23:35
I've spent an hour doing this problem and searched a lot. If you still didn't find the solution by doing this. Pls try to reduce the clock speed from Internal 8 MHz
to Internal 1MHz
. That way it works mine.