ШИМ на PIC16F627A

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Родился
Сообщения: 17
Зарегистрирован: Сб фев 17, 2018 23:44:11

Сообщение 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]
Вложения
Screenshot_1.jpg
(94.96 КБ) 632 скачивания
Последний раз редактировалось dexart12 Ср фев 21, 2018 12:08:16, всего редактировалось 2 раза.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15738
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Я так понимаю ШИМ программный?
:roll:
Реклама
Родился
Сообщения: 17
Зарегистрирован: Сб фев 17, 2018 23:44:11

Сообщение dexart12 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3313661#p3313661"]Я так понимаю ШИМ программный?
:roll:[/uquote]
Этого я сказать не могу, не отличаю. Кажется мне что аппаратный.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Нужно подать питание.
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 17
Зарегистрирован: Сб фев 17, 2018 23:44:11

Сообщение 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;
}
}

}
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Светло-зелёным это чтобы глаза сломать...
Питание - массу на общий, +5в на питание микросхемы.
Docendo discimus
Контактная информация:
Реклама
Родился
Сообщения: 17
Зарегистрирован: Сб фев 17, 2018 23:44:11

Сообщение dexart12 »

[uquote="pyzhman",url="/forum/viewtopic.php?p=3313728#p3313728"]Светло-зелёным это чтобы глаза сломать...
Питание - массу на общий, +5в на питание микросхемы.[/uquote]

Я извиняюсь за цвет, только зарегистрировался. Многое тут не понятно, где куда вставлять. А в коде самом всё нормально выходит? Не совсем понятно куда питание. Я подал же питание на RA5?. Куда еще надо?
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

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

Добавлено after 2 minutes 40 seconds:
BOB51, как вам вангалевел?
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15738
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

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

Сообщение dexart12 »

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

Ну я хочу реализовать ШИМ, не важно какой (аппаратный или программный) и не важно на каком PICе. Просто как это делается.
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Это делается изменением скважности. Если это связано с видеоэффектами, то частота должна быть не менее 50-ти Гц.
Docendo discimus
Контактная информация:
Опытный кот
Сообщения: 844
Зарегистрирован: Пн апр 11, 2011 10:08:52

Сообщение -=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; 
Тогда вместо

Код: Выделить всё

LED = LEDoff;
LED = LEDon;
пишем

Код: Выделить всё

LedOn;
LedOff;
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Сообщение Пока_без_кота »

[uquote="pyzhman" ] ... вангалевел?[/uquote] Потрясающе :shock:
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Сам себя порой боюсь.
Docendo discimus
Контактная информация:
Родился
Сообщения: 17
Зарегистрирован: Сб фев 17, 2018 23:44:11

Сообщение 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...
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Прокол!...
"Зашил" это как?
Docendo discimus
Контактная информация:
Родился
Сообщения: 17
Зарегистрирован: Сб фев 17, 2018 23:44:11

Сообщение dexart12 »

[uquote="pyzhman",url="/forum/viewtopic.php?p=3313956#p3313956"]Прокол!...
"Зашил" это как?[/uquote]


Прошил
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Что прошил? Опишите сам процесс.
Docendo discimus
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15738
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Одноканальный аппаратный ШИМ можно соорудить на ПИКе с наличием Т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)
Ответить

Вернуться в «PIC»