Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Программное инкримирование таймера AVR


Автор: Чучмек 8.11.2011, 19:02
Подскажите как программно увеличить TCNTx на единицу ?
Код аналогичный следующему - не вариант.
Код

 in r16,TCNT1L
 in r17,TCNT1H
 inc r16
 brne noH
 inc r17
 noH:
 out TCNT1H,r17
 out TCNT1L,r16
 

В связи с нехваткой памяти/регистров для решаемой задачи 
возникла идея использовать регистры 16 разрядного  таймера под счетчик.

Автор: UniBomb 9.11.2011, 07:55
Цитата(Чучмек @  8.11.2011,  20:02 Найти цитируемый пост)
не вариант

Почему?

Цитата(Чучмек @  8.11.2011,  20:02 Найти цитируемый пост)
нехваткой памяти/регистров для решаемой задачи 

Возможно стоит пересмотреть методы решения задачи?

Автор: Чучмек 9.11.2011, 13:16
Цитата(UniBomb @  9.11.2011,  07:55 Найти цитируемый пост)
Возможно стоит пересмотреть методы решения задачи? 

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 - используются

Не так уж много остается  smile 
А нужно еще много чего  - как минимум 5 байт.

Цитата

Почему?

Да боюсь, что это, как лезть в окно, когда открыта дверь.
Встречал  упоминание, что возможно объединение двух 16 разрядных таймеров в 32 разрядный
Вот мне и нужно, чтобы переполнение 8 разрядного таймера было тактированием  16 разрядного

Автор: UniBomb 9.11.2011, 15:18
Цитата(Чучмек @  9.11.2011,  14:16 Найти цитируемый пост)
Итого 16*8=128бит - ресурс ATtiny2313

SRAM у этой тини 128 байт.

Цитата(Чучмек @  9.11.2011,  14:16 Найти цитируемый пост)
r16-r19 ... r20-r23 ... r24 ... r25 

А регистры с r0 по r15?


Теперь хватает?  smile 

Автор: Чучмек 9.11.2011, 15:42
Цитата(UniBomb @  9.11.2011,  15:18 Найти цитируемый пост)
128 байт.
Действительно срам.
Цитата(UniBomb @  9.11.2011,  15:18 Найти цитируемый пост)
А регистры с r0 по r15?
 а насколько свободно их можно использовать?
Цитата(UniBomb @  9.11.2011,  15:18 Найти цитируемый пост)
Теперь хватает?
 С головой.
Но вопрос открытый.

Автор: UniBomb 9.11.2011, 16:50
Цитата(Чучмек @  9.11.2011,  16:42 Найти цитируемый пост)
 а насколько свободно их можно использовать?

Есть несколько оговорок. Во-первых регистры r0:r1 используются в качестве "неявных" операндов у некоторых команд. Так например команды умножения (которых нет в семействе тини) используют эти регистры для сохранения результата. Команды работы с памятью программ также используют эти регистры для сохранения/загрузки значений. А во-вторых некоторые команды работают только со старшими регистрами (r16:r32). Подробнее смотри документ "http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf", там к каждой команде даётся описание допустимых операндов.

А в остальном их можно использовать совершенно свободно  smile 


Цитата(Чучмек @  9.11.2011,  16:42 Найти цитируемый пост)
Но вопрос открытый.

В интернетах частенько возникают споры о целесообразности использования регистров ввода/вывода для хранения значений, но как всегда в нужный момент под рукой нет ссылок  smile 

Как по мне - недокументированное использование чего-либо ведёт к недокументированным (или по крайней мере не очевидным) ошибкам smile 

Автор: Mazzi 9.11.2011, 20:27
Как вариант можно настроить таймер на подсчёт импульсов от внешнего источника и одновременно этот же вывод назначить выходом. Тогда "дёрнув" этой ножкой (Т1 - выв.9 у аттини2313) получим инкремент таймера Т1.

Автор: Чучмек 9.11.2011, 21:45
К сожалению ног мне тоже не хватает. (на одни и те же ноги вешаю индикатор,кнопки и i2c)
А сейчас узнал, что и RESET под свои цели смогу использовать только после окончательной отладки.
И пока не разобрался, как  использовать XTAL под выход.

Автор: UniBomb 10.11.2011, 07:55
Чучмек, я не знаю что ты там делаешь, но мне кажется что эот происходит как-то неправильно  smile Обычно под опытную разработку берут мк с запасом, что бы был простор не только для программирования, но и что бы различные отладочные функциональности понавставлять. После этого уже смотрят какой мк подойдёт для серийного изделия, но всё равно с запасом по ресурсам процентов 20. 


