Заливка скетча через MEGA2560 в ATMEG 1284 проблема

zumer67
Offline
Зарегистрирован: 17.06.2021

залил в mega2560 зи папки примеры arduinoISP подвязал к выводам +5 и GND свою плату с чипом , подвязал к плате в выводом 50,51,52,53 mosi miso sсk reset к своим выводам , выбрал в mighticore - 1284 . программатор arduino ISP - пишет проблема загрузки в плату - что я мог не учесть???

неправильно подключил mosi miso? менял местами не помогло ! частоту на плате выставил 20мгц такой и запаян 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

версия IDE, по всем не скажу у меня льёт версии 1.8.5 и инструкцию почитать по меге в качестве программатора

zumer67
Offline
Зарегистрирован: 17.06.2021

перепробовал по вашей ссылке не пошло

zumer67
Offline
Зарегистрирован: 17.06.2021

пишет проблемы загрузки в плату

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

zumer67 пишет:

пишет проблемы загрузки в плату

версия IDE какая? поправляюсь версия 1.8.3, с ней проблем в использовании не было

Green
Offline
Зарегистрирован: 01.10.2015

zumer67 пишет:
программатор arduino ISP - пишет проблема загрузки в плату - что я мог не учесть???

Программатор Аrduino as ISP.

zumer67
Offline
Зарегистрирован: 17.06.2021

так вродеж все так же! 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

сейчас попробовал в версии 1.8.16 - всё льётся без проблем, в том числе и блинк через ARDUINO as ISP,
медленней чем через USB но проблем нет, видимо что-то не так соединили, конденсатор 0.1 добавили?

по сборке вижу надо использовать пин 10 для сброса а не SS

zumer67
Offline
Зарегистрирован: 17.06.2021

После того, как скетч будет полностью загружен, подключите конденсатор 100 нФ между линией питания +5 В и выводом RESET на Arduino Mega, чтобы отключить автосброс. В противном случае ничего не получится.

конденсатор сюда повесить? на вывод ресет?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

// The standard pin configuration.
#ifndef ARDUINO_HOODLOADER2

  #define RESET     10 // Use pin 10 to reset the target rather than SS

 

zumer67
Offline
Зарегистрирован: 17.06.2021

установил так в IDE 

ткнул залить и вто залилось! 

вы дало загрузка завершена! это правильно??? кондер не ставил 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

сначала надо залить загрузчик, потом грузить скетчи, если доступна загрузка через UART
но если загрузчик не нужен, то можно и без бутлоадера

sadman41
Offline
Зарегистрирован: 19.10.2016

В IDE нужно включить в настройках вывод всех сообщений компилятора и что-то ещё. Тогда весь процесс прошивки будет виден.

zumer67
Offline
Зарегистрирован: 17.06.2021

загрузчик мне не нужен . проблема с загрузкой вроде бы решилась - но чип не запускается и светодиод не блымает!!!! ))) 

zumer67
Offline
Зарегистрирован: 17.06.2021

этого достаточно чтобы фьюзы были в выставленны? и чип запустился?

 

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

у вас пока непонятно, проходит ли прошивка.

Ну и какие фьюзы буду выставлены - по этой картинке не поймешь. Видно BOD и внешнее тактирование 16 Гц, но это же не все.

и потом - эта менюшка - только надписи на экране, какие там фьюзы прописаны, надо смотреть в файле boards.txt

zumer67
Offline
Зарегистрирован: 17.06.2021

т.е. надпись что загрузка завершена еще ни о чем не гвоорит? 

zumer67
Offline
Зарегистрирован: 17.06.2021

прочитал что фьюзы прошиваются с бутлоудером! а я коргда включаю прошить и бутлоудер выдает ошибку при загрузке скетча

 

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

zumer67 пишет:

прочитал что фьюзы прошиваются с бутлоудером!

фьюзы прошиваются при любой загрузке через программатор.

А про бутлоадер - на предыдущей картинке у вас написано "Без бутлоадера" - так что не знаю, чего вы от него ждете...

zumer67
Offline
Зарегистрирован: 17.06.2021

b707 пишет:

zumer67 пишет:

прочитал что фьюзы прошиваются с бутлоудером!

фьюзы прошиваются при любой загрузке через программатор.

А про бутлоадер - на предыдущей картинке у вас написано "Без бутлоадера" - так что не знаю, чего вы от него ждете...

а не подскажите по какой причине без бутлоудера загрузка проходит а когда указываю прошить с бутлоудером выдает ошибку?

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

какую ошибку?

zumer67
Offline
Зарегистрирован: 17.06.2021

b707 пишет:

какую ошибку?

проблема загрузки в плату

zumer67
Offline
Зарегистрирован: 17.06.2021

в общем - загрузка в чип происходит и фьзы выставляются! но МК по прежнемк молчит - даже светодиодиком не моргает! уже тупо все порты на вывод все равно тишина - ставил и внутренний источник тактирования все равно тишина 


// 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
}

есть совет как сдивнуться с места? )))

zumer67
Offline
Зарегистрирован: 17.06.2021

ну чип работает но ооооччееньь медленно!!!

zumer67
Offline
Зарегистрирован: 17.06.2021

считал pickit2 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

на CKDIV8 крестик поставь

zumer67
Offline
Зарегистрирован: 17.06.2021

поставил - да быстрей ! но есть проблемка - зумер висит на ножке МК и не булькает как и светодиод! такое впечатление что не тянет по току выводы и реле через резистор и транзистор висят тоже не шолохнутся даже сигнал на них просажен! резисторы по 330 Ом - на PIC контроллерах такое прокатывало - там ток до 25мA по дата шиту посмотрел на atmega1284- вроде как до 40мА - может я что то упустил?

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

zumer67 пишет:

может я что то упустил?

может и упустили - полную схему покажите

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

у простых людей простые неисправности у сложных - сложные )))
надо добиться работающего блинка...

PS у меня atmega328PB не работала нормально пока загрузчик ей не перешил
 

zumer67
Offline
Зарегистрирован: 17.06.2021

я загрузчик вообще не ставил - шью или через mega2560  или через pickit2 

zumer67
Offline
Зарегистрирован: 17.06.2021

ua6em пишет:

у простых людей простые неисправности у сложных - сложные )))
надо добиться работающего блинка...

PS у меня atmega328PB не работала нормально пока загрузчик ей не перешил
 

на выводы порта D А идут сигналы 

на выводы порта B нет - с такойц странной компановкой программы блин я путаюсь 

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// Arduino Mega is now tested and confirmed, with the following caveats:
// Because digital pins 2-7 don't map to a contiguous port register,
// the Mega requires connecting the matrix data lines to different pins.
// Digital pins 24-29 are used for the data interface, and 22 & 23 are
// unavailable for other outputs because the software needs to write to
// the full PORTA register for speed.  Clock may be any pin on PORTB --
// on the Mega, this CAN'T be pins 8 or 9 (these are on PORTH), thus the
// wiring will need to be slightly different than the tutorial's
// explanation on the Uno, etc.  Pins 10-13 are all fair game for the
// clock, as are pins 50-53.
#define DATAPORT PORTA ///< RGB data PORT register
#define DATADIR DDRA   ///< RGB data direction register
#define CLKPORT PORTB  ///< RGB clock PORT register
#elif defined(__AVR_ATmega32U4__)
// Arduino Leonardo: this is vestigial code an unlikely to ever be
// finished -- DO NOT USE!!!  Unlike the Uno, digital pins 2-7 do NOT
// map to a contiguous port register, dashing our hopes for compatible
// wiring.  Making this work would require significant changes both to
// the bit-shifting code in the library, and how this board is wired to
// the LED matrix.  Bummer.
#define DATAPORT PORTD ///< RGB data PORT register
#define DATADIR DDRD   ///< RGB data direction register
#define CLKPORT PORTB  ///< RGB clock PORT register
#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_ESP32)
// Support for ATSAMD21-based boards, done with PortType!
#else
// Ports for "standard" boards (Arduino Uno, Duemilanove, etc.)
#define DATAPORT PORTD ///< RGB data PORT register
#define DATADIR DDRD   ///< RGB data direction register
#define CLKPORT PORTB  ///< RGB clock PORT register
#endif

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Строка 1 должна быть видимо так:
 

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__)

 

zumer67
Offline
Зарегистрирован: 17.06.2021

ua6em пишет:

Строка 1 должна быть видимо так:
 

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__)

 

та да  

ну я так добавил  

// Ports for atmega1284
#define DATAPORT PORTD ///< RGB data PORT register
#define DATADIR DDRD   ///< RGB data direction register
#define CLKPORT PORTB  ///< RGB clock PORT register

 

zumer67
Offline
Зарегистрирован: 17.06.2021
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false , 64);  
// инициируем работу с матрицей
  matrix.begin();

это в скетче 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 без проблем

zumer67
Offline
Зарегистрирован: 17.06.2021

вот как было подключено к 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

 

 

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

Что-то вы все какие-то кусочки показываете, часть из скетча, часть из библиотеки. Выложите свой .ino файл целиком

zumer67
Offline
Зарегистрирован: 17.06.2021

ок! все таки как то коряво все работает! светодиодик не блымает а горит постоянно! вот прога


// 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
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

похоже, что "этот гвоздь не в ту стену"

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

В коде у вас какой-то бардак. вы из двух скетчей что ли его мастерили?

Зачем задавать порты дефайном, если у вас есть вот этот оператор:

addraport = portOutputRegister(digitalPinToPort(a));

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

// All six RGB pins MUST be on the same PORT # as CLK

 

zumer67
Offline
Зарегистрирован: 17.06.2021

ua6em пишет:

похоже, что "этот гвоздь не в ту стену"

и что с этим гвоздем делать?

 

 

zumer67
Offline
Зарегистрирован: 17.06.2021

b707 пишет:

В коде у вас какой-то бардак. вы из двух скетчей что ли его мастерили?

да! 

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

zumer67 пишет:

да! 

ну значит у вас не вышло.

 

zumer67
Offline
Зарегистрирован: 17.06.2021
// управляющие пины матрицы
#define CLK   1
#define OE    2
#define LAT   3
#define A     A5
#define B     A4
#define C     A3
#define D     A2

это взято из примера для подключения мега 

 

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

покажите мне в этом примере что-то похожее на

#define DATAPORT A

откуда вы это взяли?

zumer67
Offline
Зарегистрирован: 17.06.2021

для вывода RGB используется в мега порт А а тактирование CLK LAT OE висят на порту В 

я вывел на атмега RGB на порт D и тактирование CLK LAt OE на порт В только выводы у него 1 2 3 

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

zumer67 пишет:

я вывел на атмега RGB на порт D и тактирование CLK LAt OE на порт В только выводы у него 1 2 3 

не путайте выводы порта и пины ардуины - значения у них разные.

А вообще тут так - либо вы показываете весь ваш код до последней буквы. либо обсуждать далее не вижу смысла.

 

zumer67
Offline
Зарегистрирован: 17.06.2021

b707 пишет:

покажите мне в этом примере что-то похожее на

#define DATAPORT A

откуда вы это взяли?

для меги 

#define DATAPORT PORTA ///< RGB data PORT register
#define DATADIR DDRA   ///< RGB data direction register
#define CLKPORT PORTB  ///< RGB clock PORT register

 

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

zumer67 пишет:

для меги 

#define DATAPORT PORTA ///< RGB data PORT register
#define DATADIR DDRA   ///< RGB data direction register
#define CLKPORT PORTB  ///< RGB clock PORT register

 

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

Пока не будет ВСЕГО кода - говорить не о чем.

zumer67
Offline
Зарегистрирован: 17.06.2021

в .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);
}

что то как то странно! 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

мне кажется надо отладить скетч на меге, а уже потом переносить на 1284-ю

zumer67
Offline
Зарегистрирован: 17.06.2021
// библиотека для работы с матрицей
#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);
}