Ver las NORMAS de estos Foros Web ZackYFileS Chat ZackYFileS Agregar a Favoritos Contactar con Administrador
 
 

TU PUBLICIDAD AQUÍ!!
Navegación
Retroceder   Foros ZackYFileS >
OTROS TEMAS DE INTERES - INTERNET:
> PROGRAMACIÓN Microcontroladores: PICs , AVRs.
Nombre de usuario
Contraseña
Configuración de UsuarioAyuda (FAQs)Nuevos PostsBuscar


Respuesta
 
Herramientas
Antiguo 21/03/2008, 20:39   #1
ecraun
Usuario Activo
 
Fecha de ingreso: 05/oct/2003
Mensajes: 123
ecraun está en el buen camino
Programa para 16f84

Hola a todos, estaba haciendo un programa para un 16f84 y no acaba de funcionarme del ttodo bien.Lo estaba haciendo con microbasic y me he quedao un poco atascao, no es muy dificil pero todavia no lo domino muy bien.Explico lo que deberia hacer el micro.

Tenemos un dipswitch de 3 lineas de 2 posiciones cada una conectados a RA0, RA1 y RA2 y un pulsador en el RA4.Solo uno de los 3 puede estar a masa en el momento de alimentar, puede ser cualquiera de los 3 pero solo uno y el micro actua diferente sea cual sea el dip.· modos de funcionamiento.

- Si es el dip de RA0 el que esta a masa al pulsar el pulsador de RA4 se activara la salida de RB0 durante 1 segundo y despues volvera a nivel bajo a la espera de otra pulsacion.

- Si es el dip de RA1 el que esta a masa al pulsar el pulsador de RA4 se activara la salida de Rb0 durante 30 segundos y despues volvera a nivel bajo a la espera de otra pulsacion.

-si es el dip de RA2 el que esta a masa cuando se pulse el pulsador de RA4 la salida de RB0 pasara a nivel alto hasta que se vuelva a pulsar RA4 que volveria a llevarla a nivel bajo y asi sucesivamente todas las veces.

Digamos q son 3 modos de funcionamiento y estos modos lo marcan las posiciones de los dip.

Os dejo el programa en microbasic y si podeis echarle un vistazo para arreglarlo, agradecido.Si alguno lo apaña en ensamblador porque lo domina mejor pues igual me da, le saco el hex y lo cargo.

Muchas gracias a todos.

Aqui esta:
program tresmodos

main:
TRISA = 1
TRISB = 0
PORTB = %00000000
IF PORTA.0 = 0 THEN
IF PORTA.4 = 0 THEN
PORTB.0 = 1
delay_ms(1000)
PORTB.0 = 0
END IF
end if

IF PORTA.1 = 0 THEN
IF PORTA.4 = 0 THEN
PORTB.0 = 1
delay_ms(30000)
PORTB.0 = 0
END IF
end if

IF PORTA.2 = 0 THEN
IF PORTA.4 = 0 THEN
IF PORTB.0 = 1 THEN
PORTB.0 = 0
ELSE
PORTB.0 = 1
END IF
END IF
end if
goto main
end.
ecraun está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Antiguo 22/03/2008, 13:14   #2
1jabato1
Usuario Activo
 
Avatar de 1jabato1
 
Fecha de ingreso: 02/mar/2006
Mensajes: 153
1jabato1 está en el buen camino
Hola ecraun
Yo estoy empezando con esto de los pic, utilizo el pic simulador ide para escribir y simular el codigo.Es muy parecido al microbasic.Tendras que poner los tiempos para las esperas puesto que los puse para poder simular.Espero te sirva
Un saludo



AllDigital
TRISA = %11111111
TRISB = %00000000


inicio:
PORTB.0 = 0
If PORTA = 0x11 Then Goto segundo
WaitUs 50
If PORTA = 0x12 Then Goto treinta
WaitUs 50
If PORTA = 0x14 Then Goto siempre
WaitUs 50
Goto inicio
siempre:
PORTB.0 = 1
WaitUs 150
If PORTA = 0x14 Then Goto inicio
Goto siempre
segundo:
PORTB.0 = 1
WaitUs 500
Goto inicio
treinta:
PORTB.0 = 1
WaitUs 2000
Goto inicio
End
__________________
[COLOR="Red"]Sólo dos cosas son infinitas, el universo y la estupidez humana… y no estoy seguro de lo primero.Albert Einstein[/COLOR]
1jabato1 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 22/03/2008, 23:35   #3
ecraun
Usuario Activo
 
Fecha de ingreso: 05/oct/2003
Mensajes: 123
ecraun está en el buen camino
Gracias jabato por interesarte, la cuestion es que no acaba de funcionar del todo bien he probado con el programa que me dices y no se activa la salida como deberia, hay algo que nos estamos pasando por alto.He probado con alguna modificacion del programa y tampoco funciona bien.en estos momentos el programa lo tengo asi:
Gracias a los 2 por contestar.La verdad es que el programa ha mejorado mucho pero sigue sin funcionar.A veces se enciende 1 segundo a veces 30 funciona aleatoriamente sin sintedo alguno, y lo que no he conseguido que haga es encender y apagar con el mismo pulsador, osea el modo 3 (RA2)
Os dejo el programa tal y como lo tengo en estos momentos a ver si veis algo.
De nuevo gracias por interesaros.

program tresmodos

main:

TRISA = 255
TRISB = 0
PORTB = 0

while true

if TestBit(PORTA, 0) = 0 then
if Button(PORTA, 4, 100, 0) then
SetBit(PORTB, 0)
Delay_ms(1000)
ClearBit(PORTB, 0)
end if
end if

if TestBit(PORTA, 1) = 0 then
if Button(PORTA, 4, 100, 0) then
SetBit(PORTB, 0)
Delay_ms(30000)
ClearBit(PORTB, 0)
end if
end if

if TestBit(PORTA, 2) = 0 then
if Button(PORTA, 4, 100, 0) then
if TestBit(PORTB, 0) then
ClearBit(PORTB, 0)
else
SetBit(PORTB, 0)
end if
end if
end if

wend

end.

A ver si alguien puede ver el error.

Un saludo y gracias de nuevo jabato
ecraun está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 23/03/2008, 13:58   #4
1jabato1
Usuario Activo
 
Avatar de 1jabato1
 
Fecha de ingreso: 02/mar/2006
Mensajes: 153
1jabato1 está en el buen camino
Hola ecraun
Creo que deberiamos ralentizar el programa para evitar los rebotes del pulsador.Si lo tienes montado en un circuito asegurate de que ninguna entrada esta flotante.El programa que puse funciona con los dipswitch y el pulsador en estado alto y hay que modificar los tiempos puesto que los puse en microsegundos para poder simularlo.

Un saludo y encantado de aprender contigo
__________________
[COLOR="Red"]Sólo dos cosas son infinitas, el universo y la estupidez humana… y no estoy seguro de lo primero.Albert Einstein[/COLOR]

Última edición por 1jabato1; 23/03/2008 a las 14:05.
1jabato1 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 24/03/2008, 13:28   #5
Estator
Usuario Activo
 
Fecha de ingreso: 17/nov/2003
Mensajes: 99
Estator llegará a ser famoso muy pronto
Dime la velocidad y tipo de reloj con la que vas a trabajar y preparo la versión ensamblador.

Un saludo.
Estator está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 24/03/2008, 14:17   #6
Estator
Usuario Activo
 
Fecha de ingreso: 17/nov/2003
Mensajes: 99
Estator llegará a ser famoso muy pronto
Dime también que ha de hacer el programa si estando la salida RB0 activada (en cualquiera de los 3 modos) se vuelve a activar RB4. Osea, si esta temporizando y cambia de estado el puerto A. Y que se debe hacer si se mantiene una tecla pulsada.... lo que se te ocurra.
Estator está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 24/03/2008, 15:03   #7
ecraun
Usuario Activo
 
Fecha de ingreso: 05/oct/2003
Mensajes: 123
ecraun está en el buen camino
Hola estator , estos dias he estado probando cosas y parece que funciona mejor el circuito al reves de lo que proponia en un principio, osea, funciona mejor si en lugar de poner resistencias de pull-up a + 5V y cortocircuitar con los dips y el pulsador a masa las entradas, pues al reves, colocar las resistencias a masa y cortocircuitar con los dips y el pulsador a +5V, con lo que nos cambiaria el programa en lo que a niveles altos y bajos se refiere en las entradas.Lo que un nivel bajo nos activaba antes Ra4 ahora es un nivel alto.Sigo haciendo pruebas con diferentes programas, diferentes esquemas y aumentando tiempos de espera para anular los rebotes como dice jabato.
El programa parece que quiere ir pero no es definitivo, porque a veces por lo que sea, se activa la salida con 30 segundos cuando deberia ser solo 1 y al reves y no pillo por que, es aleatorio y no le encuentro explicacion, yo creo que es de soft porque el hard no tiene mayor misterio, las resistencias de pull-up en la entrada, estoy funcionando con un cristal de 4 Mhz con sus correspondientes condensadores de 22 picos y una resistencia limitadora de corriente en la salida para no freir el led, no hay mas.
A ver si me apañas algo por ahi, te dejo lo que me pides arriba.
Oscilador cristal de cuarzo a 4 Mhz
Si se activa de nuevo Ra4 mientras esta temporizada la salida que no haga nada en los casos RA0 y RA1 (1 segundo y 30) simplemente que se termine la temporizacion y ya esta, no hace falta que comience la temporizacion de nuevo.En el caso de RA2 (estable) si se activa RA4 se debera cambiar el estado de la salida sucesivamente.
Un saludo y muchas gracias, estamos en contacto
ecraun está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 24/03/2008, 19:12   #8
Estator
Usuario Activo
 
Fecha de ingreso: 17/nov/2003
Mensajes: 99
Estator llegará a ser famoso muy pronto
Prueba este .asm (al final esta el .hex). Hablamos.

Código:
;Tenemos un dipswitch de 3 lineas de 2 posiciones cada una conectados a RA0, RA1 y RA2 y un pulsador
;en el RA4.Solo uno de los 3 puede estar a masa en el momento de alimentar, puede ser cualquiera de 
;los 3 pero solo uno y el micro actua diferente sea cual sea el dip.3 modos de funcionamiento.
;
;- Si es el dip de RA0 el que esta a masa al pulsar el pulsador de RA4 se activara la salida de RB0 
;  durante 1 segundo y despues volvera a nivel bajo a la espera de otra pulsacion.
;
;- Si es el dip de RA1 el que esta a masa al pulsar el pulsador de RA4 se activara la salida de Rb0 
;  durante 30 segundos y despues volvera a nivel bajo a la espera de otra pulsacion.
;
;-si es el dip de RA2 el que esta a masa cuando se pulse el pulsador de RA4 la salida de RB0 pasara 
; a nivel alto hasta que se vuelva a pulsar RA4 que volveria a llevarla a nivel bajo y asi sucesivamente todas las veces.
;
;Digamos q son 3 modos de funcionamiento y estos modos lo marcan las posiciones de los dip. 

	
		List	p=16F84A	;Tipo de procesador
		include	"P16F84A.INC"	;Definiciones de registros internos
	__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC

Contador	equ	0x0c		;Variable para la temporizacion
Estado		equ	0x0d		;Estado de la cuenta
Contador1	equ	0x0e
                    
		org	0x00		;Vector de Reset
		goto	Inicio

		org	0x04		;Vector de interrupcion

Interrupcion   	bcf	INTCON,T0IF	;Repone flag del TMR0
		decfsz	Contador1	;contador para permitir mas tiempo 
		goto	Repite		;

		btfss	PORTA,2		;si esta en modo conmutacion no decrementa el contador
		decfsz 	Contador,F	;Decrementa el contador
           	goto 	Int1
		goto	Reset		;desactiva RB0 y flag de contando

Int1		movf	PORTA,W		;valor de puerto A
		xorlw	b'00010001' 	;mascara para ra0 y ra4 =1
		btfsc	STATUS,Z	;coincide con la mascara?
		goto	modoRA0_RA4	;si, gestiona este caso
					;no, comprobar caso 2 
		movf	PORTA,W		;valor de puerto A
		xorlw	b'00010010' 	;mascara para ra1 y ra4 =1
		btfsc	STATUS,Z	;coincide con la mascara?
		goto	modoRA1_RA4	;si, gestiona este caso
					;no, comprobar caso 3 
		movf	PORTA,W		;valor de puerto A
		xorlw	b'00010100' 	;mascara para ra2 y ra4 =1
		btfsc	STATUS,Z	;coincide con la mascara?
		goto	modoRA2_RA4	;si, gestiona este caso

		goto 	Repite1

;espera a que se suelte la tecla pulsada y carga la variable contador
modoRA0_RA4	movf	PORTA,W		;valor de puerto A
		xorlw	b'00000001' 	;mascara para ra0 y ra4 =1
		btfss	STATUS,Z	;se ha soltado la tecla?
		goto	modoRA0_RA4	;espera a que se suelte
		btfsc	Estado,0	;esta temporizando?
		goto	Reset		;si, retetea salida  
		movlw	d'5'		;no, carga valor para 1 segundo
		movwf	Contador	;en contador
		bsf	PORTB,0		;activa RB0
		bsf	Estado,0	;activa flag de temporizando
		goto 	Repite1

modoRA1_RA4	movf	PORTA,W		;valor de puerto A
		xorlw	b'00000010' 	;mascara para ra1 y ra4 =1
		btfss	STATUS,Z	;se ha soltado la tecla?
		goto	modoRA1_RA4	;espera  a que se suelte
		btfsc	Estado,0	;esta temporizando?
		goto	Reset		;si, retetea salida  
		movlw	d'150'		;30 segundos
		movwf	Contador	;en contador
		bsf	PORTB,0		;activa RB0
		bsf	Estado,0	;activa flag de temporizando
		goto 	Repite1

;espera a que se suelte la tecla pulsada y conmuta rb0
modoRA2_RA4	movf	PORTA,W		;valor de puerto A
		xorlw	b'00000100' 	;mascara para ra2 y ra4 =1
		btfss	STATUS,Z	;se ha soltado la tecla?
		goto	modoRA2_RA4	;espera a que se suelte
		btfss	PORTB,0		;RB0=1?
		goto	activa_RB0	;no, activa RB0
		goto	desactiva_RB0	;si, desactiva RB0

activa_RB0	bsf	PORTB,0
		goto 	Repite1
Reset		bcf	Estado,0
desactiva_RB0	bcf	PORTB,0
		goto 	Repite1

Repite1		movlw	d'4'
		movwf	Contador1	;Carga contador 1
Repite    	movlw 	d'60'
           	movwf 	TMR0      	;Repone el TMR0
           	retfie			;Retorno de interrupcion

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		movlw	b'11111110'	;RB0 salida
		movwf	TRISB		;
		movlw	b'00011111'		
		movwf	TRISA		;Puerta A se configura como entrada
		movlw	b'00000111'
		movwf	OPTION_REG	;Preescaler de 256 para el TMR0		
		bcf	STATUS,RP0	;Selecciona banco 0			                                                                         

;carga los valores para el TMR0

		movlw	d'60'
		movwf	TMR0		;Carga el TMR0
		movlw	d'4'
		movwf	Contador1	;Carga contador 1
		movlw	b'10100000'
		movwf	INTCON		;Activa la interrupcion del TMR0

Loop		goto 	Loop


		end			;Fin del programa fuente
Aqui empieza el hexadecimal.
Código:
:020000040000FA
:020000003F2897
:080008000B118E0B3C28051DB5
:100010008C0B0B2837280508113A031918280508F6
:10002000123A031923280508143A03192E283A28EE
:100030000508013A031D18280D18372805308C00D3
:1000400006140D143A280508023A031D23280D183A
:10005000372896308C0006140D143A280508043A07
:10006000031D2E28061C3528382806143A280D10A2
:1000700006103A2804308E003C30810009008601C9
:100080008316FE3086001F30850007308100831202
:0E0090003C30810004308E00A0308B004E28E2
:02400E00FA3F77
:00000001FF

Última edición por Estator; 26/03/2008 a las 22:00.
Estator está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 24/03/2008, 19:14   #9
Estator
Usuario Activo
 
Fecha de ingreso: 17/nov/2003
Mensajes: 99
Estator llegará a ser famoso muy pronto
Veo que el copypaste no sale muy bien en los textos que usan tabulaciones. Si necesitas los ficheros originales dimelo.

Última edición por Estator; 24/03/2008 a las 19:16.
Estator está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 24/03/2008, 22:14   #10
ecraun
Usuario Activo
 
Fecha de ingreso: 05/oct/2003
Mensajes: 123
ecraun está en el buen camino
Hola estator, me da error al cargarlos y seguro que es por las tabulaciones de las lineas.Si no te importa mandame los ficheros directamente para poder cargarlos sin problemas a la dire q te dejo en el privi..

Muchas gracias por tu ayuda,un saludo.
ecraun está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 25/04/2008, 06:00   #11
Estator
Usuario Activo
 
Fecha de ingreso: 17/nov/2003
Mensajes: 99
Estator llegará a ser famoso muy pronto
Hola ecraun.

¿Como llevas este tema?. ¿Te sirvió lo que te envié?. Curiosidad solamente...

Un saludo.
Estator está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 28/04/2008, 22:04   #12
ecraun
Usuario Activo
 
Fecha de ingreso: 05/oct/2003
Mensajes: 123
ecraun está en el buen camino
[QUOTE=Estator;3346779]Hola ecraun.

¿Como llevas este tema?. ¿Te sirvió lo que te envié?. Curiosidad solamente...

Un saludo.[/QUOTE]

Hola Estator, lo tengo parado de momento, he estado liao con temas de trabajo y muy a mi pesar no he podido hacer nada aun, espero poder hacer algo este finde que va a ser un poco mas largo de lo normal.

Te agradezco el interes, tengo el circuito montado en la proto y me falta grabar el pic con tu programa y probarlo, en cuanto lo tenga te comento.

Un saludo y gracias.
ecraun está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 04/05/2008, 21:08   #13
Olvidadizo
Usuario Registrado
 
Fecha de ingreso: 12/dic/2007
Mensajes: 10
Olvidadizo está en el buen camino
Necesitas filtrar la entrada del pulsador, siempre se producen rebotes, yo le suelo poner un tiempo de 50 mS antes de segurar la posicion cerrado o abierto. Hace tiempo que no programo pero si lo necesitas intentaré buscarte alguna rutina que funcione bien.

Saludos desde la Costa del Sol
Olvidadizo está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 26/08/2009, 15:15   #14
lucho89
Usuario Registrado
 
Fecha de ingreso: 03/jun/2009
Mensajes: 2
lucho89 está en el buen camino
necesito alguna idea para frenar un motor continuo que hace girar dos ruedas... es un motor de baja tension y no se cual puede ser la mejor manera de frenarlo... todavia soy principiante en electronica..si se les ocurre algo se los agradeceria! saludos!
lucho89 está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Respuesta


Usuarios viendo actualmente este tema: 1 (0 usuarios registrados y 1 visitantes)
 
Herramientas

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Activado

Ir al foro

Temas similares
Tema Autor Foro Resp. Último mensaje
JTAG para Kaon-Xteme - INVESTIGACION Pedrop KAON 0 18/03/2005 16:56
Curso de ripeo de juegos de ps2 chory DivX, VCD, DVD, Rippeo - IMAGEN Digital 0 06/09/2003 14:50


!! ADVERTENCIAS !!: Las informaciones aquí publicadas NO CONTIENEN KEYS para la decodificación de ningún sistema: NO SON OPERATIVOS en sistemas SAT que precisen de su correspondiente suscripción.

ESTA TOTALMENTE PROHIBIDO EL USO DE ESTAS INFORMACIONES PARA LA MODIFICACIÓN O  DEFRAUDACIÓN DE SISTEMAS DE ACCESO CONDICIONAL.

ESTOS FOROS SON MODERADOS Y NO SE PERMITE LA PUBLICACIÓN DE INFORMACIONES ILEGALES POR PARTE DE LOS USUARIOS. EN CASO DE DETECTARSE ESTE TIPO DE INFORMACIONES, LOS USUARIOS SERÁN EXCLUIDOS DE ESTAS PÁGINAS.

USO DE COOKIES: Utilizamos COOKIES y de terceros para mejorar nuestros servicios y navegación por la web. Si continua navegando, consideramos que acepta su uso.  


La franja horaria es GMT +2. Ahora son las 22:21.


-------------------------------------------------------------------- --------------------------------------------------------------------

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
Hispaservicios - J.G.C - 29112549T - Rio Cinca, 2, 30 (50180) SPAIN.
Todos los derechos reservados. Prohibida cualquier reproducion total o parcial.


Foros Patrocinados por anunciantes.