Ned Flanders

Таймер В Mcs-51, Модуль Таймера

17 сообщений в этой теме

Здравствуйте. Приложенное изображение - это циклограмма обработки детали. По сути время операции - это задержка.Величина R0 - число обнулений таймера за необходимое количество секунд, а R1 - необходимое число повторений (в том случае если время слишком большое). Таблица, как говорят, правильная. Как получились R0 и R1 я понимаю. Объясните пожалуйста, как получаются такие значения в модуле счетчика? Как найти модуль счетчика?

(Длительность машинного цикла: 1, 085 мкс, инкремент таймера/счетчика выполняется в течение каждого машинного цикла, количество переполнений таймера за 1 сек = 14., интервал времени, в течение которого происходит переполнение равен 0,071 сек.)

Алгоритм предполагает следующие действия:

1) Инициализация – начальная настройка программы и МК. Происходит размещение констант и переменных в регистрах, которыми будет пользоваться программа; назначение указателя вершины стека; настройка регистров специального назначения;

2 переключение на банк необходимой операции и загрузка числа обнулений таймера за необходимое количество секунд и необходимое число повторений в регистры R0, R1 соответственно, установка таймеров в 16 разрядный режим работы (Т0М1=0, Т0М0=1);

3) вычисление скорости подачи и глубины резания;

4) при большом значении времени загрузка аккумулятора числом повторений, обеспечивающим нужное время;

5) вычисление времени протекания операции и соответствующего ей кода;

6) загрузка в порт кода выполняемой операции, включение подачи привода и запуск таймера Т0;

7) инкремент ТF0 и контроль его ненулевого значения;

8) пока ТF0 не равен 0 – переход на инкремент таймера, при TF0=0 переход к декременту регистра R0;

9) декремент регистра R0 и контроль его не нулевого значения, пока R0 – не ноль, переход на инкремент таймера, когда R0 равен нулю, переход на декремент аккумулятора;

10) декремент аккумулятора и контроль его не нулевого значения, пока R1 – не ноль, переход на инкремент таймера, как только R1 равняется нулю, переход к подготовке следующей операции;

11) повтор со 2-го по 10 пункты для следующей операции и т.д.

(…)

Завершение работы программы.

post-181786-0-91517100-1402169854_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ned Flanders, как вы собираетесь писать программу, если не знаете ответа на самый простой вопрос?

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да наверное простой вопрос, но проблема в том, что мне никто не объяснял - просто сказали что нужно сделать эту работу. А программу писать пока не надо - нужен только алгоритм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mvkarp    3 757

Ned Flanders, дай бог памяти, в МК51 два 16-разрядных таймера/счетчика. Что мешает их при необходимости объединить?

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ned Flanders, дай бог памяти, в МК51 два 16-разрядных таймера/счетчика. Что мешает их при необходимости объединить?

Наверное ничего не мешает. Ответьте, пожалуйста, если знаете, на мой вопрос: Как получить модуль счетчика? или Как он был получен в таблице, представленной выше?

Ned Flanders, как вы собираетесь писать программу, если не знаете ответа на самый простой вопрос?

Пожалуйста, ответьте на мой вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mvkarp    3 757

Время операции делить на время цикла. Наверное, так.

С учетом регистра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Время операции делить на время цикла. Наверное, так.

Время цикла - это Вы имели в виду время командного цикла. А как его определить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mvkarp    3 757

908854ad67a5c011cce057b917c64d13.gif

Подсказать?

Смотрите:

(Длительность машинного цикла: 1, 085 мкс,

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ned Flanders, вы наверно знаете, что 16-ти разрядный счётчик считает по модулю 216=65536? Получить нужное время задержки с таким значением модуля не всегда получается. Поэтому рассчитывается ближайшее меньшее значение модуля для целых значений повторений.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

908854ad67a5c011cce057b917c64d13.gif

Подсказать?

Смотрите:

(Длительность машинного цикла: 1, 085 мкс,

Если время операции поделить на 1,085 то получим например в первой строке 3720000 мкс / 1,085 мкс = 3428571,429. Почему в модуле счетчика T0 64691 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mvkarp    3 757

Учтите еще R0 R1.

Изменено пользователем mvkarp
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ned Flanders, вы наверно знаете, что 16-ти разрядный счётчик считает по модулю 216=65536? Получить нужное время задержки с таким значением модуля не всегда получается. Поэтому рассчитывается ближайшее меньшее значение модуля для целых значений повторений.

Григорий, Вы не могли пояснить это на моем или на каком нибудь более простом примере?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Учтите еще R0 R1.

Каюсь, я не разбираюсь в данных вопросах. Поясните, если Вам не трудно, это на моем примере. Покажите как по формулам получить значение модуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3720000 мкс / 1,085 мкс = 3428571,429

3428571,429/65536=52.316 округляем до целого - 53

3428571,429/53=64690

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Потому, что R1=53.

Ну там на самом деле должно быть вместо R1 R0, а вместо A R1. 53 - это столько раз переполняется таймер за время операции т.к. таймер переполняется каждый машинный цикл, который длится 0,071 сек, 3,72/0,071 = 53.

3720000 мкс / 1,085 мкс = 3428571,429

3428571,429/65536=52.316 округляем до целого - 53

3428571,429/53=64690

Спасибо Григорий, все понятно! Я не знаю как тут на форуме сказать спасибо. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Всем привет! Возникла следующая проблема:   Есть две ардуины 'Mega2560'. По несчастливому стечению обстоятельств данные платы попали в руки одному чуваку, который, вернув их, заявил, что они перестали работать после того, как он "чисто ради интереса" поковырял на обеих некоторые фьюзы. Есть у меня такой китайский usbasp v2 программатор: Подключив данный девайс к ICSP-пинам первой платы, удалось без проблем восстановить на ней загрузчик через стандартную Arduino-IDE, после чего работоспособность платы полностью восстановилась. Но вот при попытке сделать то же самое со второй платой, получаю это: Такое же сообщение получаю при попытке зашить загрузчик в неподключенную к программатору ардуину, то есть программатор вообще не видит МК. Плата прекрасно работала до того, как вышеупомянутый товарищ покрутил настройки фьюзов.   Что я пытался предпринять: Замыкал пины JP3 программатора, отвечающие за понижение скорости, подключал к ардуине 5V от внешнего источника при прошивке загрузчика, - не помогло.   Поиском пользоваться умею, аналогичную тему тут находил, но там проблема была в том, что парень неверно подключал программатор к контроллеру. В моём же случае всё подключено верно, повторюсь, что загрузчик первой платы этим же программатором был восстановлен успешно. Буду рад любым советам касательно того, как восстановить работоспособность платы.      
    • А если конденсатор для задержки сигнала с датчика поставить не между электродом и минусом, а между электродами, то что получится?
      Время задержки в секундах считается по формуле "емкость умножить на сопротивление"?
      Когда эту же схему собирал не на транзисторах КТ, а на маленьких BC, то получалось такое мощное усиление, что даже не опуская датчик в воду транзисторы уже пропускают все с коллектора на эмиттер. Если бы надо было собирать на маленьких транзисторах или вобще на составных транзисторах BC517 или TIP122, то как ослаблять усиление сигнала?
      Можно в эту схему вместо реле поставить оптопару MOC3021 или MOC3041(M) чтобы в другой схеме ( симисторного регулятора мощности тэна) разрывать участок цепи управления?
    • Несколько лет доводили схему до ума. Тысячи постов... Вроде получили весьма неплохой результат. Но мы не ищем легких путей.. вдруг заново по тем-же кочкам поскакали начиная от 14 версии. Может давайте себе на компы поставит Винду 95 и начнем бороться с проблемами, которые сами себе создали?
    • С McIntosh тоже, кажется, не совсем все гладко.
      0.5% maximum harmonic distortion at any level from 250 milliwatts to rated power
      Бросается в глаза ограничение мощности снизу для Кг. Как-то странно, не из-за ступеньки ли?
    • вангую, кто-то не понимает шо це таке "выход с открытым коллектором"., открой тайну "золотого ключика" , где ты такой сигнал намерил херню ты наваял... и еще полампера это не мощная нагрузка
    • жесть... проще в уши встроить переменный резистор