Цитата(Чучмек @  9.11.2011,  22:45 Найти цитируемый пост)
ног мне тоже не хватает

Тут тоже можно аппаратно изголяться. Во-первых можно использовать две тини (одну в качестве драйвера периферии), можно кнопки и индикатор повесить через сдвиговые регистры. Есть ещё расширители портов, работающие через SPI или I2C. Но опять же - это если возможность дорабатывать железо. 

Автор: UniBomb 10.11.2011, 08:23
Цитата(Чучмек @  9.11.2011,  22:45 Найти цитируемый пост)
И пока не разобрался, как  использовать XTAL под выход.

Конфигурируешь мк, что бы тактировался от внутренней RC цепи (смотри fuse биты CKSEL3..0) и всё. Конфигурируешь PA1 и PA0 как тебе надо и используешь как тебе хочется.

Автор: Чучмек 10.11.2011, 11:13
Цитата(UniBomb @  10.11.2011,  07:55 Найти цитируемый пост)
Чучмек, я не знаю что ты там делаешь

Шести канальный суточный таймер.

Цитата(UniBomb @  10.11.2011,  07:55 Найти цитируемый пост)
 Обычно под опытную разработку берут мк с запасом

Беру что есть.

Цитата(UniBomb @  10.11.2011,  07:55 Найти цитируемый пост)
для серийного изделия

Да не, на раз. Не охота с паяльником сильно  замарачиваться. Проще прогу нарыгать. Да и пора хоть краем с МК ознакомиться.
Да тут еще знакомый утверждает, что в 2313 такое не влезит. А у меня, пока что, влазит. Осталось только  меню и 50% места.

Цитата(UniBomb @  10.11.2011,  08:23 Найти цитируемый пост)
Конфигурируешь мк, что бы тактировался от внутренней RC цепи (смотри fuse биты CKSEL3..0) и всё.

А по умолчанию как?

Автор: UniBomb 11.11.2011, 08:29
Цитата(Чучмек @  10.11.2011,  12:13 Найти цитируемый пост)
Шести канальный суточный таймер.

Ну я имел в виду опытный макет для ниокр, дипломная работа, личная поделка это или что ещё  smile 

Цитата(Чучмек @  10.11.2011,  12:13 Найти цитируемый пост)
Не охота с паяльником сильно  замарачиваться

Ну так для этого есть макетные платы с гнёздами, отладочные платы и другие полуфабрикаты. Не думаю я, что то, что есть под рукой всегда будет хватать  smile 


Цитата(Чучмек @  10.11.2011,  12:13 Найти цитируемый пост)
А по умолчанию как?

Открываем  даташит и читаем:

Цитата

The device is shipped with CKSEL = “0100”, SUT = “10”, and CKDIV8 programmed. The default clock source setting is the Internal RC Oscillator with longest start-up time and an initial system clock prescaling of 8, resulting in 1.0 MHz system clock. This default setting ensures that all users can make their desired clock source setting using an In-System or Parallel programmer.


Т.е. так как нужно. И если тебе хватит дефолтного мегагерца, то fuse биты можно вообще не трогать  smile 

Автор: Чучмек 12.11.2011, 20:12
Да я потому и спросил, что читал об этом.
Но в протеусе выводы  XTAL упорно  не хотели реагировать на программное изменение. Хоть с  fuse по умолчанию, хоть с измененными (пробовал наугад).
Однако сейчас попробовал выставить 
Цитата(UniBomb @  11.11.2011,  08:29 Найти цитируемый пост)
CKSEL = “0100”, SUT = “10”, and CKDIV8 programmed
 - XTAL подсветились синим. 
UniBomb, СПАСИБО!
Ну а что касается основного вопроса - то пока использую в том варианте, про который писал не предлагать. 

Автор: UniBomb 13.11.2011, 18:19
Чучмек, а ты даташит то хоть смотрел?  smile 

Автор: Чучмек 13.11.2011, 21:01
Да, только я в англицком ни буб бум 

Автор: UniBomb 14.11.2011, 08:13
Чучмек, прелесть даташитов в том, что возможные значения расписаны в табличном виде, там совсем чуть-чуть со словарём достаточно посидеть  smile Вот смотри:

user posted image

Внутренней RC цепи соответствует только два значения битов CKSEL. Биты SUT1..0 и CKDIV8 на выводы XTAL вообще не влияют (первые определяют длительность сброса, второй делитель тактовой частоты). Но если всё равно туго, то могу посоветовать http://www.dodeca.ru/books/156/. Это те де самые даташиты, только переведённые на русский и обобщённые по всем мк семейства. Есть такая же по мегам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)