PWM yapmaya çalışıyorum ama çalıştıramadım :P Nereyi kaçırıyor olabilirim ? Bir de PWM ile şerit led sürmek istiyorum.Bu şerit LED RGB fakat ortak ucu + bunun R-G-B uçlarına - girmek lazım olduğundan PWM çıkışını terslemek lazım olduğunu anlıyorum:) PIC içerisinde böyle bir özellik var mı ? Yok ise basit bir şekilde nasıl yapabiliriz.Ayrıca bu şerit'i ne ile anahtarlayabilirim ? Transistör yeterli olur mu ?(12V ile çalışıyor)
/*
* File : main.h
* Author : Baran EKREM
* Description :
*/
#include "main.h"
#include "Delay.h"
void Clock_Init(void);
void PWM_Init(void);
unsigned char duty = 0;
/*******************************************************************************
* Function Name : main
* Description : main program
* Input : void
* Return : void
*******************************************************************************/
void main(void) {
Clock_Init();
PWM_Init();
for(;;) {
while(duty++) {
CCPR1L = duty;
Delay_ms(10);
}
while(duty--) {
CCPR1L = duty;
Delay_ms(10);
}
}
}
/*******************************************************************************
* Function Name : Clock_Init
* Description : 32MHz Internal OSC Configuration
* Input : void
* Return : void
*******************************************************************************/
void Clock_Init(void) {
OSCCONbits.IRCF = 0b1110;
OSCCONbits.SPLLEN = 0b1;
SSP1CON1bits.SSPEN = 0;
Delay_ms(1000);
while(!OSCSTATbits.PLLR);
while(!OSCSTATbits.HFIOFR);
}
/*******************************************************************************
* Function Name : PWM_Init
* Description :
* Input : void
* Return : void
*******************************************************************************/
void PWM_Init(void) {
APFCONbits.CCP1SEL = 0; //CCP1 with PA2
CCP1CON = 0b00001100; //PWM mode: P1A, P1C active-high; P1B, P1D active-high
CCPR1L = 0;
PR2 = 255;
}
Delay
/*
* File : Delay.c
* Author : Baran EKREM
* Description :
*/
#include "Delay.h"
/*******************************************************************************
* Function Name : Delay_ms
* Description : Wait mili second
* Input : unsigned int miliSecond
* Return : void
*******************************************************************************/
void Delay_ms(unsigned int miliSecond) {
while(miliSecond--)
__delay_ms(1);
}
/*******************************************************************************
* Function Name : Delay_us
* Description : wait micro second
* Input : unsigned int microSecond
* Return : void
*******************************************************************************/
void Delay_us(unsigned int microSecond) {
while(microSecond--)
__delay_us(1);
}
//Not : 10 gündür teknolojiden uzağım saçma sapan bir şey yapmış olabilirim. :D
Aşağıda xc8 pwm kod var. belki yardımcı olur.
https://electrosome.com/pwm-pic-microcontroller-mplab-xc8/
sonradan fark ettim pic PIC12F1822 değilmiş
Terslemene gerek yok ki, %100 göndermek istediğin zaman %0 gönder, %20 göndereceğin zaman %80 gönder mesela :)
Alıntı yapılan: Gökhan BEKEN - 02 Ağustos 2015, 22:32:19
Terslemene gerek yok ki, %100 göndermek istediğin zaman %0 gönder, %20 göndereceğin zaman %80 gönder mesela :)
Dehşet bir fikir. :D
@t2 hocam başka işlemciye göre yapılmış verdiğiniz örnek.
CCP1CON registerine datasheetden bakıyorum(sayfa:228) fakat altına note olarak "Note 1: PIC16(L)F1823 only." yazmışlar bu 1822 için nasıl olacak peki ?
http://ww1.microchip.com/downloads/en/DeviceDoc/12F_1822_PWM.zip (http://ww1.microchip.com/downloads/en/DeviceDoc/12F_1822_PWM.zip)
İyi akşamlar
@Baran Ekrem.
Buna bir bak istersen. MicroChip'in kendi yayınladığı bir doküman, ürün tanıtım sayfasında diğer örneklere de ulaşabiliyorsun.
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en544839 (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en544839)
mesaj birleştirme:: 21 Eylül 2015, 23:12:28
LED'leri sürmek için şu yapıyı kullanabilirsin.
https://yadi.sk/i/L_qJKiYVjEYEg (https://yadi.sk/i/L_qJKiYVjEYEg)
Şerit LED'in uzunluğuna göre transistörünü seçersin. Uzunluğa göre çekilen akım değişecek biliyorsun. Ona göre bir transistör seçersin. Yüksek frekansta anahtarlama yapmak istiyorsan MOS-FET kullanabilirsin. Ancak MOS-FET'lerin anahtarlanması transistöre göre daha zordur, onu da araştırarak bulabilirsin. (Direnç değerlerini değiştirmen gerekebilir)
İyi akşamlar..