Проблемы с Dimmer.h на ATmega 128
Я использую схему ZCD, управляющую симистором. Сейчас я использую для этой цели библиотеку Dimmer. Он отлично работает с ATMega 328, но всякий раз, когда я пытаюсь загрузить код в ATMega 128 с помощью Arduino IDE, появляется эта ошибка:
Arduino: 1.8.4 (Windows 10), Board: "ATmega128, 2.7v, Disabled (default), 16 MHz external"
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp: In member function 'void Dimmer::begin(uint8_t, bool)':
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:15:20: error: 'TCCR2A' was not declared in this scope
#define _TCCRxA(X) TCCR ## X ## A
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:16:19: note: in expansion of macro '_TCCRxA'
#define TCCRxA(X) _TCCRxA(X)
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:157:5: note: in expansion of macro 'TCCRxA'
TCCRxA(DIMMER_TIMER) = TCCRxA_VALUE; // Timer config byte A
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:17:20: error: 'TCCR2B' was not declared in this scope
#define _TCCRxB(X) TCCR ## X ## B
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:18:19: note: in expansion of macro '_TCCRxB'
#define TCCRxB(X) _TCCRxB(X)
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:158:5: note: in expansion of macro 'TCCRxB'
TCCRxB(DIMMER_TIMER) = TCCRxB_VALUE; // Timer config byte B
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:19:20: error: 'TIMSK2' was not declared in this scope
#define _TIMSKx(X) TIMSK ## X
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:20:19: note: in expansion of macro '_TIMSKx'
#define TIMSKx(X) _TIMSKx(X)
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:159:5: note: in expansion of macro 'TIMSKx'
TIMSKx(DIMMER_TIMER) = 0x02; // Timer Compare Match Interrupt Enable
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:21:19: error: 'OCR2A' was not declared in this scope
#define _OCRxA(X) OCR ## X ## A
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:22:18: note: in expansion of macro '_OCRxA'
#define OCRxA(X) _OCRxA(X)
^
C:\Program Files (x86)\Arduino\libraries\Dimmer-master\src\Dimmer.cpp:160:5: note: in expansion of macro 'OCRxA'
OCRxA(DIMMER_TIMER) = 100 * 60 / acFreq - 1; // Compare value (frequency adjusted)
^
exit status 1
Error compiling for board ATmega128.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Есть идеи, в чем проблема?
@TechCreogen, 👍1
Обсуждение1 ответ
▲ 1
Библиотека Dimmer не поддерживает Atmega128/164/16/32. Имеет
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DIMMER_TIMER 4
#elif defined(__AVR_ATmega32U4__)
#define DIMMER_TIMER 3
#else
#define DIMMER_TIMER 2
#endif
Для Atmega128/164/16/32 будет использоваться таймер 2. Основные ошибки:
'OCR2A' was not declared in this scope
'TCCR2A' was not declared in this scope
'TCCR2B' was not declared in this scope
'TIMSK2' was not declared in this scope
Возможное решение:
Вы можете попробовать использовать таймер 3. Только вам нужно изменить номер таймера в Dimmer.h и в Dimmer.cpp в строке 159, измените TIMMKx(DIMMER_TIMER) = 0x02
, возможно, на bitSet(ETIMSK, 3);
. Проверьте таблицу данных. Проверить не могу, у меня нет чипа.
,
@Juraj
Смотрите также:
- 16-герцовая плата Uno R3 против платы Arduino Uno R3
- Автономный ATMega328 — нужно ли прожигать загрузчик?
- Arduino зависает через некоторое время
- Точность синхронизации Arduino nano
- Как правильно интерпретировать вывод встроенного аналого-цифрового преобразователя?
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
ATMega328 и ATMega128 не полностью взаимозаменяемы....заголовочный файл имеет либо разные имена регистров, либо регистры не существуют в ATMega128, @jsotola
какое ядро используешь? возможно, только названия у него другие. Я проверил библиотеку Dimmer с помощью MightyCore, и для Atmega16/32/164 я получаю ошибки, потому что в них нет таймера, используемого библиотекой. но у тебя ошибки разные. MightyCore не поддерживает 128 (хотя он есть в readme), @Juraj
@Юрай, я использую Megacore. Мне нужно использовать 128, потому что мне нужно много портов., @TechCreogen
@jsotola То, на что вы указали, похоже на проблему… это очевидно. но есть ли обходной путь?, @TechCreogen
Мне нужно много портов
....с какой целью? ..... похоже, что это проблема XY ..... у вас может быть или не быть ошибочное решение проблемы отсутствия контактов ввода-вывода, и вы задаете свой вопрос, пытаясь заставить решение работать, @jsotola