Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.05.2011, 02:38  
Ksardasss
Частый гость
 
Регистрация: 21.03.2011
Сообщений: 12
Сказал спасибо: 7
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Ksardasss на пути к лучшему
По умолчанию Таймеры CY7C68013A

Добрый вечер.
Необходима помощь в решении следующей задачки:
Необходимо формировать на выходе таймера последовательность как на рисунке.

При этом частота может менять, а количество импульсов фиксировано.
У меня идея только с двумя таймерами. Т.е. один выдаёт последовательность импульсов, другой с определённой частотой каждый раз запускает заново.
Но как это сделать не понятно. Только если засинхронизировать внешне эти два таймера... но это решение не очень...
Хелп
Реклама:
Ksardasss вне форума  
Сказали "Спасибо" Ksardasss
warel (27.06.2019)
Непрочитано 11.05.2011, 11:36  
trampampusha
Почётный гражданин KAZUS.RU
 
Аватар для trampampusha
 
Регистрация: 18.06.2006
Адрес: Литва
Сообщений: 2,206
Сказал спасибо: 1,448
Сказали Спасибо 2,001 раз(а) в 685 сообщении(ях)
trampampusha на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Частота МОЖЕТ меняться или будет меняться, т.е. должна?
Или Вы имеете ввиду, что Вам совершенно не важно, будет меняться частота или нет, а главное - фиксированный пакет (число импульсов по Вашему)?
Вы уточните пожалуйста, тогда и ответ будет более конкретный.
trampampusha вне форума  
Сказали "Спасибо" trampampusha
warel (27.06.2019)
Непрочитано 11.05.2011, 22:15  
Ksardasss
Частый гость
 
Регистрация: 21.03.2011
Сообщений: 12
Сказал спасибо: 7
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Ksardasss на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Частота будет меняться. Это частота дискретизации... мы её будем менять.
Пакет фиксированный.

Последний раз редактировалось Ksardasss; 11.05.2011 в 22:16. Причина: орфография
Ksardasss вне форума  
Сказали "Спасибо" Ksardasss
warel (27.06.2019)
Непрочитано 12.05.2011, 00:59  
trampampusha
Почётный гражданин KAZUS.RU
 
Аватар для trampampusha
 
Регистрация: 18.06.2006
Адрес: Литва
Сообщений: 2,206
Сказал спасибо: 1,448
Сказали Спасибо 2,001 раз(а) в 685 сообщении(ях)
trampampusha на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Не совсем понял с внешней синхронизацией. Зачем?
Вам же надо выводить последовательность импульсов в виде фиксированного (по разрядности) пакета, но с изменяемой частотой.
Я правильно понял?
Если да, то можно обойтись и одним таймером для формирования частоты дискретизации (длительности импульсов).

Выглядит это примерно так.
В таймер загружается константа (значение длительности импульса) и он запускается. Далее ждем переполнение таймера и переход к обслуживанию прерывания.
Из вышесказанного ясно, что чем большее значение мы загрузим в таймер, тем будет выше частота дискретизации.
Так мы формируем частоту дискретизации.
Этот вопрос вроде решили.
Пакет формировать можно разными способами.
Здесь Вы тему не раскрыли и не имея понятия о нем, какой он разрядности и т.п. пишу по сути наугад. Если не в тему, то я не виноват.
В общем варианты здесь есть разные.
Один из самых простых - работа с битовыми командами.
Например весь пакет записываем в регистр (или регистры) и когда происходит обработка прерывания от таймера (деискретизации - пример выше), то осуществляем сдвиг регистра и проверку бита.
Если бит "0", то на выходе порта устанавливаем тоже "0". Если бит имеет значение "1", то и на выходе "1".
Затем опять загружаем константу (дискретизацию) в таймер - ждем переполнение - обслуживание прерывания - сдвиг регистра - проверка бита - вывод его на порт. В общем процесс повторяется.
Бит можно и не проверять, а сразу маской скидывать на порт.
При этом не забываем контролировать окончание считывания одного байта и загрузку очередного. Это если пакет более чем 8-ми разрядный.
Считав один байт, переходим к другому и т.д.
Это просто и понятно. При этом совсем не гимморойно, чем манипулировать двумя таймерами.
Сейчас ЧИПы идут многопортовые и если Вы не используете остальные разряды порта, то можно их настроить на ввод, а тот, который выводит сигнал, на вывод.
В этом случае просто сдвигаем байт в регистре порта и значение бита автоматически появляется на выходе (у Кипариса вроде не надо специально командой обновлять значение порта).
Если бы у Вас был меандр, то тогда обслуживание прерывания по таймеру заключалось бы просто в инвертировании бита того разряда порта, что работает на вывод.
Т.е. сдвигать ничего не пришлось бы, но судя по Вашему рисунку, у Вас не меандр. "0" затянут.

