#26 2024-03-09 19:42:34

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Не працює код PWM вимикача на голому чіпі Attiny13

Daminski пише:

На такий код видає помилку "'builtin_avr_cli' was not declared in this scope", хоча в коді написано саме "builtin_avr_cli();""

Якщо по-ардуінівськи, то

  noInterrupts();
...
  interrupts();

Або просто

  cli();
...
  sei();

Неактивний

#27 2024-03-09 19:54:57

Daminski
Учасник
Зареєстрований: 2022-08-12
Повідомлень: 18

Re: Не працює код PWM вимикача на голому чіпі Attiny13

dimich пише:

А який пекедж використовуєте для attiny13? MicroCore?

Ні, я використовував руснявий GyverCore, здається там новіше все.


dimich пише:

Тут уже дивіться, чим відрізняється форма сигналів на піні при використанні тестера та "інших пристроїв". Осцилограф вам у поміч.

Ех, нажаль поки осцилографа не маю. Але схоже треба буде купити якийсь big_smile

Неактивний

#28 2024-03-09 20:09:03

Daminski
Учасник
Зареєстрований: 2022-08-12
Повідомлень: 18

Re: Не працює код PWM вимикача на голому чіпі Attiny13

dimich пише:

Або просто

  cli();
...
  sei();

Дякую, так вже не видає помилки, але всерівно чомусь нема ніякої реакції на PWM. Чіп аттіні прошиваю на 9.6МГц

Неактивний

#29 2024-03-10 00:05:36

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Не працює код PWM вимикача на голому чіпі Attiny13

Daminski пише:

всерівно чомусь нема ніякої реакції на PWM. Чіп аттіні прошиваю на 9.6МГц

Здається мені, вашу задачу простіше і надійніше вирішити без усяких кучерявих pulseIn(). Яка конкретно умова задачі? Із того, що зрозуміло з коду:
Якщо тривалість імпульсів більше 1800 мкс - видати на пін високий рівень.
Якщо менше 1200 мкс - видати низький рівень.

Яка необхідна точність?
Що має відбуватись, якщо імпульси перестали надходити? Який таймаут на очікування початку імпульса?
Що має відбуватись, якщо імпульс триває довше певного ліміта? Який цей ліміт?

Остання редакція dimich (2024-03-10 00:08:23)

Неактивний

#30 2024-03-10 01:40:26

Daminski
Учасник
Зареєстрований: 2022-08-12
Повідомлень: 18

Re: Не працює код PWM вимикача на голому чіпі Attiny13

dimich пише:
Daminski пише:

всерівно чомусь нема ніякої реакції на PWM. Чіп аттіні прошиваю на 9.6МГц

Здається мені, вашу задачу простіше і надійніше вирішити без усяких кучерявих pulseIn(). Яка конкретно умова задачі? Із того, що зрозуміло з коду:
Якщо тривалість імпульсів більше 1800 мкс - видати на пін високий рівень.
Якщо менше 1200 мкс - видати низький рівень.

Яка необхідна точність?
Що має відбуватись, якщо імпульси перестали надходити? Який таймаут на очікування початку імпульса?
Що має відбуватись, якщо імпульс триває довше певного ліміта? Який цей ліміт?

Так, задача максимально проста: коли є 1800 імпульсів – подати високий сигнал, а коли менше 1200 імпульсів – подати низький сигнал.

Думаю точність до 50 мікросекунд буде допустима. Навіть не знаю як це можна зробити без pulseIn(). Здавалося б така проста задача, яка одразу в всіх працює в відеоуроках з ютубу. А на практиці не все так просто...

Не зовсім зрозумів про ліміти. А таймаут на очікування  початку імпульсів я ставив 25 мікросекунд. В функції pulseIn() це значення було "25000" як третій аргумент.

Неактивний

#31 2024-03-10 10:30:33

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Не працює код PWM вимикача на голому чіпі Attiny13

Daminski пише:

Думаю точність до 50 мікросекунд буде допустима.

Враховуючи точність внутрішнього осцилятора в 10% навіть з абсолютно точним алгоритмом для 1800 мкс похибка вже може бути до 180 мкс.

Daminski пише:

Навіть не знаю як це можна зробити без pulseIn().

pulseIn() - всього лише функція бібліотеки ардуіно для вимірювання часу. А час можна вимірювати різними способами.

Daminski пише:

Здавалося б така проста задача, яка одразу в всіх працює в відеоуроках з ютубу. А на практиці не все так просто...

У відеоуроках же мабуть оригінальну ардуінівську бібліотеку використовують. А для attiny13 сторонній пекедж зі своєю бібліотекою. Хто знає, як її тестували, на якому залізі, і чи тестували взагалі. Якщо і оригінальній далеко до ідеалу, то що вже казати про сторонні.

Daminski пише:

Не зовсім зрозумів про ліміти. А таймаут на очікування  початку імпульсів я ставив 25 мікросекунд. В функції pulseIn() це значення було "25000" як третій аргумент.

Один таймаут - це ліміт на час очікування початку імпульса. А можливий і такий сценарій, що імпульс почався, але залишився активним на невизначений період. У прикладі нижче при такому сценарії сигнал на виході просто залишається високим.

Один із можливих варіантів реалізації:

#include <avr/io.h>
#include <avr/power.h>

#define PIN_INPUT       3
#define PIN_OUTPUT      0

// Таймер буде налаштовано так, що переповнення відбуватиметься
// з частотою 100 кГц; один тік - 10 мкс
#define TICK_US  10
// макрос US2T() конвертує мікросекунди в тіки
#define US2T(us) ((us - 1) / TICK_US + 1)

// wait_for() очікує поки вхідний пін не опиниться в заданому стані
// повертає 1 якщо пін опинився в заданому стані
//          0 якщо сплив час очікування
// timeout задається в тіках таймера; має бути більше 0
static uint8_t wait_for(uint8_t state, uint16_t timeout)
{
    TCNT0 = 0;              // обнуляєм лічильник таймера
    TIFR0 = _BV(OCF0A);     // скидаєм флаг переповнення
    TCCR0B = _BV(CS00);     // запускаєм таймер з дільником 1

    // чекаєм поки на вході не буде потрібний стан
    // або не настане таймаут
    while (((PINB & _BV(PIN_INPUT)) != 0) != state)
    {
        if (TIFR0 & _BV(OCF0A))   // переповнення таймера
        {
            TIFR0 = _BV(OCF0A);   // скидаєм флаг переповнення
            if (--timeout == 0)   // час очікування сплив?
            {   // так
                TCCR0B = 0;       // зупиняєм таймер
                return 0;
            } // ні - чекаєм далі
        }
    }

    TCCR0B = 0;  // зупиняєм таймер
    return 1;
}

int main(void)
{
    clock_prescale_set(clock_div_1); // вимикаєм дільник F_CPU

    DDRB  = _BV(PIN_OUTPUT);
//    PORTB = _BV(PIN_INPUT);  // внутрішня підтяжка на PIN_INPUT (якщо потрібно)

    TCCR0A = _BV(WGM01);       // режим CTC
    OCR0A = F_CPU / (1000000ul / TICK_US) - 1;  // частота переповнення таймера 100 кГц, цикл 10 мкс

    for (;;)
    {
        // стан OFF
        PORTB &= ~_BV(PIN_OUTPUT);
        do {
            // чекаєм на високий рівень на вході
            while ((PINB & _BV(PIN_INPUT)) == 0);
            // чекаєм на низький рівень на вході
            // якщо високий рівень протримався довше 1800 мкс - перехід в стан ON
        } while (wait_for(0, US2T(1800)));

        // стан ON
        PORTB |= _BV(PIN_OUTPUT);
        do {
            // чекаєм на низький рівень на вході
            while ((PINB & _BV(PIN_INPUT)) != 0);
            // чекаєм на високий рівень або таймаут 25 мс
            // якщо імпульса нема довше 25 мс - перехід в стан OFF
            if (!wait_for(1, US2T(25000))) {
                break;
            }
            // чекаєм на низький рівень
            // якщо високий рівень протримався більше 1200 мкс - залишаємось в стані ON
        } while (!wait_for(0, US2T(1200)));
    }
}

Це НЕ скетч ардуіно.
Компіляція:

avr-gcc -Wall -pedantic \
    -Os -mmcu=attiny13a \
    -DF_CPU=9600000ull \
    -ffunction-sections -fdata-sections -flto \
    -Wl,--gc-sections \
    -o firmware.elf firmware.c

Прошивка:

avrdude -c usbasp -p t13a -U flash:w:firmware.elf:a

Замініть usbasp на свій програматор, якщо у вас інший.

Остання редакція dimich (2024-03-10 10:34:34)

Неактивний

#32 2024-03-10 12:02:10

Daminski
Учасник
Зареєстрований: 2022-08-12
Повідомлень: 18

Re: Не працює код PWM вимикача на голому чіпі Attiny13

dimich пише:

В першу чергу впевніться, що всі флаги препроцесора, компілятора і лінкера коректні. Як ви збираєте скетч, в IDE? Увімкніть "Show verbose output during compile" (чи як воно там в локалізованому варіанті) і покажіть вивод процесу збірки.

Так, я використовую Arduino IDE. Витягнув лог компіляції і схоже, що я все ж використовую MicroCore. Можливо вам цей лог щось скаже, бо я тут нічого не розумію:

D:ProgrammingArduino 1.8.16arduino-builder -dump-prefs -logger=machine -hardware D:ProgrammingArduino 1.8.16hardware -hardware D:ProgrammingArduino 1.8.16datapackages -tools D:ProgrammingArduino 1.8.16tools-builder -tools D:ProgrammingArduino 1.8.16hardwaretoolsavr -tools D:ProgrammingArduino 1.8.16datapackages -built-in-libraries D:ProgrammingArduino 1.8.16libraries -libraries D:ProgrammingArduino codeslibraries -fqbn=MicroCore:avr:13:clock=1M2,eeprom=keep,BOD=1v8,bootloader=no_bootloader -ide-version=10816 -build-path C:UsersuserAppDataLocalTemparduino_build_416861 -warnings=none -build-cache C:UsersuserAppDataLocalTemparduino_cache_133984 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.arduinoOTA.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsarduinoOTA1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsarduinoOTA1.3.0 -prefs=runtime.tools.avrdude.path=D:ProgrammingArduino 1.8.16datapackagesMicroCoretoolsavrdude7.1-arduino.1 -prefs=runtime.tools.avrdude-7.1-arduino.1.path=D:ProgrammingArduino 1.8.16datapackagesMicroCoretoolsavrdude7.1-arduino.1 -verbose D:ProgrammingArduino codesAttiny_PWMAttiny_PWM.inoD:ProgrammingArduino 1.8.16arduino-builder -compile -logger=machine -hardware D:ProgrammingArduino 1.8.16hardware -hardware D:ProgrammingArduino 1.8.16datapackages -tools D:ProgrammingArduino 1.8.16tools-builder -tools D:ProgrammingArduino 1.8.16hardwaretoolsavr -tools D:ProgrammingArduino 1.8.16datapackages -built-in-libraries D:ProgrammingArduino 1.8.16libraries -libraries D:ProgrammingArduino codeslibraries -fqbn=MicroCore:avr:13:clock=1M2,eeprom=keep,BOD=1v8,bootloader=no_bootloader -ide-version=10816 -build-path C:UsersuserAppDataLocalTemparduino_build_416861 -warnings=none -build-cache C:UsersuserAppDataLocalTemparduino_cache_133984 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.arduinoOTA.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsarduinoOTA1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=D:ProgrammingArduino 1.8.16datapackagesarduinotoolsarduinoOTA1.3.0 -prefs=runtime.tools.avrdude.path=D:ProgrammingArduino 1.8.16datapackagesMicroCoretoolsavrdude7.1-arduino.1 -prefs=runtime.tools.avrdude-7.1-arduino.1.path=D:ProgrammingArduino 1.8.16datapackagesMicroCoretoolsavrdude7.1-arduino.1 -verbose D:ProgrammingArduino codesAttiny_PWMAttiny_PWM.inoUsing board '13' from platform in folder: D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0Using core 'microcore' from platform in folder: D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0Detecting libraries used..."D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp" -o nulGenerating function prototypes..."D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861preprocctags_target_for_gcc_minus_e.cpp""D:ProgrammingArduino 1.8.16tools-builderctags5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:UsersuserAppDataLocalTemparduino_build_416861preprocctags_target_for_gcc_minus_e.cpp"Компілювання скетчу..."D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp.o"Compiling libraries...Compiling core..."D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -x assembler-with-cpp -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorepcrt.S" -o "C:UsersuserAppDataLocalTemparduino_build_416861corepcrt.S.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -x assembler-with-cpp -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoremillis.S" -o "C:UsersuserAppDataLocalTemparduino_build_416861coremillis.S.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorewiring.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861corewiring.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorewiring_digital.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_digital.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorewiring_analog.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_analog.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorewiring_shift.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_shift.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoreWInterrupts.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861coreWInterrupts.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorewiring_pwm.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_pwm.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu11 -ffunction-sections -fdata-sections -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorewiring_pulse.c" -o "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_pulse.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoreHalfDuplexSerial.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861coreHalfDuplexSerial.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoreTone.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861coreTone.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorePrint.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861corePrint.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoreWMath.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861coreWMath.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoreWString.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861coreWString.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoremain.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861coremain.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorepicoUART.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861corepicoUART.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocoremicros.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861coremicros.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "D:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocorepicoUART_rxISR.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861corepicoUART_rxISR.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coremillis.S.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corepcrt.S.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coreWInterrupts.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corewiring.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_analog.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_digital.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_pulse.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_pwm.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corewiring_shift.c.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coreHalfDuplexSerial.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corePrint.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coreTone.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coreWMath.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coreWString.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coremain.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861coremicros.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corepicoUART.cpp.o""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc-ar" rcs "C:UsersuserAppDataLocalTemparduino_build_416861corecore.a" "C:UsersuserAppDataLocalTemparduino_build_416861corepicoUART_rxISR.cpp.o"Архівування відкомпільованого ядра (кешування) в: C:UsersuserAppDataLocalTemparduino_cache_133984corecore_0e0dbc6b60ddf534e04b1636562a52e3.aLinking everything together..."D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -w -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -g -fuse-linker-plugin -Wl,--gc-sections -mrelax -mmcu=attiny13a -nostartfiles -Wl,--undefined=__vectors -o "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.elf" "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp.o" "C:UsersuserAppDataLocalTemparduino_build_416861/corecore.a" "-LC:UsersuserAppDataLocalTemparduino_build_416861" -lm"D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.elf" "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.eep""D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -R .eeprom "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.elf" "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.hex"cmd /C echo. && "D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-objdump" --disassemble --source --line-numbers --demangle --section=.text "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.elf" > "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino_attiny13a_1200000L.lst" "D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:UsersuserAppDataLocalTemparduino_build_416861/Attiny_PWM.ino.elf"Скетч використовує 984 байтів (96%) місця зберігання для програм. Межа 1024 байтів.Глобальні змінні використовують 30 байтів (46%) динамічної пам’яті,  залишаючи 34 байтів для локальних змінних. Межа 64 байтів.




