U8glib.h + 2 дисплея 1306

Migele
Offline
Зарегистрирован: 25.04.2022

есть 2 дисплея LCD1306 на шине I2C и расширители портов на этой же шине.

как с U8glib.h подключиться к этим дисплеям?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Не платах 1306 есть перемычки задающие адрес ?

Если вы с кнопкой справиться не можете, то зачем вы лезете в дебри ???

Migele
Offline
Зарегистрирован: 25.04.2022

Komandir пишет:

Не платах 1306 есть перемычки задающие адрес ?

Если вы с кнопкой справиться не можете, то зачем вы лезете в дебри ???

да, перемычки перепаяны. адреса определяются сканером

Migele
Offline
Зарегистрирован: 25.04.2022

Komandir пишет:

Не платах 1306 есть перемычки задающие адрес ?

Если вы с кнопкой справиться не можете, то зачем вы лезете в дебри ???

вопрос в том, что я не vогу понять, как эта библиотека подключается к конкретному адресу I2C

b707
Offline
Зарегистрирован: 26.05.2017

Migele пишет:

адреса определяются сканером

и какие эти адреса, можете сказать?

Migele пишет:

не vогу понять, как эта библиотека подключается к конкретному адресу I2C

никак. Адрес дисплея зашит в исходнике, для работы с двумя дисплеями только переписывать библиотеку.

Да и вообще эта U8glib супердебильная на мой взгляд, бери другую.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

[quote=b707

Да и вообще эта U8glib супердебильная на мой взгляд, бери другую.

[/quote]

Не, не, не, они друг друга нашли, пусть трахаюца.   :))) 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Библиотека жестко писана под 0x3C. https://github.com/olikraus/u8glib/search?q=I2C_SLA

Migele
Offline
Зарегистрирован: 25.04.2022

Komandir пишет:

Библиотека жестко писана под 0x3C. https://github.com/olikraus/u8glib/search?q=I2C_SLA

We couldn’t find any code matching 'I2C_SLA' in olikraus/u8glib

You could search all of GitHub or try an advanced search.

Migele
Offline
Зарегистрирован: 25.04.2022

понял, спасибо. а варианты есть?

а то 3 дня меня поучали разные .... , а этого никто не сказал. Видимо, как обычно, сами не в курсе были.

Migele
Offline
Зарегистрирован: 25.04.2022

если пробую адафруит, то такая штука получается

http://arduino.ru/comment/reply/17528/348705?quote=1#comment-form

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
b707
Offline
Зарегистрирован: 26.05.2017

Migele пишет:

3 дня меня поучали разные .... , а этого никто не сказал.

а сам посмотреть не мог? Кому это надо, тебе или нам?

Я еще вчера писал на амперке. что библиотека заточена под один адрес.

Migele пишет:

если пробую адафруит, то такая штука получается

повторяю вопрос - какие адреса определяются сканером на дисплеях?

 

Migele
Offline
Зарегистрирован: 25.04.2022

b707 пишет:

Migele пишет:

3 дня меня поучали разные .... , а этого никто не сказал.

а сам посмотреть не мог? Кому это надо, тебе или нам?

Я еще вчера писал на амперке. что библиотека заточена под один адрес.

Migele пишет:

если пробую адафруит, то такая штука получается

повторяю вопрос - какие адреса определяются сканером на дисплеях?

 

я и не знал, что может быть такое , что сделано под конкретный адрес.

0x3C и 0x3D

Migele
Offline
Зарегистрирован: 25.04.2022

на амперке дали совет включить их всех под одним адресом. говорят, у одного товарища подгода назад получилось так работать с 3 дисплеями.

однако, говорят адафруит шустрее, да работает с разными адресами, да и спортивный интерес -почему у меня они не заводятся

lilik
Offline
Зарегистрирован: 19.10.2017

Migele пишет:

на амперке дали совет включить их всех под одним адресом. говорят, у одного товарища подгода назад получилось так работать с 3 дисплеями.

 

