Autor Tema: Modificacion codigo TX y RX en un PIC12F629  (Leído 5588 veces)

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

Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Modificacion codigo TX y RX en un PIC12F629
« en: 17 de Abril de 2009, 06:59:05 »
Hola, estube buscando durante 2 semanitas algun codigo para poder montarme un pequeño mando a distancia(TX) y un receptor de 3 canales(RX), al final decidi hacer uno bastante basico, ahora bien...me encuentro con un problema....necesito que cuando se pulse un pulsador de por ejemplo el canal 1 se pueda hacer que se active o se desactive el canal en el receptor, vamos esto:

-Pulsar pulsador canal 1--->se activa el canal 1 del receptor y se queda activo----->pulsar nuevamente el pulsador del canal 1----> se desactiva el canal 1 del receptor.

De esta forma con cada uno de los 3 canales, espero haberme explicado bien....el problema es que yo de programacion estoy a 0 patatero!!! y estando con examenes me es dificilete meterme en una "nueva asignatura" que seria aprender a programar YA, por lo que os pediria si me podriais ayudar a hacer esos pequeños cambios en el codigo ASM que tengo de TX y RX.


Saludos y muchas gracias de antemano. :-/

PD:Os adjunto los codigos de TX y RX.(Emisor/receptor de 3 canales via IR)

"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.

Desconectado x-logan

  • PIC10
  • *
  • Mensajes: 14
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #1 en: 18 de Abril de 2009, 16:56:07 »
Hola que tal

Podrías explicar mejor cual seria el fin de la desactivación de los canales, ademas necesitarías un canal genérico por que si utilizas el mismo canal de transmisión para activar o desactivar el canal, en cuanto lo desactives ya no podrás reactivarlo, por que no se van a recibir nada por un canal desactivado.

Salu2

Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #2 en: 18 de Abril de 2009, 20:41:21 »
Hola, no me he explicado bien. La idea seria que al yo pulsar el pulsador del canal 1(por poner un canal de ejemplo) en el receptor el canal 1 quedara en estado alto( un 1) y al volver a pulsar el pulsador del canal 1 en el receptor el canal 1 quedara en estado bajo( un 0), vamos que se comportara como una bascula tipo D (bascula=biestable) que utilizara el estado anterior para cambiar de "estado", espero haberme explicado mejor.

En si no seria desactivar el canal, sino pasar de estado alto a estado bajo en dichos canales y nuevamente a estado alto y asi sucesivamente con cada pulsacion.



Saludos y gracias nuevamente!
"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.

Desconectado x-logan

  • PIC10
  • *
  • Mensajes: 14
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #3 en: 19 de Abril de 2009, 17:24:44 »
ok entonces lo que quieres es hacer un mando que cuando presionas un botón activa una salida (pone en 1 el pin de un puerto)y cuando lo vuelves a presionar la desactiva (pone en 0 el pin de un puerto), no?. Estuve revisando el código y me parece que eso es precisamente lo que hace al recibir la señal de control.

En este segmento es donde se hace la activación o desactivación de las salidas del micro.
Código: [Seleccionar]
...

MOVF CMD,W
ANDLW 0X03 ; MASK 2 LSB
ADDWF PCL,F
GOTO MAIN ; COMMAND 0X00 NOT USE OR COMMAND ERROR
GOTO DO_CH1
GOTO DO_CH2
GOTO DO_CH3

DO_CH1: MOVLW OUT1_M
GOTO CHANGE
;
DO_CH2: MOVLW OUT2_M
GOTO CHANGE
;
DO_CH3: MOVLW OUT3_M
CHANGE: XORWF GPIO,F
GOTO MAIN

En la etiqueta CHANGE es ahi donde se le aplica una XOR al puerto GPIO y por lo tanto si se activa un pin del puerto, cuando vuelvas a presionar el mismo canal este se desactivara. No veo que es lo que quieres modificarle por que este código funciona como tu lo describes.

salu2


Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #4 en: 19 de Abril de 2009, 20:17:40 »
Hola, muchas gracias por contestarme....pues...una de dos...o el pic12f629 que le programe el codigo de RX no esta bien programado....o no lo entiendo jejeje....porque yo cuando pulso el canal 1 me lo activa pero si vuelvo a pulsar en el canal 1...sigue activo no se desactiva....y asi con el canal 2 y 3....si tengo activo el canal 1 y pulso el canal 3 me activa el 3 y me desactiva el 1....pero claro yo quisiera poder decidir si activas o desactivar cada canal sin tener que activar otro canal para poder desactivar otro....

Bueno pues como bien dices ya esta preparado asi....pues probare de programarlo en el Pic12f629 haber si ha sido un error mio....


