Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

26/11/2008 #1


Introduccion de varios paquetes de 8 bits a un pin del pic
Hola...

necesito saber que cantidad de bits puede entrar por un pin de un pic.....


necesito ademas saber que comando utilizar para que un pin del pic lea varios paquetes de 8bits, la situacion es la siguiente:

tenemos un pic 16f628, el cual utilizaremos para crear el decodificador de un control remoto sony.
ya tenemos la combinacion binaria que permite la activacion de cada boton de dicho control, dichas combinaciones estan formadas por 8bits cada una.

como salida del pic tendremos las aplicaciones q tendra dicho control, el problema se basa en la entrada. no sabemos que comando utilizar para programar el pic de tal manera q un pin del "puerto a"reciba las distintas combinaciones binarias q posee cada boton del control...



agradezco su pronta respuesta! gracias
26/11/2008 #2

Avatar de Meta

Hola:

Necesitas un protocolo de comunicación por lo que veo y no son los oficiales como I2C, SPI, CAN, etc...

Si es posible, facilita más datos, sobre todo lo de control remoto Sony.

Un cordial saludo.
26/11/2008 #3


eehm

sinceramente no entiendo
este protocolo se conectaria donde?



no te entiendo la idea
26/11/2008 #4


estas son las diferentes combinaciones del control...

lo que se quiere es: mediante que comando en asm yo puedo comparar entre si los bits q entran, para obtener un 1 en cualquier pin de otro puerto
Imágenes Adjuntas
Tipo de Archivo: jpg bin_379.jpg (15,4 KB (Kilobytes), 189 visitas)
26/11/2008 #5

Avatar de Meta

Aquí hay un ejemplo de tu idea.

Código:
;********************************** Indexado_02.asm *************************************
;
;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		www.pic16f84a.com
; 	  Editorial Ra-Ma.  www.ra-ma.es
;	===================================================================
;
; Controla el nivel de un depósito de líquido. Utiliza (entre paréntesis las líneas del
; microcontrolador a la que se han conectado):
; -	Tres sondas detectoras: SV, Sonda de Vacío (RA0); SLL, Sonda de LLenado (RA1);
;	SR, Sonda de Rebose (RA2).
; -	Dos bombas de agua: B1 (RB5), B2 (RB6).
; - Cinco indicadores: Vacio (RB0), Llenandose (RB1), Lleno (RB2), Rebose (RB3),
;	Alarma (RB4).
;
; Su funcionamiento: 
; -	Cuando ninguna de las sondas está mojada se entiende que el depósito está vacío y
;	se accionarán las dos bombas. El indicador "Vacio" se iluminará*.
; -	Cuando el nivel del líquido toque la sonda de vacío "SV" seguirá llenándose el
; 	depósito con las dos bombas. El indicador "Llenandose" se ilumina.
; -	Cuando el nivel del líquido toca la sonda de llenado "SLL", para la bomba B2, quedando
;	B1 activada en modo mantenimiento. El indicador "Lleno" se ilumina.
; -	Si el nivel del líquido moja la sonda de rebose "SR" se apaga también la bomba B1,
;	quedando las dos bombas fuera de servicio. El indicador "Rebose" se enciende.
; -	Cuando se produce un fallo o mal funcionamiento en las sondas de entrada (por
;	ejemplo que se active la sonda de rebose y no active la de vacío) se paran
;	las dos bombas. El indicador "Alarma" se ilumina.
;
; Según el enunciado del problema, teniendo en cuenta las conexiones citadas y poniendo la
; salida no utilizada (RB7) siempre a cero, la tabla de verdad resultante es:
;
; RA2.. RA0 | RB7 ...          ... RB0
; ------------|--------------------------------
;  0   0   0  |  0   1   1   0   0   0   0   1	(Configuración 0. Estado "Vacio").
;  0   0   1  |  0   1   1   0   0   0   1   0	(Configuración 1. Estado "Llenandose").
;  0   1   0  |  0   0   0   1   0   0   0   0	(Configuración 2. Estado "Alarma").
;  0   1   1  |  0   0   1   0   0   1   0   0	(Configuración 3. Estado "Lleno").
;  1   0   0  |  0   0   0   1   0   0   0   0	(Configuración 4. Estado "Alarma").
;  1   0   1  |  0   0   0   1   0   0   0   0	(Configuración 5. Estado "Alarma").
;  1   1   0  |  0   0   0   1   0   0   0   0	(Configuración 6. Estado "Alarma").
;  1   1   1  |  0   0   0   0   1   0   0   0	(Configuración 7. Estado "Rebose").
;
; ZONA DE DATOS **********************************************************************

	LIST		P=16F84A
	INCLUDE		<P16F84A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

; ZONA DE CÓDIGOS ********************************************************************

	ORG 	0					; El programa comienza en la dirección 0.
Inicio
	clrf	PORTB				; Debe estar a cero cuando el puerto se configure como salida.
	bsf		STATUS,RP0			; Acceso al Banco 1.
	clrf	TRISB				; Las líneas del Puerto B se configuran como salida.
	movlw	b'00011111'			; Las 5 líneas del Puerto A se configuran como entrada.
	movwf	TRISA
	bcf		STATUS,RP0			; Acceso al Banco 0.
Principal
	movf	PORTA,W				; Lee los sensores.
	andlw	b'00000111'			; Máscara para quedarse con el valor de los sensores.
	addwf	PCL,F				; Salta a la configuración adecuada.
	goto	Configuracion0
	goto	Configuracion1
	goto	Configuracion2
	goto	Configuracion3
	goto	Configuracion4
	goto	Configuracion5
	goto	Configuracion6
	goto	Configuracion7
Configuracion0
	movlw 	b'01100001'			; Estado "Vacio" (configuración 0).
	goto	ActivaSalida
Configuracion1
	movlw 	b'01100010'			; Estado "Llenándose" (configuración 1).
	goto	ActivaSalida
Configuracion2
	movlw 	b'00010000'			; Estado "Alarma" (configuración 2).
	goto	ActivaSalida
Configuracion3
	movlw 	b'00100100'			; Estado "Lleno" (configuración 3).
	goto	ActivaSalida
Configuracion4
	movlw 	b'00010000'			; Estado "Alarma" (configuración 4).
	goto	ActivaSalida
Configuracion5
	movlw 	b'00010000'			; Estado "Alarma" (configuración 5).
	goto	ActivaSalida
Configuracion6
	movlw 	b'00010000'			; Estado "Alarma" (configuración 6).
	goto	ActivaSalida
Configuracion7
	movlw 	b'00001000'			; Estado "Rebose" (configuración 7).
ActivaSalida
	movwf	PORTB				; Visualiza por el puerto de salida.
	goto 	Principal

	END
	
;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		www.pic16f84a.com
; 	  Editorial Ra-Ma.  www.ra-ma.es
;	===================================================================
26/11/2008 #6


sorry pero sigo sin entender

yo lo que quiero es q al entrar distintos paquetes de bits a un pin del pic, obtener distintas salidas

que la entrada sea un paquete en una pata, no un bit como el ejemplo q me enviaste
26/11/2008 #8


no entiendo que voy a obtener utilizando este bus

las señales del control q estamos utilizando emiten al receptor una combinacion de varios ceros y unos, es decir un paquete de bits.

el receptor es el q estoy diseñando pero no entiendo, recuerda q soy principiante, de q manera cuando el control emita una señal dada decirle al pic q me mande un 1 en el puerto q defini como salida

porfavor esta es mi pregunta

gracias
26/11/2008 #9

Avatar de Meta

Te entiendo bien. Para recibir un dato en un PIC necesitas utilizar varios patas de entrada, en tu caso 8 patas, por ejemplo, todo el PORTA o bien, utilizar un protocolo de comunicación para que esos comandos que pusistes ene sa foto te funcione.

Así de sencillo.
26/11/2008 #10


no

no se necesitan varias patas. En la pagina dond encontre los codigos binarios del control aparece este circuito,



fijate en la pata ra4,, en esa pata esta conectado un modulador IR,,,, este contiene todos los valores de la tablita q t envie antes
Imágenes Adjuntas
Tipo de Archivo: jpg 3_982.jpg (30,1 KB (Kilobytes), 176 visitas)
26/11/2008 #11

Avatar de Meta

Ahora que lo has dejado claro con el esquema. Necesitas protocolo de comunicación vía serie para que el PIC entienda los datos que recibe.

Tienes que programarlo.
26/11/2008 #12


programar el bus?
26/11/2008 #13

Avatar de Meta



Te entran en binario a base de pulsos y eso lo tiene que reconocer el PIC, cuando reconozca alguno de ellos, activa una función, en caso de que no coincida ninguna, se ignora.
26/11/2008 #14


Como dice Meta, necesitas un protocolo de transmisión serie. El puerto puede recibir los pulsos que quieras, no tiene limite pero en este caso lo critco son los tiempos. Tienes que darle tiempo al pic a que su entrada alcance el nivel, que le dé tiempo a operar con los datos y a volver a leer un cambio en la variable.

Con cuestión tiempo me refiero a microsegundos. Pero sigues teniendo su importancia.

Se me ocurre para el programa, un algoritmo que, detecte los cambios en un pin de entrada, y almacene cada bit en un bit de un registro. Cuando reciba los 8 bits, compara el registro creado con el tado que deberia tener y si coincide que haga una cosa, y si nó que ignore la trama.

Suerte.
26/11/2008 #15


Meta dijo:


Te entran en binario a base de pulsos y eso lo tiene que reconocer el PIC, cuando reconozca alguno de ellos, activa una función, en caso de que no coincida ninguna, se ignora.
esto lo entiendo.

lo q no entiendo es de q manera el pic puede reconocer varios pulsos a la vez. q comando me permite eso?
o la topologia del programa o hardware a utilizar?
26/11/2008 #16


lanselor dijo:
Como dice Meta, necesitas un protocolo de transmisión serie. El puerto puede recibir los pulsos que quieras, no tiene limite pero en este caso lo critco son los tiempos. Tienes que darle tiempo al pic a que su entrada alcance el nivel, que le dé tiempo a operar con los datos y a volver a leer un cambio en la variable.

Con cuestión tiempo me refiero a microsegundos. Pero sigues teniendo su importancia.

Se me ocurre para el programa, un algoritmo que, detecte los cambios en un pin de entrada, y almacene cada bit en un bit de un registro. Cuando reciba los 8 bits, compara el registro creado con el tado que deberia tener y si coincide que haga una cosa, y si nó que ignore la trama.

Suerte.
lo que no entiendo es la parte de "detecte los cambios en un pin de entrada"...de q manera en un solo pin de entrada pueden entrar varios pulsos


en cuanto a programacion, de que manera se guardan los n bits del tren de pulsos en un registro?
26/11/2008 #17


suponiendo que tengo obligatoriamente q utilizar el puerto serie...

que relacion tendria yo con la pc? mi proyecto es un control remoto
26/11/2008 #18


hay dos maneras de averiguar que manera hay de comprobar.

Comprobando el estado del pin "btfsc" o "btfss" seria lo más simple pero de esta manera los tiempos serian muy criticos.

De otra manera, seria utilizando la utilidad que traen algunos pics, de activar un flag del status cuando se producen un cambio en el pin. De esta manera. Cuando se detecte el primer cambio la trama vendrá completa. Por lo que, el problema aqui estaria en hacer un programa secuencial que fuera almacenando cada cambio en un bit distinto.

En los pics hay registros especiales que son direccionables bit a bit, y con "Bcf" o "bsf" los pones a 0 o a 1.
26/11/2008 #19


ok...

ya yo cree el codigo fuente utilizando el btfss...luego me di cuenta q estaba errada ya que la funcion btfss trabaja con el puerto y un numero de bit y yo no deseo un numero de bit sino 8 bits..

este es el codigo q cree, basandome en las entradas q ya coloque en anteriores posts(la tabla)
ist p=16f628
status equ 03h
porta equ 05h
portb equ 06h
trisa equ 85h
trisb equ 86h
rp0 equ 05h
org 00
goto inicio
inicio org 05

bsf status, rp0
movlw 00
movwf trisb
bsf status,rp0
movlw 0ff
movwf trisa
btfss porta,0
goto ob
call sda
sda btfss porta,3
goto chanelmas
call pause
ob btfss porta,3
goto chmenos
call stop
pause movlw 01
movwf portb

chanelmas movlw 02
movwf portb
chmenos movlw 04
movwf portb
stop movlw 08
movwf portb

end
26/11/2008 #20


Me parece que es rs-232 solo embio de datos, tierra y tx.
O tambien puede ser i2c con lm75.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.