Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

XC8 PWM (PIC12F1822) ?

Başlatan baran123, 02 Ağustos 2015, 21:56:12

baran123

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

t2

#1
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ş

Gökhan BEKEN

Terslemene gerek yok ki, %100 göndermek istediğin zaman %0 gönder, %20 göndereceğin zaman %80 gönder mesela :)
Özel mesaj okumuyorum, lütfen göndermeyin.

baran123

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 ?



Cemre.

#4
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



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

Ş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..