Saludos y muchisimas gracias!!
"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.

Desconectado x-logan

  • PIC10
  • *
  • Mensajes: 14
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #5 en: 21 de Abril de 2009, 01:21:46 »
Pues es extraño que no este funcionando bien el codigo se ve bien, pero el comportamiento que mencionas indicaria que el puerto de salida es limpiado (todos los pines a 0) cada ves que recive un comando, pero en el codigo no veo ninguna instruccion que limpie el puerto. lo que a lo mejor puede estar pasando (a mi ya me paso una vez) es que el pic se este reiniciando podrias hacer una prueba colocando un LED en un pin disponible y encenderlo hacer una llamada a un delay y apagarlo antes de la etiqueta MAIN con lo que solo debe prenderse una ves, y si se prende mas de una vez durante la ejecucion de los comandos es que el pic se esta reiniciando por alguna razon.

ejemplo:

Código: [Seleccionar]
            BCF INTCON,GIE
CLRF GPIO ; turn off all output
BSF GPIO,5  ; Enciende el LED de prueba
CALL DELAY3500 ; Ejecuta un delay
CALL DELAY3500 ; Ejecuta otro delay
BCF GPIO,5 ; Apaga el LED de prueba y
; no se vuelve a encender a
; menos que el pic se reinicie

Con este codigo puedes probar lo que te mencionaba, si no es eso probamos otra cosa. Debes de poner el LED en el pin 5 del puerto GPIO.

Me comentas como te fue y si pudiste resolverlo

Salu2

Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #6 en: 21 de Abril de 2009, 08:17:10 »
Muchas gracias por intentar darme una solucion a esto o mas bien darme una forma de probar si sucede eso, el viernes intentare probar haber con el metodo que me has dicho.

Hos dejo un video demostratibo de lo que me ocurre por si las palabras no lo hubieran hecho ;):


Tambien probare haber no fuera a ser que alguno de los dos pics( el configurado en TX y el RX) estubiera malos de fabrica....tengo otro pic12f629 por lo que aprovechare a introducirle al otro pic la configuracion RX haber si fuera por eso.



Saludos, te mantengo informado! :P
« Última modificación: 22 de Abril de 2009, 11:10:34 por LoPages »
"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #7 en: 21 de Abril de 2009, 11:21:59 »
Hola buenos dias aca explico la logica de funcionamiento de lo que tengo entendido que es lo que quieres:
 Si el canal uno es activado se envia un byte el cual es recibido por el receptor y tomara la decision si activa o desactiva el rele de dicho canal uno segun este su estado.

Nota: esto se cumple para cada uno de los canales; solo resta hacer el codigo en el lenguaje que se quiera.
Observacion: A cada canal en el transmisor se le asigna un byte de identificacion que eso es a eleccion del diseñador y logicamente diferente a los otros canales asi el receptor sabe que canal emitio el byte y asi podra actgivarse o desactivarse.

Saludos.
Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #8 en: 22 de Abril de 2009, 14:59:08 »
Hola, con esta pregunta se pone en clara afirmacion mis zeros conocimientos de programacion:

- Este codigo que me has dicho que compile, esta en asembler¿? si es asi deberia compilarlo con el MPLAB?¿ Solo debo introducir esa porcion de codigo o algo mas?¿


Saludos y espero que no os de algun ataque de corazon por ver esas preguntas tan tan tan de novato.

PD: He empezado con un pequeño tutorial de C para programar pics (lo voy mirando every day en el movil de camino a la facultad) de esta misma pagina.

Código: [Seleccionar]
            BCF INTCON,GIE
CLRF GPIO ; turn off all output
BSF GPIO,5  ; Enciende el LED de prueba
CALL DELAY3500 ; Ejecuta un delay
CALL DELAY3500 ; Ejecuta otro delay
BCF GPIO,5 ; Apaga el LED de prueba y
; no se vuelve a encender a
; menos que el pic se reinicie
"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.

Desconectado x-logan

  • PIC10
  • *
  • Mensajes: 14
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #9 en: 22 de Abril de 2009, 17:00:18 »
Si tienes razón, olvide mencionar donde tienes que poner ese trozo de codigo, aqui te pongo el programa completo que posteaste al principio mas la prueba de lLED que se le agrego
Código: [Seleccionar]
;--------------------------
; THIS IS RX
; PROJECT :3 channel remote control
; CRYSTAL 4 MHz
; RC5 FORMAT @38KHz , 35% duty cycle
; ADDRESS = 0X0B
; ch1  = 0X01
; ch2  = 0X02
; ch3  = 0X03
; NOT USE TOGGLE ALWAY = 0
; 4-JULY-2005
;--------------------------

