| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Программное инкримирование таймера AVR |
| Автор: Чучмек 8.11.2011, 19:02 | ||
| Подскажите как программно увеличить TCNTx на единицу ? Код аналогичный следующему - не вариант.
В связи с нехваткой памяти/регистров для решаемой задачи возникла идея использовать регистры 16 разрядного таймера под счетчик. |
| Автор: UniBomb 9.11.2011, 07:55 |
Почему? Возможно стоит пересмотреть методы решения задачи? |
| Автор: Чучмек 9.11.2011, 13:16 | ||
6байт - стек 2байта под вызов прерывания 2байта под вызов функций из прерывания 1байт - передача параметров в функции 1байт - сохранение регистров в стек 4байта - 4 отображаемых символа на 7 сегментном индикаторе 2байта - состояние 4х кнопок + антидребезг 2байта - последние, полученные по i2c данные 2байта - счетчики для двух выходных каналов Итого 16*8=128бит - ресурс ATtiny2313 r16-r19 - регистры для вычислений r20-r23- для i2c (адрес микрухи, адресация памяти в микрухе, два байта данных) r24 - счетчик ожидания i2c r25 - указатель меню X,Y - используются Не так уж много остается А нужно еще много чего - как минимум 5 байт.
Да боюсь, что это, как лезть в окно, когда открыта дверь. Встречал упоминание, что возможно объединение двух 16 разрядных таймеров в 32 разрядный Вот мне и нужно, чтобы переполнение 8 разрядного таймера было тактированием 16 разрядного |
| Автор: UniBomb 9.11.2011, 15:18 |
SRAM у этой тини 128 байт. А регистры с r0 по r15? Теперь хватает? |
| Автор: Чучмек 9.11.2011, 15:42 |
| Действительно срам. а насколько свободно их можно использовать? С головой. Но вопрос открытый. |
| Автор: UniBomb 9.11.2011, 16:50 |
Есть несколько оговорок. Во-первых регистры r0:r1 используются в качестве "неявных" операндов у некоторых команд. Так например команды умножения (которых нет в семействе тини) используют эти регистры для сохранения результата. Команды работы с памятью программ также используют эти регистры для сохранения/загрузки значений. А во-вторых некоторые команды работают только со старшими регистрами (r16:r32). Подробнее смотри документ "http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf", там к каждой команде даётся описание допустимых операндов. А в остальном их можно использовать совершенно свободно В интернетах частенько возникают споры о целесообразности использования регистров ввода/вывода для хранения значений, но как всегда в нужный момент под рукой нет ссылок Как по мне - недокументированное использование чего-либо ведёт к недокументированным (или по крайней мере не очевидным) ошибкам |
| Автор: Mazzi 9.11.2011, 20:27 |
| Как вариант можно настроить таймер на подсчёт импульсов от внешнего источника и одновременно этот же вывод назначить выходом. Тогда "дёрнув" этой ножкой (Т1 - выв.9 у аттини2313) получим инкремент таймера Т1. |
| Автор: Чучмек 9.11.2011, 21:45 |
| К сожалению ног мне тоже не хватает. (на одни и те же ноги вешаю индикатор,кнопки и i2c) А сейчас узнал, что и RESET под свои цели смогу использовать только после окончательной отладки. И пока не разобрался, как использовать XTAL под выход. |
| Автор: UniBomb 10.11.2011, 07:55 |
| Чучмек, я не знаю что ты там делаешь, но мне кажется что эот происходит как-то неправильно Тут тоже можно аппаратно изголяться. Во-первых можно использовать две тини (одну в качестве драйвера периферии), можно кнопки и индикатор повесить через сдвиговые регистры. Есть ещё расширители портов, работающие через SPI или I2C. Но опять же - это если возможность дорабатывать железо. |
| Автор: UniBomb 10.11.2011, 08:23 |
Конфигурируешь мк, что бы тактировался от внутренней RC цепи (смотри fuse биты CKSEL3..0) и всё. Конфигурируешь PA1 и PA0 как тебе надо и используешь как тебе хочется. |
| Автор: UniBomb 11.11.2011, 08:29 | ||
Ну я имел в виду опытный макет для ниокр, дипломная работа, личная поделка это или что ещё Ну так для этого есть макетные платы с гнёздами, отладочные платы и другие полуфабрикаты. Не думаю я, что то, что есть под рукой всегда будет хватать Открываем даташит и читаем:
Т.е. так как нужно. И если тебе хватит дефолтного мегагерца, то fuse биты можно вообще не трогать |
| Автор: Чучмек 12.11.2011, 20:12 |
| Да я потому и спросил, что читал об этом. Но в протеусе выводы XTAL упорно не хотели реагировать на программное изменение. Хоть с fuse по умолчанию, хоть с измененными (пробовал наугад). Однако сейчас попробовал выставить - XTAL подсветились синим. UniBomb, СПАСИБО! Ну а что касается основного вопроса - то пока использую в том варианте, про который писал не предлагать. |
| Автор: UniBomb 13.11.2011, 18:19 |
| Чучмек, а ты даташит то хоть смотрел? |
| Автор: Чучмек 13.11.2011, 21:01 |
| Да, только я в англицком ни буб бум |
| Автор: UniBomb 14.11.2011, 08:13 |
Чучмек, прелесть даташитов в том, что возможные значения расписаны в табличном виде, там совсем чуть-чуть со словарём достаточно посидеть ![]() Внутренней RC цепи соответствует только два значения битов CKSEL. Биты SUT1..0 и CKDIV8 на выводы XTAL вообще не влияют (первые определяют длительность сброса, второй делитель тактовой частоты). Но если всё равно туго, то могу посоветовать http://www.dodeca.ru/books/156/. Это те де самые даташиты, только переведённые на русский и обобщённые по всем мк семейства. Есть такая же по мегам. |