оригинальная UNO vs реплика MEGA 2560

Тема в разделе "Посоветуйте детальки", создана пользователем DrProg, 4 июл 2015.

  1. DrProg

    DrProg Вечный нерд

    На UNO перестало хватать памяти и пинов, приобрел сегодня китайскую MEGA. По уверению продавца эта модель полный аналог оригинала, те же детали, качественная сборка и так далее. Я попробовал на нескольких скетчах, вроде бы все работает. Но проверка производительности стала неприятной неожиданностью. Признаться, я думал, что MEGA быстрее чем UNO, так ли это должно быть на самом деле?

    Скетч управляющий двухцветной матрицей 8х8 считает кадры, сколько которые Ардуино может выдать за две секунды. UNO показала 458, MEGA всего 375.

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

    Код (Text):
    #define DATA_PIN    13
    #define LATCH_PIN  12
    #define CLOCK_PIN  11

    #define kadrTime    100 // мс на кадр
    #define kadrov      4 // колво кадров


    byte masRG [4][8][8] = {
      0, 0, 0, 0, 0, 0, 0, 0, // 1
      0, 1, 1, 1, 1, 1, 1, 0,
      0, 1, 3, 3, 3, 3, 1, 0,
      0, 1, 3, 2, 2, 3, 1, 0,
      0, 1, 3, 2, 2, 3, 1, 0,
      0, 1, 3, 3, 3, 3, 1, 0,
      0, 1, 1, 1, 1, 1, 1, 0,
      0, 0, 0, 0, 0, 0, 0, 0,

      1, 1, 1, 1, 1, 1, 1, 1, //2
      1, 3, 3, 3, 3, 3, 3, 1,
      1, 3, 2, 2, 2, 2, 3, 1,
      1, 3, 2, 0, 0, 2, 3, 1,
      1, 3, 2, 0, 0, 2, 3, 1,
      1, 3, 2, 2, 2, 2, 3, 1,
      1, 3, 3, 3, 3, 3, 3, 1,
      1, 1, 1, 1, 1, 1, 1, 1,

      3, 3, 3, 3, 3, 3, 3, 3, // 3
      3, 2, 2, 2, 2, 2, 2, 3,
      3, 2, 0, 0, 0, 0, 2, 3,
      3, 2, 0, 1, 1, 0, 2, 3,
      3, 2, 0, 1, 1, 0, 2, 3,
      3, 2, 0, 0, 0, 0, 2, 3,
      3, 2, 2, 2, 2, 2, 2, 3,
      3, 3, 3, 3, 3, 3, 3, 3,

      2, 2, 2, 2, 2, 2, 2, 2, // 4
      2, 0, 0, 0, 0, 0, 0, 2,
      2, 0, 1, 1, 1, 1, 0, 2,
      2, 0, 1, 3, 3, 1, 0, 2,
      2, 0, 1, 3, 3, 1, 0, 2,
      2, 0, 1, 1, 1, 1, 0, 2,
      2, 0, 0, 0, 0, 0, 0, 2,
      2, 2, 2, 2, 2, 2, 2, 2
    };


    long unsigned int ts; // таймер кадров
    byte kadrV; // видимый кадр

    // для подсчета fps
    long unsigned int ttt;
    unsigned int sss = 0;
    unsigned int fps = 0;

    void setup() {
      pinMode(DATA_PIN, OUTPUT);
      pinMode(CLOCK_PIN, OUTPUT);
      pinMode(LATCH_PIN, OUTPUT);
      kadrV = 0;
      ts = millis();
      Serial.begin(9600);
    }

    void loop() {

      if ((millis() - ts) >= kadrTime) { // циклическое чередование кадров
        kadrV++;
        if (kadrV >= kadrov) kadrV = 0;
        ts = millis();
      }
      setKadr_RG(masRG, kadrV); // отрисовка кадра

    // подсчет fps
      fps++;
        if ((millis() - ttt) > 2000) {
          Serial.println(fps);
        while (true);
        }

    }
    void setKadr_RG (byte mRG[2][8][8], byte kadr) { // отрисовка кадра
      byte bytSTR;
      byte mR;
      byte mG;
      for (byte s = 0; s <= 7; s++) {
        bytSTR = 0;
        bitSet(bytSTR, s);
        for (byte i = 0; i <= 7; i++) {
          bitWrite(mR, i, !(bitRead(mRG[kadr][s][i], 0)));
          bitWrite(mG, i, !(bitRead(mRG[kadr][s][i], 1)));
        }
        digitalWrite(LATCH_PIN, LOW);
        writeByte(bytSTR);
        writeByte(mR);
        writeByte(mG);
        digitalWrite(LATCH_PIN, HIGH);
      }
    }

    void writeByte(byte byteW) { // аналог shiftOut, работает чуть быстрее
      for (int i = 7; i >= 0; i--) {
        digitalWrite(DATA_PIN, (bitRead(byteW, i)));
        digitalWrite(CLOCK_PIN, HIGH);
        digitalWrite(CLOCK_PIN, LOW);
      }
    }
     
    Что можно сказать по внешнему виду?

    [​IMG]
     
    Последнее редактирование: 4 июл 2015
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    В меге кварц на 16 МГц, как и в уно. С чего ей вдруг быть быстрей?
    Нужно не скетчи тестовые писать, а читать документацию или хотя бы смотреть таблицу сравнения меги и уно на странице товара.
     
  3. DrProg

    DrProg Вечный нерд

    Эту таблицу я видел, про производительность там ничего не сказано. А скетч не тестовый, просто им довольно наглядно видна разница. И непонятно, почему эта Мега медленнее, несмотря на те же 16 МГц.
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    А почему, собственно, должно быть иначе? Какая тактовая частота, такая и производительность.
     
  5. geher

    geher Гуру

    Есть некоторое количество факторов, влияющих на произволительность.
    Основные факторы у уны и меги одинаковые (разрядность МК, тактовая).
    Потому на простых скетчах выигрыша в производительности не получить, разве что очень мелкий за счет каких-нибудь несущественных особенностей архитектуры МК.
    А может даже небольшой проигрыш случиться, поскольку пересчет номера пина в порт МК может оказаться сложнее. Или какие мелкие нюансы МК сыграют в сторону ухудшения характеристик.

    Но за счет некоторых факторов мега может быть существенно быстрее Уны за счет использования своих преимуществ. В частности, больший объем ОЗУ позволяет одновременно держать в памяти больше данных, не подгружая их из progmem или внешнего носителя.
     
  6. DrProg

    DrProg Вечный нерд

    В том то и дело, что производительность разная. Причем, эмперически замечено, что просадка призодится на digitalWrite, digitalRead и аналоговые аналоги. Усушка скорости процентов до 20%! Думаю, что дело в бОльшем кол-ве ног, которые каким то образом перебираются в функциях. Причем, на FastIO разница тоже есть, но намного меньше, порядка 5%.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Если даже так, то это не имеет абсолютно никакого отношения к производительности платы, а точнее, контроллера, установленного на плате. Это чисто программная проблема. Перепишите код без использования библиотек и увидите, что разницы нет.
     
  8. Faberge

    Faberge Administrator Администратор

    Надо было Дуньку брать,там точно производительность больше.
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Прочитайте тему и поймите, что производительность зависит от ядра контроллера и его тактовой частоты.
    Или объясните почему производительность Дуньки выше.
     
  10. Faberge

    Faberge Administrator Администратор

    ARM - архитектура, 84 МГц тактовой частоты, DMA, список продолжать?
     
  11. geher

    geher Гуру

    Полагаю, имеется ввиду Due.
     
  12. Megakoteyka

    Megakoteyka Оракул Модератор

    А вы что подразумеваете под "Дунькой" в таком случае? Традиционно в народе дуней зовут ардуино на AVR.
     
  13. DrProg

    DrProg Вечный нерд

    Давайте возьмем Галлелео, она еще быстрее или вообще десктоп на Core i7. Зачем оптимизировать программу если всегда можно купить железо помощнее? )
     
  14. Faberge

    Faberge Administrator Администратор

    Вы уловили мою мысль :)
     
  15. Megakoteyka

    Megakoteyka Оракул Модератор

    Не всегда, кстати, можно купить железо помощнее. Ограничений масса.
     
  16. Unixon

    Unixon Оракул Модератор

    Вот из-за таких вот мыслей софт становится все хуже и хуже, а техника вместо полезных вычислений просто зря небо коптит.
     
    Megakoteyka нравится это.
  17. geher

    geher Гуру

    Это да. Похоже, что некоторые современные софтопроизводители перепили Фанты.
    Как там было когда-то в рекламе: "И тормознул я крутую тачку".
     
  18. Faberge

    Faberge Administrator Администратор

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

    Как итог всего этого, имеем что имеем. Да, может это и не оптимальный путь с технической точки зрения, но в условиях капитализма, это самый прямой и верный путь к денежкам потребителя.
     
  19. Unixon

    Unixon Оракул Модератор

    Ну, у каждого свой императив в жизни. Капитализм - это временное зло и помутнение разума.
     
    Faberge нравится это.
  20. Faberge

    Faberge Administrator Администратор

    Са-а-а-а-агласен! :)