dimich пише:

pulseIn() рахує, скільки ітерацій циклу встигає виконатись перед зміною стану піна. Звісно, при обробці переривання виконання циклу призупиняється і ітерації не рахуються. В ардуіно переривання по таймеру виникає кожні 64 * 256 = 16384 такта. Один і той же код обробника переривання на 16 МГц виконується в 1.7 рази швидше, ніж на 9.6 МГц.

Хм, можливо тому й спрацювало на тестері сервомашикок розділення значень 1200 та 1800 навпіл (600 і 900) на частоті 9.6МГц. Але ж чомусь в відеоуроках з ютубу в людей одразу виходить, що аттіні зчитує PWM сигнал коректно на цій частоті, без розділення значень сигналу два.


dimich пише:

Доречі, вимкнути дільник частоти на 8 можна і програмно за допомогою clock_prescale_set(), без перешивання фʼюза.

А підскажете на майбутнє як це зробити в коді? Це потрібно в дужках вписати якесь значення?


dimich пише:
Daminski пише:

і чи можна тепер заставити тіні працювати і з іншими пристроями окрім тестера сервомашинок?

Для точного виміру інтервалів часу я би не звʼязувався з бібліотеками ардуіно, а виміряв би таймером напряму.

А як можна виміряти значення PWM напряму без таймера?

Неактивний

#33 2024-03-10 19:48:21

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Не працює код PWM вимикача на голому чіпі Attiny13

Daminski пише:

Можливо вам цей лог щось скаже, бо я тут нічого не розумію:

На майбутнє: на форумі можна завантажити файл і вставити на нього посилання в повідомленні. В тексті зворотні слеші зʼїдає чомусь.

Daminski пише:

Компілювання скетчу..."D:ProgrammingArduino 1.8.16datapackagesarduinotoolsavr-gcc7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -flto -fno-reorder-blocks -ffixed-r2 -ffixed-r3 -ffixed-r4 -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=1200000L -DARDUINO=10816 -DARDUINO_attiny -DARDUINO_ARCH_AVR "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0coresmicrocore" "-ID:ProgrammingArduino 1.8.16datapackagesMicroCorehardwareavr2.3.0variantsattiny13a" "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp" -o "C:UsersuserAppDataLocalTemparduino_build_416861sketchAttiny_PWM.ino.cpp.o"

IDE передає компілятору, що частота 1200000 Гц. А у вас 9600000 Гц, якщо фʼюз дільника скинуто.

Daminski пише:

Хм, можливо тому й спрацювало на тестері сервомашикок розділення значень 1200 та 1800 навпіл (600 і 900) на частоті 9.6МГц.

Навряд чи це через переривання, там не такий вплив.

Daminski пише:

Але ж чомусь в відеоуроках з ютубу в людей одразу виходить, що аттіні зчитує PWM сигнал коректно на цій частоті, без розділення значень сигналу два.

Ну я тих відеоуроків не бачив, не знаю, що там за core package використовується, якої версії, яка конфігурація фʼюзів на attiny, і що за сигнали аналізуються.

Daminski пише:

А підскажете на майбутнє як це зробити в коді? Це потрібно в дужках вписати якесь значення?

Так, в попередньому повідомленні є в прикладі:

clock_prescale_set(clock_div_1); // вимикаєм дільник F_CPU
Daminski пише:

А як можна виміряти значення PWM напряму без таймера?

"Напряму" я мав на увазі без pulseIn() з ардуінівської бібліотеки. pulseIn() якраз і виміряє тривалість імпульсу без таймера, покладаючись на те, що ітерація цикла виконується за заздалегідь відому кількість тактів процесора.

Остання редакція dimich (2024-03-10 19:50:04)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму