Autor
|
Tema: Selector de secuencias en Mikro C no cumple al simularlo!! (Leído 6,219 veces)
|
...DaNiEl...
Desconectado
Mensajes: 65
>...I'm A hUmAn AfTeR aLl...<
|
/*Selector de secuencias*/ int cont=0,sc1,sc2,sc3; void main() { ANSEL=0; ANSELH=0; TRISA=1; /*Entrada que cuenta los pulsos con un push button*/ TRISC=0; /*Configurado como salida para hacer la secuencia*/ while(1) { if(PORTA==1) { cont++; if(cont>=3) cont=0; while(PORTA==1) { } } switch(cont) { case 1: for(sc1=0;sc1<255;sc1++) { PORTC=sc1; delay_ms(5); } break; case 2: for(sc1=255;sc1>0;sc1--) { PORTC=sc1; delay_ms(5); break; case 3: sc2=1; for(sc1=0;sc1<7;sc1++) { PORTC=sc2; delay_ms(5); sc2=sc2*2; if(sc2==256) sc2=1; break; case 4: sc2=128; for(sc1=0;sc1<7;sc1++) { PORTC=sc2; delay_ms(5); sc2=sc2/2; if(sc2==1) sc2=128; break; } } } } } } /*PIC16F690*/ Me recomendarian hacerlo con la sentencia while en vez de for???
|
|
|
En línea
|
>...We ArE a HuMaNs AfTeR aLl...<
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
Veamos si entiendo...
Lo que necesitas es como un temporizador?
Por PORTA irían por ejemplo... los minutos, por PORTC los segundos... Ese efecto quieres lograr?
|
|
|
En línea
|
|
|
|
...DaNiEl...
Desconectado
Mensajes: 65
>...I'm A hUmAn AfTeR aLl...<
|
Veamos si entiendo...
Lo que necesitas es como un temporizador?
Por PORTA irían por ejemplo... los minutos, por PORTC los segundos... Ese efecto quieres lograr?
Ps yo utilizo el PORTA como una entrada la cual cada vez que le llegue un pulso cambia de secuencia; la secuencia sale en el PORTC; lo que pasa es que a la hora de simularlo solo saca una secuencia y no cambia si se le introduce un pulso en PORTA!!
|
|
|
En línea
|
>...We ArE a HuMaNs AfTeR aLl...<
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
Aver, aver, aver...
Tienes una entrada de onda cuadrada con su respectiva frecuencia, tu quieres que por cada alto se active un pin del otro puerto, hasta que llegue a los 8 si mal no recuerdo, y luego al próximo alto(también podría ser bajo), vuelva a comenzar la secuencia?
|
|
|
En línea
|
|
|
|
...DaNiEl...
Desconectado
Mensajes: 65
>...I'm A hUmAn AfTeR aLl...<
|
Aver, aver, aver...
Tienes una entrada de onda cuadrada con su respectiva frecuencia, tu quieres que por cada alto se active un pin del otro puerto, hasta que llegue a los 8 si mal no recuerdo, y luego al próximo alto(también podría ser bajo), vuelva a comenzar la secuencia?
Sip, la entrada se podria decir que es PORTA.F0; yo quiero que por cada pulso que entre en ella, cambie a la proxima secuencia que puse en los "case" de mi sentencia switch, la cual se muestra en los pines del PORTC; pero al enviarle un pulso no cambia de secuencia, no se si es por algun error que haya puesto yo en alguno de los case o en algun for!!
|
|
|
En línea
|
>...We ArE a HuMaNs AfTeR aLl...<
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
Bien, analizando tu code, no son necesarios tus "switchs". Otra cosa, pusiste PORTA==1, ¿?, tu PORTA es únicamente el pin de tu clock? Yo en todo caso while(1) { if( PORTA.(X)==1) { cnt++; if(cnt<(cantidad pines + 1)) PORTC=cnt; else cnt=0; } } Se entiende la idea?
|
|
|
En línea
|
|
|
|
...DaNiEl...
Desconectado
Mensajes: 65
>...I'm A hUmAn AfTeR aLl...<
|
Bien, analizando tu code, no son necesarios tus "switchs". Otra cosa, pusiste PORTA==1, ¿?, tu PORTA es únicamente el pin de tu clock? Yo en todo caso while(1) { if( PORTA.(X)==1) { cnt++; if(cnt<(cantidad pines + 1)) PORTC=cnt; else cnt=0; } } Se entiende la idea? Ok... entendi tu idea, seria mucho mas facil si lo hiciera con while verdad!! es mas creo que quedaria mas pequeño... pero mi profesor insiste!! gracias!! probare hacer cambios en el codigo que ya tengo o si no creare uno nuevo!! Muchas gracias por tu ayuda!!
Saludos!!
|
|
|
En línea
|
>...We ArE a HuMaNs AfTeR aLl...<
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
while(1) { if( PORTA.(X)==1) { cnt=0; while(cnt<(cantidadpines+1) { PORTC=cnt; cnt++; } } }
|
|
|
En línea
|
|
|
|
...DaNiEl...
Desconectado
Mensajes: 65
>...I'm A hUmAn AfTeR aLl...<
|
/*Selector de secuencias*/ int cont=1,sc1=0b00000001,sc2=0b10000000; void main() { ANSEL=0; ANSELH=0; TRISA=1; /*Entrada que cuenta los pulsos con un push button*/ TRISC=0; /*Configurado como salida para hacer la secuencia*/ while(1) { if(PORTA==1) { cont++; if(cont>=5) cont=1; while(PORTA==1) { } } switch(cont) { case 1: PORTC=sc1; sc1=sc1<<1; if(sc1>128) sc1=1; break; case 2: PORTC=sc2; sc2=sc2>>1; if(sc2<1) sc2=128; break; case 3: PORTC=sc1; sc1=sc1<<2; if(sc1>128) sc1=1; break; case 4: PORTC=sc2; sc2=sc2>>2; if(sc2<1) sc2=128; break; } } } Jijiji!! solo queria poner el codigo ya corregido!! ya me funciona!! lo hice utilizando if y le agregue 4 secuencias diferentes!! gracias por tu ayuda!!
|
|
|
En línea
|
>...We ArE a HuMaNs AfTeR aLl...<
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
De nada. Por suerte tu solo puedes solucionar tus problemas
|
|
|
En línea
|
|
|
|
|
|