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