Есть ли в ардуино файл описаний для атмеги 328? И как производить запись/чтение необходимых регистров. Мне напримет требуется считать значение регистра для того что бы понять изменяет ли его какая подключенная библиотека или нет
Работа с регистрами ни чем не отличается от работы с переменными. Если речь идёт о периферии, то необходимо внимательно читать даташит. В частности, в каком поярдке осуществлять запись регистров, как и когда их читать и прочее.
С прямым обращением к регистрам поаккуратнее надо - учитываем системные функции референса IDE (дабы их не зацепить). Частота для различных платформ на основе AVR по умолчанию 16 МГЦ, если в описании платформы не присутствует чего иного - те же варианты от MCUdude или diy....
i=0x21; //он переменной назначает константу а не значение регистра 0x21
если хочется оперировать адресом регистра, то надо сперва взять его адрес:
Цитата:
volatile uint16_t* OCR;
OCR = &OCR1A;
Всё. Теперь при записи в переменную OCR значения, оно запишется в регистр OCR1A. Почему так? Потому, что в переменной OCR лежит адрес регистра OCR1A. Сама переменная OCR уже называется указатель.
Говорю же - не троньте регистры без предварительного ознакомления с их системным назначением 9без предварительного анализа возможных "наложений")... Т0 - используется в millis() и delay() а также в ШИМ на выводах D5 и D6. Т1 - ШИМ на выводах D9 и D10. Т2 - ШИМ на выводах D3 и D11 и функция tone(). Из "свободно-безопасного" использование прерывания по OCR0A - но там смотрим в каких кристаллах он имеется (168 и 328 есть а в 8 нету). Относительно прямого управления регистрами портов - смотрим разве что в случае, если в пределах порта часть выводов используется другими функциями.
Таймер 0 используется для работы системных функций времени delay(), delayMicroseconds() и millis() и micros(), поэтому перенастройка таймера 0 под свои нужды приведёт к некорректной работе функций времени, но при желании можно их скорректировать следующим образом:
#define delay(x * div) #define delayMicroseconds(x * div) #define millis() (millis() / div) #define micros() (micros() / div) // где div - делитель (или множитель), подбирать из степеней двойки Таймер 1 используется в некоторых библиотеках, например Servo. При перенастройке таймера 1 под свои нужды Servo перестанет работать.
Таймер 2 используется для генерации звука стандартной функцией tone(), причём перенастройка таймера не “сломает” tone – вызов функции перенастроит таймер под нужды функции.
Различные библиотеки могут использовать таймеры для своих целей, если вам нужны прерывания по таймерам совместно с работой других библиотек – смотрите, не используют ли они эти же таймеры!
Прерывание по таймеру настраивается при помощи обращения к регистрам таймера. Мы сделали удобную, очень лёгкую и быструю библиотеку, которая позволит контролировать прерывания по таймерам при помощи простых команд.
осторожно ссылка ломает видовс ХР (BOB51 так говорит - у других все нормально), и там на сайте есть переделанные библиотеки таймеров: https://alexgyver.ru/gyvertimers/
Зачем слезать преждевременно? Если ресурс позволяет- его надо использовать до последнего возможного содержимого и лишь затем переходить к следующему уровню. Ведь работа на уровне регистров подразумевает и "чистый ассемблер" в том числе - а это абсолютно полная проработка документации конкретного кристалла. Нужно ли подобное даже "продвинутому пользователю"? Вы же не используете в повседневной работе с компом ни функции биос, ни функции API - только сами программы в основном. То же и для МК справедливо. Относительно адуринки - весьма неплохой результат "независимой тикалки" можно получить из тандема tone() + int0/int1
Ресурс с самого начала не позволял )) Скачайте AVRStudio и пишите на ассемблере. http://easyelectronics.ru/avr-studio-likbez.html Там есть все регистры )) И можно смотреть в реальном времени как они работают.
Так за "чистый ассемблер" отдельный разговор - там даташит перелопатить придется. А у 328й это весьма моного для расчепятки и вычитывания... Вряд-ли тот, кому терпения на адуринку не хватило в чистый ассемблер влезть осмелится.
В случае с ЯВУ ассемблерные вставки подчиняются правилам компилятора - всегда в соответствующей "обвертке" должны быть и с соблюдением определенных правил. Взять хотя бы управление стеком... В "чистом виде" - все ошибки на совести автора исходника, зато власть над ресурсами МК абсолютная. Ессно желательно и тем и другим владеть хотя-бы "продвинутым пользователем".
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения