Страница 1 из 1
ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 07:39:55
dexart12
Доброе утро всем! Взял код программы из книги
М. Предко по управлению яркостью светодиода. Написана в MPLab 8.92 компилятор PICC Lite.
Сначала схемку собрал в Протеусе, зашил, но светодиоды не загораются. Что делаю не так ?
Код: Выделить всё
[color=#408040]
#include <pic.h>
#if defined (_16F84)
#warning PIC16F84 selected
_CONFIG (0x03FF1);
flelifedefined(_16F627A)
#warning PIC16F627A with internal oscillator selected
_CONFIG(0x03F70);
<<else
#error Unsupported PICmicro MCU selected
#endif
//Global variable and constant
volatile int RTC = 0;
char PWMCycle;
char PWMDuty;
volatile int PWMLoop;
static bit trisLED @ (unsigned) &TRISB*8+1;//Bits control
static bit LED @ (unsigned) &PORTB*8+1;
const int LEDon = 0; // Led on
const int LEDoff = 1;//Led off
// Interrupts
void interrupt tmr0_int(void)
{
if (T0IF) {
RTC++; //increment counter
switch(PWMDuty) {
case 0:
LED = LEDoff;
break;
case 29:
LED = LEDon;
break;
default:
if (PWMCycle <= PWMDuty)
LED = LEDon;
else
LED = LEDoff;
}
if (++PWMCycle == 30) {
PWMCycle = 0;
PWMLoop++;
}
}
T0IF = 0; //reset flag
}
// Main function
void main(void)
{
OPTION_REG = 0x0D1;
TMR0 = 0;
T0IE = 1;
GIE = 1;
while (1==1) {
if (PWMLoop ==2) {
if (PWMDuty ==0)
PWMDuty =29;
else
PWMDuty--;
PWMLoop = 0;
}
}
}
[/color]
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 08:42:33
BOB51
Я так понимаю ШИМ программный?

Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 08:56:44
dexart12
[uquote="BOB51",url="/forum/viewtopic.php?p=3313661#p3313661"]Я так понимаю ШИМ программный?

[/uquote]
Этого я сказать не могу, не отличаю. Кажется мне что аппаратный.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 09:10:17
pyzhman
Нужно подать питание.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 10:18:46
dexart12
[uquote="pyzhman",url="/forum/viewtopic.php?p=3313674#p3313674"]Нужно подать питание.[/uquote]
Объясните пожалуйста, как это сделать?
Добавлено after 34 minutes 57 seconds:
[uquote="dexart12",url="/forum/viewtopic.php?p=3313634#p3313634"]Доброе утро всем! Взял код программы из книги М. Предко по управлению яркостью светодиода. Написана в MPLab 8.92 компилятор PICC Lite.
Сначала схемку собрал в Протеусе, зашил, но светодиоды не загораются. Что делаю не так ?[/uquote]
#include <pic.h>
#if defined (_16F84)
#warning PIC16F84 selected
_CONFIG (0x03FF1);
flelifedefined(_16F627A)
#warning PIC16F627A with internal oscillator selected
_CONFIG(0x03F70);
<<else
#error Unsupported PICmicro MCU selected
#endif
//Global variable and constant
volatile int RTC = 0;
char PWMCycle;
char PWMDuty;
volatile int PWMLoop;
static bit trisLED @ (unsigned) &TRISB*8+1;//Bits control
static bit LED @ (unsigned) &PORTB*8+1;
const int LEDon = 0; // Led on
const int LEDoff = 1;//Led off
// Interrupts
void interrupt tmr0_int(void)
{
if (T0IF) {
RTC++; //increment counter
switch(PWMDuty) {
case 0:
LED = LEDoff;
break;
case 29:
LED = LEDon;
break;
default:
if (PWMCycle <= PWMDuty)
LED = LEDon;
else
LED = LEDoff;
}
if (++PWMCycle == 30) {
PWMCycle = 0;
PWMLoop++;
}
}
T0IF = 0; //reset flag
}
// Main function
void main(void)
{
OPTION_REG = 0x0D1;
TMR0 = 0;
T0IE = 1;
GIE = 1;
while (1==1) {
if (PWMLoop ==2) {
if (PWMDuty ==0)
PWMDuty =29;
else
PWMDuty--;
PWMLoop = 0;
}
}
}
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 10:27:39
pyzhman
Светло-зелёным это чтобы глаза сломать...
Питание - массу на общий, +5в на питание микросхемы.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 11:05:35
dexart12
[uquote="pyzhman",url="/forum/viewtopic.php?p=3313728#p3313728"]Светло-зелёным это чтобы глаза сломать...
Питание - массу на общий, +5в на питание микросхемы.[/uquote]
Я извиняюсь за цвет, только зарегистрировался. Многое тут не понятно, где куда вставлять. А в коде самом всё нормально выходит? Не совсем понятно куда питание. Я подал же питание на RA5?. Куда еще надо?
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 11:22:19
pyzhman
Батенька! На RA5 через резистор задается лог."1". А питание на микросхему подается на выводы GND - это масса и Vcc - +5в. Посмотрите, пожалуйста, даташит на микросхему и определитесь с ножками.
Добавлено after 2 minutes 40 seconds:
BOB51, как вам вангалевел?
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 11:33:04
BOB51
НУ..ДЫК...
НАЧИНАЮЩИЙ же - надо бысть поснисходительнее...
К сожалению под Си я сам "в начинаюшших" - ежли б под ассемблером - тогды можно чего мявкнуть...
Ну и POIC16F627...
Как - то весьма редкое зверьё ... В основном из этого подвида попадаются PIC16F628A - и памяти там побольше...
И проекты готовенькие "для поизучамс" у мня имеются...

Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 11:52:37
dexart12
[uquote="BOB51",url="/forum/viewtopic.php?p=3313802#p3313802"]НУ..ДЫК...
НАЧИНАЮЩИЙ же - надо бысть поснисходительнее...
К сожалению под Си я сам "в начинаюшших" - ежли б под ассемблером - тогды можно чего мявкнуть...
Ну и POIC16F627...
Как - то весьма редкое зверьё ... В основном из этого подвида попадаются PIC16F628A - и памяти там побольше...
И проекты готовенькие "для поизучамс" у мня имеются...

[/uquote]
Ну я хочу реализовать ШИМ, не важно какой (аппаратный или программный) и не важно на каком PICе. Просто как это делается.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 11:55:18
pyzhman
Это делается изменением скважности. Если это связано с видеоэффектами, то частота должна быть не менее 50-ти Гц.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 12:45:39
-=Vovka=-
[uquote="dexart12",url="/forum/viewtopic.php?p=3313694#p3313694"]
Код: Выделить всё
#if defined (_16F84)
#warning PIC16F84 selected
_CONFIG (0x03FF1);
flelifedefined(_16F627A)
#warning PIC16F627A with internal oscillator selected
_CONFIG(0x03F70);
<<else
#error Unsupported PICmicro MCU selected
#endif
[/uquote]
что-то тут не то...
Добавлено after 8 minutes 37 seconds:
[uquote="dexart12",url="/forum/viewtopic.php?p=3313694#p3313694"]
Код: Выделить всё
static bit trisLED @ (unsigned) &TRISB*8+1;//Bits control
static bit LED @ (unsigned) &PORTB*8+1;
const int LEDon = 0; // Led on
const int LEDoff = 1;//Led off
[/uquote]
Для начала я бы заменил на более читабельное, но не забываем о "чтение-модификация-запись":
Код: Выделить всё
#define LedOn PORTB &= 1;
#define LedOff PORTB |= 1;
Тогда вместо
пишем
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 13:41:15
Пока_без_кота
[uquote="pyzhman" ] ... вангалевел?[/uquote] Потрясающе

Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 13:46:58
pyzhman
Сам себя порой боюсь.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 14:03:55
dexart12
[uquote="pyzhman",url="/forum/viewtopic.php?p=3313783#p3313783"]Батенька! На RA5 через резистор задается лог."1". А питание на микросхему подается на выводы GND - это масса и Vcc - +5в. Посмотрите, пожалуйста, даташит на микросхему и определитесь с ножками.
Добавлено after 2 minutes 40 seconds:
BOB51, как вам вангалевел?[/uquote]
В Proteus нет такого. Там микроконтроллер идёт без Vdd и Vss...
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 14:15:18
pyzhman
Прокол!...
"Зашил" это как?
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 14:19:01
dexart12
[uquote="pyzhman",url="/forum/viewtopic.php?p=3313956#p3313956"]Прокол!...
"Зашил" это как?[/uquote]
Прошил
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 14:34:19
pyzhman
Что прошил? Опишите сам процесс.
Re: ШИМ на PIC16F627A
Добавлено: Ср фев 21, 2018 14:46:47
BOB51
Одноканальный аппаратный ШИМ можно соорудить на ПИКе с наличием Тimer2 и модуля CCP.
Собственно у 627-628-648 эти узлы имеются.
А вот для программного ШИМ с относительно низкой частотой (этот же режим в динамической индикации основа для построения дисплея) можно любой МК использовать. До 8 каналов вполне удобная штука.

Берем частоту обновления 62Гц (легче делится)
Это длительность ВСЕЙ строки ~0,016 секунды
делим на количество каналов/позиций
Допустим 3
итого позиция длится 0,016/3=0,0053 секунды
Примитив ШИМ имеет 256 градаций 0-255
Следовательно 1 шаг ШИМ будет иметь длительность 0,0053/256=0,0000207 секунды.
Поокруглим для удобства (глазу данное абсолютно незаметно, а вот обработка проще)
итого:
шаг ШИМ 0,00002S
позиция = 0,00512S
строка = 0,01536
частота регенерации ~65,1Гц
Теперь собственно прожка... чего делает. (грубое описание).
Имеем генератор шага ШИМ 0,00002S
Счетчик шагов, счетчик позиций и три байта заданного уровня...
включаем текущий канал
запускаем счет на каждом шаге сравниваем инверсное содержимое счетчика с содержимым заданной для данного канала величины яркости
при совпадении отключаем индикацию
при исчерпании счетчика шагов отрабатываем следующую позицию
при исчерпании счетчика позиций поавторяем все сначала.

Ессно в полном варианте там еще много "нюёнсов" добавить надо будет.
