Lev@ Опубликовано 31 октября, 2009 Поделиться Опубликовано 31 октября, 2009 (изменено) Думаю в жизни каждого верстальщика программ для МК возникает момент, когда необходимо написать программу , которая будет формировать ШИМ сигналы. Вот и я наконец пришел к этому. Посидев полдня в изучении даташитов(без пива – нельзя, болею) так ничего толкового и не надумал. Решил обратится к своему старому другу и помощнику – книгам по программированию. Сразу стало ясно, что на 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 Изменено 31 октября, 2009 пользователем Lev@ 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 31 октября, 2009 Поделиться Опубликовано 31 октября, 2009 Немного не понятно в чём у Вас проблема. Или вы хотите знаниями из даташита поделиться ? Если воторое, то это никчему, каждый это может увидеть в ДШ CCPR1 не обязательно менять после переполнения TMR2, сам модуль обработает эти изменения тогда, когда ему это будет нужно. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Lev@ Опубликовано 31 октября, 2009 Автор Поделиться Опубликовано 31 октября, 2009 Немного не понятно в чём у Вас проблема. Или вы хотите знаниями из даташита поделиться ? Если воторое, то это никчему, каждый это может увидеть в ДШ Мысль была в том что может кому-то поможет мое описание... ХЗ лично я не всегда с даташита мог понять что делать... CCPR1 не обязательно менять после переполнения TMR2, сам модуль обработает эти изменения тогда, когда ему это будет нужно. Это я уже для своего случая начал делать... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Broka Опубликовано 4 декабря, 2009 Поделиться Опубликовано 4 декабря, 2009 (изменено) Вопрос такой интересный ,а почему на 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, чтобы ШИМ работало Изменено 4 декабря, 2009 пользователем Broka 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
3110 Опубликовано 4 декабря, 2009 Поделиться Опубликовано 4 декабря, 2009 Спасибо за пояснения)) А у меня такой вопрос: кнотроллер PIC16F8..(забыл дальше) ну не важно... Частоту шим надо сделать в районе 40-50 Гц. Кварц на 10 Мгц... что-то не очень низкая частота ШИМ получается на такой тактовой )) Но у таймера есть еще делитель на выходе (тоже вроде максимум на 16). Можно ли это деление как-то применить? ps В контроллерах не силен, но сделать хочется) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
otest Опубликовано 5 декабря, 2009 Поделиться Опубликовано 5 декабря, 2009 Конечно можно (забыл далше...............) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Lev@ Опубликовано 10 декабря, 2009 Автор Поделиться Опубликовано 10 декабря, 2009 Вопрос такой интересный ,а почему на 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. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
arhimed2007 Опубликовано 23 июня, 2018 Поделиться Опубликовано 23 июня, 2018 Вопрос чайника : включение/выключение ШИМ осуществляется запуском/остановкой TMR2? Допустим, мне надо по команде останавливать ШИМ и выставлять на его выходе 0. Командой bсf T2CON,TMR2ON это можно устроить? Или надо каждый раз очищать/переинициализировать CCP1CON? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 23 июня, 2018 Поделиться Опубликовано 23 июня, 2018 читайте референс мануал на модуль ССР пока не придет озарение. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 23 июня, 2018 Поделиться Опубликовано 23 июня, 2018 Выключение модуля осуществляется ровно также, как и его включение. Только обратной операцией. Как его включить (или выключить) - подробно описано в документации на камень. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
arhimed2007 Опубликовано 24 июня, 2018 Поделиться Опубликовано 24 июня, 2018 Да, сбросом/восстановлением CCP1CON всё делается на ура. Спасибо за ответы, особенно компании Microchip 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.