Arduino IDE и MegaCore - не прошиваются фьюзы, не работает матрица MAX7219
- Войдите на сайт для отправки комментариев
Чт, 26/11/2020 - 17:28
Доброго всем дня, собрал макетку на 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/
Фьюзы прошил через avrdudeprog, но все-равно матрицы не заводятся./
какая связь между фьюзами и матрицами?
Как вариант, тактирование шины spi. Тут я не много, не правильно выразился: т.е. фьюзы нужные прошил отдельно. А вот с матрицами не получилось все равно. Хотя до этого этот же пример работал нормально. Изначально было 4 матрицы, просто переделал на 2 и больше ничего не менял.
При использовании Arduino IDE и ядра MegaCore при прошивке Atmega128 на 16Мгц и 8МГц все нормально работает и с одной , и с двумя , и с тремя , и с четырмя ... матрицами без проблем. Никаких проблем замечено не было. Arduino IDE от 1.8.5 и до самых новых версий. На 1.8.13 не проверял.
Фьюзы выставляются при заливке bootloader-а автоматически и в большинстве случаев не требуют изменения.
Скорость шины SPI не менял. При использовании библиотеки LedControl с 4-мя MAX7219 тоже все работает без проблем и на софтовом SPI.
Дома прошил вторую плату, она заводская. Скетч тот же, снова не хочет работать. Может проблема с версией IDE? Установлена последняя 1.8.13. Раньше точно проблем с частотой не было, какую поставил, такая и прошилась. А сейчас зашил на 1мгц, а потом на 8, блинк на 1 сек, еле работает. И с работой скечтей тоже не было. Попробую завтра на более раннюю версию откатиться. Какую лучше поставить? Всегда обновлял и проблем не было....
От внутреннего генератора тактирование? С кварцем не пробовали?
ИДЕ скачайте portable version. И не нужно сносить , ту что установлена у вас. Но , скорей всего , и на ИДЕ 1.8.13 должно все работать.
Пробовал и от кварца и внутреннего генератора(кварц у меня съёмный), фьюзы через раз правильно устанавливаются(проверяю блинком). Но даже когда, судя по блинку, фьюзы нормально ставятся, дисплей не работает. Прошиваю через usbasp. Подключение 10 к cs, 11 - clk, 12 - dio. Может, что в библиотеках поменялось или в megacore? Или всё-таки частота не правильно устанавливается?
P.S. Всем спасибо! Сам затупил - установил 10 выход и подключил к 10 выводу, а он по факту в IDE 8.
Осталась проблема с фьюзами, при выборе из меню источника тактирования - он не меняется (проверяю чтением фьюзов в avrdudeprog). Как зашил 16Мгц от внешнего кварца так и есть.
Всем спасибо! Сам затупил - установил 10 выход и подключил к 10 выводу, а он по факту в IDE 8.
А ну теперь все ясно , а то как-то не ясно . Но мы и не думали,что вы подумали что мы думали.