#1 2023-10-13 12:21:29

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

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

Вітаю! Намагаюсь зробити, щоб запрацював елементарний код PWM вимикача на Attiny13 і він чомусь не працює. В якості генератора PWM імпульсів використовую тестер для сервомашинок. Доречі цей самий код, який я наведу нижче, нормально працює з заводським модулем Attiny85, який має свій завантажувач та вставляється в USB. Не можу зрозуміти в чому проблема при завантаженні цього ж коду на голий чіп Attiny13. Для прошивки чіпа використовую Arduino Nano, прошиваю через макетну плату та перемички.

Ось код:

void setup() {
    pinMode(3, INPUT);
    pinMode(0, OUTPUT);
    digitalWrite (0, LOW);
}
void loop() {
    int ch3 = pulseIn(3, HIGH);
    if (ch3 < 1200) {
    digitalWrite (0, LOW);
} 
    if (ch3 > 1800) {
    digitalWrite (0, HIGH);
}  
}

Ще буває мені видає помилку при заливці скетча в голий чіп Attiny13, але незваєаючи на це, натискаю кнопку завантаження скетчу вдруге і все записується. Інші коди, без PWM працюють нормально.

avrdude warning: attempt 1 of 10: not in sync: resp=0x15
avrdude warning: attempt 2 of 10: not in sync: resp=0x15

avrdude error: protocol expects OK byte 0x10 but got 0x14

avrdude error: protocol expects sync byte 0x14 but got 0x01
avrdude error: protocol expects sync byte 0x14 but got 0x10
avrdude error: initialization failed, rc=-1
        - double check the connections and try again
        - use -B to set lower ISP clock frequency, e.g. -B 125kHz
        - use -F to override this check

avrdude error: unknown response=0x12
avrdude error: unknown response=0x12


Підскажіть, будь ласка, в чому може бути справа?

Неактивний

#2 2023-10-13 13:31:15

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

Покажіть ф'юзи з тіні. Можливо там по замовчуванню встановлений дільник частоти на 8.

Неактивний

#3 2023-10-13 13:32:48

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

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

Honey пише:

Покажіть ф'юзи з тіні. Можливо там по замовчуванню встановлений дільник частоти на 8.

А що таке ф'юзи?

Неактивний

#4 2023-10-13 13:37:56

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

Про ф'юзи гляньте в цій темі, щоб не повторюватись

Неактивний

#5 2023-10-13 23:03:06

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

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

Honey пише:

Про ф'юзи гляньте в цій темі, щоб не повторюватись

Дякую, трохи почитав цю тему, подивився калькулятьр ф'юзів, але не розумію як це мені може допомогти. Коли я прошиваю Attiny мені перший раз видає помилку, що написана червоним текстом на початку теми, а на другу спробу завантажити скетч - нормально прошиває чіп і працює будь який простий код. Але саме функція pulseIn() таке враження, що взагалі не працює і нічого не считує. Хоча сигнальний провід від тестера сервомашинок підключений в наступний пін після піна з ключем (ніжка №2, пін PB3).

Чи ці ф'юзи можуть якось впливати на роботу функції pulseIn()?

Неактивний

#6 2023-10-14 00:02:40

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

Неактивний

#7 2023-11-10 23:50:47

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

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

Нарешті розібрався як за допомогою командної строки зчитувати ф'юзи, знайшов приклади на ютубі. Але всерівно щось не так. Аттіні прошивається нормально, а в командній строці при спробі зчитати інформацію про ф'юзи видає помилку, наче плата не підключена. Хоча порт вказував вірний, як пише в Arduino IDE (COM4), а тут чомусь пише "com1"... І ось яку помилку видає зараз в командній строці:

avrdude: ser_open(): can't open device ".com1": ═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы.

Що це тепер може бути?

Остання редакція Daminski (2023-11-10 23:53:16)

Неактивний

#8 2023-11-12 00:29:56

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

Ви вказали в команді перед COM4 якийсь не той ключик, а по замовчуванню воно використовує COM1.
Команда для читання ф'юзів така:
avrdude -P COM4 -b 19200 -c avrisp -p t13a -U lfuse:r:-:h -U hfuse:r:-:h

Неактивний

#9 2023-11-12 03:58:48

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

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

Honey пише:

Ви вказали в команді перед COM4 якийсь не той ключик, а по замовчуванню воно використовує COM1.
Команда для читання ф'юзів така:
avrdude -P COM4 -b 19200 -c avrisp -p t13a -U lfuse:r:-:h -U hfuse:r:-:h

Дякую, тепер хоч без ієрогліфів показало щось, але всерівно якась помилка sad

avrdude warning: attempt 1 of 10: not in sync: resp=0x15
avrdude warning: attempt 2 of 10: not in sync: resp=0x15


avrdude error: protocol expects OK byte 0x10 but got 0x14

avrdude error: protocol expects sync byte 0x14 but got 0x01
avrdude error: protocol expects sync byte 0x14 but got 0x10
avrdude error: initialization failed, rc=-1
        - double check the connections and try again
        - use -B to set lower ISP clock frequency, e.g. -B 125kHz
        - use -F to override this check

avrdude error: unknown response=0x12

avrdude done.  Thank you.

Неактивний

#10 2023-11-12 04:27:12

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

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

О, через ще 100500 спроб щось вийшло! Довелось прибрати з "t13a" літеру "a", хоча в мене мікросхема Attiny 13А. Що тепер робити далі, щоб запрацювало зчитування PWM сигналу? І щось дивне сталось з контролером. Чомусь перестав працювати код, навіть самий простий типу блінк.

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9007 (probably t13)
avrdude: reading lfuse memory:

Reading | ################################################## | 100% 0.02s

avrdude: writing output file "<stdout>"
0x3a
avrdude: reading hfuse memory:

Reading | ################################################## | 100% 0.02s

avrdude: writing output file "<stdout>"
0xfb

avrdude: safemode: Fuses OK (E:FF, H:FB, L:3A)

avrdude done.  Thank you.

Остання редакція Daminski (2023-11-12 04:50:47)

Неактивний

#11 2023-11-12 09:58:56

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

Заміна t13a на t13 ну аж ніяк не впливає на те, що "спрацювало", бо t13a це псевдонім для t13.
З ф'юзами тіні у Вас все гаразд, можете підставити в калькулятор і подивитися, що вони означають.
Залийте на NANO "програматор" з Arduino IDE, здається проблема з ним. Якщо цікаво, в examples має бути ArduinoISP.ino - це і є вихідний код "програматора".

Неактивний

#12 2023-11-13 15:17:14

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

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

Хм,  може й дійсно проблема з моїм програматором у вигляді ардуіно нано. Ще подивився на те, які налаштування мають ті ф'юзи, що скинув вище. В них параметр CKDIV8 (ділитель частоти на 8) відключений. Але дивно чому всерівно не було ніякої реакції на PWM сигнал.

А ось що мені видав IDE, коли спробував повторно записати скетч з ArduinoISP на свою плату ардуіно нано. В принципі це те ж саме, що мені писало, коли прошивав Attiny13A за допомогою NANO. Як це виправити?

Помилка запису завантажувача.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): unknown response=0x12


А коли натиснув ще раз на кнопку "Записати завантажувач", то виникла вже така помилка:

avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.

Помилка запису завантажувача.


Через деякий час пробував завантажити простий скетч блінк в свою ардуіно нано, видає ту ж саму помилку. Виходить, що якимось чином палата ардуіно зіпсувалась sad

Остання редакція Daminski (2023-11-13 15:58:59)

Неактивний

#13 2023-11-14 15:03:19

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

Спробуйте замінити кабель USB-miniUSB і підключити в інший USB-порт, бо щось у Вас проблема з самого початку має імовірнісний характер і прогресує.
Потестуйте на пункті 5 інструкції, має бути 100% стабільність і повторюваність.
Можна ще зробити так (скачати флеш):
avrdude -P COM4 -b 115200 -c arduino -p m328p -U flash:r:flashdump.hex:i
А потім повторювати (порівнювати зі скачаним):
avrdude -P COM4 -b 115200 -c arduino -p m328p -U flash:v:flashdump.hex:i

