Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 25.03.2024, 16:21  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Тут дело не в лагах дисплея, а в проценте времени, которое тратится на выгрузку данных в дисплей.
Например, при скорости SPI 10 МГц выгрузка одного текстового символа размером 6х8 пикс займет... эээ... прикидываю... порядка 90 мкс (учитывая установку координат окна отрисовки и формат цвета RGB565 (2 байта на пиксель) ). Пусть будут 100 текстовых символов - это порядка 9 мс, что в принципе то практически незаметно на глаз. Но эти 9 мс, затраченные на общение с дисплеем, могут достаточно сильно затормозить работу остальной программы. Пока задачи невысоки и не требуется много вычислений, это не представляет проблемы.
Реклама:
NewWriter вне форума  
Непрочитано 25.03.2024, 16:43  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Сообщение от NewWriter Посмотреть сообщение
это не представляет проблемы.
Ну вот так и я есть я пока не разрабатываю каких то сложных устройств с кучей периферии, пока что у мне этого за глаза, я только на пути изучения, конечно я в курсе того что куча МК в том числе и от st которые давно превосходят 128 мегу, но он относительно легкий, и мне для моих целей его более чем достаточно
Devil Byte вне форума  
Непрочитано 25.03.2024, 21:35  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Вообще-то, графика, пусть даже и в виде текста, это весьма обширная область, требующая не столько знания микроконтроллера, сколько общего владения языком программирования, знания его инструментария.
За несколько лет я много раз переписывал варианты работы с графикой. А когда перешел на С++, снова пришлось всё переписывать в новом ключе, и опять по нескольку раз меняя концепцию и внося правки.
Поэтому здесь нужно точно понимать, что пишешь, а не так, что "ой, я хотел в два раза масштабировать, а получилось както раза в четыре..."
NewWriter вне форума  
Непрочитано 27.03.2024, 12:28  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

В общем дисплей работатет но ни как не могу подобрать шрифт.
Неокторый софт для генерации шрифта не смог запустить, так как требует устаревшие фреймворки. А у меня win11, а интернет практически нулевой.
Запустился только GLCD FONT CREATOR, он как то странно генерирует шрифт.

Вот пример шрифта 8х16, который работает
Нажмите, чтобы открыть спойлер
PHP код:
/* Includes ------------------------------------------------------------------*/
#include "AsciiLib.h"


#ifdef ASCII_9X18_System
static unsigned char const AsciiLib[11][16] = 
{
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  ,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/

{0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,0x3B,0x3B  ,0x33,0x1E,0x00,0x00,0x00,0x00},/*"0",16*/

{0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,0x0C,0x0C  ,0x0C,0x0C,0x00,0x00,0x00,0x00},/*"1",17*/

{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30  ,0x60,0x7E,0x00,0x00,0x00,0x00},/*"2",18*/

{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,0x06,0x66  ,0x66,0x3C,0x00,0x00,0x00,0x00},/*"3",19*/

{0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,0x66,0x7F  ,0x06,0x06,0x00,0x00,0x00,0x00},/*"4",20*/

{0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x06,0x06  ,0x0C,0x78,0x00,0x00,0x00,0x00},/*"5",21*/

{0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,0x66,0x66  ,0x66,0x3C,0x00,0x00,0x00,0x00},/*"6",22*/

{0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30  ,0x30,0x30,0x00,0x00,0x00,0x00},/*"7",23*/

{0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,0x6E,0x66  ,0x66,0x3C,0x00,0x00,0x00,0x00},/*"8",24*/

{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3E,0x0C  ,0x18,0x38,0x00,0x00,0x00,0x00},/*"9",25*/
};

#endif





/**************************************************  *****************************
* Function Name  : GetASCIICode
* Description    : 
* Input          : 
* Output         : 
* Return         : None
* Attention         : None
**************************************************  *****************************/
void GetASCIICode(unsigned charpBuffer,unsigned char ASCII)
{  
   
memcpy(pBuffer,AsciiLib[(ASCII 32)] ,16);
}


/**************************************************  **************************************************  *****
      END FILE
**************************************************  **************************************************  *****/ 


И функции для отрисовки
Нажмите, чтобы открыть спойлер
PHP код:
void PutCharuint16_t Xposuint16_t Yposuint8_t ASCIuint16_t charColoruint16_t bkColor )
{
    
    
uint16_t ij;
    
uint8_t buffer[16], tmp_char;
    
    
LCD_WriteReg(0x210,Xpos);     //x start point
    
LCD_WriteReg(0x212,Ypos);     //y start point
    
LCD_WriteReg(0x211,Xpos+7);    //x end point
    
LCD_WriteReg(0x213,Ypos+15);    //y end point

    
LCD_WriteReg(0x200,Xpos);    //RAM X address(0 ~ FF, actually 0 ~ EF)
    
LCD_WriteReg(0x201,Ypos);    //RAM Y address(0 ~ 1FF, actually 0 ~ 13F)
    
    
LCD_WriteIndex(0x202);    //RAM Write index
    
    
LCD_CS_L();
    
LCD_RS_H();
    
    
GetASCIICode(buffer,ASCI);
    for(
i=0;i16;i++)
    {
        
tmp_char buffer[i];
        for(
j=0;j8;j++)
        {
            if( (
tmp_char ›› j) & 0x01 == 0x01 )
            
LCD_WriteData(charColor);
            else
            
LCD_WriteData(bkColor);

        }
    }

    
LCD_CS_H();
}

/**************************************************  ****************************
* Function Name  : GUI_Text
* Description    : 
* Input          : - Xpos: 
*                  - Ypos: 
*                           - str:
*                           - charColor:
*                           - bkColor:
* Output         : None
* Return         : None
* Attention         : None
**************************************************  *****************************/
void GUI_Text(uint16_t Xposuint16_t Yposuint8_t *str,uint16_t Coloruint16_t bkColor)
{
    
uint8_t TempChar;
    do
    {
        
TempChar = *str++;
        
PutCharXposYposTempCharColorbkColor );
        if( 
Xpos ‹ MAX_X )
        {
            
Xpos += 8;;
        }
        else if ( 
Ypos ‹ MAX_Y)
        {
            
Xpos 0;
            
Ypos += 16;
        }
        else
        {
            
Xpos 0;
            
Ypos 0;
        }
        
    }
    while ( *
str != );


Они настроены как раз для 8х16. ПОжалуйста помогите сделать увеличенный шрифт, например 16х32. Так как в шрифтах сделал GLCF в массиве символа больше элементов чем должно быть
Devil Byte вне форума  
Непрочитано 27.03.2024, 12:51  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Шрифт - вообще не проблема. Берешь, и рисуешь или готовое для начала, а потом сам дорисуешь. Скажем, вот так выглядит буква "Ы":
Код:
    // 0xF9 - Ы
     ,
          13,
          ________,________,
          ________,________,
          XX______,__XX____,
          XX______,__XX____,
          XX______,__XX____,
          XX______,__XX____,
          XX______,__XX____,
          XXXXXXX_,__XX____,
          XXXXXXXX,__XX____,
          XX____XX,X_XX____,
          XX_____X,X_XX____,
          XX____XX,X_XX____,
          XXXXXXXX,__XX____,
          XXXXXXX_,__XX____,
          ________,________,
          ________,________
И места лишнего не занимает во флеше, т.к. я использую таблицу перекодировки, что позволяет вообще в любой последовательности буквы рисовать - абы потом в нужное место таблицы подставил.
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 27.03.2024, 13:09  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Массив данных для цифр от 0 до 9.
Высота 24, ширина 16, байты лежат горизонтально (по строкам), старший бит вначале.
Нажмите, чтобы открыть спойлер

// Character bitmaps for Bahnschrift 24pt
const uint8_t bahnschrift_24ptBitmaps[] =
{
// @0 '0' (16 pixels wide)
0x0F, 0xC0, // ######
0x3F, 0xE0, // #########
0x7F, 0xF0, // ###########
0x78, 0x78, // #### ####
0x70, 0x38, // ### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0xF0, 0x38, // #### ###
0x70, 0x38, // ### ###
0x78, 0x78, // #### ####
0x7F, 0xF0, // ###########
0x3F, 0xE0, // #########
0x0F, 0xC0, // ######

// @46 '1' (16 pixels wide)
0x03, 0xC0, // ####
0x0F, 0xC0, // ######
0x1F, 0xC0, // #######
0x1F, 0xC0, // #######
0x19, 0xC0, // ## ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x01, 0xC0, // ###

// @92 '2' (16 pixels wide)
0x07, 0xC0, // #####
0x1F, 0xF0, // #########
0x3F, 0xF8, // ###########
0x78, 0x78, // #### ####
0x70, 0x3C, // ### ####
0x70, 0x3C, // ### ####
0x00, 0x3C, // ####
0x00, 0x38, // ###
0x00, 0x38, // ###
0x00, 0x78, // ####
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x03, 0xC0, // ####
0x07, 0x80, // ####
0x07, 0x80, // ####
0x0F, 0x00, // ####
0x1E, 0x00, // ####
0x3C, 0x00, // ####
0x3C, 0x00, // ####
0x7F, 0xFC, // #############
0x7F, 0xFC, // #############
0x7F, 0xFC, // #############

// @138 '3' (16 pixels wide)
0x07, 0xC0, // #####
0x1F, 0xF0, // #########
0x3F, 0xF0, // ##########
0x38, 0x78, // ### ####
0x78, 0x38, // #### ###
0x70, 0x38, // ### ###
0x00, 0x38, // ###
0x00, 0x38, // ###
0x00, 0x38, // ###
0x00, 0x70, // ###
0x03, 0xF0, // ######
0x03, 0xC0, // ####
0x03, 0xF0, // ######
0x00, 0x78, // ####
0x00, 0x38, // ###
0x00, 0x3C, // ####
0x00, 0x1C, // ###
0xF0, 0x1C, // #### ###
0x70, 0x3C, // ### ####
0x78, 0x78, // #### ####
0x3F, 0xF8, // ###########
0x1F, 0xF0, // #########
0x0F, 0xC0, // ######

// @184 '4' (16 pixels wide)
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x03, 0x80, // ###
0x03, 0x80, // ###
0x07, 0x00, // ###
0x07, 0x00, // ###
0x0F, 0x1C, // #### ###
0x0E, 0x1C, // ### ###
0x1E, 0x1C, // #### ###
0x1C, 0x1C, // ### ###
0x3C, 0x1C, // #### ###
0x38, 0x1C, // ### ###
0x78, 0x1C, // #### ###
0x7F, 0xFF, // ###############
0x7F, 0xFF, // ###############
0x7F, 0xFF, // ###############
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###

// @230 '5' (16 pixels wide)
0x3F, 0xF8, // ###########
0x3F, 0xF8, // ###########
0x3F, 0xF8, // ###########
0x38, 0x00, // ###
0x38, 0x00, // ###
0x38, 0x00, // ###
0x38, 0x00, // ###
0x3B, 0xE0, // ### #####
0x3F, 0xF0, // ##########
0x3F, 0xF8, // ###########
0x3C, 0x78, // #### ####
0x38, 0x3C, // ### ####
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x00, 0x1C, // ###
0x78, 0x1C, // #### ###
0x38, 0x3C, // ### ####
0x3C, 0x78, // #### ####
0x1F, 0xF8, // ##########
0x1F, 0xF0, // #########
0x07, 0xC0, // #####

// @276 '6' (16 pixels wide)
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x01, 0xC0, // ###
0x03, 0x80, // ###
0x03, 0x80, // ###
0x07, 0x00, // ###
0x07, 0x00, // ###
0x0E, 0x00, // ###
0x0F, 0xE0, // #######
0x1F, 0xF8, // ##########
0x1F, 0xFC, // ###########
0x3C, 0x3C, // #### ####
0x3C, 0x1C, // #### ###
0x38, 0x1C, // ### ###
0x38, 0x1E, // ### ####
0x38, 0x1E, // ### ####
0x38, 0x1C, // ### ###
0x3C, 0x1C, // #### ###
0x3C, 0x3C, // #### ####
0x1F, 0xF8, // ##########
0x0F, 0xF8, // #########
0x07, 0xE0, // ######

// @322 '7' (16 pixels wide)
0x3F, 0xFC, // ############
0x3F, 0xFC, // ############
0x3F, 0xFC, // ############
0x38, 0x1C, // ### ###
0x38, 0x3C, // ### ####
0x38, 0x38, // ### ###
0x00, 0x38, // ###
0x00, 0x78, // ####
0x00, 0x70, // ###
0x00, 0x70, // ###
0x00, 0xF0, // ####
0x00, 0xF0, // ####
0x00, 0xE0, // ###
0x00, 0xE0, // ###
0x01, 0xE0, // ####
0x01, 0xC0, // ###
0x01, 0xC0, // ###
0x03, 0xC0, // ####
0x03, 0xC0, // ####
0x03, 0x80, // ###
0x03, 0x80, // ###
0x07, 0x80, // ####
0x07, 0x00, // ###

// @368 '8' (16 pixels wide)
0x07, 0xE0, // ######
0x0F, 0xF0, // ########
0x1F, 0xF8, // ##########
0x3C, 0x3C, // #### ####
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x38, 0x1C, // ### ###
0x3C, 0x3C, // #### ####
0x1F, 0xF8, // ##########
0x0F, 0xF0, // ########
0x1F, 0xF8, // ##########
0x3C, 0x3C, // #### ####
0x78, 0x1E, // #### ####
0x70, 0x0E, // ### ###
0x70, 0x0E, // ### ###
0x70, 0x0E, // ### ###
0x78, 0x1E, // #### ####
0x3C, 0x3C, // #### ####
0x3F, 0xFC, // ############
0x1F, 0xF8, // ##########
0x07, 0xE0, // ######

// @414 '9' (16 pixels wide)
0x07, 0xE0, // ######
0x0F, 0xF8, // #########
0x1F, 0xF8, // ##########
0x1C, 0x3C, // ### ####
0x3C, 0x1C, // #### ###
0x38, 0x1C, // ### ###
0x38, 0x1E, // ### ####
0x38, 0x1E, // ### ####
0x38, 0x1C, // ### ###
0x3C, 0x1C, // #### ###
0x3C, 0x3C, // #### ####
0x1F, 0xFC, // ###########
0x0F, 0xF8, // #########
0x07, 0xF8, // ########
0x00, 0x70, // ###
0x00, 0x70, // ###
0x00, 0xE0, // ###
0x00, 0xE0, // ###
0x01, 0xC0, // ###
0x03, 0xC0, // ####
0x03, 0x80, // ###
0x07, 0x80, // ####
0x07, 0x00, // ###
};



Еще один шрифт высотой 24, но с выравниванием байтов по вертикали (по столбцам)
Нажмите, чтобы открыть спойлер

// Character bitmaps for Disket Mono 24pt
const uint8_t disketMono_24ptBitmaps[] =
{
// @0 '0' (17 pixels wide)
// ############
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ## ##
// ## ## ##
// ## ## ##
// ## ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,

// @51 '1' (17 pixels wide)
// #########
// #########
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ################
// ################
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00,

// @102 '2' (17 pixels wide)
// ###########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##
// ##
// ##
// ############
// ############
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ################
// ################
0x78, 0x7E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00,
0xE0, 0xF8, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x07, 0x01, 0x00,
0x3F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00,

// @153 '3' (17 pixels wide)
// ##########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##
// ##
// ###
// ###########
// ###########
// ###
// ##
// ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0x78, 0x7E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, 0x00,
0x80, 0x80, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0xFF, 0xF3, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,

// @204 '4' (17 pixels wide)
// ######
// ######
// ### ##
// ### ##
// #### ##
// #### ##
// #### ##
// ### ##
// ### ##
// ### ##
// #### ##
// #### ##
// ### ##
// #################
// #################
// ##
// ##
// ##
// ##
// ##
// ##
// ##
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0x78, 0x3C, 0x1F, 0x07, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00,
0x78, 0x7C, 0x7E, 0x6F, 0x67, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xFF, 0xFF, 0x60, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00,

// @255 '5' (17 pixels wide)
// ################
// ################
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// #############
// ###############
// ##
// ##
// ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ###########
0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00,
0x8F, 0x8F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xE0, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x07, 0x00,

// @306 '6' (17 pixels wide)
// ###########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##
// ##
// ##
// #############
// ###############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ############
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x7E, 0x78, 0x00,
0xFF, 0xFF, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0xF8, 0xE0, 0x00,
0x07, 0x1F, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1F, 0x07, 0x00,

// @357 '7' (17 pixels wide)
// ################
// ################
// ##
// ##
// ##
// ###
// ###
// ###
// ####
// ###
// ###
// ###
// ###
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
// ##
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0xC3, 0xE3, 0x7F, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

// @408 '8' (17 pixels wide)
// ############
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ### ###
// ##############
// ##############
// ### ###
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFE, 0xF8, 0x00,
0xF3, 0xFF, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0xFF, 0xF3, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,

// @459 '9' (17 pixels wide)
// ###########
// ##############
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ###############
// #############
// ##
// ##
// ##
// ## ##
// ## ##
// ## ##
// ## ##
// ## ##
// ##############
// ##########
0xF8, 0xFE, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8, 0x00,
0x81, 0x87, 0x06, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFF, 0xFF, 0x00,
0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07, 0x00,
};

Миниатюры:
Нажмите на изображение для увеличения
Название: Screenshot_20240327_150902.jpg
Просмотров: 0
Размер:	162.1 Кб
ID:	180883  
NewWriter вне форума  
Непрочитано 28.03.2024, 12:31  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Сообщение от NewWriter Посмотреть сообщение
Массив данных
Не могу понять, почему в том битмапе что у меня есть - Размер символа 8x16 и соответственно в массиве для оной цифры 16 элементов. А в Вашем гораздо больше чем 24 элемента в одной цифре, у меня это не срабатывает(. Видимо это из за того что у меня аскилиб

Последний раз редактировалось Devil Byte; 28.03.2024 в 12:37.
Devil Byte вне форума  
Непрочитано 28.03.2024, 13:09  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Да нет, просто массив шрифта представляем собой битовую маску, упакованную в байты. Каждый бит в байте - это монохромный пиксель маски. Там, где бит 1, там отрисовывается цвет чернил, там, где бит 0, там будет отрисован цвет фона.
Символ 8х16 пикселей в этой битовой маске имеет 1 байт в ширину и 16 байт в высоту, итого 16 байт.
Символ 16х24 пикселя имеет 2 байта в ширину и 24 байта в высоту, итого 48 байт.
Символ 17х24 пикселя имеек 17 бит ширины, а это не кратно 8 битам, поэтому по ширине будет 3 байта, а не 2.

Направление укладки байтов может быть как по ширине, так и по высоте. Вот так выглядит битовая маска с укладкой байтов по горизонтали по х.
Миниатюры:
Нажмите на изображение для увеличения
Название: sketch-1711631797862_071800.png
Просмотров: 0
Размер:	159.9 Кб
ID:	180900  

Последний раз редактировалось NewWriter; 28.03.2024 в 17:20.
NewWriter вне форума  
Непрочитано 30.03.2024, 13:09  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 83
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Сообщение от NewWriter Посмотреть сообщение
Направление укладки байтов
В общем взял ваш шрифт в котором биты уложены по вертикали. внес их в библиотеку вместо своих. поправил размер в функции вывода. Но получаю мусор на экране(как будто он гигантские пиксели рисует)(((((
Хотя я ароде добавлял символ пробела даже
Вот библиотека:
Нажмите, чтобы открыть спойлер
PHP код:
#include "AsciiLib.h"


#ifdef ASCII_9X18_System
static unsigned char const AsciiLib[10][51] = 
{
    
// @0 '0' (17 pixels wide)

    
{0xF80xFE0x070x030x030x030x030x030x030x030x030x030x030x070xFE0xF80x00,
    
0xFF0xFF0x000x000x000x000x000x1E0x1E0x000x000x000x000x000xFF0xFF0x00,
    
0x070x1F0x180x300x300x300x300x300x300x300x300x300x300x180x1F0x070x00},

    
// @51 '1' (17 pixels wide)

    
{0x030x030x030x030x030x030x030xFF0xFF0x000x000x000x000x000x000x000x00,
    
0x000x000x000x000x000x000x000xFF0xFF0x000x000x000x000x000x000x000x00,
    
0x300x300x300x300x300x300x300x3F0x3F0x300x300x300x300x300x300x300x00},

    
// @102 '2' (17 pixels wide)

    
{0x780x7E0x060x030x030x030x030x030x030x030x030x030x030x070xFE0xF80x00,
    
0xE00xF80x180x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x060x070x010x00,
    
0x3F0x3F0x300x300x300x300x300x300x300x300x300x300x300x300x300x300x00},

    
// @153 '3' (17 pixels wide)

    
{0x780x7E0x060x030x030x030x030x030x030x030x030x030x030x060xFE0xF80x00,
    
0x800x800x000x000x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x1E0xFF0xF30x00,
    
0x070x1F0x180x300x300x300x300x300x300x300x300x300x300x180x1F0x070x00},

    
// @204 '4' (17 pixels wide)

    
{0x000x000x000x000xC00xE00xF00x780x3C0x1F0x070x030x030xFF0xFF0x000x00,
    
0x780x7C0x7E0x6F0x670x610x600x600x600x600x600x600x600xFF0xFF0x600x60,
    
0x000x000x000x000x000x000x000x000x000x000x000x000x000x3F0x3F0x000x00},

    
// @255 '5' (17 pixels wide)

    
{0xFF0xFF0x030x030x030x030x030x030x030x030x030x030x030x030x030x030x00,
    
0x8F0x8F0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x180xF80xE00x00,
    
0x070x1F0x180x300x300x300x300x300x300x300x300x300x300x380x1F0x070x00},

    
// @306 '6' (17 pixels wide)
    
    
{0xF80xFE0x070x030x030x030x030x030x030x030x030x030x030x060x7E0x780x00,
    
0xFF0xFF0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x180xF80xE00x00,
    
0x070x1F0x380x300x300x300x300x300x300x300x300x300x300x380x1F0x070x00},

    
// @357 '7' (17 pixels wide)

    
{0x030x030x030x030x030x030x030x030x030x030x030x830xC30xE30x7F0x3F0x00,
    
0x000x000x000x000x000x000x000xF00xF80x1C0x0F0x070x030x010x000x000x00,
    
0x000x000x000x000x000x000x000x3F0x3F0x000x000x000x000x000x000x000x00},

    
// @408 '8' (17 pixels wide)

    
{0xF80xFE0x070x030x030x030x030x030x030x030x030x030x030x070xFE0xF80x00,
    
0xF30xFF0x1E0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x1E0xFF0xF30x00,
    
0x070x1F0x180x300x300x300x300x300x300x300x300x300x300x180x1F0x070x00},

    
// @459 '9' (17 pixels wide)

    
{0xF80xFE0x070x030x030x030x030x030x030x030x030x030x030x060xFE0xF80x00,
    
0x810x870x060x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0x0C0xFF0xFF0x00,
    
0x070x1F0x180x300x300x300x300x300x300x300x300x300x300x180x1F0x070x00},
};



#endif





/**************************************************  *****************************
* Function Name  : GetASCIICode
* Description    : 
* Input          : 
* Output         : 
* Return         : None
* Attention         : None
**************************************************  *****************************/
void GetASCIICode(unsigned charpBuffer,unsigned char ASCII)
{  
   
memcpy(pBuffer,AsciiLib[(ASCII 32)] ,51);
}


/**************************************************  **************************************************  *****
      END FILE
**************************************************  **************************************************  *****/ 

А вот функции вывода
Нажмите, чтобы открыть спойлер
PHP код:
void PutCharuint16_t Xposuint16_t Yposuint8_t ASCIuint16_t charColoruint16_t bkColoruint8_t fontSize )
{
    
uint16_t ij;
    
uint8_t buffer[20], tmp_char;
    
uint16_t posXposY;

    
GetASCIICode(bufferASCI); // Предполагается, что функция уже реализована
    
for(0‹ 24i++)
    {
        
tmp_char buffer[i];
        for(
0‹ 17j++)
        {
            
posX Xpos + (fontSize);
            
posY Ypos + (fontSize);

            
// Устанавливаем точку начала и конца для каждого пикселя
            
LCD_WriteReg(0x210posX);                   // x start point
            
LCD_WriteReg(0x212posY);                   // y start point
            
LCD_WriteReg(0x211posX fontSize 1);    // x end point
            
LCD_WriteReg(0x213posY fontSize 1);    // y end point

            
LCD_WriteReg(0x200posX);                   // RAM X address
            
LCD_WriteReg(0x201posY);                   // RAM Y address
            
            
LCD_WriteIndex(0x202);                       // RAM Write index

            
LCD_CS_L();
            
LCD_RS_H();

            
// Заливка рассчитанного блока цветом
            
LCD_FillRect(posXposYfontSizefontSize, ((tmp_char ›› (16 j)) & 0x01) ? charColor bkColor);
        }
    }
}

// Функция для заливки прямоугольника заданным цветом (допустим, уже реализована)
void LCD_FillRect(uint16_t Xposuint16_t Yposuint16_t widthuint16_t heightuint16_t Color)
{
    
uint16_t ij;
    for(
0‹ heighti++)
    {
        for(
0‹ widthj++)
        {
            
LCD_WriteData(Color); // Записываем цвет в каждую точку прямоугольника
        
}
    }
}

/**************************************************  ****************************
* Function Name  : GUI_Text
* Description    : 
* Input          : - Xpos: 
*                  - Ypos: 
*                           - str:
*                           - charColor:
*                           - bkColor:
* Output         : None
* Return         : None
* Attention         : None
**************************************************  *****************************/
void GUI_Text(uint16_t Xposuint16_t Yposuint8_t *struint16_t Coloruint16_t bkColoruint8_t fontSize)
{
    
uint8_t TempChar;
    
uint16_t charWidth 17 fontSize;  // Calculate the width of a character
    
uint16_t charHeight 24 fontSize// Calculate the height of a character

    
do
    {
        
TempChar = *str++; // Get the next character from the string
        
PutChar(XposYposTempCharColorbkColorfontSize); // Display the character

        
if(Xpos ‹ MAX_X charWidth// Check if there is enough room for another character on the current line
        
{
            
Xpos += charWidth// Move the cursor rightwards
        
}
        else if(
Ypos ‹ MAX_Y charHeight// Check if there is enough room for another line
        
{
            
Xpos 0// Return to the beginning of the line
            
Ypos += charHeight// Move the cursor downwards
        
}
        else
        {
            
// If there is no room for another character or line, reset the cursor to the top left corner
            
Xpos 0;
            
Ypos 0;
        }
    }
    while(*
str != 0); // Continue until reaching the end of the string


Полагаю я исправляю где то неверно функцию, но понять не могу, ведь с меньшим шрифтом все работает. и еще объясните пожалуйста, почему в моем массиве заключается каждый символ в скобки а вашем как одномерный массив

Последний раз редактировалось Devil Byte; 30.03.2024 в 14:07.
Devil Byte вне форума  
Непрочитано 30.03.2024, 18:49  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Сие развидеть невозможно.
Вы не из пистолета себе в ногу стреляете, тут пулемёт используется

1. "Магические" числа - смертный грех.
как минимум одно место -
в PutChar в uint8_t buffer[20] копируется 51 байт.
2. В PutChar в выводе данных на экран вообще каша из команд для дисплея
И как вишенка
LCD_FillRect(posX, posY, fontSize, fontSize, ((tmp_char ›› (16 - j)) & 0x01) ? charColor : bkColor);
на каждую итерацию вывода пиксела
AJScorp вне форума  
 

Закладки

Метки
atmega128, lcd
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
arduino mega 2560 и ILI9341 как симулировать? ruvdos Proteus 0 02.12.2020 02:55
Дисплей ILI9341 на STM32F429 по SPI radian ARM 4 12.11.2017 05:55
Дисплей BL12864CYPNH потух Касьян Песочница (вопросы новичков) 0 28.06.2014 00:47
Текстовый дисплей PILZ PX 150-40-RFL ratfor1 Производственное оборудование 2 21.12.2013 00:16
Разбили дисплей анемометра Sopromat2 Измерительное оборудование 11 01.02.2012 21:47


Часовой пояс GMT +4, время: 16:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot