Estimados del Foro
Realizando este pequeño control remoto por infrarrojo con el codigo NEC estandar no logro controlar los pulsos de PWM para que por el pin con salida PWM por hardware del PIC 16F876A.
Lo que estoy tratando es de usar el puerto para generar 38 Khz de portadora y sobre modular en este puerto la salida de datos que necesito enviar.
Adjunto encontraran el diseño en proteus y el codigo en PicBasic Pro.
Codigo:
ADCON1=%00000111
CMCON=%00000111
TRISA=%00000000
TRISB=%00000000
TRISC=%11111011
PR2 = 25 ' Set PWM for approximately 38KHz
CCPR1L = 13 ' Set PWM Duty-Cycle to 50%
CCP1CON = %00001100 ' Mode select = PWM
T2CON = %00000100 ' Timer2 ON + 1:1 prescale
DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 4
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
DEFINE CCP1_REG PORTC 'Hpwm 1 pin port
DEFINE CCP1_BIT 2 'Hpwm 1 pin bit
eeprom [1,2,3,4,5,6,7,8,9,10,15,20,30,40,50,60,70,80,90,100]
EE var byte
i var byte
A VAR PORTB.0
B VAR PORTB.1
C VAR PORTB.2
D VAR PORTB.3
E VAR PORTB.4
F VAR PORTB.5
G VAR PORTB.6
rem H VAR PORTB.7
X var byte
Y var byte
UNO VAR PORTC.0
DOS VAR PORTC.1
TRES VAR PORTC.3
CUATRO VAR PORTC.4
CINCO VAR PORTC.5
SEIS VAR PORTC.6
SIETE VAR PORTC.7
rem OCHO VAR PORTC.7
PAUSEus 100
LCDOUT $FE,1, "PROGRAMA CONTROL"
pause 100
LCDOUT $FE,$C0, "REMOTO IR TV"
pause 500
high portb.7
low portb.7
LECTURA:
LOW A
IF UNO=0 THEN
read 0,X
read 1,y
goto tx
endif
IF dos=0 THEN goto tx
IF TRES=0 THEN goto tx
IF CUATRO=0 THEN goto tx
IF cinco=0 then goto tx
IF SEIS=0 THEN goto tx
IF SIETE=0 THEN goto tx
HIGH a
LOW b
IF UNO=0 THEN lcdout $FE,1, "1B"
IF dos=0 THEN lcdout $FE,1, "2B"
IF TRES=0 THEN lcdout $FE,1, "3B"
IF CUATRO=0 THEN lcdout $FE,1, "4B"
IF cinco=0 THEN lcdout $FE,1, "5B"
IF SEIS=0 THEN lcdout $FE,1, "6B"
IF SIETE=0 THEN lcdout $FE,1, "7B"
HIGH B
LOW C
IF UNO=0 THEN lcdout $FE,1, "1C"
IF dos=0 THEN lcdout $FE,1, "2C"
IF TRES=0 THEN lcdout $FE,1, "3C"
IF CUATRO=0 THEN lcdout $FE,1, "4C"
IF cinco=0 THEN lcdout $FE,1, "5C"
IF SEIS=0 THEN lcdout $FE,1, "6C"
IF SIETE=0 THEN lcdout $FE,1, "7C"
HIGH C
LOW D
IF UNO=0 THEN lcdout $FE,1, "1D"
IF dos=0 THEN lcdout $FE,1, "2D"
IF TRES=0 THEN lcdout $FE,1, "3D"
IF CUATRO=0 THEN lcdout $FE,1, "4D"
IF cinco=0 THEN lcdout $FE,1, "5D"
IF SEIS=0 THEN lcdout $FE,1, "6D"
IF SIETE=0 THEN lcdout $FE,1, "7D"
HIGH D
LOW E
IF UNO=0 THEN lcdout $FE,1, "1E"
IF dos=0 THEN lcdout $FE,1, "2E"
IF TRES=0 THEN lcdout $FE,1, "3E"
IF CUATRO=0 THEN lcdout $FE,1, "4E"
IF cinco=0 THEN lcdout $FE,1, "5E"
IF SEIS=0 THEN lcdout $FE,1, "6E"
IF SIETE=0 THEN lcdout $FE,1, "7E"
HIGH E
LOW F
IF UNO=0 THEN lcdout $FE,1, "1F"
IF dos=0 THEN lcdout $FE,1, "2F"
IF TRES=0 THEN lcdout $FE,1, "3F"
IF CUATRO=0 THEN lcdout $FE,1, "4F"
IF cinco=0 THEN lcdout $FE,1, "5F"
IF SEIS=0 THEN lcdout $FE,1, "6F"
IF SIETE=0 THEN lcdout $FE,1, "7F"
HIGH F
LOW G
IF UNO=0 THEN lcdout $FE,1, "1G"
IF dos=0 THEN lcdout $FE,1, "2G"
IF TRES=0 THEN lcdout $FE,1, "3G"
IF CUATRO=0 THEN lcdout $FE,1, "4G"
IF cinco=0 THEN lcdout $FE,1, "5G"
IF SEIS=0 THEN lcdout $FE,1, "6G"
IF SIETE=0 THEN lcdout $FE,1, "7G"
HIGH G
rem LOW H
rem IF UNO=0 THEN lcdout $FE,1, "1H"
rem IF dos=0 THEN lcdout $FE,1, "2H"
rem IF TRES=0 THEN lcdout $FE,1, "3H"
rem IF CUATRO=0 THEN lcdout $FE,1, "4H"
rem IF cinco=0 THEN lcdout $FE,1, "5H"
rem IF SEIS=0 THEN lcdout $FE,1, "6H"
rem IF SIETE=0 THEN lcdout $FE,1, "7H"
rem IF ocho=0 THEN lcdout $FE,1, "8H"
rem HIGH H
pause 10
goto lectura
TX:
hpwm 1,127,38000
pauseus 28
hpwm 1,1,1
hpwm 1,0,38000
pauseus 84
hpwm 1,127,38000
pauseus 56
hpwm 1,0,38000
pauseus 28
hpwm 1,0,38000
pauseus 1
goto lectura