Видеокарта на базе Arduino UNO R4 Renesas с поддержкой текстового режима и вывода на монитор VGA (640*480*60 Гц)

если бы оно было твоё любимое ты бы скетчик простенький скинул, отличить 328P от 328PB?

// atmega_chip_id.ino
// Определение реального чипа: ATmega328P vs ATmega328PB.
// Компилируется как для Arduino Nano (328P), так и для MiniCore 328PB —
// регистры 328PB-специфики берутся по «сырым» адресам, а не через avr/io.h.
//
// Вывод — в Serial @ 9600. Дополнительно результат дублируется миганием LED:
//   5 медленных миганий = 328PB
//   3 медленных мигания = 328P (или перемаркированный клон)
//   10 быстрых          = неопределённость

#include <avr/io.h>

// Регистры, существующие ТОЛЬКО у ATmega328PB
#define UCSR1A_ADDR  ((volatile uint8_t *)0xC8)
#define UCSR1B_ADDR  ((volatile uint8_t *)0xC9)
#define TCCR3A_ADDR  ((volatile uint8_t *)0x90)

void setup() {
  Serial.begin(9600);
  while (!Serial) { }
  delay(500);

  Serial.println();
  Serial.println(F("=========================================="));
  Serial.println(F("        ATmega Chip Identifier"));
  Serial.println(F("=========================================="));
  Serial.println();

  int pb_score = 0;
  int test_count = 0;

  // ---------- Test 1: UCSR1A после сброса ----------
  uint8_t v1 = *UCSR1A_ADDR;
  test_count++;
  Serial.print(F("[1] UCSR1A (0xC8) read: 0x"));
  Serial.println(v1, HEX);
  Serial.println(F("    328PB expect: 0x20 or 0x60"));
  Serial.println(F("    328P  expect: 0x00"));
  if (v1 == 0x20 || v1 == 0x60) pb_score++;
  Serial.println();

  // ---------- Test 2: UCSR1B write/read ----------
  Serial.println(F("[2] UCSR1B (0xC9) write/read"));
  *UCSR1B_ADDR = 0x18;      // RXEN1 | TXEN1, без прерываний
  delay(1);
  uint8_t r1 = *UCSR1B_ADDR;
  *UCSR1B_ADDR = 0x00;      // выключаем USART1
  delay(1);
  uint8_t r2 = *UCSR1B_ADDR;
  test_count++;

  Serial.print(F("    write 0x18 -> read 0x"));
  Serial.println(r1, HEX);
  Serial.print(F("    write 0x00 -> read 0x"));
  Serial.println(r2, HEX);
  Serial.println(F("    328PB expect: 0x18 then 0x00"));
  Serial.println(F("    328P  expect: 0x00 then 0x00"));
  if (r1 == 0x18 && r2 == 0x00) pb_score++;
  Serial.println();

  // ---------- Test 3: TCCR3A write/read ----------
  Serial.println(F("[3] TCCR3A (0x90) write/read"));
  uint8_t saved = *TCCR3A_ADDR;
  *TCCR3A_ADDR = 0x55;
  delay(1);
  uint8_t t1 = *TCCR3A_ADDR;
  *TCCR3A_ADDR = 0x00;
  delay(1);
  uint8_t t2 = *TCCR3A_ADDR;
  *TCCR3A_ADDR = saved;     // восстанавливаем
  test_count++;

  Serial.print(F("    write 0x55 -> read 0x"));
  Serial.println(t1, HEX);
  Serial.print(F("    write 0x00 -> read 0x"));
  Serial.println(t2, HEX);
  Serial.println(F("    328PB expect: 0x51/0x55 then 0x00 (bits 2-3 masked)"));
  Serial.println(F("    328P  expect: 0x00 then 0x00"));
  // биты 2-3 в TCCR3A зарезервированы, поэтому разрешаем 0x51 и 0x55
  if (t1 == 0x51 || t1 == 0x55) pb_score++;
  Serial.println();

  // ---------- Вердикт ----------
  Serial.println(F("=========================================="));
  Serial.print(F("Test score (328PB features): "));
  Serial.print(pb_score);
  Serial.print(F(" / "));
  Serial.println(test_count);
  Serial.println();

  pinMode(LED_BUILTIN, OUTPUT);

  if (pb_score == test_count) {
    Serial.println(F("RESULT: ATmega328PB CONFIRMED"));
    Serial.println(F("  All 328PB-only registers respond correctly."));
    Serial.println(F("  If programmer/signature says 328P, this is only"));
    Serial.println(F("  because the bootloader was flashed for 328P."));
    Serial.println(F("  The silicon is a real 328PB."));
    for (int i = 0; i < 5; i++) {
      digitalWrite(LED_BUILTIN, HIGH); delay(200);
      digitalWrite(LED_BUILTIN, LOW);  delay(200);
    }
  } else if (pb_score == 0) {
    Serial.println(F("RESULT: ATmega328P (or relabeled clone)"));
    Serial.println(F("  None of the 328PB registers respond."));
    Serial.println(F("  The 'ATmega328PB' marking is FAKE."));
    for (int i = 0; i < 3; i++) {
      digitalWrite(LED_BUILTIN, HIGH); delay(300);
      digitalWrite(LED_BUILTIN, LOW);  delay(300);
    }
  } else {
    Serial.println(F("RESULT: UNCERTAIN"));
    Serial.println(F("  Some 328PB features work, some don't."));
    Serial.println(F("  Could be a partial clone or damaged chip."));
    for (int i = 0; i < 10; i++) {
      digitalWrite(LED_BUILTIN, HIGH); delay(80);
      digitalWrite(LED_BUILTIN, LOW);  delay(80);
    }
  }

  Serial.println(F("=========================================="));
  Serial.println(F("Done. Press Reset to run again."));
}

