Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

ШИМ на PIC16F627A

Ср фев 21, 2018 07:39:55

Доброе утро всем! Взял код программы из книги М. Предко по управлению яркостью светодиода. Написана в 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]
Вложения
Screenshot_1.jpg
(94.96 KiB) Скачиваний: 592
Последний раз редактировалось dexart12 Ср фев 21, 2018 12:08:16, всего редактировалось 2 раз(а).

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 08:42:33

Я так понимаю ШИМ программный?
:roll:

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 08:56:44

Я так понимаю ШИМ программный?
:roll:

Этого я сказать не могу, не отличаю. Кажется мне что аппаратный.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 09:10:17

Нужно подать питание.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 10:18:46

Нужно подать питание.


Объясните пожалуйста, как это сделать?

Добавлено after 34 minutes 57 seconds:
Доброе утро всем! Взял код программы из книги М. Предко по управлению яркостью светодиода. Написана в MPLab 8.92 компилятор PICC Lite.
Сначала схемку собрал в Протеусе, зашил, но светодиоды не загораются. Что делаю не так ?


#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

Светло-зелёным это чтобы глаза сломать...
Питание - массу на общий, +5в на питание микросхемы.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 11:05:35

Светло-зелёным это чтобы глаза сломать...
Питание - массу на общий, +5в на питание микросхемы.


Я извиняюсь за цвет, только зарегистрировался. Многое тут не понятно, где куда вставлять. А в коде самом всё нормально выходит? Не совсем понятно куда питание. Я подал же питание на RA5?. Куда еще надо?

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 11:22:19

Батенька! На RA5 через резистор задается лог."1". А питание на микросхему подается на выводы GND - это масса и Vcc - +5в. Посмотрите, пожалуйста, даташит на микросхему и определитесь с ножками.

Добавлено after 2 minutes 40 seconds:
BOB51, как вам вангалевел?

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 11:33:04

НУ..ДЫК...
НАЧИНАЮЩИЙ же - надо бысть поснисходительнее...
8)
К сожалению под Си я сам "в начинаюшших" - ежли б под ассемблером - тогды можно чего мявкнуть...
:(
Ну и POIC16F627...
Как - то весьма редкое зверьё ... В основном из этого подвида попадаются PIC16F628A - и памяти там побольше...
И проекты готовенькие "для поизучамс" у мня имеются...
:roll:

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 11:52:37

НУ..ДЫК...
НАЧИНАЮЩИЙ же - надо бысть поснисходительнее...
8)
К сожалению под Си я сам "в начинаюшших" - ежли б под ассемблером - тогды можно чего мявкнуть...
:(
Ну и POIC16F627...
Как - то весьма редкое зверьё ... В основном из этого подвида попадаются PIC16F628A - и памяти там побольше...
И проекты готовенькие "для поизучамс" у мня имеются...
:roll:


Ну я хочу реализовать ШИМ, не важно какой (аппаратный или программный) и не важно на каком PICе. Просто как это делается.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 11:55:18

Это делается изменением скважности. Если это связано с видеоэффектами, то частота должна быть не менее 50-ти Гц.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 12:45:39

Код:
#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

что-то тут не то...

Добавлено after 8 minutes 37 seconds:
Код:
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

Для начала я бы заменил на более читабельное, но не забываем о "чтение-модификация-запись":
Код:
#define LedOn PORTB &= 1;
#define LedOff PORTB |= 1;


Тогда вместо
Код:
LED = LEDoff;
LED = LEDon;

пишем
Код:
LedOn;
LedOff;

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 13:41:15

[uquote="pyzhman" ] ... вангалевел?[/uquote] Потрясающе :shock:

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 13:46:58

Сам себя порой боюсь.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 14:03:55

Батенька! На RA5 через резистор задается лог."1". А питание на микросхему подается на выводы GND - это масса и Vcc - +5в. Посмотрите, пожалуйста, даташит на микросхему и определитесь с ножками.

Добавлено after 2 minutes 40 seconds:
BOB51, как вам вангалевел?



В Proteus нет такого. Там микроконтроллер идёт без Vdd и Vss...

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 14:15:18

Прокол!...
"Зашил" это как?

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 14:19:01

Прокол!...
"Зашил" это как?



Прошил

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 14:34:19

Что прошил? Опишите сам процесс.

Re: ШИМ на PIC16F627A

Ср фев 21, 2018 14:46:47

Одноканальный аппаратный ШИМ можно соорудить на ПИКе с наличием Тimer2 и модуля CCP.
Собственно у 627-628-648 эти узлы имеются.
:roll:
А вот для программного ШИМ с относительно низкой частотой (этот же режим в динамической индикации основа для построения дисплея) можно любой МК использовать. До 8 каналов вполне удобная штука.
:hunger:
Берем частоту обновления 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Гц
:write:
Теперь собственно прожка... чего делает. (грубое описание).
Имеем генератор шага ШИМ 0,00002S
Счетчик шагов, счетчик позиций и три байта заданного уровня...
включаем текущий канал
запускаем счет на каждом шаге сравниваем инверсное содержимое счетчика с содержимым заданной для данного канала величины яркости
при совпадении отключаем индикацию
при исчерпании счетчика шагов отрабатываем следующую позицию
при исчерпании счетчика позиций поавторяем все сначала.
:roll:
Ессно в полном варианте там еще много "нюёнсов" добавить надо будет.
8)
Ответить