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

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

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

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

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

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

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

 
Опции темы
Непрочитано 30.03.2024, 22:50  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

AJScorp, AJScorp, Ну простите, у меня опыт обучения дай бог месяц в общей сложности по мере возможности. По этому делаю как могу, про магические числа понимаю) но с отальным беда.Я буквально коснулся этих дисплеев на днях. Все таки не яснов чем причина в обоих случаях битмапы имеют вертикальную укладку. Но с отображением беда(не пойму почему. просто шрифт 8х16 маловат(, я изменил функцию для увеличения шрифта на указанный множитель, но не смог ее заставить работь с числами двойной точности.
Реклама:
Devil Byte вне форума  
Непрочитано 01.04.2024, 13:13  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,549
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Понятно, что опыта маловато. Но тут Вы пытаетесь методом тыка подобрать нужную комбинацию, это так не работает.
По коду, можно, например, задавать моноширинный шрифт не массивом, а структурой, тогда вся магия убирается в объявление шрифта.
Нажмите, чтобы открыть спойлер
PHP код:
typedef struct
{
    
uint8_t SizeX;
    
uint8_t SizeY;
    
uint8_t BytesPerChar;
    
uint8_t Data[];
TFONT, *pFONT;

static 
TFONT const AsciiLib =
{
    
172451,
    {
        
// '0'
        
0xF80xFE0x070x030x030x030x030x030x030x030x030x030x030x070xFE0xF80x00,
        
0xFF0xFF0x000x000x000x000x000x1E0x1E0x000x000x000x000x000xFF0xFF0x00,
        
0x070x1F0x180x300x300x300x300x300x300x300x300x300x300x180x1F0x070x00,
        
// '1'
        
0x030x030x030x030x030x030x030xFF0xFF0x000x000x000x000x000x000x000x00,
        
0x000x000x000x000x000x000x000xFF0xFF0x000x000x000x000x000x000x000x00,
        
0x300x300x300x300x300x300x300x3F0x3F0x300x300x300x300x300x300x300x00
        
//...
    
}
}; 

По выводу на дисплей...
Пишете, что в шрифте биты расположены вертикально, а выбираете на вывод совершенно невообразимым образом. Всё намного проще.
Нажмите, чтобы открыть спойлер
PHP код:
void PutChar(uint16_t Xposuint16_t Yposuint8_t ASCIuint16_t charColoruint16_t bkColor)
{
    
uint8_t cxcymask;

    
ASCI -= '0';

    
LCD_WriteReg(0x210Xpos);                          // x start point
    
LCD_WriteReg(0x212Ypos);                          // y start point
    
LCD_WriteReg(0x211Xpos AsciiLib.SizeX 1);     // x end point
    
LCD_WriteReg(0x213Ypos AsciiLib.SizeY 1);     // y end point

    
LCD_WriteReg(0x200Xpos);                          // RAM X address
    
LCD_WriteReg(0x201Ypos);                          // RAM Y address

    
LCD_WriteIndex(0x202);                              // RAM Write index

    
for(cy 0cy ‹ AsciiLib.SizeYcy++)
    {
        
uint8_t *pCharArrey;

        if (!(
cy 0x07))
        {
            
mask 0x01;
            
pCharArrey = &AsciiLib.Data[AsciiLib.BytesPerChar ASCI +
                                        
AsciiLib.SizeX * (cy ›› 3)];
        }

        for(
cx 0cx ‹ AsciiLib.SizeXcx++)
            
LCD_WriteData((pCharArrey[cx] & mask) ? charColor bkColor);

        
mask ‹‹= 1;
    }

AJScorp вне форума  
Непрочитано 02.04.2024, 06:44  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Сообщение от Devil Byte Посмотреть сообщение
Но получаю мусор на экране(как будто он гигантские пиксели рисует ...
void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str, uint16_t Color, uint16_t bkColor, uint8_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
Размер шрифта - 17х24 пикселя, а вы еще и умножаете на какую-то переменную, а потом думаете, откуда эти "гигантские пиксели".
Я ж говорю - осваивайте сам язык и его инструменты на простых примерах и вникайте в то, что делаете. Иначе вы ничего не поймете в более сложных задачах, таких как графика.

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

NewWriter, если ставить единичку, то умножение не происходит...
Devil Byte вне форума  
Непрочитано 02.04.2024, 09:36  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 748
Сказал спасибо: 365
Сказали Спасибо 821 раз(а) в 385 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Происходит умножение на единицу
Нажмите на изображение для увеличения
Название: uno.png
Просмотров: 0
Размер:	2.7 Кб
ID:	180952
j-Roger вне форума  
Непрочитано 02.04.2024, 20:54  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Дисплей 3.5 на ILI9341 + atmega128

Ну я ж показывал, как в битах и байтах выглядит массив шрифта. Есть несколько вариантов расположения байтов и порядка их обхода:
  • Вертикальная ориентация байтов:
    - обход по горизонтали слева направо
    - обход по вертикали сверху вниз
  • Горизонтальная ориентация байтов:
    - обход по горизонтали слева направо
    - обход по вертикали сверху вниз
И еще каждый из этих вариантов имеет два вида по порядку расположения битов в байте - младшим битом вначале (LSB) или старшим битом вначале (MSB), итого 8 вариантов представления. И массив для разных вариантов будет выглядеть по-разному. На практике используется один из вариантов.

Ниже на картинках показываю два варианта: вертикальная ориентация байтов, обход по горизонтали (1) и обход по вертикали (2). Порядок следования байтов будет разный. Причем, показал усложенный вариант, когда размер шрифта по вертикали не кратен 8, то есть, часть битов из полного байта не используется. Соответственно, этот факт будет влиять на построение программного цикла.
Вот вам задание для подумать: что такое остаток от деления на 8 (операция записывается как d = y % 8), каким свойством он обладает, как и для чего его применять в условном операторе if(y % 8 ) { }. Подсказка: остаток от деления на 8 не равен 0 только тогда, когда число y кратно 8, а значит условие if(y%8 ) { } будет выполняться только тогда, когда число y не кратно 8, то есть, когда остаток от деления не равен 0. И это условие можно применить для добавления одного байта в счетчике байтов. Ну это тогда, когда пишется универсальная функция под любой размер шрифта.

В общем, я разъяснил и показал, как всё это выглядит, а ваша задача - выразить это теперь в программном виде.
Миниатюры:
Нажмите на изображение для увеличения
Название: Снимок экрана 2024-04-02 223251.png
Просмотров: 0
Размер:	12.2 Кб
ID:	180963   Нажмите на изображение для увеличения
Название: Снимок экрана 2024-04-02 223402.png
Просмотров: 0
Размер:	14.7 Кб
ID:	180964  
NewWriter вне форума  
 

Закладки

Метки
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, время: 01:55.


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