[Aporte] Control remoto infrarrojo de 4 canales con pic

Primero que nada te felicito por el aporte, está muy completo.

Disculpa mi ignorancia, ¿exactamente que hace el 555?, ¿los trenes de pulso no podrían ser generados directamente por el PIC?

Otra duda que siempre he tenido, ¿de que manera se logra que la luz solar no afecte este tipo de circuitos? En el entendido que la luz solar contiene luz infrarroja.

Saludos colega.
 
Primero que nada te felicito por el aporte, está muy completo.

Disculpa mi ignorancia, ¿exactamente que hace el 555?, ¿los trenes de pulso no podrían ser generados directamente por el PIC?

El 555 funciona como modulador generando una portadora de entre 38 y 40 khz para que el receptor pueda captar la señal. probablemente los pulsos podrian ser generados por el pic, pero nunca lo intente ya que me parecio mas comodo un 555 que romperme lacabeza :cabezon: en averiguar como hacerlo con el pic. :D


Otra duda que siempre he tenido, ¿de que manera se logra que la luz solar no afecte este tipo de circuitos? En el entendido que la luz solar contiene luz infrarroja.
Saludos colega.

:unsure: no lo se... supuestamente el receptor esta ajustado para recibir solo las señales comprendidas entre 38 y 40 khz... :cool:

a los amigos torres y falcon les digo que entonces hay un problema con las dos pc en las que tengo instalado el win7 32 bit... voy a probar recargando sistema en una de las dos :D
 
Última edición:
pero para evitar el 555 es tan facil como hacer un tren de pulsos cuadrados a 38khz

es decir se debe configuracion de timer a 76khz y hacer un togle en un pin asi se obtiene la señal de 38khz

ahora los datos y el tren de pulsos generados por la interrupcion hace que el NE555 se valla al demonio
 
El problema de lo que mencionas, es que si existen retardos en el programa, se detendrá el Timer 0.
Lo ideal sería usar el módulo CCP en modo PWM, pero el PIC12F629 no tiene.
 
pero para evitar el 555 es tan facil como hacer un tren de pulsos cuadrados a 38khz

es decir se debe configuracion de timer a 76khz y hacer un togle en un pin asi se obtiene la señal de 38khz

ahora los datos y el tren de pulsos generados por la interrupcion hace que el NE555 se valla al demonio

Pobre NE555, que culpa tiene de ser tan util jejeje... el pic que use ya esta obsoleto, sin embargo el NE555 sigue tan actual como si nunca hubiesen pasado los casi 40 años que tiene :LOL: a tanto rompedero de cabeza, me quedo con el 555 jajaja... :aplauso::aplauso::aplauso: viva el 555!!! :LOL:
 
a todas éstas no eh armado ese proyecto del control IR de 4 Canales, dado que la idea de usar un MICROCONTROLADOR es la de Suprimir La Nececidad De Circuitos Integrados Adicionales.. como vemos en los controles remotos de los equpos de TV, SONIDO y demás que usan mandos a distancia...

La preguntas es..

funciona el circuito receptor si no se usa el NE555 ?
 
a todas éstas no eh armado ese proyecto del control IR de 4 Canales, dado que la idea de usar un MICROCONTROLADOR es la de Suprimir La Nececidad De Circuitos Integrados Adicionales.. como vemos en los controles remotos de los equpos de TV, SONIDO y demás que usan mandos a distancia...

La preguntas es..

funciona el circuito receptor si no se usa el NE555 ?

Funciona si se utiliza un led receptor infrarrojo y un amplificador operacional en la placa receptora, pero si utilizas el modulo infrarrojo necesitas si o si la señal portadora de 38khz, que es lo que precisamente hace el 555.
 
Funciona si se utiliza un led receptor infrarrojo y un amplificador operacional en la placa receptora, pero si utilizas el modulo infrarrojo necesitas si o si la señal portadora de 38khz, que es lo que precisamente hace el 555.

El amigo Gerson strauss no podia estar mas acertado amigo falcon... :D(y) si quieres eliminar el 555, nada te lo impide, de hecho, he dejado disponible el codigo fuente en pbp para que el que quiera pueda modificarlo a su gusto :D ... lo que tienes que hacer es que el micro genere una portadora de 38 a 40khz y a la vez modular con ella los datos en serie... saludosss ;)(y)
 
me parece el alcance.

ahora nomas unas preguntas, que unas dudas.

porque en circuito que muestras en el video solo aparecen 2 filtros, y en el digrama yo veo 4 entre ellos un polarizado.

y la otra pregunta es, que si se puede como una mezcla del programa para dejar dos botones al estilo push-button y otros dos asi como para bajar y subir volumen.

espero comentarios, saludos amigo Cesar..!
 
Pues si leiste el post desde el principio, habras visto que hay varias versiones de programa, entre ellas, la funcion push button creo que la nombre asi. saludos ;)
 
hola hermano, disculpa mi ignorancia, quisiera saber a que se debe esta diferencia;

trsnsmisor on-off
serin pulso,N2400,ancho
return

transmisor push button
serin pulso,N2400,50,res,ancho

a proposito me gustaria, cuando pudieras checaras mi pcb a ver si esta bien. saludos..!

12402016_992591664137141_4499317874704193194_o.jpg
 
Última edición:
Hola amigo.

trsnsmisor on-off "lee el puerto de entrada pulso y guarda el valor leido en la variable ancho.
serin pulso,N2400,ancho
return
-----------------------------------------------------------------------------------------------------
transmisor push button "lee el puerto de entrada pulso y guarda el valor leido en la variable ancho,
serin pulso,N2400,50,res,ancho "si no recibe señal durante 50 mili segundos salta a la etiqueta res.

ese pcb se ve bien, aunque no lo he revisado. saludosss
 
Pobre NE555, que culpa tiene de ser tan util jejeje... el pic que use ya esta obsoleto, sin embargo el NE555 sigue tan actual como si nunca hubiesen pasado los casi 40 años que tiene :LOL: a tanto rompedero de cabeza, me quedo con el 555 jajaja... :aplauso::aplauso::aplauso: viva el 555!!! :LOL:

Bueno, perdón, pero los micros evolucionan y también se reemplazan.
Si es por simplicidad tendrías que "retroceder" a compuertas lógicas en lugar del pic.

Y yo que te iba a preguntar por qué usas el transistor inversor cuando ya, internamente, la salida del TSOP1738 tiene uno. Jeje.
 
Bueno, perdón, pero los micros evolucionan y también se reemplazan.
Si es por simplicidad tendrías que "retroceder" a compuertas lógicas en lugar del pic.

Y yo que te iba a preguntar por qué usas el transistor inversor cuando ya, internamente, la salida del TSOP1738 tiene uno. Jeje.

Jajaja... en cierta manera, esta ahí para que la placa no se vea tan vacia jeje... pero te cuento que me dio un poco de pereza modificar un par de letras en el codigo fuente y ese es otro motivo por el cual ese transistor esta ahí... :LOL: es el primer diseño :cool: los videotutoriales son para aprender, si al pibe que lo ve no le gusta el 555 ni el transistor, ahi esta el codigo fuente para ser modificado. yo hubiese pagado por un diseño funcional como ese, en mi etapa de novato, ya que controlar cosas a distancia fue y es mi pasion, pero cuando recien comencea intentarlo, solo encontraba diseños inutiles o fragmentos de info que luego fui uniendo para poder aprender jejeje... saludosss :LOL:(y)
 
No te estoy criticando, solo es MI aporte.
Para "aprender electrónica" le ponemos todos los componentes que quieras (con tal que funcione).
Pero para "optimizar" el diseño yo le sacaría los componentes que no son indispensables,
cosa que también es aprender.
La probabilidad de fallos aumenta con la cantidad de componentes.
La optimización simplifica futuros retoques o reparaciones y también ahorra $$$.
El detector ya tiene adentro su adaptador de señal, está bien, ese lo dejamos.
Pero el regulador de la fuente se lo podría reemplazar por un 7805 y sus dos
capacitores (100nf y 100uF).
Esto simplifica notablemente el diseño de la placa, y deja más lugar para el circuito de la aplicación.
 
Última edición:
Pero saveis cual es la solucion...

Usar menos bibliotecas echas [Término poco apropiado].
Crear una subrrutina adaPtada a-lo que necesitais.

Y si es usar tmr0 pero como la usas para la portadora del infrarrojo por otro lado en una rutina podrias usarla para generar los largos de los pulsos serial, usar la cabeza no solo para aporrear paredes.

Tengo que crear un codigo que perdi ace tiempo (solo que espero que esta me salga mucho mas [Término poco apropiado], ya lo posteare, anterior mente lo tenia posteado en electrnicafacil.
Funciona pero no es perfecto.
Pongamos que es un receptor ir de 8 salidas programable.
Programables simplemente por que al pulsar una tecla entro en la subrrutina creada por un servidor para leer y almacenar el adRess y tecla en la epproM. Es ´Valido para nec RC5 y panasonic.

Si quereis que lo suBa lo que quiero son criticas u mejoras del producTo. (pongamos que no llega ocupar mucho mas de 600 intrucciones) Hasta mil todavia se podia replantear algun chorradina peculIar.

Y daria ante-todo, quiero tu criterio. que por-cierto dario, si que funciona perfectamente el micro stucio picbasic hasta win10 y con las mejoras de la bibliotecas para USB solo que el compilador PBP y el editoR microestudio son dos cosas aparte y tenes que conseguir las dor o el micro que no tenga registrado.


Realmente voy a postear las subrrutinas que tengo echas para la lectura, comparacion y almacenado de infrarrojos.


Código:
'
'  lectura infrarrojos
'
infrarrojos:
port_piloto=0
boton=0
contador=0
while port_ir=0 ' leemos el largo del pulso alto de inicio codigo
    contador=contador+1
wend
if contador<400 then salto_ruido ' si es menor seguro sea ruido IR
contador=0
while port_ir=1 ' leemos el largo del pulso bajo de inicio codigo
    contador=contador+1
    if contador>260 then salto_ruido ' si es mayor seguro no sera correcto
wend
pulso=0
repeat
    infra=0
    while port_ir=0 ' cuenta el largo el pulso alto
        infra=infra+1
        if infra>130 then salto_barrido ' si desborda salimos a comprovarlo
        if port_pulsar=0 then salto_ruido ' salimos de la rutina
    wend
    infra=0
    while port_ir=1 ' cuenta el largo el pulso bajo
        infra=infra+1
        if infra>254 then salto_barrido ' si desborda salimos a comprovarlo
        if port_pulsar=0 then salto_ruido ' salimos de la rutina
        toggle port_piloto
    wend
    casilla=pulso>>3 ' divido entre 4 para encasillar en byte's
    codigo[casilla]=codigo[casilla]<<1 ' desplazo byte para ingresar nuevo bit 
    if infra>110 then codigo[casilla]=codigo[casilla]+1 ' si es un 1 lo suma
    pulso=pulso+1 ' cuenta el largo de bit serial
until pulso=48 ' limite maximo serial 48bit
salto_barrido:
if codigo[0]=codigos[0] then ' comprovamos byte de acceso bajo
    if codigo[1]=codigos[1] then ' comprovamos el byte de acceso alto
        boton=codigo[casilla] ' almaceno el ultimo byte en boton
        retraso=0
    endif ' se puede mejorar la veracidad de los  2 
endif     ' ultimos byte's. NEC, RC5, Panasonic48bit
salto_ruido:
port_piloto=1
return

Eesto coRresponderia ala lectura, hay que ajustar los valores un poco a relacion de osculador o de las paradas de interruPcIones, si no se puede Hacer asi hay que Hacerla por el puerto serial como interrucion psi.

Código:
'
' comprueva la tecla pulsada
'
tecla:  
port_piloto=0
temp2=uncuarto+lluz ' aumenta 1/4 del minimo
temp1=hluz-uncuarto ' reduce el masimo 1/4 menos del maximo
select case boton ' comprovamos la accion de la tecla pulsada
    case codigos[4] ' funcion encender apagar
        if luz<temp1 then ' si la luz es menos de la mitad
' ajustar ara ascento descenso rapido
            luz=temp1 ' pone a 7/8 de la intensidad
        else
            luz=temp2 ' pone a 1/8 de la intensidad 
        endif
        tiempos=1
        retraso=8
        gosub temporizadores ' reten, (evita luz disco)
        codigo[0]=0
        tiempo=0
    case codigos[5]' retraso de apagado de luz (dormir)
        retraso=3
        parada=3
        indica=1
        gosub indicaciones ' da dos destellos y baja la luz a 1/4
        codigo[0]=0
        tiempo=9700 ' aumenta el temporizador reduce el apagado en 20min+-
    case codigos[3] '  bajamos el nivel de luz
        if luz>lluz then luz=luz-1
        tiempo=0
    case codigos[2] ' suvimos el nivel de luz
        if luz<hluz then luz=luz+1
        tiempo=0
end select
boton=0
port_piloto=1
return

Esta donde comparo la tecla, pongamos que el pRograma propio es de un regulador PWM para hiluminacion les en particular mi HaBitación con dos modulos de 10w led smd de 1100 lumenes.


Código:
'
' guardar infrarrojos
'
almacena_infra:
parada=5
indica=3 ' indica ciones del modo programacion
gosub indicaciones
temp3=0
repetir_codigo:
casilla=0
while port_ir=1 ' repite asta detectar señal infrarroja
    if port_pulsar=0 then 
        gosub cargarcodigoIR
        goto saltoalmacena
    endif
wend    
gosub infrarrojos
if casilla<2 then repetir_codigo:
if temp3=0 then
    codigos[0]=codigo[0]
    codigos[1]=codigo[1]
    temp3=1
endif
if codigos[0]=codigo[0] and codigos[1]=codigo[1] then
    temp3=temp3+1
    codigos[temp3]=codigo[casilla]
    parada=18
    indica=1
    gosub indicaciones
else
    parada=3
    indica=7
    gosub indicaciones
endif
codigo[0]=0
codigo[1]=0
if temp3<5 then repetir_codigo
'
for temp1=2 to 7
    write temp1,codigos[temp1-2]
next temp1
'
saltoalmacena:
parada=8
indica=3
gosub indicaciones
return' sale del modo programacion


Esta seria la parte para almacenar las teclas, cuando entro en modo programacion.
Faltaria las rutinas de parada (por no usar pause) la rutina de de temporizadores controlada por tmr1 sin interruccion, el encider etc.

Eespero Dario que te guste un poco y comprendas lo que e echo. (pon que este tipo programacion es mas para chabales jovenes. pero que veo cada chapuza que me pregunto su el mismo que la escriBe al verla el año siguiente no le dara asquito, por poner diminutivo. sin eMBargo tu Dario estas teniendo un buen enfoque a-la hora de estructurar el programa para poder leerse despues.

Ya posteare el prOgrama cundo lo cree de nuevo, que estuve por empezar ahora, la verdad que mucho es solo copia pega de mis subrutinas, asi que acabaria pronto ;) eso es lo que quiero decir con una buena forma de estructurar los programas Dario.

Uun cordial saludo

Por-cierto, tampoco es una maravilla mi manera de programar, pero se puede entender lo que se hace en todo momento, y eso son solo 3 cachos.
 
Última edición por un moderador:
Hola gente, tanto tiempo ;) (y) les comento que yo nunca he podido compilar ese codigo utilizando microcode en win7, sin embargo, no tengo ningun problema al compilarlo con microcode corriendo en win xp. por ahi no recuerdo donde, leí que pic basic pro ya esta obsoleto y no existen versiones que funcionen bien en win7. lamentablemente de mi parte, he descargado varias versiones de microcode incluyendo la ultima y no puedo hacerlo funcionar, asi que parami por lo menos, es verdad ... :oops::oops::oops: y por eso estoy tratando de aprender el odioso ccs...


dario descargaste mplab, piensa que el compilador loque ace es adactar el programa a .ams en la configuracion del pc basic tiene que poner en las obciones de compile and program asignar la carpeta pbp (las bibliotecas del basis y programa de compilacion) pero para pasarlo a .ams y compilarlo a .hex tienes que asignar el compilador mpasmwin.exe del mplad que descargas en la pagina de microchip.
el microcode studio 2 no funciona en win7 ni win10, pero la version 3 o superiores ya si van perfectos en win7 o 10.

instala todos los programas en c: o donde tengas instalado windows aveces si estan en otras unidades se raya tambien el compilador (te da un error de problema al encontrar la ruta de archivo, incluso tiene untamaño maximo de caracteres de ruta asi que no agas muchas profundidad en carpetas.

realmente cualquier compilador es valido de sobre entendiendo como inter`reta los comandos o bibliotecas. pero como me acostumbre al pbp pues... o pbp o en mplab. cosa que el mplab es algo pesado de programar aunque es la manera mas correcta.

y por cierto, no pasa nada con el 555 cuando lo pensaste lo pensaste asi que se le va hacer, lo que esta claro que al ponerlo aunque ocupe mas y subir el coste tambien te quita tequito problemas y complicaciones que crear la portadora a +-36khz, y que sele va acer tanpoco esta mal. aun asi intentaria hacer mas filirgranas, alguna proteccion, temporizador o algo.

para encima el codigo e directamente de 8bit, enves de darle un acceso de 8 o 16bit y meter el byte del boton mas el invertido del mismo, para poder verificar que la lectura del codigo es correcta y no actue por rudo de algun otro infrarrojo que cuedra unos de sus 32 o 40bit con el unico byte que pusiste.

explico: un mando normal y corriente NEC conta de 4 bytes, 2 que indican el acesso de dispositivo y ls otros dos la tecla, si el primer byte de tecla es 2 el segundo bit es 253. si ago una and de ambos bytes el resultado tendria que ser cero, (pongamos que yo no suelo poner esa comparacion con que cuedre los 16bit de aceso me quedo con el primer bit de la tebla) pero bueno es poner una decision mas solo.

en el caso que tu aces es muy factible que otro mando con codificacion nec, rc5, pasanocin y alguna otra marca que mande la informacon via seria asincrono te podria activar sin quere el receptor cmo s fuera una orden del mando que as creado.
tanolo tienes que aumentar la trama de datos serial que mandas.


un saludo



bueno, espongo mi codigo a ver que les parece, esta preparado para un 16f84a a 4Mhz, pero que vamos seguro se adacta a cualquier otro (si no tiene fallos) vamos lo e compilado no lo he provado ni testeado. factiblemente tenga algun fallo que se pueda solucionar sobre la marcha o hacer mas modificaciones.

posiblemente si prepare uno para un 12f629 y el serial 74xx595 (me gusto este podelo por la posibilidad de pasar el byte entero y no esten secuenciando las salidas aparte de sus 100mhz de veocidad maxima que nunca superaremos con un microcontrolador sencillo)


Código:
' define osc (8)
'
' defnicion de variables y bit alias
'
estado Var byte  ' bit de marcas de memoria
tiempos var estado.bit0
errorp var estado.bit1
pulsado var estado.bit2
m2 var estado.bit3
' variables variadas
tiempo var word
temp1 var byte
temp2 var byte
temp3 var byte
indica var byte
reten var byte
' variables de infrarrojo
contador var word ' aprovechos su alias como punto para retrasos y infrarrojos
infra var contador.byte0 ' esto permite reducir muchos la bariable 16bit
pulso var byte
boton var byte
casilla var byte
codigos var byte [12]
codigo var byte [7]
'
' alias de pin's
'
port_piloto1 var porta.0 ' bit piloto o led 1
port_piloto2 var porta.1 ' bit piloto o led 2
port_pulsar1 var porta.2 ' bit pulsador 1
port_pulsar2 var porta.3 ' bit pulsador 2
port_ir var porta.4 ' bit usado para el receptor infrarrojo
'
' registro configuracion inicial
' 
status=%00000000
option_reg=%00001110 ' configuracion de interruciones primarias
intcon=%00000000 ' configuracion de estatado de interrucciones primarias
' 
trisa=%11100 ' deficicion de puertos inicial
porta=%00000
trisb=%00000000
portb=%10000000
'
tiempo=0
casilla=0
estado=0
boton=0
gosub leer_codigos_ir ' carga valores de IR
'ON INTERRUPT GOTO interrucciones
'
' bucle de programa
'
programa:
if port_pulsar1=0 then gosub almacena_infra ' pulsador
if port_ir=0 then gosub infrarrojos ' lectura infrarrojos
if boton>0 then gosub tecla ' acciones
goto programa
'
'  lectura infrarrojos
'
infrarrojos:
port_piloto1=1
boton=0  
contador=0
while port_ir=0 ' leemos el largo del pulso alto de inicio codigo
    contador=contador+1
wend
if contador<340 then salto_ruido ' si es menor seguro sea ruido IR
contador=0
while port_ir=1 ' leemos el largo del pulso bajo de inicio codigo
    contador=contador+1
    if contador>220 then salto_ruido ' si es mayor seguro no sera correcto
wend
pulso=0
repeat
    infra=0
    while port_ir=0 ' cuenta el largo el pulso alto
        infra=infra+1
        if infra>170 then salto_barrido ' si desborda salimos a comprovarlo
        if port_pulsar2=0 then salto_ruido ' salimos de la rutina
    wend
    infra=0
    while port_ir=1 ' cuenta el largo el pulso bajo
        infra=infra+1 
        if infra>254 then salto_barrido ' si desborda salimos a comprovarlo
        if port_pulsar2=0 then salto_ruido ' salimos de la rutina
    wend
    casilla=pulso>>3 ' divido entre 4 para encasillar en byte's
    codigo[casilla]=codigo[casilla]<<1 ' desplazo byte para ingresar nuevo bit 
    if infra>74 then codigo[casilla]=codigo[casilla]+1 ' si es un 1 lo suma
    pulso=pulso+1 ' cuenta el largo de bit serial
until pulso=48 ' limite maximo serial 48bit
salto_barrido:
if codigo[0]=codigos[0] then ' comprovamos byte de acceso bajo
    if codigo[1]=codigos[1] then ' comprovamos el byte de acceso alto
        boton=codigo[casilla] ' almaceno el ultimo byte en boton
    endif ' se puede mejorar la veracidad de los  2 
endif     ' ultimos byte's. NEC, RC5, Panasonic48bit
codigo[0]=0 ' borramos el acceso para evitar repeticiones
codigo[1]=0
salto_ruido:
port_piloto1=0
return
'
' comprueva la tecla pulsada
'
tecla:  
port_piloto1=1
select case boton ' comprovamos la accion de la tecla pulsada
    case codigos[7] ' 
        portb=portb ^ %11000000 ' se invierte los bit 6 y 7
    case codigos[6] ' 
        portb=portb ^ %00100000 ' invierte el bit 5
    case codigos[5] ' 
        toggle portb.4 ' lo mismo que lo anterior mas rapido de escrivir
    case codigos[4]' 
        toggle portb.3
    case codigos[3] '  
        toggle portb.2
    case codigos[2] ' 
        toggle portb.1
end select
boton=0
infra=120 ' equivale a un pause
gosub retardo_tmr0 ' equivale a un pause
port_piloto1=0
return
'
' guardar infrarrojos
'
almacena_infra:
port_piloto2=0
infra=70 ' aprovecho el alias infra
indica=3 ' indicaciones del modo programacion
gosub indicaciones
temp3=0 ' se utiliza para contar los bytes (las teclas a almacenar)
repetir_codigo:
casilla=0
while port_ir=1 ' repite asta detectar señal infrarroja
    if port_pulsar1=0 then ' pulsar para salir
        gosub leer_codigos_ir ' vuelve a cargar los balores iniciales ir 
        goto saltoalmacena ' saltamos para salir sin guardar
    endif
wend    
gosub infrarrojos ' rutina de lectura infrarrojos
if casilla<2 then repetir_codigo: ' si la lectura es mayor de 3 bytes
if temp3=0 then ' si es el primer codigo guarda los 2 bytes de acceso
    codigos[0]=codigo[0]
    codigos[1]=codigo[1]
    temp3=1 ' incremento uno para el siguiente proceso
endif
if codigos[0]=codigo[0] and codigos[1]=codigo[1] then
    temp3=temp3+1 ' si el acceso es balido, añade el byte del boton
    codigos[temp3]=codigo[casilla] ' 
    infra=140 ' indicaciones de parada
    indica=1
    gosub indicaciones
else
    infra=40 ' si el acceso no es igual destellos rapidos y repite
    indica=7
    gosub indicaciones
endif
codigo[0]=0 ' borro los bytes de acceso
codigo[1]=0
if temp3<7 then repetir_codigo ' cantidad de teclas para almacenar
'
for temp1=0 to 7 ' almacena codicos en la eepron
    write temp1,codigos[temp1]
next temp1
'
saltoalmacena: ' salto para salir de almacenar sin almacenar
infra=190
indica=0
gosub indicaciones
port_piloto2=1
return 
'
' destellos de indicaciones
'
indicaciones:
for temp1=0 to indica ' repite los destellos para incicaciones
    port_piloto1=1
    gosub retardo_tmr0 ' rutina retardo aprovechando bit bandera tmr0
    port_piloto1=0
    gosub retardo_tmr0
next temp1
return
'
' parada por tmr0
'
retardo_tmr0:
contador=contador<<3 ' multipricador para el retraso aprovechando el alias
tiempo=0 ' 
repeat ' creo paradas simulando un pause (prefiero usar tmr1 para esto)
    if intcon.5=1 then ' retraso contador tmr0
        tiempo=tiempo+1 
        intcon.5=0  ' la manejo sin activar interruciones 
    endif
until tiempo=contador ' sale de la parada
return
'
' leer codigo addes y teclas de la eepron
'
leer_codigos_ir:
for temp1=0 to 7 ' leer los codigos IR de la eepron
    read temp1,codigos[temp1]
next temp1
return
'
' 
' control de interrucciones
'
'
'DISABLE
'interrucciones:
'    
'
'resume
'enable

la manera que tengo para leer IR no es muy correcta pero si sencilla eficiente y corta, hay que agustar sus valores a relacion de interruccines o oscilador, pero a estoy acostumbrado.
pon que si os fijais como funciona igual seos ocurre como funcionaria IR usando el puerto PSI, realmente lo cree apartir de uno que vi mucho mas chulo y complejo usando este puerto. y bueno como que los 12F al igual que el 16f84 no disponen de PSI asi que se inventa por softwa.

espero ver modificaciones del mismo aqui, no en otra parte y alardeando.

un placer y un saludo.
 
Última edición:
Atrás
Arriba