Страница 1 из 2
Не работает экран OLED 128X64 I2C на SSD1306, что не так?
Добавлено: Чт окт 04, 2018 21:28:34
DENIS451
Купил такой дисплей (см. OLED.jpg) тут:
http://ali.onl/16Oi
Хочу подключить его к ATmega48PA, нашёл пример работы на этом же сайте
https://www.radiokot.ru/articles/77/
Там пример методом ногодрыга, что меня вполне устраивает, впрочем физически он подключен у меня на макетке на выход
аппаратной шины I2C так что я могу использовать оба варианта.
Выкладываю проект (см. ATmega48P + SSD1306.zip), сделан Atmel Studio 7 + схема Proteus 8.7
Для начала, почему он не хочет работать даже в Протеусе?
Подходящая ли протеуская модель?
Правильно ли подключены выводы в модели экрана, особенно к шине?
Если надо выложить дополнительно скрины пишите, выложу.
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 10:29:38
ozonn
судя по фотке он по TWI работает. Какой еще ногодрыг?
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 11:40:30
DENIS451
Вот листинг примера из
https://www.radiokot.ru/articles/77/ :
Спойлер
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#define CL_HI DDRA&=~(1<<0) //PORTA.0 = SCL = SCK
#define CL_LOW DDRA|=(1<<0) //PORTA.0
#define DA_HI DDRA&=~(1<<1) //PORTA.1 = SDA
#define DA_LOW DDRA|=(1<<1) //PORTA.1
#define LED_ON PORTD|=(1<<6) //для отладки
#define LED_OFF PORTD&=~(1<<6) //для отладки
#define NAME 0b01111000 //АДРЕС УСТРОЙСТВА НА ШИНЕ
#define DATS 0b01000000 //ПЕРЕДАЧА НЕСКОЛЬКИХ БАЙТ ДАННЫХ
#define DAT 0b11000000 //ПЕРЕДАЧА ОДНОГО БАЙТа ДАННЫХ
#define COM 0b10000000 //ПЕРЕДАЧА ОДНОГО БАЙТа КОМАНДЫ
//МАССИВ ДЛЯ ИНИЦИАЛИЗАЦИИ
//A0 - начало в правом углу; A1 - начало в левом углу
//C0 - начало снизу экрана; C8 - начало сверху экрана
//12 - прямая линия, 02, 22 - линия через строчку
//7F - яркость (максимум 0xFF)
unsigned char PROGMEM init[18]=
{
0xA8,0x3F,0xD3,0x00,0x40,0xA1,0xC8,0xDA,0x12,
0x81,0x7F,0xA4,0xA6,0xD5,0x80,0x8D,0x14,0xAF,
};
//НАДПИСЬ RADIOKOT.RU и РИСУНОК КОТА
unsigned char PROGMEM screen_1[1024]=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xE0, 0x60, 0x60, 0x60, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60, 0x60,
0x60, 0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x60, 0x60, 0x60, 0xE0,
0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
0x80, 0xE0, 0x60, 0x00, 0x00, 0x80, 0xC0, 0xE0,
0x60, 0x60, 0x60, 0xE0, 0xC0, 0x80, 0x00, 0x60,
0x60, 0x60, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60,
0x60, 0xE0, 0xC0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x7F, 0x06, 0x06, 0x1E, 0x7B, 0x73, 0x40,
0x00, 0x78, 0x7F, 0x1F, 0x18, 0x18, 0x1F, 0x7E,
0x70, 0x00, 0x00, 0x7F, 0x7F, 0x60, 0x60, 0x60,
0x70, 0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x00,
0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x70,
0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x07,
0x1F, 0x78, 0x60, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x60, 0x60, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x06,
0x0E, 0x3F, 0x71, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0,
0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xF0, 0xE0, 0xE0, 0xF0, 0x70, 0x70, 0xB0,
0xF0, 0xB0, 0xE0, 0x20, 0xE0, 0x60, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xC0, 0xC0, 0xF0, 0xF0, 0xF8, 0xF8,
0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF,
0xBF, 0xBF, 0xDF, 0xFF, 0xEF, 0xF7, 0xFB, 0xFF,
0xFB, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
0xFD, 0xF7, 0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFC,
0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xBF, 0xFF, 0xCF, 0xF7, 0xFB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x7F, 0x9F, 0xCF, 0xF2, 0xFF, 0xE7, 0xDF, 0x97,
0x37, 0x77, 0xFF, 0xF7, 0xEF, 0xEF, 0xEF, 0xFF,
0xF7, 0xF7, 0xF7, 0xF7, 0xFB, 0xFB, 0xFB, 0xFB,
0xFB, 0xFB, 0xFB, 0xFB, 0xFA, 0xF8, 0xF4, 0xF4,
0xFC, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0x78, 0x38,
0x98, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0xDF, 0xFB, 0xFC, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF,
0xF7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F,
0xDC, 0x5A, 0x54, 0x7F, 0x5F, 0x5F, 0x5F, 0x7F,
0x5F, 0x3F, 0xFF, 0xB3, 0xF9, 0xF3, 0xFF, 0xFF,
0xDF, 0xFF, 0xFF, 0xF3, 0xF9, 0xB3, 0x7F, 0x3F,
0x7F, 0x5F, 0x7F, 0x5F, 0x5F, 0x7C, 0x54, 0x91,
0x90, 0xA0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF,
0xF7, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0xFF, 0xFD, 0xFD, 0xF7, 0xFE, 0xDF, 0xBE, 0xFF,
0x7E, 0x7F, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0x7E, 0x7F, 0xBE, 0x1F, 0x6E, 0x43, 0xC1, 0x80,
0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x3F, 0x3F,
0x3F, 0x7F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, 0x7F,
0x7F, 0x7F, 0x7F, 0x3F, 0x7F, 0x3F, 0x1F, 0x1F,
0x0F, 0x0F, 0x17, 0x1B, 0x1E, 0x1F, 0x0F, 0x0F,
0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x14, 0x30,
0x20, 0x20, 0x30, 0x1A, 0x0E, 0x0E, 0x0E, 0x0F,
0x1F, 0x17, 0x13, 0x18, 0x18, 0x08, 0x09, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
//ЦИФРЫ
unsigned char PROGMEM DIGIT[5][24]=
{
{
0x00, 0x00, 0x00, 0x30, 0x30, 0xF8, 0xF8, 0x00, //1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x18, 0x1F, 0x1F, 0x18, 0x18, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x98, 0xF8, //2
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
0x1E, 0x1B, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0x30, 0x98, 0x98, 0x98, 0x98, 0xF8, //3
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x19,
0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0x00, 0xC0, 0xF0, 0x38, 0xF8, 0xF8, //4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
0x06, 0x06, 0x1F, 0x1F, 0x06, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0xF8, 0xF8, 0x98, 0x98, 0x98, 0x98, //5
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x19,
0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
},
};
//СТАРТ
void START (void)
{
DA_HI;
CL_HI;
DA_LOW;
CL_LOW;
}
//СТОП
void STOP (void)
{
DA_LOW;
CL_HI;
DA_HI;
}
//ПЕРЕДАЧА БАЙТА и АСК
void SEND (unsigned char data)
{
unsigned char k;
for(k=8;k>0;k--)
{
if(data&(1<<(k-1)))
{
CL_LOW;
DA_HI;
CL_HI;
CL_LOW;
}
else
{
CL_LOW;
DA_LOW;
CL_HI;
CL_LOW;
}
}
//ACK
DA_HI;
CL_HI;
if(!(PINA&(1<<1)))
CL_LOW;
}
//ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ
void OLED_INIT (void)
{
unsigned char k;
START();
SEND(NAME);
for(k=0;k<18;k++)
{
SEND(COM);
SEND(pgm_read_byte(init+k));
}
STOP();
}
//ОЧИСТКА ЭКРАНА ДИСПЛЕЯ
void CLR_SCR (void)
{
unsigned char k, kk;
START();
SEND(NAME);
//выбираем Horizontal Addressing Mode (заполнение экрана по типу того как читаем книгу)
SEND(COM);
SEND(0x20);
SEND(COM);
SEND(0x00);
//заполняем строку слева направо
SEND(DATS);
for(kk=0;kk<8;kk++)
{
for(k=0;k<128;k++) SEND(0x00); //LSB вверху, MSB снизу
}
STOP();
}
int main (void)
{
unsigned int k;
unsigned char kk;
CLKPR=0x80;
CLKPR=0x00; //предделитель отключён, рабочая частота 8 MHz
PORTA=0x00; //РА0 будет SCK, РА1 будет SDA
DDRA =0x00;
PORTD=0b00100000; //настройки СИДА для отладки, так можно обнулять
DDRD =0b01000000; //настройки СИДА для отладки, так можно обнулять
PORTB=0x00; //на всякий случай
DDRB =0x00; //на всякий случай
ACSR=0x80; //отключение компаратора для уменьшения потребления тока
_delay_ms(500); //пауза перед инициализацией - у меня очень нестабильное включение питания
OLED_INIT(); //инициализация дисплея
CLR_SCR(); //очистка экрана дисплея
while(1)
{
//рисуем кота
START();
SEND(NAME); //посыл адреса+0
SEND(DATS);
for(k=0;k<1024;k++) SEND(pgm_read_byte(screen_1+k));
STOP();
_delay_ms(2000);
//последовательно выводим цифры от 1-го до 5-ти
while(1)
{
for(kk=0;kk<5;kk++)
{
START();
SEND(NAME);
SEND(COM);
SEND(0x21); //Set Column Address (21h)
SEND(COM);
SEND(115); //будем выводить между 115...
SEND(COM);
SEND(126); //...и 126 колонками
SEND(COM);
SEND(0x22); //Set Page Address (22h)
SEND(COM);
SEND(6); //Будем крутиться между 6-ой...
SEND(COM);
SEND(7); //...и 7-ой страницами (строчками)
SEND(DATS);
for(k=0;k<12;k++) SEND(pgm_read_byte(DIGIT[kk]+k)); //рисуем верхнюю часть цифры
for(k=12;k<24;k++) SEND(pgm_read_byte(DIGIT[kk]+k)); //рисуем нижнюю часть цифры
STOP();
_delay_ms(1000);
}
}
}
return 0;
}
Схема из Протеуса (на осциллографе самое начало передачи на экран ):
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 12:26:24
ozonn
ну, разбирайся в этом ногодрыге сам. Я бы подключил его по TWI и не парился бы
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 14:17:55
DENIS451
Мне показалось, что так будет проще.
А есть примеры подключения такого экрана по TWI на C/C++ в Atmel Studio?
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 13:23:19
roman.com
А какая разница между ногодрыгом и TWI ? )) В код лезть всем лениво... ))
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 14:07:16
DENIS451
Полезно знать как работать с устройством обоими способами, на случай если у вас много I2C устройств а шина одна,
и они между собой начинают глючить или адреса одинаковые, тогда некоторые можно повесить на другие выводы микроконтроллера.
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 15:09:48
roman.com
-
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 21:41:44
DENIS451
Заработало с адресом 0b01111000 но глючно см. скрин (Глючный кот.png)
Выкладываю подправленный проект с которого сделан скрин (ATmega48P + SSD1306 (2).zip)
Каждый раз полоски в другом месте, один раз кот нарисовался нормально, почему так?
Цифры не выводятся вообще, почему?
Снижение частоты ,например, до 8мГц и 4мГц глюки не убирает.
Откуда на линии стробирования SCL берётся такая неравномерность битов
(промежутки плавно сокращаются в каждом байте, см. осциллограф на скрине)
это нормально ?
В железе ничего не работает, хотя если туда прошить другой проект, начинает нормально работать такой экран:
http://ali.onl/16RD (в режиме аппаратного I2C)
В на плате OLED экрана стоит стабилизатор на 3,3v и линии SCL SDA подтянуты к 3,3v резисторами по 10к.
Контроллер ATmega48PA питается от 5v, но должно же работать ?
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 22:02:53
dosikus
Для работы с I2c пины должны быть Open drain или в случае с пЫк/авр его иммитация через DIR/TRIS...
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 23:27:45
Albert_V
DENIS451 писал(а):В железе ничего не работает
Какая длительность этого импульса?

Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 23:53:36
DENIS451
125 наносекунд.
https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
Задержки для I2C шины на 54 странице
Странно, как он у автора примера заработало, в коде задержек вообще нет, наверно Atiny2313 более тормозная.
Кстати, у меня подтягивающие резисторы шины I2C питаются шины +5v, а в реальном железе от +3,3V (они расположена на плате монитора, по 10к , там на входе стабилизатор на 3,3v т.к. реально монитор работает на 3,3v).
Если контроллер работает без сбоев(не включится на выход с высоким уровнем), то напряжение на линиях не превысит 3,3 вольта.
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 23:56:57
Albert_V
DENIS451 писал(а):125 наносекунд.
Здесь я выкладывал документацию на SSD1306 и сам индикатор (не на модуль).
Посмотрите какие должны быть минимальные времена по шине.
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Вс окт 07, 2018 03:52:30
afz
DENIS451 писал(а):Странно, как он у автора примера заработало, в коде задержек вообще нет, наверно Atiny2313 более тормозная.
А ты фьюзы в той статье смотрел? Там же (дефолтно) стоит CKDIV8, т.е. CPU работает на 1/8 от частоты встроенного генератора, т.е. на 1 МГц. А так, та тинька, как и твоя 48-я Мега штатно может работать до 20 МГц,ничуть они не тормозные.
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Вс окт 07, 2018 13:09:38
DENIS451
Добавил задержки, глюки без изменений.
Выкладываю новую версию проекта с задержками (см. ATmega48P + SSD1306 (3).zip)
Вроде тайминги I2C не где не нарушены, подозрительное место - ответ экрана, девятый строб в датаграмме
в конце посылки каждого байта. (надо скачивать проект и смотреть в Протеусе)
Листинг кода этого проекта:
Спойлер
#ifndef MAIN_H_
#define MAIN_H_
#define F_CPU 20000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
//----------------------------------------------------------------
#include <avr/pgmspace.h>
#define CL_HI DDRC&=~(1<<5) //PORTC.5 = SCL = SCK
#define CL_LOW DDRC|=(1<<5) //PORTC.5
#define DA_HI DDRC&=~(1<<4) //PORTC.4 = SDA
#define DA_LOW DDRC|=(1<<4) //PORTC.4
#define NAME 0b01111000 //АДРЕС УСТРОЙСТВА НА ШИНЕ
#define DATS 0b01000000 //ПЕРЕДАЧА НЕСКОЛЬКИХ БАЙТ ДАННЫХ
#define DAT 0b11000000 //ПЕРЕДАЧА ОДНОГО БАЙТа ДАННЫХ
#define COM 0b10000000 //ПЕРЕДАЧА ОДНОГО БАЙТа КОМАНДЫ
//МАССИВ ДЛЯ ИНИЦИАЛИЗАЦИИ
//A0 - начало в правом углу; A1 - начало в левом углу
//C0 - начало снизу экрана; C8 - начало сверху экрана
//12 - прямая линия, 02, 22 - линия через строчку
//7F - яркость (максимум 0xFF)
const unsigned char PROGMEM init[18]=
{
0xA8,0x3F,0xD3,0x00,0x40,0xA1,0xC8,0xDA,0x12,
0x81,0x7F,0xA4,0xA6,0xD5,0x80,0x8D,0x14,0xAF,
};
//НАДПИСЬ RADIOKOT.RU и РИСУНОК КОТА
const unsigned char PROGMEM screen_1[1024]=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xE0, 0x60, 0x60, 0x60, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xE0, 0xE0, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60, 0x60,
0x60, 0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x80, 0xC0, 0xE0, 0x60, 0x60, 0x60, 0xE0,
0xC0, 0x80, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00,
0x80, 0xE0, 0x60, 0x00, 0x00, 0x80, 0xC0, 0xE0,
0x60, 0x60, 0x60, 0xE0, 0xC0, 0x80, 0x00, 0x60,
0x60, 0x60, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x60, 0x60,
0x60, 0xE0, 0xC0, 0x00, 0x00, 0xE0, 0xE0, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7F, 0x7F, 0x06, 0x06, 0x1E, 0x7B, 0x73, 0x40,
0x00, 0x78, 0x7F, 0x1F, 0x18, 0x18, 0x1F, 0x7E,
0x70, 0x00, 0x00, 0x7F, 0x7F, 0x60, 0x60, 0x60,
0x70, 0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x00,
0x00, 0x1F, 0x3F, 0x70, 0x60, 0x60, 0x60, 0x70,
0x3F, 0x1F, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x07,
0x1F, 0x78, 0x60, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x60, 0x60, 0x00, 0x00, 0x7F, 0x7F, 0x06, 0x06,
0x0E, 0x3F, 0x71, 0x40, 0x00, 0x1F, 0x3F, 0x70,
0x60, 0x60, 0x70, 0x3F, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0,
0xC0, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xF0, 0xE0, 0xE0, 0xF0, 0x70, 0x70, 0xB0,
0xF0, 0xB0, 0xE0, 0x20, 0xE0, 0x60, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xC0, 0xC0, 0xF0, 0xF0, 0xF8, 0xF8,
0xFC, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF,
0xBF, 0xBF, 0xDF, 0xFF, 0xEF, 0xF7, 0xFB, 0xFF,
0xFB, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
0xFD, 0xF7, 0xAF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFC,
0xFC, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0,
0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xBF, 0xFF, 0xCF, 0xF7, 0xFB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x7F, 0x9F, 0xCF, 0xF2, 0xFF, 0xE7, 0xDF, 0x97,
0x37, 0x77, 0xFF, 0xF7, 0xEF, 0xEF, 0xEF, 0xFF,
0xF7, 0xF7, 0xF7, 0xF7, 0xFB, 0xFB, 0xFB, 0xFB,
0xFB, 0xFB, 0xFB, 0xFB, 0xFA, 0xF8, 0xF4, 0xF4,
0xFC, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0x78, 0x38,
0x98, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0xDF, 0xFB, 0xFC, 0xFE, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF,
0xF7, 0xFF, 0xFF, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F,
0xDC, 0x5A, 0x54, 0x7F, 0x5F, 0x5F, 0x5F, 0x7F,
0x5F, 0x3F, 0xFF, 0xB3, 0xF9, 0xF3, 0xFF, 0xFF,
0xDF, 0xFF, 0xFF, 0xF3, 0xF9, 0xB3, 0x7F, 0x3F,
0x7F, 0x5F, 0x7F, 0x5F, 0x5F, 0x7C, 0x54, 0x91,
0x90, 0xA0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF,
0xF7, 0xFD, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0xFF, 0xFD, 0xFD, 0xF7, 0xFE, 0xDF, 0xBE, 0xFF,
0x7E, 0x7F, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
0x7E, 0x7F, 0xBE, 0x1F, 0x6E, 0x43, 0xC1, 0x80,
0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x3F, 0x3F,
0x3F, 0x7F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, 0x7F,
0x7F, 0x7F, 0x7F, 0x3F, 0x7F, 0x3F, 0x1F, 0x1F,
0x0F, 0x0F, 0x17, 0x1B, 0x1E, 0x1F, 0x0F, 0x0F,
0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x1F, 0x0F, 0x0F, 0x0F, 0x1F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x14, 0x30,
0x20, 0x20, 0x30, 0x1A, 0x0E, 0x0E, 0x0E, 0x0F,
0x1F, 0x17, 0x13, 0x18, 0x18, 0x08, 0x09, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
//ЦИФРЫ
const unsigned char PROGMEM DIGIT[5][24]=
{
{
0x00, 0x00, 0x00, 0x30, 0x30, 0xF8, 0xF8, 0x00, //1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
0x18, 0x1F, 0x1F, 0x18, 0x18, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0x30, 0x18, 0x18, 0x18, 0x98, 0xF8, //2
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C,
0x1E, 0x1B, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0x30, 0x98, 0x98, 0x98, 0x98, 0xF8, //3
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x19,
0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0x00, 0xC0, 0xF0, 0x38, 0xF8, 0xF8, //4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
0x06, 0x06, 0x1F, 0x1F, 0x06, 0x00, 0x00, 0x00,
},
{
0x00, 0x00, 0xF8, 0xF8, 0x98, 0x98, 0x98, 0x98, //5
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x19,
0x19, 0x19, 0x19, 0x1F, 0x0F, 0x00, 0x00, 0x00,
},
};
//----------------------------------------------------------------
#endif /* MAIN_H_ */
Спойлер
//===========
#include "main.h"
//===========
void START (void) //СТАРТ
{
DA_HI;
CL_HI;
DA_LOW;
_delay_us(1); //подобрать
CL_LOW;
}
void STOP (void) //СТОП
{
DA_LOW;
CL_HI;
_delay_us(1); //подобрать
DA_HI;
}
void SEND (unsigned char data) //ПЕРЕДАЧА БАЙТА и АСК
{
unsigned char k;
for(k=8;k>0;k--)
{
if(data&(1<<(k-1)))
{
CL_LOW;
DA_HI;
_delay_us(1); //подобрать
CL_HI;
_delay_us(1); //подобрать
CL_LOW;
}
else
{
CL_LOW;
DA_LOW;
_delay_us(1); //подобрать
CL_HI;
_delay_us(1); //подобрать
CL_LOW;
}
}
_delay_us(1); //подобрать
//ACK
DA_HI;
_delay_us(1); //подобрать
CL_HI;
_delay_us(1); //подобрать
if(!(PINC&(1<<4)))
CL_LOW;
_delay_us(3); //подобрать
}
void OLED_INIT (void) //ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ
{
unsigned char k;
START();
SEND(NAME);
for(k=0;k<18;k++)
{
SEND(COM);
SEND(pgm_read_byte(init+k));
}
STOP();
}
void CLR_SCR (void) //ОЧИСТКА ЭКРАНА ДИСПЛЕЯ
{
unsigned char k, kk;
START();
SEND(NAME);
//выбираем Horizontal Addressing Mode (заполнение экрана по типу того как читаем книгу)
SEND(COM);
SEND(0x20);
SEND(COM);
SEND(0x00);
//заполняем строку слева направо
SEND(DATS);
for(kk=0;kk<8;kk++)
{
for(k=0;k<128;k++) SEND(0x00); //LSB вверху, MSB снизу
}
STOP();
}
void migalka (void)
{
for (unsigned int i =0; i<3; i++)
{
PORTB |= (1<<i);
_delay_ms(500);
PORTB &= ~(1<<i);
}
}
int main(void)
{
DDRB = 0b00000111;
PORTB = 0b00000000;
migalka(); //однократно мигаем тремя светодиодами по очереди
while(1)
{
unsigned int k;
unsigned char kk;
// CLKPR=0x80;
// CLKPR=0x00; //предделитель отключён, рабочая частота 8 MHz
PORTC=0x00; //РC5 будет SCK, РC4 будет SDA
DDRC =0x00;
// PORTD=0b00100000; //настройки СИДА для отладки, так можно обнулять
// DDRD =0b01000000; //настройки СИДА для отладки, так можно обнулять
//
// PORTB=0x00; //на всякий случай
// DDRB =0x00; //на всякий случай
//
// ACSR=0x80; //отключение компаратора для уменьшения потребления тока
_delay_ms(500); //пауза перед инициализацией - у меня очень нестабильное включение питания
OLED_INIT(); //инициализация дисплея
CLR_SCR(); //очистка экрана дисплея
//рисуем кота
START();
SEND(NAME); //посыл адреса+0
SEND(DATS);
for(k=0;k<1024;k++) SEND(pgm_read_byte(screen_1+k));
STOP();
_delay_ms(2000);
while(1)
{
//-------------------------------------------------------------------------
PORTB |= (1<<0); // Мигает светодиодом на PB0 перед каждой цифрой
_delay_ms(500);
PORTB &= ~(1<<0);
_delay_ms(500);
//--------------------------------------------------------------------------
for(kk=0;kk<5;kk++)
{
START();
SEND(NAME);
SEND(COM);
SEND(0x21); //Set Column Address (21h)
SEND(COM);
SEND(115); //будем выводить между 115...
SEND(COM);
SEND(126); //...и 126 колонками
SEND(COM);
SEND(0x22); //Set Page Address (22h)
SEND(COM);
SEND(6); //Будем крутиться между 6-ой...
SEND(COM);
SEND(7); //...и 7-ой страницами (строчками)
SEND(DATS);
for(k=0;k<12;k++) SEND(pgm_read_byte(DIGIT[kk]+k)); //рисуем верхнюю часть цифры
for(k=12;k<24;k++) SEND(pgm_read_byte(DIGIT[kk]+k)); //рисуем нижнюю часть цифры
STOP();
_delay_ms(1000);
}
}
//--------------------------------------------------------------
}
}
Добавлено after 2 hours 1 minute 52 seconds:
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так?
Оказывается проект ATmega48P + SSD1306 (3).zip работает на реальном железе:
http://kazus.ru/forums/attachment.php?a ... 1538912237
Спасибо Albert_V, видимо после увеличения таймингов заработал.
Кто будет использовать код, задержки там избыточны, лучше написать свою функцию задержки на основе количества
пропуска циклов и подобрать ориентируясь на осциллограф в Протеусе, а лучше аппаратный, если есть.
Видимо, глюк Протеуса, такое уже было с другим экраном
http://kazus.ru/forums/showthread.php?p ... ost1218538
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Вс окт 07, 2018 15:34:21
VladislavS
Даю универсальный алгоритм, чтобы запустить управление любой хренью от любой хрени.
1. Качаем даташит на управляемую хрень. Изучаем интерфейс и протокол управления.
2. Качаем даташит на управляющую хрень. Изучаем доступные интерфейсы для подключения.
3. Подключаем одну хрень к другой хрени.
4. Реализуем протокол управления по даташитам.
5. Если не работает, подключаем логический анализатор или осциллограф и переходим к пункту 4.
6. Радуемся.
Профит!
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пн окт 08, 2018 07:36:51
ozonn
[uquote="DENIS451",url="/forum/viewtopic.php?p=3473635#p3473635"]Мне показалось, что так будет проще.[/uquote]
ну как же это может быть проще, если ты программно выполняешь то, что можно делать аппаратно?
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пн окт 08, 2018 08:28:09
DENIS451
Такой вот парадокс человека который только недавно начал изучать микроконтроллеры, проще не то что проще, а то лучше успел выучить!
Допустим я хочу сделать приборную панель из 10 таких экранов для детского электромобиля, как их подключить к ATmega48PA
по I2C?
Вопрос ко всем, глюки протеуской модели экрана у всех такие же, или есть у кого нормально работает?
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пн окт 08, 2018 08:34:25
Albert_V
Если всё будете делать согласно документациям на то что используете - на протеус можно и "забить".
Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Ср окт 10, 2018 23:50:14
DENIS451
Начал писать вариант проекта с использованием уже аппаратной шины I2C (TWI), и столкнулся с проблемой,
( см. скрин I2C ступенька.png) монитор вдруг утерял способность нормально прижимать линию SDA к земле!
Почему так происходит, ногодрыгом ведь работало нормально?
Выкладываю весь проект: ATmega48P + SSD1306 (ap.).zip