Autor Tema: Ayuda para hacer un secuenciador con las salidas con un pic 16f877  (Leído 2091 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado prossis

  • PIC10
  • *
  • Mensajes: 13
Hola ha todos si alguien me puede ayudar , estoy haciendo un secuenciador utilizando distintas salidas del pic por un tema de hardaware , y el problema es que de todas las salidas que utilizo hay dos que no me las activa , las salidas son la b3 y la a4, sin embargo lo pruebo en el simulador de virtualbread borad y me da que la secuencia que tengo programada funciona lo cargo en el pic y hace cualquier cosa, ya he cambiado de todo en el programa y nada

le paso el programa que tengo a ver si me pueden ayudar


#include <16F877.h>
//#device adc=10
#use delay(clock=4000000)
#fuses XT,PUT,BROWNOUT



#byte puerto_a = 5 /* dirección del puerto B */
#byte puerto_b = 6 /* dirección del puerto B */
#byte puerto_c = 7 /* dirección del puerto B */
#byte puerto_d = 8 /* dirección del puerto B */
#byte puerto_e = 9 /* dirección del puerto B */

void main(int) {
int a,b,c,e;

   //setup_psp(PSP_DISABLED);
   //setup_spi(FALSE);
   //setup_counters(RTCC_INTERNAL,WDT_18MS);
  // setup_timer_1(T1_DISABLED);
 //  setup_timer_2(T2_DISABLED,0,1);


set_tris_a( 0xC0 ); /* puerto a como salida */
set_tris_b( 0x00 ); /* puerto B como salida */
set_tris_c( 0x00 ); /* puerto c como salida */
set_tris_d( 0x00 ); /* puerto d como salida */
set_tris_e( 0x00 ); /* puerto e como salida */

   a=0;
   b=0;
   c=0;
   e=0;
 puerto_a = 0;
 puerto_b = 0; /* apaga todos los led */
 puerto_c = 0; /* apaga todos los led */
 puerto_d = 0; /* apaga todos los led */
 puerto_e = 0; /* apaga todos los led */


do{
for(a=0;a!=8;++a){
b=a+2;
c=a-7;
e=a-4;

delay_ms(10000);  /* espera para Bajar ( Tiempo de espera entre ciclos) */

bit_set( puerto_b, a );

delay_ms( 2000); /* espera para soplar*/



bit_set( puerto_e, e );
bit_set( puerto_c, c );

delay_ms(1000); /*tiempo de soplado*/

bit_clear( puerto_a, b );
bit_clear( puerto_e, e );
bit_clear( puerto_c, c );

delay_ms(2000); /* espera para subir*/

bit_clear( puerto_b, a );

}
} while( TRUE ); /* Repetir siempre */

}

espero que alguien me pueda ayudar, gracias a todos


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Ayuda para hacer un secuenciador con las salidas con un pic 16f877
« Respuesta #1 en: 20 de Abril de 2004, 06:39:00 »
Que te parece si pones el enunciado completo del automatismo, indicando la secuencia correcta que debe de salir.

Qué dos salidas son las que no se te activan?

Desconectado Ginho_rj

  • PIC12
  • **
  • Mensajes: 87
RE: Ayuda para hacer un secuenciador con las salidas con un pic 16f877
« Respuesta #2 en: 21 de Abril de 2004, 08:00:00 »
que tipo de compilador estas a usar???qual o cristal esta usando???? qual o real objetivo deste projeto????o seu compildador deixa utilizar diretivas em espanhol como "puerto"???


#include <16F877.h>

#use delay(clock=4000000)
#fuses hs,PUT,BROWNOUT,nowdt



#use   fast_io(a)
#use   fast_io(b)
#use   fast_io(c)
#use   fast_io(d)
#use   fast_io(e)

#byte   porta = 0x05
#byte   portb = 0x06
#byte   portc = 0x07
#byte   portd = 0x08
#byte   porte = 0x09

void main(int) {
int a=0,b=0,c=0,e=0;

                                set_tris_a(0b11000000);//0xc0   
      set_tris_b(0b00000000);
      set_tris_c(0b00000000);
      set_tris_d(0b00000000);
      set_tris_e(0b00000000);

setup_adc_ports(no_analogs);


    porta=0x00;                  portb=0x00;                  portc=0x00;                  portd=0x00;                  porte=0x00;

//só mudei ate aqui não entendi o que faz o projeto
   

do{
for(a=0;a!=8;++a){
b=a+2;
c=a-7;
e=a-4;

delay_ms(1000);  /* espera para Bajar ( Tiempo de espera entre ciclos) */

if(a==3)
{
bit_set( puerto_d, 7 );
}
if (a!=3){
bit_set( puerto_b, a );
}
delay_ms( 2000); /* espera para soplar*/


if(a==2)
{
bit_set( puerto_c, 1 );
}
if (a!=2){
bit_set( puerto_a, b );
}


bit_set( puerto_e, e );
bit_set( puerto_c, c );

delay_ms(1000); /*tiempo de soplado*/

if(a==2)
{
bit_clear( puerto_c, 1 );
}
if (a!=2){
bit_clear( puerto_a, b );
}

bit_clear( puerto_e, e );
bit_clear( puerto_c, c );

delay_ms(2000); /* espera para subir*/

if(a==3)
{
bit_clear( puerto_d, 7 );
}
if (a!=3){
bit_clear( puerto_b, a );
}
}
} while( TRUE ); /* Repetir siempre */

}

espero que alguien me pueda ayudar, gracias a todos


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Ayuda para hacer un secuenciador con las salidas con un pic 16f877
« Respuesta #3 en: 21 de Abril de 2004, 12:09:00 »
Lo he estado mirando más detenidamente y veo que estas metiendo valores negativos a bit_set(var,bit).

Por ejemplo, inicialmente a=0, entonces e=a-4=-4

Lo que metas en "bit", no puede ser un número negativo sino un número comprendido entre 0-7, 0-15 ó 0-31 dependiendo de la longitud de "var", en tu caso como es int debe ser entre 0-7

Piénsalo y me cuentas.