Число включаемых дисплеев ограничено только здравым смыслом, а не числом 3.

b707
Offline
Зарегистрирован: 26.05.2017

Migele пишет:

на амперке дали совет включить их всех под одним адресом. говорят, у одного товарища подгода назад получилось так работать с 3 дисплеями.


при этом все три дисплея будут показывать одно и то же.

lilik
Offline
Зарегистрирован: 19.10.2017

b707 пишет:
Migele пишет:

на амперке дали совет включить их всех под одним адресом. говорят, у одного товарища подгода назад получилось так работать с 3 дисплеями.

при этом все три дисплея будут показывать одно и то же.

Конечно, чтоб разное показывали надо аппаратная добавка :)

Например, такая позволяет использовать до 16 штук.

 

Migele
Offline
Зарегистрирован: 25.04.2022

b707 пишет:
Migele пишет:

на амперке дали совет включить их всех под одним адресом. говорят, у одного товарища подгода назад получилось так работать с 3 дисплеями.

при этом все три дисплея будут показывать одно и то же.

я так же думал, но, говорят, что нет. надо пробовать. 

b707
Offline
Зарегистрирован: 26.05.2017

Migele пишет:

я так же думал, но, говорят, что нет. надо пробовать. 

кто говорит?

Если вы про Эйрбаса на амперке - читайте внимательнее. Он отдельно отметил, что у того человека все три дисплея были повторителями - то есть показывали одно и то же.

А в чем проблема подключить два дисплея с разными адресами то?

lilik
Offline
Зарегистрирован: 19.10.2017

Кстати, раз уже пошла тема "много экранов" кроме внешних аппаратных решений через мультиплексор или набор транзисторов http://arduino.ru/forum/proekty/chasy-na-ssd1306-mnogo было бы интересно услышать мнения о вариантах подключений с использованием только ресурса платы с МК. 

Стратегия с размножением данных c вывода SDA на другие пины платы с использованием прерывания (сам не пользовался им ещё :) не прокатит?

 

sadman41
Offline
Зарегистрирован: 19.10.2016
lilik
Offline
Зарегистрирован: 19.10.2017

Интересный вариант, если я правильно понимаю смысл фразы "Выводы, которые будут использоваться для линий управления последовательными данными (SDA) ... , могут быть определены во время выполнения."

Но "всяки-разны" библиотеки для этого экранчика преимущественно завязаны на аппаратном I2C?

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:

Но "всяки-разны" библиотеки для этого экранчика преимущественно завязаны на аппаратном I2C?

с аппаратным TWI значительно проще, потому что он берет на себя рутинную работу по приему-отправке отдельных бит. А весь верхний уровень уже можно написать самому, существенно уменьшив код по сравнению со стандартной Wire.h

sadman41
Offline
Зарегистрирован: 19.10.2016

Если в библиотеку передаётся экземпляр Wire, то, скорее с SoftWire тоже прокатит.

lilik
Offline
Зарегистрирован: 19.10.2017

:)

"Я вот как подумалось": пишем как для одного экранчика на аппаратном варианте, вывод SDA "соединяем с прерыванием" и дублируем данные на выбранный пин, к которому соединён один из нескольких экранчиков. А по значению переменной просто меняем пин по которому пойдут данные - меняем экранчик. Прерывание с этим может справится?  

lilik
Offline
Зарегистрирован: 19.10.2017

Пока над программным способом многоэкранности думал, пришёл аппаратный способ, ещё более простой - с одним развязывающим диодом на экран.

Всё просто, подключить экран к данным - "инпут", отключить - "оутпут".

/////////////////// индикатор "свеча" - тест на несколько экранов через развязывающие диоды
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL);// А4,A5
extern const unsigned char kadr_1[];
extern const unsigned char kadr_2[];
extern const unsigned char kadr_3[];
extern const unsigned char kadr_4[];
extern const unsigned char kadr_5[];
int t=50;//
byte FLAG=1; // 
long Y=0;//

