Заливка скетча через MEGA2560 в ATMEG 1284 проблема
- Войдите на сайт для отправки комментариев
Вс, 28/11/2021 - 15:50
залил в mega2560 зи папки примеры arduinoISP подвязал к выводам +5 и GND свою плату с чипом , подвязал к плате в выводом 50,51,52,53 mosi miso sсk reset к своим выводам , выбрал в mighticore - 1284 . программатор arduino ISP - пишет проблема загрузки в плату - что я мог не учесть???
неправильно подключил mosi miso? менял местами не помогло ! частоту на плате выставил 20мгц такой и запаян
версия IDE, по всем не скажу у меня льёт версии 1.8.5 и инструкцию почитать по меге в качестве программатора
перепробовал по вашей ссылке не пошло
пишет проблемы загрузки в плату
пишет проблемы загрузки в плату
версия IDE какая? поправляюсь версия 1.8.3, с ней проблем в использовании не было
так вродеж все так же!
сейчас попробовал в версии 1.8.16 - всё льётся без проблем, в том числе и блинк через ARDUINO as ISP,
медленней чем через USB но проблем нет, видимо что-то не так соединили, конденсатор 0.1 добавили?
по сборке вижу надо использовать пин 10 для сброса а не SS
После того, как скетч будет полностью загружен, подключите конденсатор 100 нФ между линией питания +5 В и выводом RESET на Arduino Mega, чтобы отключить автосброс. В противном случае ничего не получится.
конденсатор сюда повесить? на вывод ресет?
// The standard pin configuration.
#ifndef ARDUINO_HOODLOADER2
#define RESET 10 // Use pin 10 to reset the target rather than SS
установил так в IDE
ткнул залить и вто залилось!
вы дало загрузка завершена! это правильно??? кондер не ставил
сначала надо залить загрузчик, потом грузить скетчи, если доступна загрузка через UART
но если загрузчик не нужен, то можно и без бутлоадера
В IDE нужно включить в настройках вывод всех сообщений компилятора и что-то ещё. Тогда весь процесс прошивки будет виден.
загрузчик мне не нужен . проблема с загрузкой вроде бы решилась - но чип не запускается и светодиод не блымает!!!! )))
этого достаточно чтобы фьюзы были в выставленны? и чип запустился?
у вас пока непонятно, проходит ли прошивка.
Ну и какие фьюзы буду выставлены - по этой картинке не поймешь. Видно BOD и внешнее тактирование 16 Гц, но это же не все.
и потом - эта менюшка - только надписи на экране, какие там фьюзы прописаны, надо смотреть в файле boards.txt
т.е. надпись что загрузка завершена еще ни о чем не гвоорит?
прочитал что фьюзы прошиваются с бутлоудером! а я коргда включаю прошить и бутлоудер выдает ошибку при загрузке скетча
прочитал что фьюзы прошиваются с бутлоудером!
фьюзы прошиваются при любой загрузке через программатор.
А про бутлоадер - на предыдущей картинке у вас написано "Без бутлоадера" - так что не знаю, чего вы от него ждете...
прочитал что фьюзы прошиваются с бутлоудером!
фьюзы прошиваются при любой загрузке через программатор.
А про бутлоадер - на предыдущей картинке у вас написано "Без бутлоадера" - так что не знаю, чего вы от него ждете...
а не подскажите по какой причине без бутлоудера загрузка проходит а когда указываю прошить с бутлоудером выдает ошибку?
какую ошибку?
какую ошибку?
проблема загрузки в плату
в общем - загрузка в чип происходит и фьзы выставляются! но МК по прежнемк молчит - даже светодиодиком не моргает! уже тупо все порты на вывод все равно тишина - ставил и внутренний источник тактирования все равно тишина
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. DDRA = B11111111; DDRB = B11111111; DDRC = B11111111; DDRD = B11111111; } // the loop function runs over and over again forever void loop() { PORTA = B11111111; PORTB = B11111111; PORTC = B11111111; PORTD = B11111111; delay(250); // wait for a second PORTA = B00000000; PORTB = B00000000; PORTC = B00000000; PORTD = B00000000; delay(250); // wait for a second }есть совет как сдивнуться с места? )))
ну чип работает но ооооччееньь медленно!!!
считал pickit2
на CKDIV8 крестик поставь
поставил - да быстрей ! но есть проблемка - зумер висит на ножке МК и не булькает как и светодиод! такое впечатление что не тянет по току выводы и реле через резистор и транзистор висят тоже не шолохнутся даже сигнал на них просажен! резисторы по 330 Ом - на PIC контроллерах такое прокатывало - там ток до 25мA по дата шиту посмотрел на atmega1284- вроде как до 40мА - может я что то упустил?
может я что то упустил?
может и упустили - полную схему покажите
у простых людей простые неисправности у сложных - сложные )))
надо добиться работающего блинка...
PS у меня atmega328PB не работала нормально пока загрузчик ей не перешил
я загрузчик вообще не ставил - шью или через mega2560 или через pickit2
у простых людей простые неисправности у сложных - сложные )))
надо добиться работающего блинка...
PS у меня atmega328PB не работала нормально пока загрузчик ей не перешил
на выводы порта D А идут сигналы
на выводы порта B нет - с такойц странной компановкой программы блин я путаюсь
Строка 1 должна быть видимо так:
Строка 1 должна быть видимо так:
та да
ну я так добавил
это в скетче setup
теоретически инициализация проходит
// Code common to both the 16x32 and 32x32 constructors: void RGBmatrixPanel::init(uint8_t rows, uint8_t a, uint8_t b, uint8_t c, uint8_t clk, uint8_t lat, uint8_t oe, boolean dbuf, uint8_t width #if defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_ESP32) , uint8_t *pinlist #endif ) { #if defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_ESP32) // R1, G1, B1, R2, G2, B2 pins static const uint8_t defaultrgbpins[] = {2, 3, 4, 5, 6, 7}; memcpy(rgbpins, pinlist ? pinlist : defaultrgbpins, sizeof rgbpins); #if defined(ARDUINO_ARCH_SAMD) // All six RGB pins MUST be on the same PORT # as CLK int clkportnum = g_APinDescription[clk].ulPort; for (uint8_t i = 0; i < 6; i++) { if (g_APinDescription[rgbpins[i]].ulPort != clkportnum) return; } #endif #endif nRows = rows; // Number of multiplexed rows; actual height is 2X this // Allocate and initialize matrix buffer: int buffsize = width * nRows * 3, // x3 = 3 bytes holds 4 planes "packed" allocsize = (dbuf == true) ? (buffsize * 2) : buffsize; if (NULL == (matrixbuff[0] = (uint8_t *)malloc(allocsize))) return; memset(matrixbuff[0], 0, allocsize); // If not double-buffered, both buffers then point to the same address: matrixbuff[1] = (dbuf == true) ? &matrixbuff[0][buffsize] : matrixbuff[0]; // Save pin numbers for use by begin() method later. _a = a; _b = b; _c = c; _clk = clk; _lat = lat; _oe = oe; // Look up port registers and pin masks ahead of time, // avoids many slow digitalWrite() calls later. clkmask = digitalPinToBitMask(clk); latport = portOutputRegister(digitalPinToPort(lat)); latmask = digitalPinToBitMask(lat); oeport = portOutputRegister(digitalPinToPort(oe)); oemask = digitalPinToBitMask(oe); addraport = portOutputRegister(digitalPinToPort(a)); addramask = digitalPinToBitMask(a); addrbport = portOutputRegister(digitalPinToPort(b)); addrbmask = digitalPinToBitMask(b); addrcport = portOutputRegister(digitalPinToPort(c)); addrcmask = digitalPinToBitMask(c); plane = nPlanes - 1; row = nRows - 1; swapflag = false; backindex = 0; // Array index of back buffer }но почему то на выводах тишина - этот же скетч работал на mega2560 без проблем
вот как было подключено к mega 2560 и как подлючены пины сейчас
mega2560 atmega1284
R1 - 24 - PA2 A - A0 -PF0 -ADC0 | R1 - 24 - PD2 A - A5 -PA5 -ADC5
G1 - 25 - PA3 B - A1 -PF1 -ADC1 | G1 - 25 - PD3 B - A4 -PA4 -ADC4
B1 - 26 - PA4 C - A2 -PF2 -ADC2 | B1 - 26 - PD4 C - A3 -PA3 -ADC3
R2 - 27 - PA5 D - A3 -PF3 -ADC3 | R2 - 27 - PD5 D - A2 -PA2 -ADC2
G2 - 28 - PA6 CLK - 11 -PB5 | G2 - 28 - PD6 CLK - 11 -PB5
B2 - 29 - PA7 LAT - 10 -PB4 | B2 - 29 - PD7 LAT - 10 -PB6
OE - 12 -PB6 OE - 12 -PB7
Что-то вы все какие-то кусочки показываете, часть из скетча, часть из библиотеки. Выложите свой .ino файл целиком
ок! все таки как то коряво все работает! светодиодик не блымает а горит постоянно! вот прога
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. DDRA = B11111111; DDRB = B11111111; DDRC = B11111111; DDRD = B11111111; } // the loop function runs over and over again forever void loop() { PORTA = B11111111; PORTB = B11111111; PORTC = B11111111; PORTD = B11111111; delay(250); // wait for a second PORTA = B00000000; PORTB = B00000000; PORTC = B00000000; PORTD = B00000000; delay(250); // wait for a second }похоже, что "этот гвоздь не в ту стену"
В коде у вас какой-то бардак. вы из двух скетчей что ли его мастерили?
Зачем задавать порты дефайном, если у вас есть вот этот оператор:
и почему вы задаете для данных и для клока разные порты, если в коде написано
похоже, что "этот гвоздь не в ту стену"
и что с этим гвоздем делать?
В коде у вас какой-то бардак. вы из двух скетчей что ли его мастерили?
да!
да!
ну значит у вас не вышло.
это взято из примера для подключения мега
покажите мне в этом примере что-то похожее на
#define DATAPORT A
откуда вы это взяли?
для вывода RGB используется в мега порт А а тактирование CLK LAT OE висят на порту В
я вывел на атмега RGB на порт D и тактирование CLK LAt OE на порт В только выводы у него 1 2 3
я вывел на атмега RGB на порт D и тактирование CLK LAt OE на порт В только выводы у него 1 2 3
не путайте выводы порта и пины ардуины - значения у них разные.
А вообще тут так - либо вы показываете весь ваш код до последней буквы. либо обсуждать далее не вижу смысла.
покажите мне в этом примере что-то похожее на
#define DATAPORT A
откуда вы это взяли?
для меги
для меги
слушайте, вы русский плохо понимаете? Зачем вы мне опять эти кусочки выкладываете. как подачку? - это кому надо, вам или мне?
Пока не будет ВСЕГО кода - говорить не о чем.
в .ino есть такая строка инициализации RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false , 64);
а в библиотеке для панели 32х64
// Constructor for 32x32 or 32x64 panel: RGBmatrixPanel::RGBmatrixPanel(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t clk, uint8_t lat, uint8_t oe, boolean dbuf, uint8_t width #if defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_ESP32) , uint8_t *pinlist #endif ) : Adafruit_GFX(width, 32) { init(16, a, b, c, clk, lat, oe, dbuf, width #if defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_ESP32) , pinlist #endif ); // Init a few extra 32x32-specific elements: _d = d; addrdport = portOutputRegister(digitalPinToPort(d)); addrdmask = digitalPinToBitMask(d); }что то как то странно!
мне кажется надо отладить скетч на меге, а уже потом переносить на 1284-ю
// библиотека для работы с матрицей #include <Adafruit_GFX.h> #include <RGBmatrixPanel.h> // установите и скачайте также библиотеку «Adafruit GFX Library» // «RGBmatrixPanel» наследуется от «Adafruit GFX Library» // управляющие пины матрицы #define CLK 1 #define OE 2 #define LAT 3 #define A A5 #define B A4 #define C A3 #define D A2 int REL1 = 21; int REL2 = 22; int TEST = 24; int K1 = 19; int K2 = 20; int ZUM = 23; int tst1 = 1; int tst2 = 2; int tst3 = 3; // объявляем объект для работы с матрицей 64х32 // включаем двойную буферизацию RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false , 64); // выводимая строка на матрицу unsigned char textStr[] = "1.0"; // переменная с X-координатой текста int textX = matrix.width(); char txt[5]; // минимальное значение координаты текста // количество символов в строке умноженное на ширину одного символа, // после которой текст начнёт повторно выводиться int textMin = sizeof(textStr) * -6; unsigned char voltage, old_voltage; //(float)(analogRead(A7) * 5.0) / 1024; short conversion_table[] = { 1760,2150,2620,3010,3440,3850,4250,4690,4990 }; unsigned char device_pressure(unsigned int adc_value) { unsigned char pressure; int temp; adc_value = adc_value * 10; for (pressure = 0; pressure < 8; pressure++) { if (adc_value >= conversion_table[pressure]) { temp = (conversion_table[pressure+1] - conversion_table[pressure])/5; temp = (adc_value -conversion_table[pressure])/ temp; return pressure * 0.5 + temp - 1; } } return 0; } void setup() { //randomSeed(analogRead(A5)); // инициируем работу с матрицей matrix.begin(); // отключаем перенос текста на следующую строку matrix.setTextWrap(false); // устанавливаем размер текста matrix.setTextSize(2); // очищаем экран matrix.fillScreen(0); // выставляем курсор matrix.setCursor(5, 5); // печатаем первую строку //matrix.println("0.0"); // выставляем курсор //matrix.setCursor(0, 15); // выводимая вторая строка //char strText[] = "LED MATRIX!"; // перебираем по очереди каждый символ //for (int i = 0; i < strlen(strText); i++) { // генерируем случайное число от 0 до 1536 //int hue = random(0, 1536); // устанавливаем случайный цвет по шкале «HSV» // matrix.setTextColor(matrix.ColorHSV(hue, 255, 255, false)); // печатаем символ текущего цикла // matrix.print(strText[i]); //} // выводим текст из буфера на матрицу //matrix.swapBuffers(false); analogReference(DEFAULT); DDRC = B11111100; digitalWrite(REL1, LOW); // включает светодиод digitalWrite(REL2, LOW); // включает светодиод digitalWrite(ZUM, LOW); // включает светодиод digitalWrite(TEST, LOW); // включает светодиод } void loop() { voltage = device_pressure(analogRead(A7)) ; // if (voltage > 40) voltage = 0; matrix.setCursor(5, 5); sprintf(txt,"%1d.%1d\0",voltage/10%10,voltage %10%100); matrix.println(txt); if (old_voltage != voltage){ matrix.fillScreen(0); } old_voltage = voltage; //matrix.swapBuffers(false); digitalWrite(TEST, HIGH); // включает светодиод digitalWrite(tst1, HIGH); // включает светодиод digitalWrite(tst2, HIGH); // включает светодиод digitalWrite(tst3, HIGH); // включает светодиод delay(1000); // ждет секунду digitalWrite(TEST, LOW); // выключает светодиод digitalWrite(tst1, LOW); // выключает светодиод digitalWrite(tst2, LOW); // выключает светодиод digitalWrite(tst3, LOW); // выключает светодиод delay(1000); }