hola a todos.
el circuito funciona a la perfeccion, ahora quiero usar el pin A5 para seleccionar el tipo de secuencias que quiero que aparescan.
segun el programa, si esta en 1 entra al ciclo infinito y crea algunas animaciones, pero si esta en 0 deberia quedar totalmente encendido.
cuando programo el pic no hay problema, pero al probarlo simplemente hace todas las animaciones independientemente de la poscicion del interruptor.
espero puedan ayudarme.
aca esta el codigo:
Código:
#include <16F628a.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Reloj Interno
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //No se usa el pin del master clear
#FUSES NOLVP //No se programa con bajo voltaje, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#bit y1=0x05.2
#bit y2=0x05.3
#bit y3=0x05.4
#bit y4=0x06.0
#bit y5=0x06.1
#bit y6=0x06.2
#bit y7=0x06.3
#bit y8=0x06.6
#bit y9=0x06.5
#bit y10=0x06.4
#bit x5=0x05.1
#bit x4=0x05.0
#bit x3=0x05.7
#bit x2=0x05.6
#bit x1=0x06.7
int type=0;
int i,a;
void alloff(int){
output_a(0x00);
output_b(0x00);
}
void allon(int){
output_a(0xff);
output_b(0xff);
}
void xon(int){x1=x2=x3=x4=x5=1;}
void yon(int){y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=1;}
void xoff(int){x1=x2=x3=x4=x5=0;}
void yoff(int){y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=0;}
Void strobe(int){
for(i=0;i<=5;i++){
allon(1);
delay_ms(50);
alloff(1);
delay_ms(50);
allon(1);
delay_ms(50);
alloff(1);
delay_ms(50);
allon(1);
delay_ms(50);
alloff(1);
delay_ms(300);
}
}
void downup(int){
y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=1;
x1=1;
delay_ms(100);
x2=1;
delay_ms(100);
x3=1;
delay_ms(100);
x4=1;
delay_ms(100);
x5=1;
delay_ms(100);
}
void updown(int){
y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=1;
x5=1;
delay_ms(100);
x4=1;
delay_ms(100);
x3=1;
delay_ms(100);
x2=1;
delay_ms(100);
x1=1;
delay_ms(100);
}
void downupoff(int){
y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=1;
x1=0;
delay_ms(100);
x2=0;
delay_ms(100);
x3=0;
delay_ms(100);
x4=0;
delay_ms(100);
x5=0;
delay_ms(100);
}
void updownoff(int){
y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=1;
x5=0;
delay_ms(100);
x4=0;
delay_ms(100);
x3=0;
delay_ms(100);
x2=0;
delay_ms(100);
x1=0;
delay_ms(100);
}
void rlon(int){
delay_ms(50);
y1=1;
delay_ms(100);
y2=1;
delay_ms(100);
y3=1;
delay_ms(100);
y4=1;
delay_ms(100);
y5=1;
delay_ms(100);
y6=1;
delay_ms(100);
y7=1;
delay_ms(100);
y8=1;
delay_ms(100);
y9=1;
delay_ms(100);
y10=1;
delay_ms(100);
}
void lron(int){
delay_ms(50);
y10=1;
delay_ms(100);
y9=1;
delay_ms(100);
y8=1;
delay_ms(100);
y7=1;
delay_ms(100);
y6=1;
delay_ms(100);
y5=1;
delay_ms(100);
y4=1;
delay_ms(100);
y3=1;
delay_ms(100);
y2=1;
delay_ms(100);
y1=1;
delay_ms(100);
}
void rloff(int){
delay_ms(50);
y1=0;
delay_ms(100);
y2=0;
delay_ms(100);
y3=0;
delay_ms(100);
y4=0;
delay_ms(100);
y5=0;
delay_ms(100);
y6=0;
delay_ms(100);
y7=0;
delay_ms(100);
y8=0;
delay_ms(100);
y9=0;
delay_ms(100);
y10=0;
delay_ms(100);
}
void lroff(int){
delay_ms(50);
y10=0;
delay_ms(100);
y9=0;
delay_ms(100);
y8=0;
delay_ms(100);
y7=0;
delay_ms(100);
y6=0;
delay_ms(100);
y5=0;
delay_ms(100);
y4=0;
delay_ms(100);
y3=0;
delay_ms(100);
y2=0;
delay_ms(100);
y1=0;
delay_ms(100);
}
void cuadros1(int){
for(a=0;a<=10;a++){
x3=y3=y4=y5=y6=y7=y8=1;
delay_ms(250);
alloff(1);
for(i=0;i<=254;i++){
x2=x3=x4=y2=y9=1;
delay_ms(1);
alloff(1);
x2=x4=y2=y3=y4=y5=y6=y7=y8=y9=1;
delay_ms(1);
alloff(1);
}
for(i=0;i<=254;i++){
x1=x2=x3=x4=x5=y1=y10=1;
delay_ms(1);
alloff(1);
x1=x5=y1=y2=y3=y4=y5=y6=y7=y8=y9=y10=1;
delay_ms(1);
alloff(1);
}
}
}
void cuadros2(int){
alloff(1);
for(a=0;a<=10;a++){
for(i=0;i<=128;i++){
x1=x2=x3=x4=x5=y1=y4=y7=y10=1;
delay_ms(1);
alloff(1);
x1=x5=y1=y2=y3=y4=y7=y8=y9=y10=1;
delay_ms(1);
alloff(1);
}
for(i=0;i<=128;i++){
x2=x3=x4=y2=y3=y8=y9=1;
delay_ms(2);
alloff(1);
}
}
}
void bolitas1(int){
for(a=0;a<=10;a++){
alloff(1);
for(i=0;i<=254;i++){
x1=x4=Y2=y3=y8=y9=1;
delay_ms(1);
alloff(1);
x2=x3=y1=y4=y7=y10=1;
delay_ms(1);
alloff(1);
}
y2=y3=y5=y6=y8=y9=x2=x3=1;
delay_ms(252);
}
}
void caras(int){
for(a=0;a<=5;a++){
for(i=0;i<=254;i++){
x1=y3=y8=1;
delay_ms(1);
x1=0;
yoff(1);
x2=y2=y4=y7=y9=1;
delay_ms(1);
x2=0;
yoff(1);
x4=y1=y10=1;
delay_ms(1);
x4=0;
x5=1;
yon(1);
delay_ms(1);
alloff(1);
}
}
delay_ms(100);
strobe(1);
delay_ms(100);
for(a=0;a<=5;a++){
for(i=0;i<=254;i++){
x1=y2=y3=y8=y9=1;
delay_ms(1);
x1=0;
x2=y2=y3=y8=y9=1;
delay_ms(1);
x2=0;
yoff(1);
x3=y5=y6=1;
delay_ms(1);
x3=y5=y6=0;
x4=y1=y10=1;
delay_ms(1);
x4=0;
x5=1;
yon(1);
delay_ms(1);
alloff(1);
}
}
}
void stop(int){
for(a=0;a<=5;a++){
for(i=0;i<=254;i++){//PA
x1=y1=y2=y3=y8=y9=1;
delay_ms(1);
alloff(1);
x1=0;
x2=y1=y4=y7=y10=1;
delay_ms(1);
x2=0;
alloff(1);
x3=y1=y2=y3=y7=y8=y9=y10=1;
delay_ms(1);
x3=0;
alloff(1);
delay_us(20);
x4=y1=y7=y10=1;
delay_ms(1);
x4=0;
x5=y1=y7=y10=1;
delay_ms(1);
alloff(1);
}
for(i=0;i<=254;i++){//RE
x1=y1=y2=y3=y7=y8=y9=y10=1;
delay_ms(1);
alloff(1);
x1=0;
x2=y1=y4=y7=1;
delay_ms(1);
x2=0;
alloff(1);
x3=y1=y2=y3=y7=y8=y9=1;
delay_ms(1);
x3=0;
alloff(1);
x4=y1=y3=y7=1;
delay_ms(1);
x4=0;
alloff(1);
x5=y1=y4=y7=y8=y9=y10=1;
delay_ms(1);
alloff(1);
}
}
}
Void main(){
set_tris_a(0xff);
set_tris_b(0xff);
input(pin_A5);
delay_ms(100);
while(true){//ciclo infinito
tipo:
type=input(pin_a5);
delay_ms(10);
while(type==1){
stop(1);type=input(pin_a5);if(type==0){goto tipo;}
bolitas1(1);type=input(pin_a5);if(type==0){goto tipo;}
strobe(1);type=input(pin_a5);if(type==0){goto tipo;}
caras(1);type=input(pin_a5);if(type==0){goto tipo;}
strobe(1);type=input(pin_a5);if(type==0){goto tipo;}
cuadros2(1);type=input(pin_a5);if(type==0){goto tipo;}
strobe(1);type=input(pin_a5);if(type==0){goto tipo;}
cuadros1(1);type=input(pin_a5);if(type==0){goto tipo;}
strobe(1);type=input(pin_a5);if(type==0){goto tipo;}
stop(1);type=input(pin_a5);if(type==0){goto tipo;}
downup(1);type=input(pin_a5);if(type==0){goto tipo;}
updownoff(1);type=input(pin_a5);if(type==0){goto tipo;}
updown(1);type=input(pin_a5);if(type==0){goto tipo;}
downupoff(1);type=input(pin_a5);if(type==0){goto tipo;}
alloff(1);type=input(pin_a5);if(type==0){goto tipo;}
delay_ms(5);
alloff(1);type=input(pin_a5);if(type==0){goto tipo;}
xon(1);type=input(pin_a5);if(type==0){goto tipo;}
rlon(1);type=input(pin_a5);if(type==0){goto tipo;}
lroff(1);type=input(pin_a5);if(type==0){goto tipo;}
lron(1);type=input(pin_a5);if(type==0){goto tipo;}
rloff(1);type=input(pin_a5);if(type==0){goto tipo;}
alloff(1);type=input(pin_a5);if(type==0){goto tipo;}
}
//cuadros2(1);type=input(pin_a5);if(type==1){goto tipo;}
//strobe(1);
output_b(0xff);
output_a(0xff);
type=input(pin_a5);if(type==1){goto tipo;}
delay_ms(10);
}
}
ya esta solucionado.
solo puse una resistencia de 10k entre A5 y tierra.
sucedia que quedaba en un limbo logico porque no tenia punto de referencia 0, por eso siempre lo tomaba como 1.