/*
* PWM registers configuration
* Fosc = 8000000 Hz
* Fpwm = 37735.85 Hz (Requested : 38000 Hz)
* Duty Cycle = 50 %
* Resolution is 7 bits
* Prescaler is 1
* Ensure that your PWM pin is configured as digital output
* see more details on http://www.micro-examples.com/
* this source code is provided 'as is',
* use it at your own risks
*/
PR2 = 0b00110100 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00011010 ;
CCP1CON = 0b00011100 ;
// speed up the clock to 8MHz
OSCCONbits.IRCF0=1; OSCCONbits.IRCF1=1;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF2=1;
OSCCONbits.SCS0=0;
OSCCONbits.SCS1=0;
//18F1330 Speed clock up to 32MHz using PLL
OSCTUNEbits.PLLEN=1;
ADCON1 = 0; // make RA0 digital
TRISA = 0xFE;
while(1)
{
PORTA = 0xFF;
delay_us(13);
PORTA = 0x00;
delay_us(13);
}
#include <system.h>
//Target PIC18F1320 configuration word
//#pragma DATA _CONFIG, _CP_OFF & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
#pragma DATA _CONFIG1H, _INTIO2_OSC_1H & _FSCM_OFF_1H
#pragma DATA _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _BORV_27_2L
#pragma DATA _CONFIG2H, _WDT_OFF_2H & _WDTPS_32K_2H
#pragma DATA _CONFIG3H, _MCLRE_ON_3H
#pragma DATA _CONFIG4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _STVR_ON_4L
#pragma DATA _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
#pragma DATA _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
#pragma DATA _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
#pragma DATA _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
#pragma DATA _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
#pragma DATA _CONFIG7H, _EBTRB_OFF_7H
//Set clock frequency
#pragma CLOCK_FREQ 8000000
// 38 khz
#define CCP1Period 12
#define CCP1DutyCy 25
bit running = 0;
unsigned char turnon[6] = { 0x40, 4, 1, 0, 0xbc, 0xbd};
void interrupt( void )
{
// Handle timer1 interrupt
// Used to time the length of pulses
if( pir1.TMR1IF )
{
running = 0;
t1con.TMR1ON = 0; // Turn TIMER1 off
pir1.TMR1IF = 0; //clear timer 1 interrupt bit
}
}
void xmit_pulse(short micro_pulse)
{
static short clock_count;
clock_count = 65536 - micro_pulse;
LOBYTE( tmr1l, clock_count);
HIBYTE( tmr1h, clock_count);
pir1.TMR1IF = 0; // Reset overflow bit
t1con.TMR1ON = 1; // Turn TIMER1 on
running = 1;
trisb.3 = 0;
t2con.TMR2ON = 1;
while (running) ; // Wait for pulse time to end
t2con.TMR2ON = 0;
tmr2 = 0;
portb.3 = 0;
trisb.3 = 1;
}
void send_on(void) {
static char i;
static char j;
static char t;
static unsigned char *ovalue;
static unsigned char k;
// Send it 3 times
for (k = 0; k < 3; k++) {
ovalue = &turnon;
xmit_pulse(3550); // 4 ms header
delay_100us(10); // 1 ms
delay_10us(6); // .6 ms
for (i = 0; i < 6; i++) {
for (j = 8; j > 0; j--) {
t = j - 1;
if (test_bit(*ovalue, t)) {
// A one
xmit_pulse(512); // 400 micro s
delay_100us(10); // 1 ms
delay_10us(2); // .2 ms
}
else {
// A zero
xmit_pulse(512); // 400 micro s
delay_100us(3); // 400 micro s
}
}
ovalue++;
}
// End bit
xmit_pulse(400);
delay_ms(70);
}
}
void main( void )
{
static unsigned char Low;
static unsigned char High;
static unsigned int Duty = CCP1DutyCy;
// Set speed to 8 mhz
set_bit(osccon, IRCF2);
set_bit(osccon, IRCF1);
set_bit(osccon, IRCF0);
ccp1con = 0; // CCP Module off
tmr2 = 0; // Clear Timer 2
//Configure port B
trisb = 0x00;
trisb.3 = 1;
intcon2.NOT_RBPU = 0;
//Initialize port B
portb = 0;
//Set timer 1
//prescaler rate 1:1
//Internal clock (FOSC/4)
t1con = 00001000b;
// Configure Capture/Compare/PWM for PWM
// at 38khz.
//Set timer 2 prescaler rate
// T2CPS = 1:4
t2con = 00000001b;
//t2con = 0;
pr2 = CCP1Period;
Low = Duty & 3;
High = Duty >> 2;
ccpr1l = High;
ccp1con = 00001100b;
ccp1con.5 = Low.1;
ccp1con.4 = Low.0;
intcon.PEIE = 1; // Enable peripheral interrupts
intcon.GIE = 1; // Enable global interrupt
pie1.TMR1IE = 1; // Enable Timer 1 interrupts
// test
trisb.3 = 0;
t2con.TMR2ON = 1;
while (1) ;
// test
// Main Loop
send_on();
while (1) {
}
}
// 38 khz
#define CCP1Period 12
#define CCP1DutyCy 25
static unsigned char Low;
static unsigned char High;
static unsigned int Duty = CCP1DutyCy;
// Configure Capture/Compare/PWM for PWM
// at 38khz.
//Set timer 2 prescaler rate
// T2CPS = 1:4
t2con = 00000001b;
//t2con = 0;
pr2 = CCP1Period;
Low = Duty & 3;
High = Duty >> 2;
ccpr1l = High;
ccp1con = 00001100b;
ccp1con.5 = Low.1;
ccp1con.4 = Low.0;
trisb.3 = 0;
t2con.TMR2ON = 1;
// 37.7kHZ PWM IR carrier signal
#include <p18f1320.h>
#pragma config WDT = OFF,OSC = INTIO2,LVP = OFF
void main(void) {
OSCCON=0x72; // speed up the clock to 8MHz
ADCON1 = 0;
TRISBbits.TRISB3 = 0;
PR2 = 0b00110100 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00011010 ;
CCP1CON = 0b00011100 ;
while(1) {
}
}
// 37.7kHZ PWM IR carrier signal
#include <p18f1320.h>
#pragma config WDT = OFF,OSC = INTIO2,LVP = OFF
void MyDelay(int xD)
{
int countA = xD ;
while (countA > 1)
{
countA = countA - .1;
}
}
void main(void) {
char dc ;
char dc2 ;
OSCCON=0x72; // speed up the clock to 8MHz
ADCON1 = 0;
TRISBbits.TRISB3 = 0;
PR2 = 0b00110100 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00011010 ;
CCP1CON = 0b00011100 ;
/*
CCP1CON = 0C ; // 0%
CCP1CON = 1C ; // 50%
*/
while(1) {
CCPR1L = 0x1A; // Start
MyDelay(24);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
MyDelay(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
MyDelay(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
MyDelay(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
MyDelay(12);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
MyDelay(12);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
MyDelay(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
MyDelay(12) ;
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
MyDelay(6);
MyDelay(6);
}
}
// 37.7kHZ PWM IR carrier signal
#include <p18f1320.h>
#include <delays.h>
#pragma config WDT = OFF,OSC = INTIO2,LVP = OFF
void Delay10TCYx(PARAM_SCLASS unsigned char);
/* Delay100TCYx
* Delay multiples of 100 Tcy
* Passing 0 (zero) results in a delay of 25,600 cycles.
* The full range of [0,255] is supported.
*/
void Delay100TCYx(PARAM_SCLASS unsigned char);
/* Delay1KTCYx
* Delay multiples of 1000 Tcy
* Passing 0 (zero) results in a delay of 256,000 cycles.
* The full range of [0,255] is supported.
*/
void Delay1KTCYx(PARAM_SCLASS unsigned char);
/* Delay10KTCYx
* Delay multiples of 10,000 Tcy
* Passing 0 (zero) results in a delay of 2,560,000 cycles.
* The full range of [0,255] is supported.
*/
void Delay10KTCYx(PARAM_SCLASS unsigned char);
void main(void) {
char dc ;
char dc2 ;
OSCCON=0x72; // speed up the clock to 8MHz
ADCON1 = 0;
TRISBbits.TRISB3 = 0;
PR2 = 0b00110100 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00011010 ;
CCP1CON = 0b00011100 ;
/*
CCP1CON = 0C ; // 0%
CCP1CON = 1C ; // 50%
*/
while(1) {
CCPR1L = 0x1A; // Start
Delay1KTCYx(2);
Delay100TCYx(4);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay100TCYx(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay100TCYx(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay100TCYx(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay100TCYx(6);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay100TCYx(6);
}
}
// 37.7kHZ PWM IR carrier signal
#include <p18f1320.h>
#include <delays.h>
#pragma config WDT = OFF,OSC = INTIO2,LVP = OFF
void Delay10TCYx(PARAM_SCLASS unsigned char);
/* Delay100TCYx
* Delay multiples of 100 Tcy
* Passing 0 (zero) results in a delay of 25,600 cycles.
* The full range of [0,255] is supported.
*/
void Delay100TCYx(PARAM_SCLASS unsigned char);
/* Delay1KTCYx
* Delay multiples of 1000 Tcy
* Passing 0 (zero) results in a delay of 256,000 cycles.
* The full range of [0,255] is supported.
*/
void Delay1KTCYx(PARAM_SCLASS unsigned char);
/* Delay10KTCYx
* Delay multiples of 10,000 Tcy
* Passing 0 (zero) results in a delay of 2,560,000 cycles.
* The full range of [0,255] is supported.
*/
void Delay10KTCYx(PARAM_SCLASS unsigned char);
void main(void) {
char dc ;
char dc2 ;
OSCCON=0x72; // speed up the clock to 8MHz
ADCON1 = 0;
TRISBbits.TRISB3 = 0;
PR2 = 0b00110100 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00011010 ;
CCP1CON = 0b00011100 ;
while(1) {
CCPR1L = 0x1A; // Start
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(4);
Delay100TCYx(8);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(2);
Delay100TCYx(4);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(2);
Delay100TCYx(4);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 1
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(2);
Delay100TCYx(4);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x1A; // 0
CCP1CON = 0x1C ; // 50%
Delay1KTCYx(1);
Delay100TCYx(2);
CCPR1L = 0x00; //Space
CCP1CON = 0x0C ; // 0%
Delay1KTCYx(1);
Delay100TCYx(2);
Delay100TCYx(6);
}
}
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?