Например TDA7294

Форум РадиоКот • Просмотр темы - ATmega8 + OLED SSD1306
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 13, 2025 01:21:03

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 82 ]  1, , , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: ATmega8 + OLED SSD1306
СообщениеДобавлено: Сб июл 03, 2021 19:09:55 
Родился

Зарегистрирован: Вс май 24, 2020 13:27:28
Сообщений: 12
Рейтинг сообщения: 0
Доброго времени суток, Мудрые Радио-Коты! Появилась потребность разобраться в работе дисплея SSD 1306. Примеров конечно много в сети, но вот конкретно по Atmel Studio и что бы с понятным объяснением... Не нашел. Собственно, за целый день попыток сумел дойти только до инициации дисплея. Инициализация вроде как удалась. А вот дальше при попытке что то вывести на дисплей вылезают ошибки, после попытки вызвать LCD_Char(' ');

Мне бы совет: в чем причина? Как исправить? Или может ссылочку на какой нибудь более менее понятный материал?

Изображение Изображение


Вложения:
Комментарий к файлу: Исходник
OLED_SSD_1306.rar [28.23 KiB]
Скачиваний: 427
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс июл 04, 2021 00:23:53 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
А память очищена у дисплея?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс июл 04, 2021 01:35:29 
Друг Кота

Карма: -1
Рейтинг сообщений: 84
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8866
Откуда: .ru
Рейтинг сообщения: 0
Появилась потребность разобраться в работе дисплея SSD 1306.

В другой теме мы подключали всё что попадётся под руку)) Осторожно. Много букав)) :)))
https://www.radiokot.ru/forum/viewtopic ... 8&t=148087
-LCD
-OLED
https://www.youtube.com/watch?v=qWojRM-tjP0
-TFT ILI9341 (контроллер ST7735) 320x240. Режим SPI.
-TFT Nokia 6300 (контроллер MC2PA8201) 320x240. Режим Parallel.
https://www.radiokot.ru/forum/download/ ... ?id=356452
https://www.radiokot.ru/forum/download/ ... ?id=356588
Подключали к компу... выводили на экраны))
https://www.radiokot.ru/forum/download/ ... ?id=367145
https://www.radiokot.ru/forum/download/ ... ?id=356240
https://www.radiokot.ru/forum/download/ ... ?id=356210
...

Но не разу не использовали I2C (TWI) и #include "SSD_1306.h"
Всё писали сами))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс июл 04, 2021 07:26:23 
Родился

Зарегистрирован: Вс май 24, 2020 13:27:28
Сообщений: 12
Рейтинг сообщения: 2
Появилась потребность разобраться в работе дисплея SSD 1306.

Но не разу не использовали I2C (TWI) и #include "SSD_1306.h"
Всё писали сами))
:tea:

SSD_1306.h - это я уже сам так файл обозвал. Там часть писал сам, частично в инете находил. А за ссылки спасибо, интересная информация.

Добавлено after 2 minutes 25 seconds:
А память очищена у дисплея?


Нет, но я так понимаю что даже в случае неочищенной памяти ошибки самой Atmel studio не должно возникать? Очистить это означает "погасить" все точки на дисплее?

Добавлено after 1 hour 40 minutes 30 seconds:
Частично вроде бы разобрался. Но почему то с массивом никак не получается.... каждую буковку отдельно пришлось рисовать. Еще что то непонятное отображается в углу экрана.

Очистка дисплея
Код:
void LCD_Clear(void)//очистка экрана
{
   unsigned short i;
   unsigned short x=0;
   unsigned short y=0;
   LCD_Goto(0,0);
   for (i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++)
   
   //(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)
   {
      
      LCD_Commmand(DataByte, 0x00);
      x ++;
      if(x>SSD1306_LCDWIDTH)
      {
         asm("wdr");
         x =0;
         y++;
         LCD_Goto(0,y);
      }
   }
   
   LCD_X =SSD1306_DEFAULT_SPACE;
   LCD_Y =0;
}




Текст