list P=12F629
#include <P12F629.INC>
__config _WDT_OFF & _XT_OSC & _CP_ON & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON


#DEFINE IR GPIO,3 ; IR LED input with R10K pull-up to vcc
#DEFINE OUT1 GPIO,0 ; Drive output 1
#DEFINE OUT2 GPIO,1 ; Drive output 2
#DEFINE OUT3 GPIO,2 ; Drive output 3
#DEFINE OUT1_M 0x01
#DEFINE OUT2_M 0x02
#DEFINE OUT3_M 0x04
#DEFINE TOG_BIT TOGGLE,0
#DEFINE ADDRS 0X0B        ; 0000 1011        ; 0000 1110
#DEFINE CH1_CMD 0X01
#DEFINE CH2_CMD 0X02
#DEFINE CH3_CMD 0X03



CNT1 EQU 20H
CNT2 EQU 21H
CNT3 EQU 22H
CNT4 EQU 23H
TEMP EQU 24H
TOGGLE EQU 25H
ADDR EQU 26H
CMD EQU 27H




ORG 000

;BSF STATUS,RP0
;CALL 0X3FF
;MOVWF OSCCAL
;BCF STATUS,RP0
;
CALL DEBOUNCE

MOVLW 0X07
MOVWF CMCON ; MAKE ALL GPIO TO DIGITAL I/O
BSF STATUS,RP0
MOVLW 0X01
MOVWF OPTION_REG
  MOVLW B'00001000'
MOVWF TRISIO
CLRF IOCB
BCF STATUS,RP0
BCF INTCON,GIE
CLRF GPIO ; turn off all output
;------------------------------------------------------------------------
BSF GPIO,5  ; Enciende el LED de prueba
CALL DELAY3500  ; Ejecuta un delay
CALL DELAY3500 ; Ejecuta otro delay
BCF GPIO,5 ; Apaga el LED de prueba y
; no se vuelve a encender a
; menos que el pic se reinicie
;-------------------------------------------------------------------------
MAIN: CALL DELAY3500
CALL GET_RC5
BTFSC STATUS,C
GOTO MAIN
;
MOVF ADDR,W
XORLW ADDRS
BTFSS STATUS,Z
GOTO MAIN ; ADDRESS ERROR
;
MOVF CMD,W
ANDLW 0X03 ; MASK 2 LSB
ADDWF PCL,F
GOTO MAIN ; COMMAND 0X00 NOT USE OR COMMAND ERROR
GOTO DO_CH1
GOTO DO_CH2
GOTO DO_CH3

DO_CH1: MOVLW OUT1_M
GOTO CHANGE
;
DO_CH2: MOVLW OUT2_M
GOTO CHANGE
;
DO_CH3: MOVLW OUT3_M
CHANGE: XORWF GPIO,F
GOTO MAIN

;======================================
; READ RC5 Format
; OUTPUT : TOGGLE.7 = TOGGLE BIT
;        ADDR = ADDRESS 5 BIT
;         CDM = COMMAND 6 BIT
;           C = 0 READ OK
;     = 1 READ ERROR
;======================================
GET_RC5:BTFSC IR
GOTO GET_RC5 ; WAIT IR LOW
CLRF TMR0 ; clear timer 0
NOP
BCF INTCON,T0IF ; CLR timer 0 flag
NOP
;
BTFSC INTCON,T0IF     
GOTO ERR1
;
BTFSS IR
GOTO $-3
;
MOVF TMR0,W
;MOVLW 0xC8 ; FOR TEST
MOVWF TEMP
MOVLW 0XFF ; 1020 mS = 255*4
SUBWF TEMP,W
BTFSC STATUS,C
GOTO ERR1 ; ERROR IF Time > 1020 uS
MOVLW 0XC8 ; 800 mS
SUBWF TEMP,W
BTFSS STATUS,C
GOTO ERR1 ; ERROR IF Time < 800 uS  (C8h * TM0 Prescaler = 800 uS )
;
BTFSC IR  ; Time validate 800uS-1020uS
GOTO $-1 ; WAIT TO LOW (Syn BIT)
CALL DELAY1252 ; DELAY 3/4 BIT LENGHT=1252 uS
;
BTFSS IR
BCF TOGGLE,7
BTFSC IR
BSF TOGGLE,7
;
BTFSS IR
GOTO $+4
BTFSC IR
GOTO $-1
GOTO READ
;
BTFSS IR
GOTO $-1

