Ошибка при проверке кода Attiny13

#define F_CPU 9600000
#define NUMLEDS 20
#include <microLED.h>
 microLED<NUMLEDS, PB4, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB> strip;
void setup() {
  strip.setBrightness(100);
}

void loop() {
  static byte counter = 0;
  for (int i = 0; i < NUMLEDS; i++) {
    strip.set(i, mWheel8(counter + i * 255 / NUMLEDS));
  }
  counter += 3;
  delay(30);
   strip.show();
}

При проверке кода выходит ошибка, прошиваю через Arduino IDE, программатор USBasp (также пробовал USBasp slow, результат тот же). Такой же код прошил в Аттини85, все работало, поменял только F_CPU и задал другой порт. Фюзы не трогал, тини13 новая. Ядро поменял с AttinyCore на MicroCore так как тот не поддерживает Аттини13. Библиотека MicroLED, FastLED установлены. В чем может быть проблема?

Выходит ошибка:

c:\Users\user\Documents\Arduino\libraries\FastLED\src\FastLED.cpp: In function ‘void yield()’:
c:\Users\user\Documents\Arduino\libraries\FastLED\src\FastLED.cpp:56:17: error: redefinition of ‘void yield()’
extern “C” void yield(void) { }
^~~~~
In file included from c:\Users\user\Documents\Arduino\libraries\FastLED\src\led_sysdefs.h:15:0,
from c:\Users\user\Documents\Arduino\libraries\FastLED\src\FastLED.h:76,
from c:\Users\user\Documents\Arduino\libraries\FastLED\src\FastLED.cpp:2:
C:\Users\user\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.5.1\cores\microcore/Arduino.h:115:8: note: ‘void yield()’ previously defined here
void yield(void) attribute ((weak, alias(“__empty”)));
^~~~~
In file included from c:\Users\user\Documents\Arduino\libraries\FastLED\src/FastLED.h:100:0,
from c:\Users\user\Documents\Arduino\libraries\FastLED\src/pixelset.h:12,
from c:\Users\user\Documents\Arduino\libraries\FastLED\src\fx\2d\wave.h:14,
from c:\Users\user\Documents\Arduino\libraries\FastLED\src\fx\2d\wave.cpp:1:
c:\Users\user\Documents\Arduino\libraries\FastLED\src/fastspi.h:173:23: note: #pragma message: WARNING: The SPI pins you chose have not been marked as hardware accelerated within the code base. All SPI access will default to bitbanged output. Consult the data sheet for hardware spi pins designed for efficient SPI transfer, typically via DMA / MOSI / SCK / SS pin

pragma message “WARNING: The SPI pins you chose have not been marked as hardware accelerated within the code base. All SPI access will default to bitbanged output. Consult the data sheet for hardware spi pins designed for efficient SPI transfer, typically via DMA / MOSI / SCK / SS pin”

                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

exit status 1

Compilation error: exit status 1

А библиотека FastLED совместима с MicroCore ? Судя по ошибке - нет.

И что-то я сомневаюсь, что Тини13 с его 64 байтами оперативки потянет 20 светиков в Фастледе

1 лайк

Двойное объявление функции (две функции с одним именованием).

Открывай файлы из списка и смотри что там (но это, думаю, тебе не поможет, раз такие вопросы задаёшь). Попробуй откомпилировать под другой «камень» (Arduino Nano, например), если ошибка уйдёт - значит какой-то конфликт библиотек и ядра микрокор.

А это что за mWheel8 такой?

если это то, что я думаю - колесо цветового спектра - то сомнения в том, что тини13 неспособен это все потянуть - превращаются в уверенность…

В коде по идее FastLED вообще нет, как я понял MicroLED вызывает его, но в MicroLED заявлено что он поддерживает Тини13. Ничего не понимаю.

Я вообще не понимаю - накой лезть в голые камни, если ничего в этом не понимаешь? Для начала нужно на «обычных» платах ардуино «руку набить», а потом уже лезть «глубже». Тогда и вопросов подобных не будет появляться ))

в платах ардуино у меня более или менее получается=) вчера с аттини85 получилось как то)

Да помню я как у тебя это получилось. Поэтому и говорю - рано!

@Григорий1 ,
у Тиньки13 так мало ресурсов, что если просто взять код с другой ардуины и перенести - скорее всего ничего не выйдет. Или места не хватит, или просто вылезут ошибки компиляции.
Если вам так необходимо запускать адресную ленту на Тини13 - ищите специальную версию Фастлед, патченную именно для этогго контроллера. Только будьте готовы к тому, что места хватит буквально на 10-15 диодов и эффекты будут доступны только самые простые.

Мало ли что в MicroLED заявлено :slight_smile:
Про Микролед идите спрашивать на форум автора

Вот отсюда «ноги растут», как я понял:

А ТС нужна, наверное, вот эта:

tinyLED.h

ТИНИЛЕД!


В версии 3.1 появилась новая мощная штука: tinyLED.h - библиотека для вывода данных на ленту, написанная на ассемблере и использующая минимально возможный объём памяти! Библиотека задумана для генерации и вывода эффектов “на лету”, когда программный буфер не используется. Это позволяет выводить ту же плывущую радугу на ленту неограниченной длины, занимая всего 300 байт Flash памяти и ноль оперативной!!! Тини 13 рада такому обновлению.

А вот и пример кода (ну ТС не внимательный…):


// пример с tinyLED, должно работать на всех тиньках и мегах
// дефайны настроек, прописываются перед подключением либы
#define TLED_ORDER ORDER_GRB   // порядок цветов
#define TLED_CHIP LED_WS2812   // чип светодиода ленты
/*
  Доступные модели лент и их порядок цветов
  Китайцы могут продавать копию с другим порядком =)
  LED_WS2811 // ORDER_GBR
  LED_WS2812 // ORDER_GRB
  LED_WS2813 // ORDER_GRB
  LED_WS2815 // ORDER_GRB
  LED_WS2818 // ORDER_RGB
  LED_WS6812 // ORDER_RGB + W
  LED_APA102 // ORDER_BGR
  LED_APA102_SPI // ORDER_BGR
*/
// ===== 1 пин ленты =====
// по умолч. PORTB
// можно указать свой порт, если у тиньки больше 8 ног или это вообще атмега
// пин указывается при создании
// #define TLED_PORT PORTB
// #define TLED_DDR DDRB
// ===== 2 пин SPI ленты =====
// программный SPI, например LED_APA102
// по умолч. PORTB
// можно указать свой порт, если у тиньки больше 8 ног или это вообще атмега
// пин указывается при создании
// #define TLED_CLK_PORT PORTB
// #define TLED_CLK_DDR DDRB
// #define TLED_DAT_PORT PORTB
// #define TLED_DAT_DDR DDRB
// ===== Запрет прерываний =====
// можно указать приоритет прерываний (умолч CLI_LOW):
// #define TLED_CLI CLI_OFF  // прерывания не запрещаются
// #define TLED_CLI CLI_LOW  // запрещаются на время передачи байта
// #define TLED_CLI CLI_AVER // запрещаются на время передачи светодиода (3 байта)
// #define TLED_CLI CLI_HIGH // запрещаются на время передачи всей ленты
// ===== Яркость =====
// #define TLED_STATIC_BRIGHT  // отключает изменение общей яркости вывода и экономит 60 байт флэш
// ===== SPI лента =====
// только при выборе LED_APA102_SPI
// пины не указываются в скетче
// #define TLED_SPI_CLOCK 8000000  // скорость аппаратного SPI для ленты LED_APA102_SPI
// либа
#include "tinyLED.h"
tinyLED<3> strip;       // указываем пин (в порядке порта)
// tinyLED<3, 4> strip; // <DATA, CLOCK> для 2-пин лент (APA102)
// tinyLED strip;       // для LED_APA102_SPI не указываем пины ВООБЩЕ!
#define NUMLEDS 50 // количество светодиодов (для циклов)
void setup() {
  // begin() - начать отправку (НУЖНО ТОЛЬКО ДЛЯ SPI ЛЕНТ ИЛИ CLI_HIGH)
  // end() - закончить отправку (НУЖНО ТОЛЬКО ДЛЯ SPI ЛЕНТ ИЛИ CLI_HIGH)
  // write() - отправить один байт
  // sendRGB(r,g,b) - отправить цвет на 1 диод
  // sendRGBW(r,g,b,w) - отправить на rgbw ленту (например WS6812)
  // send(mData) - отправить цвет в формате mData
  // sendBuffer(mData буфер, размер) - отправить внешний буфер на ленту
  // clear(размер) - очистить на длину
  // setBrightness(0-255) - яркость для всего вывода
  // каждый вывод "задвигает" указанный цвет
  // чтобы остановить вывод - перестаём вызывать функцию на 50-300 мкс (зависит от чипа)
  // =================================================
  //strip.begin();
  strip.sendRGB(255, 255, 255); // отправить r,g,b на первый лед
  strip.send(mOrange);      // отправить оранжевый
  strip.send(mAqua);        // голубой
  strip.send(mPurple);      // и розовый
  //strip.end();
  // леды загорятся вот так:
  // начало--розовый--аква--оранж--белый
  delay(5000);              // пауза
  // =================================================
  // зальём 50 ледов белым. Вывод начнётся с начала!!
  //strip.begin();
  for (byte i = 0; i < 10; i++) strip.send(mYellow);
  //strip.end();
  delay(5000);              // пауза
  // =================================================
  // зальём 50 ледов с чередованием жёлтый-чёрный
  //strip.begin();
  for (byte i = 0; i < 50; i++) {
    strip.send(i % 2 == 0 ? mYellow : mBlack);
  }
  //strip.end();
  delay(5000);              // пауза
}
void loop() {
  // =================================================
  // иииии бегущая радуга!
  static byte count;
  count++;
  //strip.begin();
  for (int i = 0; i < NUMLEDS; i++) {
    strip.send(mWheel8(count + i * 255 / NUMLEDS)); // выводим радугу
  }
  //strip.end();
  delay(30);
}
1 лайк

Но если и в этот раз всё заработает после припайки конденсатора - я сильно удивлюсь…

1 лайк