Proteus и AVR
Почему в среде Proteus таймер/счётчик2 м/к Atmega16A в асинхронном режиме работает без кварцевого резонатора (32768Hz)? В дополнение могу сказать, что бит AS2 в регистре ASSR установлен в единицу. Наличие/отсутствие кварца между TOSC1 и TOSC2 роли не играет. С выхода счётчика OC2 снимается выход частотой 64 Гц = (2^15 (32768) / 256 (8-bit) / 2). Я понимаю, что протеус это симуляция, но как сделать так, чтобы он работал так, как описано в даташите? Сбивает с толку.
Помогите выбрать язык программирования
Здравствуйте, стоит задача изучение основ программирования и алгоритмизации. В дальнейшем переход на углубленный уровень для программирования микроконтроллеров. И вот что выбрать: си, с++, си шарп? Приложения нужны будут, но скорее для написания интерфейса для обработки данных с МК, написания сложных приложений не будет.
Посоветуйте, пожалуйста, язык и книгу, которую у нас можно купить.
Область применения: самообучение и обучение детей в дальнейшем в кружке.
Как пропатчить прерывания на Arduino?
Все чаще и чаще, мне вспоминается "классическая шутка" :
Ну и у меня "классический" вопрос:
"Как пропатчить Ардуину" на работу с регистрами?
Суть:
прижучило меня прототипировать устройство с "хитрым" и самое главное "быстрым" протоколом на UART.
В наличии есть ардуина 2560, мне пофиг, сам главное чтобы монотонно циферки отправляло, и я доволен :)
Яж "дурак", яж с криками "ща заардуиню"... наардуинил...
Громоздкость кода ардуино - дает неудовлетворительный результат.
монотонности потока данных - не получается. Байтик либо задержится, либо вообще "потеряется" с кодом EOF.
Ок.
1)Переезжаем в AS7/MicrochipStudio.
1.1. Как же классно писать в IDE "нормального программиста"
2) Вспоминаем "как там регистрами рулить" на С/С++
компилим, шьем... 5 секунд... полет нормальный...
7 секунд полет норм...
8я секунда...
Суть:
0. чистый проект AS7 C/C++, язык "быдло Сиплюс" на диалекте Си.
1. рулю UART0, через регистры, на 230400
2. Декларирую ISR' s" UDRE и TXE.
задача: отправить массив uint8_t указанной длинны.
пусть будет...
uint8_t Word[32] = {`H`...}; //"Hello world\n\0"
есть функция запуска процесса...
есть обработчик UDRE, с доступом через указатель к массиву, и приватному uint8 счетчику позиции и длинны.
есть обработчик TXC, обнуляющий счетчики.
по значениям счетчика запуск отслеживается.
а в железе это работает так:
Hello world
Hello world
Hello world
(спустя 7 секунд)
HeHeHeHeHeHeHeHeHe....
причем на осциллографе, я реально вижу, что каждый символ
начинает ходить с паузой в 1мс.
все мозги сломал... в чем прикол?
как пропатчить ардуину на прерывания?
(без рейтинга)
UPP: извиняюсь за "косноязычие в комментах".... по буквам "мажу"... сенсорный экран, он такой сенсорный...
Статические переменные вместо глобальных на Си/Си++
Использование глобальных переменных считается дурным тоном, потому что создает много проблем. Избежать их можно с помощью ключевого слова static, которое создает статические переменные.
Есть простой способ избавиться от большинства глобальных переменных.
Переменная A располагается в глобальной области памяти, но имеет локальную область видимости (в пределах функции fun). То есть переменная сохраняет свое значение между вызовами функции. Начальное значение переменной равно 10.
Этот способ не годится, если функциям нужно обмениваться данными, например, обработчику прерывания с основной программой. Это решается созданием глобальной переменной в отдельном файле. Ниже приведен код такого файла.