В принципе, если подумать, то можно еще варианты придумать, но это самый простой и легко контролируемый и особенно хорошо наблюдаемый в отладчике.

Последний раз редактировалось trampampusha; 12.05.2011 в 01:32. Причина: Очепятки.
trampampusha вне форума  
Эти 2 пользователя(ей) сказали Спасибо trampampusha за это сообщение:
Ksardasss (19.05.2011), warel (27.06.2019)
Непрочитано 12.05.2011, 01:11  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Ну извращенцы с 2 таймерами... Чего уж легче.
Настраиваем таймер на длительность 1 го импульса.
В счётчик(переменная) записываем 0. Счёт на увеличение.
Сравниваем счётчик с числом импульсов для выдачи*2,
если счётчик меньше числа, то выдаём состояние младшего бита счётчика в порт.
Если больше, то сравниваем с длительностью всего пакета.
Когда счётчик приевысил число длительности пакета, сбрасываем счётчик и отсчёт заново.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Эти 2 пользователя(ей) сказали Спасибо picavr за это сообщение:
Ksardasss (19.05.2011), warel (27.06.2019)
Непрочитано 17.05.2011, 21:49  
Ksardasss
Частый гость
 
Регистрация: 21.03.2011
Сообщений: 12
Сказал спасибо: 7
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Ksardasss на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

А можете более подробно рассказать про переход к обслуживанию прерывания??? А то не понятно...
Ksardasss вне форума  
Сказали "Спасибо" Ksardasss
warel (27.06.2019)
Непрочитано 18.05.2011, 15:36  
trampampusha
Почётный гражданин KAZUS.RU
 
Аватар для trampampusha
 
Регистрация: 18.06.2006
Адрес: Литва
Сообщений: 2,206
Сказал спасибо: 1,448
Сказали Спасибо 2,001 раз(а) в 685 сообщении(ях)
trampampusha на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Вся периферия на кристалле имеет свои регистры, которые по сути объединены в регистры специальных функций SFR.
Есть они и для таймеров, есть и специальные регистры прерываний.
В недрах этих регистров (и в регистрах прерываний и где-то еще) должен быть бит разрешения прерывания от таймера и бит переполнения таймера счетчика, называемый еще ФЛАГОМ. (смотрите талмуд на контроллер).
Когда таймер переполняется, этот ФЛАГ (бит) устанавливается и если прерывание разрешено (бит разрешения прерывания установлен), то начинается его обслуживание. Если нет, т.е. бит разрешения прерывания сброшен, то ФЛАГ просто установится и все, и его нужно будет периодически проверять.
Ваша задача после загрузки значения в таймер (значения формирования интервала), следующей командой разрешить прерывание от таймера и сбросить этот флаг, а затем ждать, когда таймер переполнится. Как только он переполнится, установится флаг (этот бит) и если прерывание было разрешено, то начнется его обслуживание (переход на подпрограмму вывода очередного бита для Вашего случая) т.е. это то, о чем мы говорили, к выводу очередного бита на последовательную шину. Если прерывание не было разрешено, то ничего не произойдет а просто установится ФЛАГ.
Как Вы будете выводить бит на порт, это решать Вам. Либо сдвигом, как я писАл ранее, либо еще как.
Кстати, правилом хорошего тона, первой командой обслуживания прерывания должен быть запрет на обслуживание этого самого прерывания. Это делается для того, что может возникнуть ситуация, что обслуживая прерывание, Вы немного призадержались и таймер опять переполнится, тогда МК не закончив выполнение подпрограммы все бросит и опять начнет обслуживать прерывание с самого начала. Понятно, что ни к чему хорошему это не приведет.
В принципе, это решается двумя путями. Либо запретом установкой соответствующего бита, либо просто не трогаем флаг. Это уже надо смотреть на то, как в этом МК все сделано. Лучше все же запретить, т.е. сбросить бит разрешения прерывания.
Поэтому пока Вы не закончите обслуживать прерывание, Вы не должны допустить его повторный запуск. Именно поэтому разрешать прерывание и сбрасывать флаг надо когда Вы загружаете значение дискретизации в таймер. Тогда проблем не будет и программа выполнится корректно.
В общем это я рассказал в общих чертах.
Прочитайте внимательно о прерываниях, хотя там особо и читать нечего. В принципе так работает вся периферия. Когда какой-то модуль заканчивает свою работу, он выставляет флаг и мы уже решаем, обрабатывать прерывания автоматически (дав разрешение соответствующим битом) или вручную ( не дав разрешение на обслуживание и опрашивая периодически флаг установки прерывания).
Т.е. прерывания можно запускать аппаратно, самим модулем, его вызвавшим, и программно, делая опрос программой.
Что Вам лучше, решать Вам. Если длительность импульсов очень критична, то тогда надо отдать приоритет аппаратному вызову обслуживания.

Последний раз редактировалось trampampusha; 18.05.2011 в 16:15.
trampampusha вне форума  
Эти 2 пользователя(ей) сказали Спасибо trampampusha за это сообщение:
Ksardasss (19.05.2011), warel (27.06.2019)
Непрочитано 18.05.2011, 15:43  
trampampusha
Почётный гражданин KAZUS.RU
 
Аватар для trampampusha
 
Регистрация: 18.06.2006
Адрес: Литва
Сообщений: 2,206
Сказал спасибо: 1,448
Сказали Спасибо 2,001 раз(а) в 685 сообщении(ях)
trampampusha на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Кстати, обычно битов разрешения прерываний бывает два.
Один разрешает/запрещает вообще все прерывания, а другой конкретно каждого модуля. Т.е. каждый модуль еще имеет и свой бит. А флаг, это типа сигнала, что модуль отработал задачу.
Так что будьте внимательны и разберитесь в этом вопросе.
А то иногда программист разрешает прерывание от модуля, а прерывания нет, хотя флаг и устанавливается.
После разбора полетов выясняется, что он не разрешил прерывание вообще.

Последний раз редактировалось trampampusha; 18.05.2011 в 16:07.
trampampusha вне форума  
Эти 2 пользователя(ей) сказали Спасибо trampampusha за это сообщение:
Ksardasss (19.05.2011), warel (27.06.2019)
Непрочитано 19.05.2011, 00:00  
Ksardasss
Частый гость
 
Регистрация: 21.03.2011
Сообщений: 12
Сказал спасибо: 7
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Ksardasss на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Добрый вечер.
В общем "покурил" я мануал в десятый раз наверное уже =) по прерываниям данного микроконтроллера, и пришёл к следующим выводам:
Во-первых, я буду использовать 2-й таймер(всего их три в данном микроконтроллере) T2.
Нашёл таблицу, которая, как я понял, содержит прерывания, соотв. переполнению опред. таймеров:
В моём случае это TF2.
Далее, как я понял из этой таблицы бит переполнения таймера счётчика T2CON.7, правильно же?
А бит разрешения из IE Register SFR IE.5
Вооооот. Правильно я понял? =)
Ksardasss вне форума  
Сказали "Спасибо" Ksardasss
warel (27.06.2019)
Непрочитано 19.05.2011, 04:17  
trampampusha
Почётный гражданин KAZUS.RU
 
