Autor Tema: Control remoto IR (¿conseguir controlar PWM con dato serial?)  (Leído 2241 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado electroloco

  • PIC10
  • *
  • Mensajes: 2
Control remoto IR (¿conseguir controlar PWM con dato serial?)
« en: 24 de Octubre de 2011, 16:40:36 »
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

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 207
Re: Control remoto IR (¿conseguir controlar PWM con dato serial?)
« Respuesta #1 en: 24 de Octubre de 2011, 20:23:06 »
1-podes hacerlo controlando el registro TRIS
2-Envias la señal del CCP a una entrada de una compuerta AND y en la otra entrada, la salida de datos del Usart; asi, en la salida de la compuerta obtenes la salida del USART modulada con la señal del CCP.