Buen día,
Es mi primer post, no conocía sobre la pagina pero estuve leyendo y la verdad que muy bueno.
Les comento mi situación, en clase dimos un proyecto como ejemplo y me quedan varias dudas, copio el enunciado:
Entrada de garaje para dos niveles de estacionamiento a los cuales se accede por un portón principal y una rampa que selecciona el nivel deseado.
Contaremos en la entrada gral con 3 pulsadores que determinaran respectivamente el acceso al nivel superior, al nivel inferior, y de cierre al salir de cualquiera de los niveles. En los 2 niveles de estacionamiento tendremos 2 pulsadores, uno para abrir y acceder a la salida y el otro para cerrar el portón al ingresar a los mismos. Los 3 botones pàra cerrar el porton y la rampa actúan en paralelo Cada uno de los 3 lugares contara con un semáforo que tendrá una luz roja y una luz verde. La luz roja de los 3 sitios estará encendida permanentemente salvo en el momento de la habilitación con la luz verde de circulación solicitada. Contaremos con una sirena que estará encendida durante el proceso de entrada o salida. Activa con una señal cuadrada de 1Khz Al oprimir cualquiera de los pulsadores, de entrada o salida, primero se encenderá una sirena, luego se abrirá el portón gral y ubicara la rampa, una vez culminado esto se encenderá la luz verde correspondiente , la cual se apagara a los 30 segundos. Al oprimir cualquiera de los pulsadores de cierre se cerrara el portón principal, la rampa se movera hasta la posición de reposo y una vez culminado el cierre se apagara la sirena. La rampa en posiscion de reposo comunica el nivel alto con la salida, cuando es elevada permite acceder al nivel inferior. Su motor es manejado por dos señales, una de abrir y la otra de cerrar. Si estan ambas ausentes o presentes el motor no se movera. El motor del portón se comandara con 2 señales, una de abrir y otra de cerrar. Ni el porton ni la rampa cuentan con sensores de final de carrera. Se activaran durante 1 minuto hacia un lado u otro para realizar sus movimientos.
Aqui esta el programa:
//PRUEBA DE INICIO
/*Fck = 4MHz/4 = 1MHz
Periodo de tiempo = 1uS
Periodo pre escal = 1 x 2 = 32uS PRESCALADOR=1:2
Desordes = 2 x (256-6) = 500uS TMR0=6
= 0.5mS
PS2 PS1 PS0
0 0 0 1:2*
0 0 1 1:4
0 1 0 1:8
0 1 1 1:16
1 0 0 1:32
1 0 1 1:64
1 1 0 1:128
1 1 1 1:256
*///////////////////////////////////////////////////////////////////
#include <htc.h>
#include <pic16f628a.h
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & CP_OFF & CPD_OFF & BOREN_ON & PWRTE_ON & LVP_OFF & MCLRE_OFF );
//**//VARIABLES
bit mbzz=0;
bit aux1=0;
bit aux2=0;
bit aux3=0;
bit mc =0;
bit mn1=0;
bit mn2=0;
//**//TIEMPOS 1=0.5ms -- 2000=1s -- 60000=30s -- 120000=60s
long min=60000;
long seg=20000;
long tr=0;//variable tiempo rampa
long tluz=0;//variable tiempo luz
//**//SALIDAS
#define apg RA0
#define cpg RA1
#define sr RA2
#define br RA3
#define ln1 RB1
#define ln2 RA6
#define bzz RA7
//**//ENTRADAS
#define n1 RB4
#define n2 RB5
#define c RB6
#define pare RB7
void AccesoSalirNivel_1() { if(aux1==1){mbzz=1;apg=1;sr=1;aux1=0;} //NO ME CARGA LAS SALIDAS
if(tr==0&&sr==1){apg=0;sr=0;ln1=1;tr=min;}
if(tluz<=0){ln1=0;tluz=seg;mn1=0;}}
void AccesoSalirNivel_2() { if(aux2==1){mbzz=1;apg=1;br=1;aux2=0;}
if(tr==0&&br==1){apg=0;br=0;ln2=1;tr=min;}
if(tluz<=0){ln2=0;tluz=seg;mn2=0;}}
void Cerrar() { if(aux3==1){mbzz=1;cpg=1;br=1;aux3=0;}
if(tr==0&&br==1){bzz=0;cpg=0;br=0;mbzz=0;tr=min;mc=0;}}
void main()
{
PS2=0;PS1=0;PS0=0; //PRE ESCALADOR 000=2
PSA=0; //fuente del preescalador ciclos de reloj
T0CS=0; //pre escalador cuenta ciclos de ck (4MHz)
RBIE=1;
RBIF=0;
T0IE=1; //habilito interrupcion TIMER0
PEIE=1; //habilito interrupcion periodica
GIE=1; //habilito interrupcion global
TMR0=6; //N° de incrementos (256-TMRO)
//seteo salidas y entradas
TRISA&=0B00100000;
TRISB&=0B01110000;
CMCON = 07; //DESACTIVO COMPARADORES
//pongo todo a cero
PORTB=0;
PORTA=0;
tr=min;//lo cargo con un minuto
tluz=seg;//lo cargo con 30seg
//mc=1;//poccicion de reoso
while(1){
//Acceso a nivel_1
if(mn1==1){
AccesoSalirNivel_1();
}//fin if mn1==1
//Acceso a nivel_2
if(mn2==1){
AccesoSalirNivel_2();
}//fin if mn2==1
//cerrar
if(mc==1){
Cerrar();
}
}//fin while
}//fin main
//INTERRUPCION TMRO chequeo desborde cada 500us
//INTERRUPCION RB chequeo boton presionado
void interrupt isr (){
if(RBIE && RBIF){
//pare de emergencia
//if(pare==1){ mc=0; mn1=0; mn2=0; mbzz=0; tr=min; tluz=seg; sr=0; br=0; apg=0; cpg=0; bzz=0; aux1=0; aux2=0; aux3=0; }
//cerrar
//if((c &&(!pare))==1)
if(c==1){ if((c &&(!mn1))==1){
if((c &&(!mn2))==1){
if((c &&(!mc))==1){mc=1;aux3=1;}}}}
//Acceso o salir nivel1
//if((n1 &&(!pare))==1){
if(n1==1){ if((n1 &&(!mn1))==1){
if((n1 &&(!mn2))==1){
if((n1 &&(!mc))==1){mn1=1;aux1=1;}}}}
//Acceso o salir nivel2
//if((n2 &&(!pare))==1){
if(n2==1){ if((n2 &&(!mn1))==1){
if((n2 &&(!mn2))==1){
if((n2 &&(!mc))==1){mn2=1;aux2=1;}}}}
RBIF=0;
}//FIN RBIF
if(T0IE && T0IF){
if(mbzz==1){if(bzz==0)bzz=1; else bzz=0;} //bocina
if(mn1&&sr){if(tr>=0){tr--;}} if(mn1&&ln1){if(tluz>=0){tluz--;}}//**//TIEMPOS ACCESO NIVE 1
if(mn2&&br){if(tr>=0){tr--;}} if(mn2&&ln2){if(tluz>=0){tluz--;}}//**//TIEMPOS ACCESO NIVE 2
if(mc&&br){if(tr>=0){tr--;}} //**//TIEMPOS CERRAR
T0IF=0;
}//fin if desbordes
}//fin interrupt
EN ROJO COPIE LO QUE NO ENTIENDO QUE ES??
&& ESTE SIMBOLO QUE SIGNIFICA?
LUEGO POR OTRA PARTE ME ESTA COSTANDO IDENTIFICAR LAS ENTRASDAS CON LO QUE DICE EL PROGRAMA, LAS ENTRADAS CREO QUE LAS TENGO CLARAS, N1 acceso nivel 1, N2 acceso nivel, c Salida, pare Boton de emergenciam, pero luego las variables no estoy entendiendo a que parte del programa se refiere cada una.
Pido disculpas por mi ignorancia en el tema y quizas estoy haciendo preguntas muy tontas pero agradezco la ayuda.
Saludos.