Ви не увійшли.
Народ, допоможіть будь ласка. Пишу програму для atmega8, за допомогою arduino icp. Потрібно збільшити частоту ШИМ, на стандартних частотах двигун видае неприємний звук. Хто знає як це зробити?
Неактивний
Що таке
arduino icp
і
на стандартних частотах
це яких?
соррlи, Arduino ISP, опечатка. Використовую ардуіно у якості програматора. Наскільки я розумію, у коді bootloader є налаштування частоти для ШИМ . Переглядав форуми на цю тему, знайшов тільки як це зробити в
середовищі AtmelStudio. А як це зробити з середовища ArduinoISP. На зараз,судячи з усього, частота не перевищуе 1 кГц.
Неактивний
Ні в 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.
Неактивний
Величезне Вам дякую. Сьогодні спробую. Якщо виникнуть питання, можна до Вас звертатися? Адже я у початку цього шляху, але мені дуже цікаво. До того ж я дуже давно займаюсь автоматикой для воріт, і ремонтом теж, тому мене кортить зробити свої программи для управління приводами різних типів. Ще раз дякую за відповідь.
Неактивний
Доброго вечора. Я спробував, але нічого не виходить. Річ у тому, що я пишу код у програмній среді ардуіно, і він не сприймає пряме звертання до регистрів, видає помилку. Чи може я щось не так роблю? Заздалегіть дякую за відповідь.
Неактивний
Чи може я щось не так роблю?
Так, ви не показуєте що і де ви там пишете. Чи ви вважаєте що тут всі екстрасенси?
Доброго вечора. Я спробував, але нічого не виходить. Річ у тому, що я пишу код у програмній среді ардуіно, і він не сприймає пряме звертання до регистрів, видає помилку. Чи може я щось не так роблю? Заздалегіть дякую за відповідь.
arduinoicp по сути это компилятор и он вполне корректно воспринимает прямое обращение к регистрам и таймерам ...
Неактивний
не сприймає пряме звертання до регистрів, видає помилку
"Регістри" в Сі - це константи, які задають адреси регістрів мк, вони визначені в заголовочних файлах, мабуть у вас не підключилась автоматично:
#include <avr/io.h>
Неактивний
#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;
Я зробив так. Помилку видає. Вибачте, якщо задаю клопоту, але підкажіть, що не так.
Неактивний
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
ось так реагує
Неактивний
мабуть у вас не підключилась
Ви компілюєте для
Таки знайшовся один екстрасенс...
Ви компілюєте для atmega8, там дійсно імена регістрів відрізняються від atmega8a. TCCR0 замість TCCR0B, TCCR2 замість TCCR2B. А що у вас на чіпі написано?
Ура. вийшло. Велике Вам дякую. Правда, як ви і казали, зараз затримки delay працюють некоректно, спробую щось зробити. А на загал плавний старт працюе відмінно, як і треба.
Хотів запитати, а які примочки та функціі можна ще реалізувати прямими зверненнями до регистрів.Може таким чином спробувати оптимізувати програму. Дякую за відповідь.
Неактивний
І ще питання. Чи можна у програмному коді робити звернення до подпрограми, після виконання якої здійснюється повернення на наступний крок основної програми. Я поки ще не розумію, як це зробити.
Неактивний
І ще питання. Чи можна у програмному коді робити звернення до подпрограми, після виконання якої здійснюється повернення на наступний крок основної програми. Я поки ще не розумію, як це зробити.
Неактивний