#1 2023-05-16 19:43:27

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Використання ардуіно як програматор' для atmega

Народ, допоможіть будь ласка. Пишу програму для atmega8, за допомогою arduino icp. Потрібно збільшити частоту ШИМ, на стандартних частотах двигун видае неприємний звук. Хто знає як це зробити?

Неактивний

#2 2023-05-16 20:42:51

Васятко
Гість

Re: Використання ардуіно як програматор' для atmega

Що таке

Tihon пише:

arduino icp

і

Tihon пише:

на стандартних частотах

це яких?

#3 2023-05-16 22:05:11

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

соррlи, Arduino ISP, опечатка. Використовую ардуіно у якості програматора. Наскільки я розумію, у коді bootloader є налаштування частоти для ШИМ . Переглядав форуми на цю тему, знайшов тільки як це зробити в
середовищі AtmelStudio. А як це зробити з середовища ArduinoISP. На зараз,судячи з усього, частота не перевищуе 1 кГц.

Неактивний

#4 2023-05-17 00:32:23

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

Re: Використання ардуіно як програматор' для atmega

Ні в bootloader, ні в ArduinoISP частота ШІМ не задається, вона задана в Arduino core (код, який надає програмісту однаковий API для різних контролерів). Не обовязково лізти в цей код, щоб змінити частоту, це можна зробити в коді своєї програми прямим звертанням до регістів. Наприклад, для atmega328p (і для вашої atmega8a так само):
TCCR0B = (TCCR0B & 0xf8) | 1;
TCCR1B = (TCCR1B & 0xf8) | 1;
TCCR2B = (TCCR2B & 0xf8) | 1;
зробить частоту всіх трьох таймерів максимальною (в даташиті шукайте по ключовим словам timer/counter prescaler). Але один з таймерів Arduino core використовує для millis, тому millis перестане працювати коректно. Також звертання до Arduino core, які працюють з таймерами, будуть повертати настройки частоти з Arduino core.

Неактивний

#5 2023-05-17 21:00:51

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

Величезне Вам дякую. Сьогодні спробую. Якщо виникнуть питання, можна до Вас звертатися? Адже я у початку цього шляху, але мені дуже цікаво. До того ж я дуже давно займаюсь автоматикой для воріт, і ремонтом теж, тому мене кортить зробити свої программи для управління приводами різних типів. Ще раз дякую за відповідь.

Неактивний

#6 2023-05-17 21:32:45

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

Доброго вечора. Я спробував, але нічого не виходить. Річ у тому, що я пишу код у програмній среді ардуіно, і він не сприймає пряме звертання до регистрів, видає помилку. Чи може я щось не так роблю? Заздалегіть дякую за відповідь.

Неактивний

#7 2023-05-17 21:53:45

Васятко
Гість

Re: Використання ардуіно як програматор' для atmega

Tihon пише:

Чи може я щось не так роблю?

Так, ви не показуєте що і де ви там пишете. Чи ви вважаєте що тут всі екстрасенси?

#8 2023-05-18 10:40:28

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Використання ардуіно як програматор' для atmega

Tihon пише:

Доброго вечора. Я спробував, але нічого не виходить. Річ у тому, що я пишу код у програмній среді ардуіно, і він не сприймає пряме звертання до регистрів, видає помилку. Чи може я щось не так роблю? Заздалегіть дякую за відповідь.

arduinoicp по сути это компилятор и он вполне корректно воспринимает прямое обращение к регистрам и таймерам ...

Неактивний

#9 2023-05-18 13:37:08

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

Re: Використання ардуіно як програматор' для atmega

Tihon пише:

не сприймає пряме звертання до регистрів, видає помилку

"Регістри" в Сі - це константи, які задають адреси регістрів мк, вони визначені в заголовочних файлах, мабуть у вас не підключилась автоматично:
#include <avr/io.h>

Неактивний

#10 2023-05-18 20:40:22

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

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

void setup() {
  analogReference(INTERNAL);

pinMode(4,OUTPUT);  // реле 1
pinMode(14,OUTPUT); // реле 2
pinMode(18,INPUT);  // усилие
pinMode(11,OUTPUT); // скорость
pinMode(16,INPUT);  // кнопка
pinMode(12,OUTPUT); // лампа
pinMode(13,OUTPUT); // диод статус
pinMode(17,INPUT);  // ру 1 канал

TCCR0B = (TCCR0B & 0xf8) | 1;
TCCR1B = (TCCR1B & 0xf8) | 1;
TCCR2B = (TCCR2B & 0xf8) | 1;
Я зробив так. Помилку видає. Вибачте, якщо задаю клопоту, але підкажіть, що не так.

Неактивний

#11 2023-05-18 21:05:58

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

C:UserssergiDocumentsArduinonewduo5.1newduo5.1.ino: In function 'void setup()':
C:UserssergiDocumentsArduinonewduo5.1newduo5.1.ino:16:1: error: 'TCCR0B' was not declared in this scope
TCCR0B = (TCCR0B & 0xf8) | 1;
^~~~~~
C:UserssergiDocumentsArduinonewduo5.1newduo5.1.ino:16:1: note: suggested alternative: 'TCCR1B'
TCCR0B = (TCCR0B & 0xf8) | 1;
^~~~~~
TCCR1B
C:UserssergiDocumentsArduinonewduo5.1newduo5.1.ino:18:1: error: 'TCCR2B' was not declared in this scope
TCCR2B = (TCCR2B & 0xf8) | 1;
^~~~~~
C:UserssergiDocumentsArduinonewduo5.1newduo5.1.ino:18:1: note: suggested alternative: 'TCCR1B'
TCCR2B = (TCCR2B & 0xf8) | 1;
^~~~~~
TCCR1B

exit status 1

Compilation error: 'TCCR0B' was not declared in this scope
ось так реагує

Неактивний

#12 2023-05-18 21:38:11

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

Re: Використання ардуіно як програматор' для atmega

Ви компілюєте для atmega8, там дійсно імена регістрів відрізняються від atmega8a. TCCR0 замість TCCR0B, TCCR2 замість TCCR2B. А що у вас на чіпі написано?

Неактивний

#13 2023-05-19 08:12:43

Васятко
Гість

Re: Використання ардуіно як програматор' для atmega

Honey пише:

мабуть у вас не підключилась

Honey пише:

Ви компілюєте для

Таки знайшовся один екстрасенс...

#14 2023-05-19 20:40:29

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

Honey пише:

Ви компілюєте для atmega8, там дійсно імена регістрів відрізняються від atmega8a. TCCR0 замість TCCR0B, TCCR2 замість TCCR2B. А що у вас на чіпі написано?

Ура. вийшло. Велике Вам дякую. Правда, як ви і казали, зараз затримки delay працюють некоректно, спробую щось зробити. А на загал плавний старт працюе відмінно, як і треба.
Хотів запитати, а які примочки та функціі можна ще реалізувати прямими зверненнями до регистрів.Може таким чином спробувати оптимізувати програму. Дякую за відповідь.

Неактивний

#15 2023-05-19 20:50:46

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

І ще питання. Чи можна у програмному коді робити звернення до подпрограми, після виконання якої здійснюється повернення на наступний крок основної програми. Я поки ще не розумію, як це зробити.

Неактивний

#16 2023-05-19 20:52:37

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

С затримками розібрався.TCCR0 відповідає , залочив його.

Неактивний

#17 2023-05-19 21:19:21

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

Re: Використання ардуіно як програматор' для atmega

Tihon пише:

І ще питання. Чи можна у програмному коді робити звернення до подпрограми, після виконання якої здійснюється повернення на наступний крок основної програми. Я поки ще не розумію, як це зробити.

Мова програмування Сі

Неактивний

#18 2023-05-19 22:07:13

Tihon
Учасник
Зареєстрований: 2023-05-16
Повідомлень: 10

Re: Використання ардуіно як програматор' для atmega

Зрозумів, дякую. Я чомусь вважав, що відрізняється побудова программи для мікроконролерів від звичайного кода Сі. Гарного вечора.

Неактивний

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

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

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