void setup()
{
 myOLED.begin();
 myOLED.invert(0);//инверсия цвета
 
}
void loop()
{
  //////////////////////////////// графика пламени свечи
t=10*random(1,9);
myOLED.drawBitmap(0, 0,kadr_1, 128, 64);// рисование кадра 
myOLED.update();
delay(t); 
myOLED.drawBitmap(0, 0,kadr_2, 128, 64);// рисование кадра 
myOLED.update(); 
delay(t); 
myOLED.drawBitmap(0, 0,kadr_4, 128, 64);// рисование кадра 
myOLED.update();
delay(t); 
myOLED.drawBitmap(0, 0,kadr_1, 128, 64);// рисование кадра 
myOLED.update();
delay(t); 
myOLED.drawBitmap(0, 0,kadr_3, 128, 64);// рисование кадра 
myOLED.update();
delay(t); 
myOLED.drawBitmap(0, 0,kadr_5, 128, 64);// рисование кадра 
myOLED.update();
delay(t);
////////////////////////////////// коммутация экранов поочерёдная
  if(FLAG==1&&millis()-Y>2000){Y=millis();FLAG=2;pinMode(4, INPUT);pinMode(5, INPUT);pinMode(6, INPUT);} 
  if(FLAG==2&&millis()-Y>2000){Y=millis();FLAG=3;pinMode(4, OUTPUT);pinMode(5, INPUT);pinMode(6, INPUT);} 
  if(FLAG==3&&millis()-Y>2000){Y=millis();FLAG=4;pinMode(4, INPUT);pinMode(5,OUTPUT );pinMode(6, INPUT);} 
  if(FLAG==4&&millis()-Y>2000){Y=millis();FLAG=5;pinMode(4, OUTPUT);pinMode(5, OUTPUT);pinMode(6, INPUT);}
  if(FLAG==5&&millis()-Y>2000){Y=millis();FLAG=6;pinMode(4, INPUT);pinMode(5, INPUT);pinMode(6, OUTPUT);} 
  if(FLAG==6&&millis()-Y>2000){Y=millis();FLAG=7;pinMode(4, OUTPUT);pinMode(5, INPUT);pinMode(6, OUTPUT);} 
  if(FLAG==7&&millis()-Y>2000){Y=millis();FLAG=8;pinMode(4, INPUT);pinMode(5,OUTPUT );pinMode(6, OUTPUT);} 
  if(FLAG==8&&millis()-Y>2000){Y=millis();FLAG=1;pinMode(4, OUTPUT);pinMode(5, OUTPUT);pinMode(6, OUTPUT);}  
}

lilik
Offline
Зарегистрирован: 19.10.2017

Призабавнейшее наблюдение: по всем 3 вариантам схем многоэкранности, работает только библиотека вот этого товарища - 

 http://rinkydinkelectronics.com/library.php?id=80

все остальные (отечественные и не очень) работают только с третьим вариантом. Почему???

Моя гипотеза: только в третьем варианте связь I2C возможна обоюдная между МК и экранами и все другие библиотеки по другому не работают. И только у товарища библиотека уникальна, "всепогодна". А как вы думаете?

lilik
Offline
Зарегистрирован: 19.10.2017

Нужно было чуть изменить схему и варианты с <Wire.h>, <iarduino_OLED.h>, <U8g2lib.h> заработали.

А вообще, если использовать удобную <iarduino_OLED.h> то можно (пока не проверял) матрицу экранов сделать.

Хотя с мультиплексором всё проще :)

SLKH
Offline
Зарегистрирован: 17.08.2015

lilik пишет:

А вообще, если использовать удобную <iarduino_OLED.h> то можно (пока не проверял) матрицу экранов сделать.

Запасов волшебного белого дыма хватит?

lilik
Offline
Зарегистрирован: 19.10.2017

На выводы 2-7 только pinMode( disp_N, OUTPUT); и pinMode(disp_N, INPUT); можно "подавать". А так сгореть не должно, линейное управление же работает, должно и матричное :)