Форум РадиоКот • Просмотр темы - Не работает экран OLED 128X64 I2C на SSD1306, что не так?
Сообщения без ответов | Активные темы
Страница 1 из 2
[ Сообщений: 26 ]
,
Автор
Сообщение
DENIS451
Заголовок сообщения: Не работает экран OLED 128X64 I2C на SSD1306, что не так?
Добавлено: Чт окт 04, 2018 21:28:34
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Купил такой дисплей (см. OLED.jpg) тут:
http://ali.onl/16Oi Хочу подключить его к ATmega48PA, нашёл пример работы на этом же сайте
https://www.radiokot.ru/articles/77/ Там пример методом ногодрыга, что меня вполне устраивает, впрочем физически он подключен у меня на макетке на выход
аппаратной шины I2C так что я могу использовать оба варианта.
Выкладываю проект (см. ATmega48P + SSD1306.zip), сделан Atmel Studio 7 + схема Proteus 8.7
Для начала, почему он не хочет работать даже в Протеусе?
Подходящая ли протеуская модель?
Правильно ли подключены выводы в модели экрана, особенно к шине?
Если надо выложить дополнительно скрины пишите, выложу.
Вернуться наверх
Реклама
ozonn
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 10:29:38
Карма: 6
Рейтинг сообщений: 7
Зарегистрирован: Чт янв 21, 2016 15:59:10Сообщений: 522
Рейтинг сообщения: 0
судя по фотке он по TWI работает. Какой еще ногодрыг?
Вернуться наверх
Реклама
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 11:40:30
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Вот листинг примера из
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; }Схема из Протеуса (на осциллографе самое начало передачи на экран ):
Вернуться наверх
Реклама
ozonn
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 12:26:24
Карма: 6
Рейтинг сообщений: 7
Зарегистрирован: Чт янв 21, 2016 15:59:10Сообщений: 522
Рейтинг сообщения: 0
ну, разбирайся в этом ногодрыге сам. Я бы подключил его по TWI и не парился бы
Вернуться наверх
Реклама
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Подробнее>>
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пт окт 05, 2018 14:17:55
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Мне показалось, что так будет проще. А есть примеры подключения такого экрана по TWI на C/C++ в Atmel Studio?
Вернуться наверх
Реклама
Реклама
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Подробнее>>
roman.com
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 13:23:19
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 6878Откуда: .ru
Рейтинг сообщения: 0
А какая разница между ногодрыгом и TWI ? )) В код лезть всем лениво... ))
Вернуться наверх
Реклама
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 14:07:16
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Полезно знать как работать с устройством обоими способами, на случай если у вас много I2C устройств а шина одна, и они между собой начинают глючить или адреса одинаковые, тогда некоторые можно повесить на другие выводы микроконтроллера.
Вернуться наверх
Реклама
roman.com
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 15:09:48
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 6878Откуда: .ru
Рейтинг сообщения: 0
Вернуться наверх
Реклама
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 21:41:44
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Заработало с адресом 0b01111000 но глючно см. скрин (Глючный кот.png)
Выкладываю подправленный проект с которого сделан скрин (ATmega48P + SSD1306 (2).zip)
Каждый раз полоски в другом месте, один раз кот нарисовался нормально, почему так?
Цифры не выводятся вообще, почему?
Снижение частоты ,например, до 8мГц и 4мГц глюки не убирает.
Откуда на линии стробирования SCL берётся такая неравномерность битов
(промежутки плавно сокращаются в каждом байте, см. осциллограф на скрине)
это нормально ?
В железе ничего не работает, хотя если туда прошить другой проект, начинает нормально работать такой экран:
http://ali.onl/16RD (в режиме аппаратного I2C)
В на плате OLED экрана стоит стабилизатор на 3,3v и линии SCL SDA подтянуты к 3,3v резисторами по 10к.
Контроллер ATmega48PA питается от 5v, но должно же работать ?
Вернуться наверх
Реклама
dosikus
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 22:02:53
Друг Кота
Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01Сообщений: 3604
Рейтинг сообщения: 0
Для работы с I2c пины должны быть Open drain или в случае с пЫк/авр его иммитация через DIR/TRIS...
Вернуться наверх
Albert_V
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 23:27:45
Друг Кота
Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12Сообщений: 4119Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
DENIS451 писал(а):
В железе ничего не работает
Какая длительность этого импульса?
Вернуться наверх
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 23:53:36
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
125 наносекунд.
https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf Задержки для I2C шины на 54 странице
Странно, как он у автора примера заработало, в коде задержек вообще нет, наверно Atiny2313 более тормозная.
Кстати, у меня подтягивающие резисторы шины I2C питаются шины +5v, а в реальном железе от +3,3V (они расположена на плате монитора, по 10к , там на входе стабилизатор на 3,3v т.к. реально монитор работает на 3,3v).
Если контроллер работает без сбоев(не включится на выход с высоким уровнем), то напряжение на линиях не превысит 3,3 вольта.
Последний раз редактировалось DENIS451 Вс окт 07, 2018 00:12:38, всего редактировалось 2 раз(а).
Вернуться наверх
Albert_V
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Сб окт 06, 2018 23:56:57
Друг Кота
Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12Сообщений: 4119Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 1
Медали: 5
DENIS451 писал(а):
125 наносекунд.
Здесь я выкладывал документацию на SSD1306 и сам индикатор (не на модуль).
Посмотрите какие должны быть минимальные времена по шине.
Вернуться наверх
afz
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Вс окт 07, 2018 03:52:30
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42Сообщений: 744Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
DENIS451 писал(а):
Странно, как он у автора примера заработало, в коде задержек вообще нет, наверно Atiny2313 более тормозная.
А ты фьюзы в той статье смотрел? Там же (дефолтно) стоит CKDIV8, т.е. CPU работает на 1/8 от частоты встроенного генератора, т.е. на 1 МГц. А так, та тинька, как и твоя 48-я Мега штатно может работать до 20 МГц,ничуть они не тормозные.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Вернуться наверх
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Вс окт 07, 2018 13:09:38
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Добавил задержки, глюки без изменений.
Выкладываю новую версию проекта с задержками (см. 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
Вернуться наверх
VladislavS
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Вс окт 07, 2018 15:34:21
Поставщик валерьянки для Кота
Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47Сообщений: 2479
Рейтинг сообщения: 1
Даю универсальный алгоритм, чтобы запустить управление любой хренью от любой хрени. 1. Качаем даташит на управляемую хрень. Изучаем интерфейс и протокол управления. 2. Качаем даташит на управляющую хрень. Изучаем доступные интерфейсы для подключения. 3. Подключаем одну хрень к другой хрени. 4. Реализуем протокол управления по даташитам. 5. Если не работает, подключаем логический анализатор или осциллограф и переходим к пункту 4. 6. Радуемся. Профит!
Вернуться наверх
ozonn
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пн окт 08, 2018 07:36:51
Карма: 6
Рейтинг сообщений: 7
Зарегистрирован: Чт янв 21, 2016 15:59:10Сообщений: 522
Рейтинг сообщения: 0
Мне показалось, что так будет проще.
ну как же это может быть проще, если ты программно выполняешь то, что можно делать аппаратно?
Вернуться наверх
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пн окт 08, 2018 08:28:09
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Такой вот парадокс человека который только недавно начал изучать микроконтроллеры, проще не то что проще, а то лучше успел выучить! Допустим я хочу сделать приборную панель из 10 таких экранов для детского электромобиля, как их подключить к ATmega48PA по I2C? Вопрос ко всем, глюки протеуской модели экрана у всех такие же, или есть у кого нормально работает?
Вернуться наверх
Albert_V
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Пн окт 08, 2018 08:34:25
Друг Кота
Карма: 90
Рейтинг сообщений: 1859
Зарегистрирован: Чт сен 12, 2013 00:54:12Сообщений: 4119Откуда: ЗаМКАДье. Там, где ЦУП
Рейтинг сообщения: 0
Медали: 5
Если всё будете делать согласно документациям на то что используете - на протеус можно и "забить".
Вернуться наверх
DENIS451
Заголовок сообщения: Re: Не работает экран OLED 128X64 I2C на SSD1306, что не так
Добавлено: Ср окт 10, 2018 23:50:14
Карма: -3
Рейтинг сообщений: -3
Зарегистрирован: Вт сен 09, 2008 18:17:27Сообщений: 213
Рейтинг сообщения: 0
Начал писать вариант проекта с использованием уже аппаратной шины I2C (TWI), и столкнулся с проблемой, ( см. скрин I2C ступенька.png) монитор вдруг утерял способность нормально прижимать линию SDA к земле! Почему так происходит, ногодрыгом ведь работало нормально? Выкладываю весь проект: ATmega48P + SSD1306 (ap.).zip
Вернуться наверх
Страница 1 из 2
[ Сообщений: 26 ]
,
Кто сейчас на форуме
Сейчас этот форум просматривают: Paktok и гости: 25
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения