TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: SKAN en 19 de Mayo de 2006, 17:24:40
-
HOLA, como proyecto fin de curso de el CF que estoy estudiando.. tengo que realizar una práctica con pic16f84... solo hemos hecho practicas con pequeños movimientos en leds...sencillas. pero quiero realizar un buen proyecto...mis conocimientos en control de LCD y motores es lo mirado por internet estos dias...
MI IDEA ES mediante 3 sensores de movimiento (al cruzarlos un objeto en una maketa) mostrará 3 mensajes diferentes, y estoy estudiando la posibilidad de poner motor paso a paso para levantar una pequeña maderita.. pero solo me qedan libres RA3 Y RA4..son 2.el LCD me ocupa todas las RB. tb puedo aprobechar RA2 por que el motor se activara simultaneamente al 3er mensaje...
solo e podido mirar programas ejemplo (utilizo MPLAB) y todos mis conocimientos del LCD es lo visto por internet estos dias..pego mi "boceto" de programa para la detección de los mensajes.. AHI VA:::
------------------------------------------------------------------------------------------------------------------------------------------
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16f84A
INCLUDE <P16F84A INC>
CBLOCK 0x0C
ENDC
#DEFINE sensor1 PORTA,0;
#DEFINE sensor2 PORTA,1;
#DEFINE sensor3 PORTA,2;
W EQU 0
F EQU 1
ESTADO EQU 0x03
PUERTAA EQU 0x05
PUERTAB EQU 0x06
INTCOM EQU 0x0B
TEMP EQU 0X0D
;ZONA DE CÓDIGOS
;*******************************************************************************************
ORG 0
goto inicio
ORG 5
clrf PUERTAB
inicio
bsf ESTADO,5
clrf PUERTAB ;para el LCD, todo salidas?
movlw b'11100111' ;RA0-RA2 entradas, sensor, RA3yRA4 salidas motor
movwf PUERTAA
andlw b'00000111'
movwf TEMP
call LCD_inicializa ;ESTAS DEBEN SER LAS RUTINAS PARA INICIALIZAR EL DISPLAY, NO??
movlw Mensaje1 ;AQUI LO QUE QUIERO ES QUE CARGE EL MENSAJE 1, OSEA PUENTE ELEVADIZO, EL PREDEFINIDO.
call LCD_Mensaje
princip call LCD_Linea2 ;ALGORITMO PARA DETECTAR CUANDO EL BARCO CRUZA CADA SENSOR
movlw Mensaje1 ;carga el mensaje predef
movlw b'00000001' ;Detecta sensor en RA0
subwf TEMP,w
btfsc ESTADO,2
movlw Mensaje2 ;si estaba activo el sensro RA0
call LCD_Mensaje ;¿?¿?¿?¿?¿?¿--si estaba activo OK, pero si no...
movlw b'00000010' ;Detecta sensor en RA1
subwf TEMP,w
btfsc ESTADO,2
movlw Mensaje3 ;si estaba activo el sensor RA1
call LCD_Mensaje ;?¿?¿?¿?¿?¿
movlw b'00000100' ;Detecta sensor en RA2. (se presupone q no se dara el caso de 2 sensores a la vez a nivel alto)
subwf TEMP,w
btfsc ESTADO,2
movlw Mensaje4 ;si estaba activo el sensor RA2
call LCD_Mensaje
goto princip
Mensaje addwf PCL,F
Mensaje1 DT" PUENTE ELEVADIZO"
Mensaje2 DT" BARCO A 100M.",0x00
Mensaje3 DT" PUENTE LEVANTANDOSE.NO CRUZAR",0x00
Mensaje4 DT" PUENTE BAJANDO.",0x00
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
END
------------------------------------------------------
NO PIDO ME REALICEN EL PROGRAMA, NI MUCO MENOS POR DIOS!! DISFRUTO SACÁNDOLO YO, EL MUNDO DE LOS PICS ES INCREIBLE.. solo agradeceria orientaciones respecto a el modo de detección de los sensores, y por supuesto respeco a los motores.
------------
GRACIAS POR SU ATENCIÓN.
-
Estás muy limitado con un 16f84. Para todo lo que quieres hacer deberias haber elegido un 16f877.
Lo unico que te quedaría por hacer es sacar datos serie por un pin y que , a ser necesario, otro integrado lo transforme a paralelo.
Creo que existe en el mercado un integrado control motor pap con entrada datos serie....si no me equivoco. saa 1027? me falla la memoria...
Como te dije... si no puedes contar con otro micro con mas entradas salidas no te queda otra que poner mas integrados paralelo-serie o serie-paralelo
-
soy el que publico el tema SKAN, olvide mi contraseña,,,y el sistema de "recuerdo de contraseñas" no acaba de funcionar se ve...
----------------------
tengo un pequeño esquema del circuito a realizar... aqui lo adjunto..
---------------------
voy a colocar tambien en la practica un segundo pic, para controlar un motor PAP, antes pasando por un DRIVER L293B, mis consultas:
-sin TRANSITORES, tendre suficiente potencia para levantar una pequeña maderita de 20gramos como mucho?.
-un ojillo a la siguiente programación de control del motor:
; PROGRAMA PARA MOTOR PAP BIPOLAR, para levantar el puente elevadizo.
;
;*******************************************************************************************
;ZONA DE DATOS:
__CONFIG _CP_OFF & _WDT_OFF &_PWRTE_ON & _XT_OSC
LIST P=16f84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Ciclos ;se decrementará cada ciclo de 8 pasos.
VueltasHorario
VueltasAntihorario
ENDC
NumeroCiclos EQU .12
W EQU 0
F EQU 1
ESTADO EQU 0x03
PUERTAA EQU 0x05
PUERTAB EQU 0x06
;*******************************************************************************************
;ZONA DE CÓDIGOS:
Org 0
goto inicio
inicio Org 5
bsf STATUS,RP0
clrf PORTB ;lineas del puerto B configuaradas como salidas.
bcf STATUS,RP0
principal movlw 0x02
movwf VueltasHorario
otravueltaD movlw NumeroCiclos
movwf Ciclos
otrocicloD call GiroDerecha
decfsz Ciclos,F
goto otrocicloD
decfsz VueltasHorario,F
goto otravueltaD
movlw 0x01
movwf VueltasAntihorario ;una vuelta en sentido antihorario.
otravueltaI movlw NumeroCiclos ;al ser una sola vuelta no hace falta el contador
movwf Ciclos
otrocicloI call GiroIzquierda
decfsz Ciclos,F
goto otrocicloI
decfsz VueltasAntihorario,F
goto otravueltaI
goto Principal
;SUBRUTINA "GIROIZQUIERDA"
;*******************************************************************************************
GiroIzquierda movlw b'00110001' ;primer paso
call ActivaSalida
movlw b'00110101'
call ActivaSalida ;segundo paso
movlw b'00110100'
call ActivaSalida ;tercer paso
movlw b'00110110'
call ActivaSalida ;cuarto paso----seguir estas rutinas...
;SUBRUTINA "GIRODERECHA"
;*******************************************************************************************
GiroDerecha movlw b'00111001' ;primer paso para el giro hacia la derecha
call ActivaSalida
movlw b'00111000' ;segundo paso
call ActivaSalida
movlw b'00111010' ;tercer paso
call ActivaSalida
movlw b'00110010' ;cuarto paso
call ActivaSalida
;SUBRUTINA "ACTIVA SALIDA"
;*******************************************************************************************
ActivaSalida movwf PORTB
call Retardo_50ms ;temporización antes del siguiente paso.
return
INCLUDE <RETARDOS.INC>
END
GRACIAS POR SU ATENCIÓN.