Arduino IDE и MegaCore - не прошиваются фьюзы, не работает матрица MAX7219

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Доброго всем дня, собрал макетку на 128 меге (достаточно давно) - не хватало памяти ардуинки для моего проекта (метеостанция). В ней был залит аналогичный скетч, только для 4х матриц, ну и текст был другой:

#include <SPI.h>

#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>

int pinCS = 10; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 2;
int numberOfVerticalDisplays = 1;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

String tape = "Ардуино Мега 128";
int wait = 20; // In milliseconds

int spacer = 1;
int width = 5 + spacer; // The font width is 5 pixels

void setup() {

  matrix.setIntensity(7); // Use a value between 0 and 15 for brightness

// Adjust to your own needs
  matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
  matrix.setPosition(1, 1, 0); // The second display is at <1, 0>
  //matrix.setPosition(2, 2, 0); // The third display is at <2, 0>
  //matrix.setPosition(3, 3, 0); // And the last display is at <3, 0>
  //matrix.setPosition(4, 4, 0); // And the last display is at <3, 0>
//  ...
  matrix.setRotation(0, 1);    // The first display is position upside down
  matrix.setRotation(1, 1);    // The first display is position upside down
  //matrix.setRotation(2, 1);    // The first display is position upside down
  //matrix.setRotation(3, 1);    // The same hold for the last display
  //matrix.setRotation(4, 1);    // The same hold for the last display
  tape = utf8rus(tape);

  for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) {

    matrix.fillScreen(LOW);

    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2; // center the text vertically

    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape.length() ) {
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
      }

      letter--;
      x -= width;
    }

    matrix.write(); // Send bitmap to display

    delay(wait);
  }
}

void loop() {

  
}

// Перекодировка русских шрифтов из UTF-8 в Windows-1251
String utf8rus(String source){
  
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;
  while (i < k){
    n = source[i];
    i++;
    if (n >= 0xC0){
      switch (n){
        
        case 0xD0:
          n = source[i];
          i++;
          if (n == 0x81){
            n = 0xA8;
            break;
          }// end if
          if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
        break;
        
        case 0xD1: 
          n = source[i];
          i++;
          if (n == 0x91){
            n = 0xB7;
            break;
          }// end if
          if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
        break;
        
      }// end switch
    }// end if
    m[0] = n;
    target = target + String(m);
  }// end while
  return target;
}// end utf8rus()

 

Переделал его в данный вид для 2 матриц, но при заливке в МК не правильно устанавливаются фьюзы.
(проверял с помощью стандартного блинка - при выборе из меню разных источников тактирования, фьюзы не меняются).Фьюзы прошил через avrdudeprog, но все-равно матрицы не заводятся.
Есть 2 вопроса: где в IDE настройка фьюзов, как проверить работу выводов MOSI и SCK/

b707
Offline
Зарегистрирован: 26.05.2017

mir0tv0rec пишет:

Фьюзы прошил через avrdudeprog, но все-равно матрицы не заводятся./

какая связь между фьюзами и матрицами?

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Как вариант, тактирование шины spi. Тут я не много, не правильно выразился: т.е. фьюзы нужные прошил отдельно. А вот с матрицами не получилось все равно. Хотя до этого этот же пример работал нормально. Изначально было 4 матрицы, просто переделал на 2 и больше ничего не менял.

Plasteroid
Plasteroid аватар
Offline
Зарегистрирован: 15.07.2020

При использовании Arduino IDE  и ядра  MegaCore при прошивке Atmega128 на 16Мгц и 8МГц все нормально работает и с одной , и с двумя , и с тремя , и с четырмя ... матрицами без проблем. Никаких проблем замечено не было. Arduino IDE от 1.8.5 и до самых новых версий. На 1.8.13 не проверял.

Фьюзы выставляются при заливке bootloader-а автоматически и в большинстве случаев не требуют изменения.

Скорость шины SPI не менял. При использовании библиотеки LedControl с 4-мя MAX7219  тоже все работает без проблем и на софтовом SPI.

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Дома прошил вторую плату, она заводская. Скетч тот же, снова не хочет работать. Может проблема с версией IDE? Установлена последняя 1.8.13. Раньше точно проблем с частотой не было, какую поставил, такая и прошилась. А сейчас зашил на 1мгц, а потом на 8, блинк на 1 сек, еле работает. И с работой скечтей тоже не было. Попробую завтра на более раннюю версию откатиться. Какую лучше поставить? Всегда обновлял и проблем не было....

Plasteroid
Plasteroid аватар
Offline
Зарегистрирован: 15.07.2020

mir0tv0rec пишет:
Раньше точно проблем с частотой не было, какую поставил, такая и прошилась. А сейчас зашил на 1мгц, а потом на 8, ....

От внутреннего генератора тактирование? С кварцем не пробовали?

ИДЕ скачайте portable version. И не нужно сносить , ту что установлена у вас. Но , скорей всего , и на ИДЕ 1.8.13 должно все работать.

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Пробовал и от кварца и внутреннего генератора(кварц у меня съёмный), фьюзы через раз правильно устанавливаются(проверяю блинком). Но даже когда, судя по блинку, фьюзы нормально ставятся, дисплей не работает. Прошиваю через usbasp. Подключение 10 к cs, 11 - clk, 12 - dio. Может, что в библиотеках поменялось или в megacore? Или всё-таки частота не правильно устанавливается?

P.S. Всем спасибо! Сам затупил - установил 10 выход и подключил к 10 выводу, а он по факту в IDE 8.

Осталась проблема с фьюзами, при выборе из меню источника тактирования - он не меняется (проверяю чтением фьюзов в avrdudeprog). Как зашил 16Мгц от внешнего кварца так и есть.
 

Plasteroid
Plasteroid аватар
Offline
Зарегистрирован: 15.07.2020

mir0tv0rec пишет:

Всем спасибо! Сам затупил - установил 10 выход и подключил к 10 выводу, а он по факту в IDE 8.

mir0tv0rec пишет:
Прошиваю через usbasp. Подключение 10 к cs, 11 - clk, 12 - dio.

А ну теперь все ясно , а то как-то не ясно . Но мы и не думали,что вы подумали что мы думали.