void loop() {}

Спасибо, конечно, но это уже третья тема, куда вы 328PB приплетаете. :thinking: Может лучшее в профильную!?

ну а UNO3 в теме про RENESAS? Я лично от этой фирмы 16 битные контроллеры программирую и не сую их сюда, где 32 битные

может не надо было косить под гомера симпсона ?)))
такую роль не каждый осилит…

видеокарта судя по всем не настоящая…
это vga транслятор…

ТС больше напоминает Печкина с его -“У меня есть посылка, но вам я её не отдам”, чем искреннего и доброго Гомера!

ты никак не уймешься, зачем человеку тему засираешь?

если такой правильный, что же тему не поправил, как ТС просил?
PS РИ №2

может я тебе еще что должен?
без меня поправили.

это что, твоя новая подпись/псевдоним, который ты теперь будешь ставить под каждым своим постом?
выбор конечно так себе, но тебе видней.

Тогда у Вас цифры не сходятся.

Приведите хоть один случай, когда бы для Радио 86РК использовался VGA.

Зачем пользователю видеокарта, которая не использует свои ресурсы по максимуму, зачем-то оставляя их пользователю?

Потому что на условно ПК есть процессор, накопители, звуковая карта и контролеры периферии. А тут ничего этого нет. Поэтому приходится выкраивать ресурсы под другие задачи. Иначе смысл пропадает - видеовыход есть, но выводить нечего.

Небольшое обновление по проекту.

Опубликовал на GitHub начальную демонстрационную версию графического эксперимента для Arduino UNO R4 Minima:

UnoR4-VGA-V47-Preview

Немного поясню историю разработки, чтобы не возникало путаницы с версиями.

V47 - это ранний этап проекта. В процессе экспериментов я переключился на разработку текстового VGA-режима. Именно он впоследствии превратился в библиотеку RA4M1_VGA_Text, которая сейчас практически готова к публикации.

Первоначально темы на форумах создавались именно для обсуждения и представления текстовой библиотеки. Поэтому графический V47 не следует воспринимать как её новую версию или как текущее состояние основного проекта.

Сейчас мой приоритет - завершить оформление и официально опубликовать текстовую библиотеку. Надеюсь, что после этого она сможет попасть в число проектов для Arduino UNO R4 Minima.

Затем планирую вернуться к графическому режиму и продолжить его разработку в отдельной ветке.

В репозитории V47 пока находится именно ранняя демонстрация: графический буфер 320×240, VGA-совместимая развёртка 640×480, передача через SPI1 и DMA с использованием GPT7.
И да, там есть код, который по условиям размещения поста я должен был.

Это не законченный графический движок, а сохранённая отправная точка экспериментов.

я те так скажу, да, это очень познавательно, круто и т.д.
дальше, все относительно
выжать из тини13 оверхеда, например USB, да, достойно уважения, но ни достойно понимания, что на остальной функционал этого интерфейса, просто нет ресурсов, как только передать ему один байт.
просто я действительно не понимаю, почему все пытаются на каком нибудь МК сделать эмулятор синклера, а не думать в направлении синклер 2+ 3+ 100++, идея же проста, доступный девайс на базе доступной базы на данный момент, а загвоздка простая, нет идеи, прорывной идеи, один плагиат под соусом ретро.
я помню, годов пять-семь назад, я сделал девайс и написал приложение под винду, которые позволяли прочитать коды с пульта ТВ, а потом с любой точки сети по MQTT переключить программу на ТВ , епта как я гордился..
но пришли дети и сказали, “алиса - включи ТНТ” - Я ДВА ДНЯ ПИЛ))

Вот именно тот случай когда от графики растровой я пошел в сторону текста. Так что клон синклера тут явно не светит. Оболочка в целом и рассчитана на frendly к пользователю и позволяет вывести информацию в удобоваримой старой форме как во всех текстовых режимах включая современные. Разве что отличие - LCD против VGA. Тут уж на любителя, согласен.

Ну, каждый развлекается как хочет и как может.

Я вот, например, понимаю “делать ретро” как “делать аутентичную реплику какого-нибудь исторического девайса” (типа вот такого) , но именно аутентичную – как музейный экспонат, а не на современных чипах.

А моделировать технику полувековой и более давности на современной базе … этого не понимаю – ты, блин, наоборот попробуй, тогда посмотрим какой ты Сухов.

Но, мало ли в мире вещей, которые я не понимаю? Человек хочет развлекаться именно так, пусть себе развлекается. Он же не действующий макет “Кузькиной матери” делает, слава Богу.

Блин, а я вот восстанавливаю, канеш, как было задумано, но плюс вставляю, например, блюпуп на современной базе, или FM, там, где его отродясь не бывало по просьбе закащика. Внешний вид никак не страдает, добавляется функциональность. Мне начинать плакать, звать маму и посыпать голову пеплом? :slight_smile:

Вводите новое понятие, адаптация-симулякр старой РЭА :slight_smile:

сильно на симулякр похоже?

У меня внадаче Восток 57 с RDA5807 вместо блока на вариометрах 6Н3П. Приежяющие вотки попить роцтвеннички фалломорфируют и предлагают нереальные деньги за теплый ламповый FM. Но, НЕ продаёцца. :slight_smile:


Ну мне идея нравится, совмещение из разных десятилетий. Вопрос, что должна быть сохранность внешнего вида исходника по мне спорна. Можно было и на старенькую панель налепить новомодных кнопочек-дисплеев.
…симулякр хорошее слово, а натолкнулся я на него из-за темы-проекта симуляции ардуино роботов :slight_smile:

Ну вот матри. На этой Веге есть вход для подключения приёмника, которым не пользуется счас чуть более, чем нихто. Неиспользуемые ноги П2К от переключателя “Приёмник” подают +5 на блюпуп, и только тогда он начинает работать, китайская женщина на ломаном английском говорит “Bluetooth connected”. В остальных положениях переключателя входов всё работает как было задумано Веговскими инженерами, внешний вид остаёцца аутентичным. Вот это авнище я нигде никада не использую.

Ты это делаешь

а потому, вопрос “наюха” к твоей ситуации неприменим в принципе. Я тут про “другое”.