;====== READ ADDRESS 5 BIT ===========
; READ MSB FIRST
;
READ: MOVLW 5
MOVWF TEMP ; LOOP COUNTER
CLRF ADDR
;
READ1: CALL DELAY1252
BTFSS IR
BCF STATUS,C
BTFSC IR
BSF STATUS,C
RLF ADDR,F ; SHIFT LEFT ADDRESS
;
BTFSS IR
GOTO $+4
BTFSC IR ; WAIT LOW
GOTO $-1
GOTO $+3
;
BTFSS IR
GOTO $-1
;
DECFSZ TEMP,F
GOTO READ1
;
;====== READ COMMAND 6 BIT ===========
; READ MSB FIRST
;
MOVLW 6
MOVWF TEMP ; LOOP COUNTER
CLRF CMD
;
CMD1: CALL DELAY1252
BTFSS IR
BCF STATUS,C
BTFSC IR
BSF STATUS,C
RLF CMD,F ; SHIFT LEFT COMMAND
;
BTFSS IR
GOTO $+4
BTFSC IR
GOTO $-1
GOTO $+3
;
BTFSS IR
GOTO $-1
;
DECFSZ TEMP,F
GOTO CMD1
;
MOVLW 0X3F ; 0011 1111
ANDWF CMD,F
MOVLW 0X1F ; 0001 1111
ANDWF ADDR,F
BCF STATUS,C ; C=0 NO ERROR
RETURN
;
ERR1: BSF STATUS,C ; C=1 HAVE ERROR
RETURN

;======================================
; DEBOUNCE SWITCH
; DELAY 15 mS
;======================================
DEBOUNCE:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
DEL_1: MOVLW .20
MOVWF CNT2 ; 1
DEL_2: CLRF CNT3 ; 1
DEL_3: DECFSZ CNT3,F ; 1/2
GOTO DEL_3 ; 2
DECFSZ CNT2,F ; 1/2
GOTO DEL_2 ; 2
DECFSZ CNT1,F ; 1/2
GOTO DEL_1 ; 2
RETLW 0 ; 2

;======================================
; DELAY 1.252mS
;======================================
DELAY1252:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
REP_1: MOVLW .5
MOVWF CNT2 ; 1
REP_2: MOVLW .81
MOVWF CNT3 ; 1
REP_3: DECFSZ CNT3,F ; 1/2
GOTO REP_3 ; 2
DECFSZ CNT2,F ; 1/2
GOTO REP_2 ; 2
DECFSZ CNT1,F ; 1/2
GOTO REP_1 ; 2
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
RETURN ; 2



DELAY3500:
MOVLW .1 ; 1
MOVWF CNT1 ; 1
MOVLW .23
MOVWF CNT2 ; 1
MOVLW .50
MOVWF CNT3
DECFSZ CNT3,F ; 1/2
GOTO $-1 ; 2
DECFSZ CNT2,F ; 1/2
GOTO $-5 ; 2
DECFSZ CNT1,F ; 1/2
GOTO $-9 ; 2
RETLW 0 ; 2



END





asi debe de compilar bien, a menos que le hayas modificado otras cosas, pero si no solo copia y pega la parte de prueba de LED y ponla en tu codigo

salu2

Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #10 en: 22 de Abril de 2009, 19:11:52 »
Hola, gracias por el codigo...estaba yo pensado el pin 5 del GPIO es la entrada del CLK!!! alli no puedo conectar nada...sino el pic no arranca sin clock externo jejeje, o me equiboco¿?

Saludos!
« Última modificación: 22 de Abril de 2009, 20:09:22 por LoPages »
"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.

Desconectado x-logan

  • PIC10
  • *
  • Mensajes: 14
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #11 en: 23 de Abril de 2009, 12:06:26 »
ok, entonces solo cambia el 5 por otro pin libre que tengas

salu2

Desconectado LoPages

  • PIC10
  • *
  • Mensajes: 29
Re: Modificacion codigo TX y RX en un PIC12F629
« Respuesta #12 en: 23 de Abril de 2009, 18:27:18 »
Hola, he probado con ese codigo que me distes, cambiando GPIO,5 por GPIO,2 y nada ni enciende ni apaga el led de esa salida.....no lo entiendo....lo compilo con MPLAB....no me da ningun error la compilacion....pero al pasarlo al pic y montarlo en el circuito...al iniciar no se enciende el led de la salida GPIO,2 , lo he simulado con Proteus y tampoco hace nada.....o yo no se compilarlo....o no se.

Os dejo el HEX del codigo que he compilado y el archivo de la simulacion de proteus por si alguna alma caritativa me compilara el codigo que x-logan me ha dado.



Saludos.

PD: Vaya novato que estoy hecho en esto....perdonad todos los problemas con los que me encuentro y preguntas tontas que hago, pero esto es como si empezara a aprender a nadar de nuevo.... :D
"Nuestra carrera es puta, pero nosotros lo somos mas!!!"---->By Meroño.


 

anything