Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: baran123 - 02 Ağustos 2015, 21:56:12

Başlık: XC8 PWM (PIC12F1822) ?
Gönderen: baran123 - 02 Ağustos 2015, 21:56:12
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
Başlık: Ynt: XC8 PWM (PIC12F1822) ?
Gönderen: t2 - 02 Ağustos 2015, 22:01:43
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ş
Başlık: Ynt: XC8 PWM (PIC12F1822) ?
Gönderen: 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 :)
Başlık: Ynt: XC8 PWM (PIC12F1822) ?
Gönderen: baran123 - 02 Ağustos 2015, 22:39:06
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 ?


Başlık: Ynt: XC8 PWM (PIC12F1822) ?
Gönderen: Cemre. - 21 Eylül 2015, 22:04:45
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..