Код:
LCD_Clear();
   
   
   LCD_Goto(1,1);
   LCD_Commmand(DataByte, 0x7E);  LCD_Commmand(DataByte, 0x11);LCD_Commmand(DataByte, 0x11);LCD_Commmand(DataByte, 0x11);LCD_Commmand(DataByte, 0x7E); //A
   LCD_Goto(10,1);
   LCD_Commmand(DataByte, 0x7F); LCD_Commmand(DataByte,  0x09); LCD_Commmand(DataByte,  0x09); LCD_Commmand(DataByte, 0x09); LCD_Commmand(DataByte, 0x06);//Р   
   LCD_Goto(20,1);
   LCD_Commmand(DataByte, 0x60); LCD_Commmand(DataByte,  0x3E); LCD_Commmand(DataByte,  0x21); LCD_Commmand(DataByte, 0x21); LCD_Commmand(DataByte, 0x7F);//д
   LCD_Goto(30,1);
   LCD_Commmand(DataByte, 0x27); LCD_Commmand(DataByte, 0x48); LCD_Commmand(DataByte, 0x48); LCD_Commmand(DataByte, 0x48); LCD_Commmand(DataByte, 0x3F );//У 
   LCD_Goto(40,1);
   LCD_Commmand(DataByte, 0x7F); LCD_Commmand(DataByte,0x10 ); LCD_Commmand(DataByte, 0x09); LCD_Commmand(DataByte, 0x04); LCD_Commmand(DataByte, 0x7F);//И
   LCD_Goto(50,1);
   LCD_Commmand(DataByte, 0x7F); LCD_Commmand(DataByte, 0x08); LCD_Commmand(DataByte, 0x08); LCD_Commmand(DataByte, 0x08); LCD_Commmand(DataByte, 0x7F );//Н 
   LCD_Goto(60,1);
   LCD_Commmand(DataByte, 0x3E); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x3E);//О
   LCD_Goto(90,1);
   LCD_Commmand(DataByte, 0x22); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x49); LCD_Commmand(DataByte,0x49 ); LCD_Commmand(DataByte,  0x36);//З 
   LCD_Goto(100,1);
   LCD_Commmand(DataByte, 0x40); LCD_Commmand(DataByte, 0x3E); LCD_Commmand(DataByte, 0x01); LCD_Commmand(DataByte, 0x01); LCD_Commmand(DataByte, 0x7F);//Л 
   LCD_Goto(110,1);
   LCD_Commmand(DataByte, 0x3E); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x41); LCD_Commmand(DataByte, 0x3E);//О



P.S. : Про ардуино - шутка. Просто когда ищу информацию про Микроконтроллеры, всегда выползает инфа про ардуино... достало... )))

Изображение


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс июл 04, 2021 08:26:37 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 3
Рейтинг сообщений: 19
Зарегистрирован: Чт май 14, 2015 16:58:00
Сообщений: 35
Откуда: Kharkiv
Рейтинг сообщения: 0
Или может ссылочку на какой нибудь более менее понятный материал?


Делал под STM32, помогла вот эта статья https://radiokot.ru/articles/77/, тут на tiny2313, все заработало.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Пн июл 05, 2021 16:14:59 
Родился

Зарегистрирован: Вс май 24, 2020 13:27:28
Сообщений: 12
Рейтинг сообщения: 0
Спасибо, эту статью уже читал. Я вроде бы уже разобрался во всем... Если кто нибудь будет искать эту же информацию, оставляю тут ссылку на видео, которое лично мне пришлось кстати.



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Пн июл 05, 2021 20:26:05 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Цитата:
Но почему то с массивом никак не получается....

В смысле по указателю на начало массива в EEPROM? На древнем хламе типа атмега8 ничего не получится. Нужны новые AVR или МК с другой архитектурой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Пн июл 05, 2021 23:38:32 
Друг Кота

Карма: -1
Рейтинг сообщений: 84
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8866
Откуда: .ru
Рейтинг сообщения: 3
оставляю тут ссылку на видео, которое лично мне пришлось кстати.

Не уверен что нужно снимать на видео даташит)) По моему проще его прочитать))

И на древнем хламе типа атмега8 OLED SSD1306 прекрасно работает.
(см. выше https://www.youtube.com/watch?v=qWojRM-tjP0 ).
:tea:

Добавлено after 6 minutes 55 seconds:
geonov писал(а):
каждую буковку отдельно пришлось рисовать.

Зачем самому рисовать ?
В инете есть исходники для каждой буковки.
Или посмотрите мои исходники (что выше). Там все буковки уже нарисованы (согласно ASCII).
Вложение:
Win-1251-cvavr-java.png [41.04 KiB]
Скачиваний: 273

:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вт июл 06, 2021 09:11:02 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Да нет никакой проблемы и самому конвертнуть любой шрифт
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс янв 16, 2022 00:25:35 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Добрый вечер. Переписал все библиотеки для дисплейчика SSD1306 128х64 с ардуиновского на чистый С++ATmega328P. Дело конечно кропотное. Прошел весь тест. Всё работает. А вот кто-нибудь подскажет как самому нарисовать картинку и в какой прграмме, я уж всё перепробовал - пиксели рассыпаются. Включая и LCD Vision Evaluation. Картинка BMP 128x64.
Вложение:
cat-logo.png [480 байт]
Скачиваний: 228

Вложение:
IMG_0500.JPG [84.67 KiB]
Скачиваний: 206


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс янв 16, 2022 11:45:40 
Друг Кота

Карма: -1
Рейтинг сообщений: 84
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8866
Откуда: .ru
Рейтинг сообщения: 0
Эйлер Леонард писал(а):
как самому нарисовать картинку и в какой прграмме...

да в любой)) Например я сейчас работаю в Java. Она работает с пикселями...
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс янв 16, 2022 18:40:56 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Привет. Извиняюсь - сам себя заморочил. Дело в том, что SSD1306 использует экранный буфер. Это массив 1024 в котором уже торчит логотип Adafruit Industries. Я хотел его заменить на свой. Готовил массив в разных программах. Пиксели разбегались. Надо смотреть первичное заполнение буфера при инициализации. Вывод - картинка в буфере размещена по особому алгоритму. А так, делаю всякую графику и шрифты в LCD Image Converter "на раз".

P.S. Эх Java! Интернет 56 кбит/с...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Пн янв 17, 2022 00:17:09 
Друг Кота

Карма: -1
Рейтинг сообщений: 84
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8866
Откуда: .ru
Рейтинг сообщения: 0
В соседней теме мы уже делали радиоуправление на ATmega8 + OLED SSD1306 (буфер 128x64/8=1024 байт)
https://www.youtube.com/watch?v=qWojRM-tjP0
:tea:
Рисовали в Java https://www.radiokot.ru/forum/download/ ... ?id=356240
Подключали ATmega8 + OLED SSD1306 к компу https://www.radiokot.ru/forum/download/ ... ?id=367145
Сидим и рисуем... всё что угодно)) Картинки на ATmega8 + OLED SSD1306 дублируются на мониторе компа.
Можно рисовать по Интернету)) Разницы нет.
При чём тут Интернет 56 кбит/с... )) Скорость вообще не важна.
Ещё подключали TFT... https://www.radiokot.ru/forum/download/ ... ?id=356588
Никаких библиотек. Никаких Ардуино. Только ATmega8/ATmega128+ OLED SSD1306.
Всё предельно просто))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Пн янв 17, 2022 17:44:37 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн ноя 04, 2019 09:58:29
Сообщений: 104
Откуда: г. Нижний Тагил Свердл. обл.
Рейтинг сообщения: 0
Цитата:
При чём тут Интернет 56 кбит/с...
Это я к тому, что сам курил Java тот период, лет 15 назад. А проект Ваш очень интересный!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Сб ноя 12, 2022 00:22:27 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн май 04, 2015 12:30:18
Сообщений: 68
Рейтинг сообщения: 0
Доброго времени суток всезнающий ALL!
Помогите разобраться с командами %subj%.
Вот эта статья https://radiokot.ru/articles/77/, а также разные источники интернета расходятся во мнении:
Одни (в том числе и статья на этом ресурсе) предлагают перед каждой командой, в том числе и перед 2х байтовой команды
Пример:
i2c_send(0x80);
i2c_send(0x81);
i2c_send(0x80);
i2c_send(0x7F);
А другие так:
i2c_send(0x80);
i2c_send(0x81);
i2c_send(0x7F);
Как правильно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Сб ноя 12, 2022 06:04:58 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
А мануал на SSD1306 хоть кто-нить хоть когда-нить читает, а? Откройте, посмотрите, там же всё описано, как правильно делать, как чего посылать, дан список команд дисплея и описан интерфейс для варианта I2C
Изображение
В одном сеансе отправки по I2C после формирования start-состояния и посылки байта slave address нужно один раз передать Control Byte (0x80) и остальные команды и байты можно отправлять без Control Byte. Дальше закрыли связь по I2C (stop-состояние), открываете снова (start-состояние и slave address) и отправляете Control Byte (0x00) и затем весь массив данных изображения, закрываете связь (stop-состояние).
Короче говоря, Control Byte передается только при смене типа "команды(в том числе с параметрами)/данные изображения".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс ноя 13, 2022 19:33:46 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн май 04, 2015 12:30:18
Сообщений: 68
Рейтинг сообщения: 0
А мануал на SSD1306 хоть кто-нить хоть когда-нить читает, а? Откройте, посмотрите, там же всё описано, как правильно делать, как чего посылать, дан список команд дисплея и описан интерфейс для варианта I2C
Изображение
В одном сеансе отправки по I2C после формирования start-состояния и посылки байта slave address нужно один раз передать Control Byte (0x80) и остальные команды и байты можно отправлять без Control Byte. Дальше закрыли связь по I2C (stop-состояние), открываете снова (start-состояние и slave address) и отправляете Control Byte (0x00) и затем весь массив данных изображения, закрываете связь (stop-состояние).
Короче говоря, Control Byte передается только при смене типа "команды(в том числе с параметрами)/данные изображения".