Неактивний

#14 2023-11-15 14:49:27

Pliamplystka
Гість

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

Спробуй не використовувати 0-й пін, на деяких платах він погано працює

#15 2023-11-17 04:18:00

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

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

Honey пише:

Спробуйте замінити кабель USB-miniUSB і підключити в інший USB-порт, бо щось у Вас проблема з самого початку має імовірнісний характер і прогресує.
Потестуйте на пункті 5 інструкції, має бути 100% стабільність і повторюваність.
Можна ще зробити так (скачати флеш):
avrdude -P COM4 -b 115200 -c arduino -p m328p -U flash:r:flashdump.hex:i
А потім повторювати (порівнювати зі скачаним):
avrdude -P COM4 -b 115200 -c arduino -p m328p -U flash:v:flashdump.hex:i

Дякую, ваш рецепт з командами допоміг повернути до нормальної роботи мою Arduino Nano smile

Хочу уточнити, що коректно працює AVRdude з вашого посилання і тільки якщо я її папку розміщаю на диску С:. А от "вбудована" версія AVRdude, котра йде в папці з ардуіно (C:/Users/user/AppData/Local/Arduino15/packages/arduino/tools/avrdude6.3.0-arduino17) чомусь взагалі не реагує на команди. Можливо тому що файл avrdude.conf знаходиться в іншій папці (C:/Users/user/AppData/Local/Arduino15/packages/arduino/tools/avrdude6.3.0-arduino17/etc).

Буду ще раз пробувати зчитати ф'юзи в аттіні. Також купив програматор USBasp і в ньому виявилась застаріла прошивка, для заміни якої потрібен другий такий самий програматор roll  Тож сподіваюсь щось вдасться зробити за допомогою ардуіно в якості програматора для аттіні.

Остання редакція Daminski (2023-11-17 04:27:36)

Неактивний

#16 2023-11-17 04:56:50

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

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

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9007 (probably t13a)
avrdude: reading lfuse memory ...
avrdude: writing output file <stdout>
0x3a
avrdude: reading hfuse memory ...
avrdude: writing output file <stdout>
0xfb

avrdude done.  Thank you.

Наскільки я зрозумів, зараз ф'юзи 3A FB і в калькуляторі ф'юзів на них відключено параметр "Divide clock by 8 internally; [CKDIV8=0]", тобто ділителя частоти не має бути. А при цьому чомусь простий код PWM вимикача всерівно не працює sad В чому ще може бути причина? Частота прошивки 9.6МГц, в якості PWM сигналу використовую тестер для сервомашинок... Але тепер радує, що вже не видає помилку при прошивці, яка була з самого початку smile

Остання редакція Daminski (2023-11-17 05:04:21)

Неактивний

#17 2023-11-17 11:45:23

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 379

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

З ф'юзами тіні все гаразд, дільник на 8 відключений. А Ви тестували скетч на нано і параметри 1200 і 1800 підібрали на ній? Тоді переконайтеся, що при компіляції скетчу для нано була виставлена частота процесора 16МГц, а для тіні 9.6МГц. І взагалі, переконайтеся, що pulseIn на тіні працює. Згідно її опису, якщо імпульс не виявлено, то вона повертає 0, додайте в код: digitalWrite(1, ch3 ? HIGH : LOW); і подивіться, що на пін 1 коли є ШІМ і коли немає. Щоб не чекала дуже довго, додайте третій параметр таймаут.
Якщо avrdude.conf лежить в іншому каталозі, то шлях до нього можна задати в командному рядку ключиком -C, без ключика avrdude шукає конфіг в каталозі, який в ного був зашитий при компіляції.
USBasp можна прошити за допомогою нано:
avrdude -P COM4 -b 19200 -c avrisp -p m8a -U flash:w:usbasp.atmega8.2011-05-28.hex
Прошивку взяти звідси і на USBasp замкнути перемичку Selfprogramming (дивіться схему USBasp).

Неактивний

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

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

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