Перейти к содержанию

Шим На Pic16f628


Lev@

Рекомендуемые сообщения

Думаю в жизни каждого верстальщика программ для МК возникает момент, когда необходимо написать программу , которая будет формировать ШИМ сигналы. Вот и я наконец пришел к этому.

Посидев полдня в изучении даташитов(без пива – нельзя, болею) так ничего толкового и не надумал. Решил обратится к своему старому другу и помощнику – книгам по программированию. Сразу стало ясно, что на PICBasic сделать нормальный ШИМ не получится, значит придется работать по старинке – ASM!

И так попробую подитожить, что у меня получилось.

Первое: Период. Это время, за которое таймер TMR2 сделает полный цикл 00:FF и равное

(4*tosc)*Коэфф. деления предделителя*(PR2+1)

, где 4*tosc – длительность машинного цикла(при тактовой частоте 4МГц = 4*1/4)

Коэфф. деления предделителя – 1:1, 1:4, 1:16 устанавливается в регистре T2CON битами T2CKPS1: T2CKPS0

PR2 – это регистр периода таймера TMR2, т.е. им задается время через которое таймер сделает полный цикл.

… с этим вроде понятно?!

Дальше – скважность или длительность импульса CCP1. Тут немного сложнее, задается регистром CCPR1L(в упрощенном виде) численно означает сколько времени относительно TMR2 будет длится импульс CCP1, т.е. если PR2 больше CCPR1L в два раза – половину счета времени таймером на выходе CCP1 будет лог. 1, а другую лог. 0. Если значения PR2 и CCPR1L будут равны(или CCPR1L) – то на выходе CCP1 всегда будет лог. 1. Если CCPR1L будет 00 - то на выходе CCP1 всегда будет лог.0.

Как смог, так и объяснил… Фух!

Кстати самое интересное – ШИМ работает в фоновом режиме – т.е. программа может спокойно делать другие задачи. И еще одно значение регистра CCPR1L можно менять походу выполнения программы, единственное, «но» модуль ШИМ его воспримет только тогда, когда таймер TMR2 закончит счет.

Думаю этого хватит чтобы написать небольшую(первую) программку с ШИМ.

 
list	p=16f628a
#include	<p16f628a.inc>
org	0x00
reset
goto	start
org	0x20
; **************************************************************
start
clrf	ccp1con		; выключить модуль CCP
clrf	TMR2		; Очистить TMR2(на всякий случай)
bsf	STATUS,RP0	; Банк 1
movlw	b'11111111'	; Задаем период TMR2
movwf	PR2
bcf	STATUS,RP0	; Банк 0
movlw	b'11111110'	; Задаем длительность импульса CCP1
movwf	CCPR1L
clrf	INTCON		; Запрещаем все прерывания
bsf	STATUS,RP0	; Банк 1
bcf	TRISB,3		; Задаем направление выводу RB3 - CCP1
clrf	PIE1		; Запрет прерываний от периферийных модулей
bcf	STATUS,RP0	; Банк 0
clrf	PIR1		; Срос флагов прерываний от периферийных модулей
movlw	b'00001100'	; Переводим модуль CCP1 в режим ШИМ
movwf	CCP1CON
bsf	T2CON,TMR2ON	; Включить таймер TMR2
clrwdt			; Очистить сторожевой таймер

label
clrwdt			; Очистить сторожевой таймер
btfss	pir1,tmr2if	; Проверка переполнения TMR2
goto	label
decf	CCPR1L,1
clrf	PIR1		; Сброс флагов прерываний от периферийных модулей
goto	label
end

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Немного не понятно в чём у Вас проблема. Или вы хотите знаниями из даташита поделиться ? Если воторое, то это никчему, каждый это может увидеть в ДШ :)

CCPR1 не обязательно менять после переполнения TMR2, сам модуль обработает эти изменения тогда, когда ему это будет нужно.

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

Немного не понятно в чём у Вас проблема. Или вы хотите знаниями из даташита поделиться ? Если воторое, то это никчему, каждый это может увидеть в ДШ :)

Мысль была в том что может кому-то поможет мое описание... ХЗ лично я не всегда с даташита мог понять что делать... :(

CCPR1 не обязательно менять после переполнения TMR2, сам модуль обработает эти изменения тогда, когда ему это будет нужно.

Это я уже для своего случая начал делать...

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

  • 1 месяц спустя...

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вопрос такой интересный ,а почему на PicBasic сделать нормальный ШИМ нельзя? У него что,что то не хватает?

Я например недавно устройство сделал,так написал всю прогу на PicBasic,в том числе и ШИМ( Прекрасно всё работает)

Это для 16F628A, так что в PicBasic всё работает не хуже, хотя иногда приходится вставлять строки на ASMe

CCPR1L = 14 ;Установка периода 50%

CCP1CON = %00001111 ;Включаем ШИМ

STATUS.5 = 1;Банк 1

PR2 = 27 ;Частота ШИМ примерно 36КГЦ (для TSOP1736)

STATUS.5 = 0;БАНК 0

TMR2 = 0;Включение модуля ШИМ

T2CON = %00000100;и таймера TMR2, чтобы ШИМ работало

Изменено пользователем Broka
Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо за пояснения)) А у меня такой вопрос: кнотроллер PIC16F8..(забыл дальше) ну не важно... Частоту шим надо сделать в районе 40-50 Гц. Кварц на 10 Мгц... что-то не очень низкая частота ШИМ получается на такой тактовой ))

Но у таймера есть еще делитель на выходе (тоже вроде максимум на 16). Можно ли это деление как-то применить?

ps В контроллерах не силен, но сделать хочется)

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вопрос такой интересный ,а почему на PicBasic сделать нормальный ШИМ нельзя? У него что,что то не хватает?

Я например недавно устройство сделал,так написал всю прогу на PicBasic,в том числе и ШИМ( Прекрасно всё работает)

Это для 16F628A, так что в PicBasic всё работает не хуже, хотя иногда приходится вставлять строки на ASMe

CCPR1L = 14 ;Установка периода 50%

CCP1CON = %00001111 ;Включаем ШИМ

STATUS.5 = 1;Банк 1

PR2 = 27 ;Частота ШИМ примерно 36КГЦ (для TSOP1736)

STATUS.5 = 0;БАНК 0

TMR2 = 0;Включение модуля ШИМ

T2CON = %00000100;и таймера TMR2, чтобы ШИМ работало

Да, правильно - если не использовать стандартную библиотеку БарсиКа... помоему PWM.

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

  • 8 лет спустя...

Вопрос чайника :) : включение/выключение ШИМ осуществляется запуском/остановкой TMR2? Допустим, мне надо по команде останавливать ШИМ и выставлять на его выходе 0. 

Командой

bсf T2CON,TMR2ON

это можно устроить? Или надо каждый раз очищать/переинициализировать CCP1CON?

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

Выключение модуля осуществляется ровно также, как и его включение. Только обратной операцией.
Как его включить (или выключить) - подробно описано в документации на камень.

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...