Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


ansid1979
Родился
Сообщения: 13
Зарегистрирован: Чт июн 29, 2017 20:46:43

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение ansid1979 »

На плате на выходе mcp602t стоят конденсаторы перед атмегой, какого они номинала?
Не волшебник. просто учусь.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Смотрите на схему, а не на плату. На плате это просто невостребованный задел под разные эксперименты.
ansid1979
Родился
Сообщения: 13
Зарегистрирован: Чт июн 29, 2017 20:46:43

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение ansid1979 »

Понял, значит ничего не ставлю.
Не волшебник. просто учусь.
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

Файлик от LS020 поправил.
А зачем там так часто сигнал CS дергать?
Вложения
ls020.c
(7.42 КБ) 219 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Где часто?
Мне кажется, Ваше изменение сильно замедлит работу с дисплеем из-за постоянных установок/сбросов RS, и переноса цикла while() в конец ls020WriteData(). В своё время я, переделывал что-то в стиле "наоборот": https://github.com/WiseLord/ampcontrol/commit/dc886eb
Но у меня ls020 никогда не было, поэтому насчёт того как оно на реальном железе работает, я не в курсе. Просто знаю, что работает.
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

ну да с RS я поспешил но с остальным вроде правильно
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

По поводу

Код: Выделить всё

static void ls020WriteData(uint8_t data) {
   while(!(SPSR & (1<<SPIF)));
   SPDR = data;
}
который Вы переделали на

Код: Выделить всё

static void ls020WriteData(uint8_t data) {
   SPDR = data;
   while(!(SPSR & (1<<SPIF)));
}
Вот здесь-то и будет самое большое замедление. В изначальном варианте мы сразу же выскакиваем из функции (что тоже занимает какое-то время) и обрабатываем код дальше. А в это время параллельно и аппаратно идёт передача по SPI.

А в Вашем варианте Вы зачем-то перед выходом из функции ждёте окончания передачи. Это сильно уменьшает скорость вывода, поскольку именно запись данных тут основная операция.

Единственное в моём случае - когда передаётся "пачка" данных (заполняется какой-то прямоугольник, например), то в конце нужно ещё один раз сделать while(!(SPSR & (1<<SPIF))); перед дёрганьем CS.

А CS у меня дёргается редко - перед отправкой большой пачки данных уходит в 0, по окончании - в 1, как и положено. Не знаю, почему Вам показалось, что часто.
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

переписал под LPH9157-2 запустился но не правильно. Любые манипуляции с поворотом не дают нужного эффекта. Скрин прилагаю
Вложения
1.rar
(35.28 КБ) 221 скачивание
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Я бы попробовал поиграть с заменой x и y местами в ls020SetWindow()
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

поиграл не выиграл.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

А что произойдёт, если поменять

Код: Выделить всё

#ifdef LS020_ROTATE_180
    ls020WriteCommand(0x2a);
    ls020WriteData(x0);
    ls020WriteData(x1);
    ls020WriteCommand(0x2b);
    ls020WriteData(LS020_WIDTH - 1 - y1);
    ls020WriteData(LS020_HEIGHT - 1 - y0);
#else
на

Код: Выделить всё

#ifdef LS020_ROTATE_180
    ls020WriteCommand(0x2a);
    ls020WriteData(y0);
    ls020WriteData(y1);
    ls020WriteCommand(0x2b);
    ls020WriteData(LS020_WIDTH - 1 - x1);
    ls020WriteData(LS020_WIDTH - 1 - x0);
#else
Обратите внимание, LS020_HEIGHT, похоже, опечатка (у меня в коде в том числе)
Теоретически, это как-то должно развернуть на 90 градусов. Символы шрифта будут при этом рисоваться неправильно, и тут уже можно поиграть параметрами направления отрисовки окна при инициализации дисплея:

Код: Выделить всё

ls020WriteCommand(0x36);
ls020WriteData(0xe0);
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

опечатку заметил когда проверял монитором SPI

Добавлено after 45 minutes 17 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
правильнее так но вместо символов краказябры

Код: Выделить всё

#ifdef LS020_ROTATE_180
    ls020WriteCommand(0x2a);
    ls020WriteData(y0);
    ls020WriteData(y1);
    ls020WriteCommand(0x2b);
    ls020WriteData(LS020_HEIGHT - 1 - x1);
    ls020WriteData(LS020_HEIGHT - 1 - x0);
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Это потому что символы отрисовываюься в другом направлении. Тут надо или этот параметр обхода окна менять при инициализации, или в другом порядке биты символа выводить
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3190228#p3190228"]Это потому что символы отрисовываюься в другом направлении. Тут надо или этот параметр обхода окна менять при инициализации, или в другом порядке биты символа выводить[/uquote]

в этом файле?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Да. Либо инициализацию попробовать подправить:

Код: Выделить всё

ls020WriteCommand(0x36);
ls020WriteData(0xe0);
- поиграться с 0xE0 согласно тому, что там у Вас в комментариях для этой команды прописано.
Это самый простой вариант, если получится - повезло.
Либо с выводом символа ls020WriteChar() поиграть. Тут уже посложнее, придётся немного подумать и, во первых, понять, как вывод символа происходит.
Вот сам символ, например, 'A':

Код: Выделить всё

0xE0, 0xF0, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0xF8,
0xFF, 0xFF, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xFF, 0xFF,
0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 65  A */
Легко понять, как он построен. Это массив из 10 * 3 (ширина на высоту) байтов:
Изображение
Теперь смотрим, в коде как реализован вывод символа после того, как сформировано "окно" (для наглядности убрал дефайн LS020_ROTATE_180:

Код: Выделить всё

for (k = 0; k < fp[FONT_HEIGHT]; k++) {
    for (j = 0; j < swd; j++) {
        pgmData[j] = pgm_read_word(_font + oft + ((fp[FONT_HEIGHT] - k - 1)) * swd + j);
    }
    for(i = 0; i < 8; i++) {
        for (my = 0; my < fp[FONT_MULT]; my++) {
            for (j = 0; j < swd; j++) {
                if (pgmData[j] & (128>>i)) {
                    for (mx = 0; mx < fp[FONT_MULT]; mx++)
                        ls020WriteData(fp[FONT_COLOR]);
                } else {
                    for (mx = 0; mx < fp[FONT_MULT]; mx++)
                        ls020WriteData(COLOR_BCKG);
                }
            }
        }
    }
}

Верхний цикл - проход по высоте шрифта. В нашем случае три раза - k = 0, 1, 2.
Дальше, вложенный шрифт - проходим по ширине символа, и вычитываем в массив pgmData текущую "линию"
А уже затем - пробегаемся по битам (i = 0..7) шрифта и выводим либо цветом шрифта (1), либо цветом фона (0). При этом, если фонт масштабированный, то делается это два раза подряд.
В Вашем случае надо просто разобраться с направлением вывода. Можно просто вставить задержку здесь и смотреть на дисплей. Должны поочерёдно выводиться вертикальные столбики шрифта снизу вверх (а если мысленно дисплей повернуть на 90 градусов по часовой стрелке, к его "родному" портретному режиму, получится просто последовательный вывод горизонтальных строк - ровно как и мы пишем в тетради).
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

в вашем варианте заполнение с право налево вверх
а в моем сверху в низ направо
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Вот как происходит отрисовка символа на LS020 (эмуляция в Proteus):


Наложите на свои исходники такой же патч, чтобы посмотреть, в каком месте рисуется символ и в каком направлении идёт его отрисовка в Вашем случае.
Спойлер

Код: Выделить всё

diff --git a/display/ls020.c b/display/ls020.c
index ed0fed2..b2a249c 100644
--- a/display/ls020.c
+++ b/display/ls020.c
@@ -319,8 +319,9 @@ void ls020WriteChar(uint8_t code)
                      ls020WriteData(fp[FONT_COLOR]);
                } else {
                   for (mx = 0; mx < fp[FONT_MULT]; mx++)
-                     ls020WriteData(COLOR_BCKG);
+                     ls020WriteData(COLOR_GRAY);
                }
+               _delay_ms(50);
             }
          }
       }
diff --git a/main.c b/main.c
index d27fb13..d720272 100644
--- a/main.c
+++ b/main.c
@@ -11,6 +11,7 @@
 #include "tuner/tuner.h"
 #include "temp.h"
 #include "actions.h"
+#include "display/ls020.h"
 
 static uint8_t extFunc;
 
@@ -56,6 +57,15 @@ int main(void)
    // Init hardware
    hwInit();
 
+
+   ls020LoadFont(font_ks0066_ru_24, COLOR_CYAN, 1);
+   while(1)
+   {
+      ls020SetXY(10, 30);
+      ls020WriteChar('A');
+      ls020Clear();
+   }
+
    while (1) {
       // Control temperature
       if (extFunc == USE_DS18B20) {


Вообще идеально - проверить с разными вариантами Memory Access Control.
А если ещё и на видео снимете, как это происходит с разными его вариантами, тогда будет понятнее, что и как менять.

И ещё: проблема только в шрифтах? Вся прочая графика отрисовывается нормально или не очень? Подозреваю, что прогрессбары должны быть ОК, столбики всякие тоже, потому что это просто сплошной заливки прямоугольники, а вот иконки тоже должны отрисовываться аналогично шрифтам.
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

в дисплее косяк он с изначальным кодом рисует правильно но не дорисовывает в конце 4 часть экрана.
там просто обрезок с мусором
иконки отображаются правильно

Добавлено after 9 hours 28 minutes 37 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
а вот тут упоминание сего косяка http://cxem.net/mc/mc221.php
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение WiseLord »

Тогда нужно для начала, путём манипуляций с шириной-высотой-x-y добиться того, чтобы
- дисплей умел закрашивался целиком;
- сплошные прямоугольники рисовались там где нужно.
А уже потом разбираться "внутри" прямоугольников, в каком порядке в них подавать биты шрифта или иконки.
mixa232323
Прорезались зубы
Сообщения: 217
Зарегистрирован: Вт окт 01, 2013 01:04:31
Откуда: Гомель

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сообщение mixa232323 »

в моем последнем варианте всё закрашивается норм надо чтобы шрифты заполнялись по принципу иконок или переделать шрифты.
Ответить

Вернуться в «Статьи»