README.md

ПЛЮСЫ на “АМУРЕ”


Исследование 100% российского микроконтроллера к1948вк018 (“АМУР”) и его будущих аналогов с применением новых стандартов C++


[21.10.2024]

Добавлен класс UART0_DMA_RECEIVER для приёма данных в буфер (всего 10 байтов пока) на аппаратном уровне (ищите в terminal_2Mbaud_21_10_2024.txt текст «UART0 . DMA : data received: “0123456789”» & «UART0 . DMA : data received: “ABCDEFGHIJ”»). UART сейчас настроен на 2 Мбод (данные принимаем/передаём за 5 мкс / байт).


В методе ST7735s_class::draw_DMA_RAM, который транслирует кадр на дисплей порциями по 512 байтов через ОЗУ (байт должен быть передан за 1 мкс), сделана пауза 512 мкс средствами ассемблерной вставки (ToDo: надо будет потом посмотреть на осциллографе точность этой самой паузы, есть сомнения)


[24.10.2024]

В целях ускорения передачи кадра на LCD, немного модифицирован метод void ST7735s_class::draw_DMA_RAM/* ОЗУ */(pixel const* picture), нужно проверить потом на ELBEAR ACE UNO


[25.10.2024]

Переделан метод вывода кадра порциями по пол-килобайта из ОЗУ вне ядра (чтобы потом в ядре читать эти данные из файла на ПЗУ, преимущественно, в это же самое время)

void ST7735s_class::draw_DMA_RAM/* ОЗУ */(pixel const* picture)
{
   io_set(DEBUG_OUT);
      command4(/* CASET */0x2A, 0, yoff, 0, yoff + ysize - 1);
      command4(/* RASET */0x2B, 0, xoff, 0, xoff + xsize - 1);
      command (/* RAMWR */0x2C);
      uint32_t const* p = (uint32_t const*)&picture[2];
      static constexpr uint32_t N = 256/* пикселей = пол-кило-байтов */;
      uint32_t size = xsize * ysize / N ; /// количество порций величиной в N * sizeof(uint16_t)
      HAL_SPI_Enable  ( &h_spi ) ;
         while ( size-- )
         {
            uint32_t t [ N/2 ] ; for ( uint32_t i = 0; i < N/2; i++ ) t [ i ] = p [ i ] ;
            HAL_DMA_Start ( &h_dma_ch0, (void*)t, (void*)&h_spi.Instance->TXDATA, N * sizeof(uint16_t) /* байтов */ - 1 ) ;
            while ( ! HAL_DMA_GetChannelReadyStatus ( &h_dma_ch0 ) ) ;
               ////////////////////////////////////////////////////////////////////////////////
               /// ВО ВРЕМЯ ОЖИДАНИЯ ОТПРАВКИ МОЖНО ЧИТАТЬ СЛЕДУЮЩУЮ ПОРЦИЮ ДАННЫХ ИЗ ФАЙЛА ///
               ////////////////////////////////////////////////////////////////////////////////
            p += N/2;
         }
      HAL_SPI_Disable ( &h_spi ) ;
   io_clr(DEBUG_OUT);
}

Выяснилось, что искажения изображения не наблюдаются теперь, а время составляет 41 мс (src/ST7735s_class__draw_DMA_RAM__duration.jpg).


[14.11.2024]

ПЕРВОЕ ПРИМИТИВНОЕ ВИДЕО (160 на 80 пикселей, частота ~ 20 кадров/с, всего 5 кадров, хранилище - флешь W25), на базе класса ST7735s_class сделан простейший проигрыватель primitive_video_player (находится в модуле CPP_17_tst.cpp). Для конвертации использован скрипт bmp2ddp_ST7735s/convert_input_video_N_frames.py. Сами кадры (растр) находятся в заголовочнике output_video_array.h

Дальнейшее развитие: использовать для хранения видео-файлов карту памяти формата micro-SD, подключенную через второй SPI микроконтроллера.
Библиотека для файловой системы непременно должна быть в стиле ООП (класс C++), она уже почти готова.

[18.11.2024]

ПЕРВЫЙ ШАГ В ОСВОЕНИИ ЧАСОВ РЕАЛЬНОГО ВРЕМЕНИ, ВСТРОЕННЫХ В 100% РОССИЙСКИЙ МИКРОКОНТРОЛЛЕР. RTC_research/VBAT_connection.jpg - питание часов от батарейки 3 В (CR2032). В модуле CPP_17_tst.cpp:

// #define  SET_DATE_AND_TIME__18_11_2024 <--- ЧТОБЫ НАСТРОИТЬ КАЛЕНДАРЬ И ЧАСЫ
RTC_HandleTypeDef hrtc;
RTC_TimeTypeDef LastTime = {0};
RTC_TimeTypeDef CurrentTime = {0};
RTC_DateTypeDef CurrentDate = {0};
void SystemClock_Config(void) { <...> }
static void RTC_Init(void) { <...> }

[19.11.2024]

Организован вывод микро-текста на микро-дисплей. Из детства мне нравится всё миниатюрное. Возможно, это мой пожизненный косяк. Но здесь огромное количество букв, выведенное на один экран, это хорошо, потому что разрешение 160 на 80 пикселей )

void ST7735s_class::putpixel(u16 x, u16 y, pixel color)
{
   y = ysize - y;
   command4(/* CASET */0x2A, 0, yoff + y + 0,
                             0, yoff + y + 1);
   command4(/* RASET */0x2B, 0, xoff + x + 0,
                             0, xoff + x + 1);
   command (/* RAMWR */0x2C);
   color = ~color;
   data(color >>  8);
   data(color & 255);
}
#include "3_5x5.inc"
void putpixel(u16 x, u16 y, t_color color)
{
   LCD . putpixel ( x, y, ST7735s_class::pixel(color) ) ;
}

Библиотека 3_5x5.inc для вывода микро-текста была сделана ОЧЕНЬ давно, в 2012 - 2013 годах, поэтому там язык C.


[20.11.2024]

Произведены замеры тока потребления резервного источника питания (VBAT) при питании от основного источника (3,3 В) - RTC_research/VBAT_current_main_power_source.jpg и при питании идущих часов от этого самого резервного источника (3 В, CR2032) - RTC_research/VBAT_current_backup_power_supply.jpg


Описание

Исследование 100% российского микроконтроллера к1948вк018 ("АМУР") и его будущих аналогов с применением новых стандартов C++

Конвейеры
0 успешных
0 с ошибкой