29.01.2012, 18:05
|
|
Прописка
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
|
Регулирование яркости светодиодов по ШИМ на PIC12F629
Привет Всем! Решил научиться регулировать яркости светодиодов по шим с помощью пика! Пытаюсь сформулировать и реализовать на МК ШИМ управление светодиодами, точнее регулировать яркости светодиодов. Вопрос 1: Какую частоту ШИМ надо взять чтобы регулировать? Вопрос 2: Примерно как выглядит на асме? Кнопка SB1 необязательно задействовать... Схема внизу!
|
|
|
|
29.01.2012, 19:34
|
|
Вид на жительство
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
1. Частоту - любую. Минимум 25 Гц, чтобы не было заметно мерцания.
2. Регулировать так - частота включения светодиодов - постоянная, а время свечения светодиодов - меняется. От нуля при выключенных светодиодах до полного периода при полностью включенных.
Реализовать можно так.
8-битный таймер TMR0 с предделителем использовать для задания периода цикла ШИМ. 16-битный таймер TMR1 использовать для регулирования - будем задавать время включения светодиодов.
Настраиваем маску прерываний на разрешение прерываний от TMR0 и TMR1
Настраиваем оба таймера на работу от внутреннего генератора.
Рассчитываем период полного счета TMR0 до переполнения. Если частота контроллера 4 МГц, значит с предделителем 1:64 период полного счета составит примерно 0,016 с. Около 60 Гц. Пойдет.
По переполнению таймера TMR0 будет устанавливаться флаг прерывания T0IF в регистре INTCON. Контроллер перейдет по вектору прерываний. Определяем источник прерывания, включаем светодиоды.
Теперь надо задать время свечения светодиодов в течение цикла ШИМ.
Записываем в 16-битный таймер TMR1 число, от которого начнется приращение TMR1, включаем TMR1 и он считает до переполнения, затем устанавливает флаг прерывания TMR1IF в регистре PIR1. Контроллер перешел по вектору, определяем источник прерывания и гасим светодиоды.
Ожидаем переполнения от таймера TMR0 - цикл повторится снова.
Чем больше число, записываемое в TMR1, тем меньше времени будет он считать до переполнения, а следовательно, меньше будут светиться светодиоды. Нужное определяем расчетами, исходя из тактовой частоты генератора.
и не забываем, что TMR1 - 16-битный, максимальный счет 65536 без предделителя. Учитываем все это.
Можно и наоборот, поменять местами таймеры, кстати.
Последний раз редактировалось Bumbarra; 29.01.2012 в 19:37.
|
|
|
Сказали "Спасибо" Bumbarra
|
|
|
29.01.2012, 19:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
Сообщение от Bumbarra
|
1. Минимум 25 Гц, чтобы не было заметно мерцания.
|
Вообще-то и 50 Гц заметно, не говоря уже за 25 Гц.
|
|
|
|
29.01.2012, 19:47
|
|
Прописка
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
а если программно? то есть без таймера
|
|
|
|
29.01.2012, 20:05
|
|
Прописка
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
я думаю так..задать ШИМ 5кГц. И внутри нее регулировать 0 и 1. В моем случае нужно регулировать 0 в портах. По формуле получается так: чтобы получить 2.5В от 5В, тогда t0=0,5=›T0=t0.Tшим =› T0=0,5.(1/5000)=0,0001c. Отсюда, понимаю что с такой частотой на выходе никак не получу пол яркости светодиодов...Опираясь на теорию. Хотя на практике все равно не будет вточь-точь 2.5В..хм..
|
|
|
|
29.01.2012, 20:08
|
|
Вид на жительство
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
Так это и так программно. Аппаратно ШИМ реализуется в тех контроллерах, где есть моуль CCP.
А если через регистры общего пользования - да без проблем.
Всё то же самое, только вместо TMR0 - цикл формирования паузы (из двух 8-битных регистров, счет на уменьшение до 0), а внутри этого цикла - вместо TMR1 - еще один такой же цикл формирования паузы, только с предустанавливаемыми значениями счета.
Агаааа, наверно еще не разобрался в работе прерываний, потому и страшно с ними связываться, так?
|
|
|
|
29.01.2012, 21:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
Кнопочку ЛУТше замыкать на "землю"...
Сообщение от Alpout
|
Примерно как выглядит на асме?
|
Страшная штука - АСМ для младших PIC...
Мож и накосячил что - "давненько не брал в руки шашек"(с) ...
(не писал под PIC)
PHP код:
|
Led1 EQU 0 Led2 EQU 1 Led3 EQU 2 ;***** Variables ************ CBLOCK 0x20 cnt ;счётчик cLed1 ; Уровень яркрсти Led1 cLed2 ; Уровень яркрсти Led2 cLed3 ; Уровень яркрсти Led3 ENDC ;Инициализация и т. д. ; (всякое разное) ;Загрузка начального свечения. MOVLW 0x40 MOVWF cLed1 MOVLW 0x80 MOVWF cLed2 MOVLW 0xC0 MOVWF cLed3 ;Основной цикл mainloop movf cLed1,0 ;читаем уровень яркости Led1 subwf cnt,0 ;вычитаем из счётчика btfss status,0 ;если флаг переноса установлен - жжом b led1off ;Иначе гасим Led1 BCF GPIO,Led1 ;Зажигаем Led1 b led1skip led1off BSF GPIO,Led1 ;Гасим Led1 led1skip movf cLed2,0 ;читаем уровень яркости Led2 subwf cnt,0 ;вычитаем из счётчика btfss status,0 ;если флаг переноса установлен - жжом b led2off ;Иначе гасим Led2 BCF GPIO,Led2 ;Зажигаем Led2 b led2skip led2off BSF GPIO,Led2 ;Гасим Led2 led2skip movf cLed3,0 ;читаем уровень яркости Led3 subwf cnt,0 ;вычитаем из счётчика btfss status,0 ;если флаг переноса установлен - жжом b led3off ;Иначе гасим Led3 BCF GPIO,Led3 ;Зажигаем Led3 b led3skip led3off BSF GPIO,Led3 ;Гасим Led3 led3skip incf cnt b mainloop ;зациклились :-)
|
З.Ы.
1. ШИМ будет молотить на безумной скорости - нужна задержка в основном цикле
2. Яркость светиков будет "плавать" от изменения питалова - нет ОС по току
По-хорошему всё это надо делать с DC/DC на выходе и МК нужен с АЦП...
З.Ы.Ы.
Писано в блокноте, не проверялось даж в симулякре...
Последний раз редактировалось omercury; 29.01.2012 в 21:51.
|
|
|
|
29.01.2012, 21:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
Да, кстати, резисторы ограничивающие ток светодиодов надо бы увеличить раза в 4 минимум.
|
|
|
|
29.01.2012, 23:28
|
|
Прописка
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
Сообщение от Bumbarra
|
где есть моуль CCP
|
пока модулем не займусь, позже гляну.
Сообщение от Bumbarra
|
8-битный таймер TMR0 с предделителем использовать
|
с таймером тож поработаю. цель - реализация шим на РОН. позже готовые регистры задействую.
Думаю удалось реализовать задуманное...R-red led(красный светодиод GP0). Управление автономно. то есть без кнопок. Тактовая частота генератора 4МГц. А значит 1м.ц. выполняется за 1мкс. Контроллер PIC12F629. Частота задается внутренне. Коэфициент OscCal не стер записал отдельно в текстовик. Частоту ШИМ задал на 5КГц. Задача: получить на выходе примерно 2.5В с помощью ШИМ. Отсюда следует время 0 и 1 должны быть по 100мкс! Т.е. за 100 машинных циклов. Ниже сердце программы, проверьте.вроде правильно! с точностью на 100мкс.:
R_СBLINK
MOVLW B'00000000' ;TURN ON R LED
MOVWF GPIO
NOP
NOP
MOVLW 0X1E ;TIME COEFICIENT FOR T0
MOVWF T0 ;
MOVLW 0X1F ;TIME COEFICIENT FOR T1
MOVWF T1 ;
CYCLE0 DECFSZ T0, F
GOTO CYCLE0
MOVLW B'00000001' ;TURN OFF R LED
MOVWF GPIO
CYCLE1 DECFSZ T1, F
GOTO CYCLE1
NOP
GOTO R_CBLINK
|
|
|
|
29.01.2012, 23:41
|
|
Прописка
Регистрация: 13.09.2011
Адрес: Уфа
Сообщений: 253
Сказал спасибо: 20
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
|
Re: Регулирование яркости светодиодов по ШИМ на PIC12F629
Сообщение от alvadep
|
Да, кстати, резисторы ограничивающие ток светодиодов надо бы увеличить раза в 4 минимум.
|
почему?? у меня и так работали, все по расчету: 5-3=2В на резисторах. R=2/0.02=100 Ом. Это старая схема поэтому по 51Ом ставил. Такто когда первую прошивку залил на МК и проверил на моргание светодиода. Все работало. Тока прога не моя была))
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:28.
|
|