А Вы не правы!
do
{
i2c_start();
i2c_send(Disp_addr);
i2c_send(0x80);
i2c_send(0x81);
i2c_send(0x80);
i2c_send(a);
i2c_send(DATA1);
i2c_send(a);
i2c_stop();
_delay_ms(500);
a+=2;
} while (a<253);
a=0;
работает.
Как вы поняли эта программка плавно меняет яркость от 0 до 254 с шагом в 2. А вот если выкинуть i2c_send(0x80) после i2c_send(0x81), то перестает работать.
И еще, Откуда Вы взяли 0x00 для отправки данных? У меня так же 0x00 - не сработало! Работает только 0x40 и 0xC0 - Как описано в выше указанной статье. Правда откуда автор это взял, мне не понятно.
Повторюсь, на просторах интернета натыкался и на ту и на другую версии.
P.S. англицкий я знаю чуть хуже японского. А по японски я не знаю ни одного слова :cry:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс ноя 13, 2022 20:29:50 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
А вы просто невнимательно прочитали. Я ж написал - отправлять Control Byte (0x80) нужно при смене типа "команды дисплея"/"данные изображения" и при начале обмена по I2C. Вы же в каждом шаге открываете и закрываете обмен. А что такое i2c_send(a); 2c_send(DATA1); - непонятно.
Изменение яркости делается отправкой двухбайтной команды [0x81, brightness], где brightness - значение яркости от 0 до 255.
При работе через I2C этой команде предшествует Control Byte, который должен отправляться сразу после начала связи, то есть после состояния Start и посылки Slave Address. Для закрытия связи отправляется состояние Stop.
Изображение

Я конечно давно не пользовался этим дисплейчиком по I2C, надо поднять старые записи, уточнить..

Кстати, да, вот, нашел старый тестовый проект. И там значится, что:
Код:
#define SET_CONTRAST      0x81

#define CMDMODE         0x00
#define DATAMODE         0x40

/** ----------
 * @brief Изменение яркости дисплея.
 * @param value - величина яркости
 * @return Состояние выполнения
 */
uint8_t SSD1306_Brightness(uint8_t value)
{
   uint8_t set[] = {CMDMODE, SET_CONTRAST, value};
   return I2C_MasterWrite(I2C_ADDR, set, sizeof(set));
}

То есть, для режима команд - 0x00, для режима данных - 0x40. Ну да, на память ошибся, давно то было. А увидел у вас чето 0x80, вот и подумал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Вс ноя 13, 2022 21:41:47 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн май 04, 2015 12:30:18
Сообщений: 68
Рейтинг сообщения: 0
0x80 - команда
0x40 - несколько байт данных подряд (все, что после - исключительно данные. Выход - stop)
0xC0 - 1 байт данных (DATA1)
a - 8битная переменная.
Я ее изменяю на 2 и использую в качестве аргумента уровня яркости и потом вывожу на экран как некие данные.
В результате у меня меняется яркость экрана, а внизу ползет некая "бинарная" полоска - для наглядности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8 + OLED SSD1306
СообщениеДобавлено: Ср мар 22, 2023 08:06:28 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пн май 04, 2015 12:30:18
Сообщений: 68
Рейтинг сообщения: 0
Доброго времени суток! Помогите разобраться с командами 0x26, 0x27 и, если не сложно, дайте ссылку на шрифты. Много перерыл, но кроме 6х8 шрифта с русскими буквами не нашел.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 82 ]  1, , , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y