Аватар для trampampusha
 
Регистрация: 18.06.2006
Адрес: Литва
Сообщений: 2,206
Сказал спасибо: 1,448
Сказали Спасибо 2,001 раз(а) в 685 сообщении(ях)
trampampusha на пути к лучшему
По умолчанию Re: Таймеры CY7C68013A

Правильно.
Молодец!!!
Еще два момента.

1. В нижней таблице, верхняя строчка, видите IE.7?
Это как раз тот случай из примера - разрешение/запрет ВСЕХ(!!!) прерываний!
Однако в этом микроконтроллере КРОМЕ (except) USB.
Если Вы забудете установить этот бит, то ни одно прерывание (кроме USB) не будет отрабатываться, хотя флаг и установится. Т.е. получится как я говорил в предыдущем ответе приводя пример.

2.Видите столбик "Interrupt Vector "?
Знаете, что он значит?
Если "курили" талмуд раз 10, то думаю, что знаете, но чтобы не тянуть время скажу.
Это адрес, куда переходит программа, когда начинает обслуживать прерывание. Т.е. счетчик команд переходит на этот адрес, хотите Вы того или нет.
Обратите внимание, что Вам по сути дается только 8 байт. Затем идет адрес обслуживания другого прерывания, поэтому, если Ваша подпрограмма обслуживания прерывания не вписывается в эти 8 байт, что обычно и происходит, то Вам придется воспользоваться командой перехода, перейдя за область адресов обслуживания прерывания и уже там располагать подпрограмму обслуживания. В Вашем случае, это вывод бита на последовательный порт.
Решать конечно Вам, но я обычно попав на адрес вектора прерывания, первым делом запрещаю прерывание, чтобы избежать конфликта, а потом уже делаю все остальное. Иногда, если прерывание очень важное, я запрещаю все. Тогда я точно знаю, что спокойно отработаю программу по обслуживанию прерывания.
Иногда правда хватает и этих 8 байт, если по прерыванию необходимо выполнить пару команд, например что-то сбросить или установить.
Может случиться так, что Ваша программа использует лишь одно прерывание вообще, тогда по идее можно не беспокоиться и писАть программу обслуживания подряд, заходя на адреса других векторов. Ведь Вы их все равно не будете использовать.
Однако я не советую так делать. Лучше перейти.
Когда у Вас это войдет в привычку, то Вы никогда не напишите конфликтную в этом плане программу.
Может случиться так, что Вы написали программу не используя другие прерывания, а потом у Вас возникла необходимость ее доработать и использовать еще одно прерывание.
Если Вы писали все подряд, то Вам придется переделывать программу, освобождая эти адреса и делая переходы.
Если же Вы не занимали эти адреса, то Вам останется лишь добавить код не трогая предыдущий. Т.е. проблем не будет.

Последний раз редактировалось trampampusha; 19.05.2011 в 04:38.
trampampusha вне форума  
Сказали "Спасибо" trampampusha
warel (27.06.2019)
 

Закладки

Метки
cy7c68013a, счетчик, таймер
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Такие разные 555-е таймеры boor Коллекция глюков 12 24.06.2009 15:44
CY7C68013A Огромная проблема :-(((( thunder367 Микроконтроллеры, АЦП, память и т.д 0 08.10.2008 12:51
Таймеры rrenderr Микроконтроллеры, АЦП, память и т.д 10 28.05.2007 14:40
Таймеры AVR UserAVR Микроконтроллеры, АЦП, память и т.д 4 01.06.2005 10:01


Часовой пояс GMT +4, время: 07:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot