Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

Tihon
2023-05-19 22:07:13

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

Honey
2023-05-19 21:19:21
Tihon пише:

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

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

Tihon
2023-05-19 20:52:37

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

Tihon
2023-05-19 20:50:46

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

Tihon
2023-05-19 20:40:29
Honey пише:

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

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

Васятко
2023-05-19 08:12:43
Honey пише:

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

Honey пише:

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

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

Honey
2023-05-18 21:38:11

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

Tihon
2023-05-18 21:05:58

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
ось так реагує

Tihon
2023-05-18 20:40:22

#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;
Я зробив так. Помилку видає. Вибачте, якщо задаю клопоту, але підкажіть, що не так.

Honey
2023-05-18 13:37:08
Tihon пише:

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

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

renoshnik
2023-05-18 10:40:28
Tihon пише:

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

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

Васятко
2023-05-17 21:53:45
Tihon пише:

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

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

Tihon
2023-05-17 21:32:45

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

Tihon
2023-05-17 21:00:51

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

Honey
2023-05-17 00:32:23

Ні в 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.

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