Autor Tema: PIC16F877-PCW- problemas al acoplar programas  (Leído 2789 veces)

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

Desconectado Saiga

  • PIC10
  • *
  • Mensajes: 6
PIC16F877-PCW- problemas al acoplar programas
« en: 29 de Octubre de 2011, 17:02:56 »
Buenos dias, paso a comentarles mi problema que vengo llevando hace unas semanas.
Realice, utilizando el conversor ad del pic16f877, un programa que obtiene datos de tension y corriente y los muestra en un lcd de 40x4.
Despues, en forma aparte, realice un programa, que utilizando como base el timer0 del pic, permite calcular el desfasaje de señales. Todo esto para calcular la potencia activa, mostrarla tambien en el lcd y hacer un par de cosas mas.
Cada programa, separado funciona correctamente, los simulo con ISIS 7 Professional. Si me pueden tirar algun consejo o ayuda, se los agradeceria enormemente.
Aca les cuelgo el circuito que uso para ensayarlos, tanto asi como los programas.
Sepan disculpar mi desconocimiento, pero es algo nuevo para mi la programación, y me gusta mucho.

Saludos! :)

PD: Les debo el circuito de simulación que hice con el ISIS, pero por la extensión no puedo subirlo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #1 en: 29 de Octubre de 2011, 22:22:49 »
Código: C
  1. if (input(PIN_B0)==1)           //Lee B0. B0=1?//
  2.    {                            
  3.    set_timer0(0);               //Resetea el Timer0//
  4.  
  5. while (input(PIN_B1)==0)
  6.    {}
  7. CONTADOR=get_timer0();                            //Almacena la cuenta del TMR0 en la variable CONTADOR//
  8.    }
no se si estoy equivocado, pero creo que es probable que en la simulacion cuando sueltes el pulsador el programa aun estara dentro del if, entonces ese while se cumplirá y quedará alli clavado porque segun el programa  b0 en condiciones normales esta leyendo un "0".  Supongo que el while es  para que el pic no haga nada si no se pulsa b0, entonces ese while no puede estar dentro del if.
« Última modificación: 29 de Octubre de 2011, 22:26:40 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #2 en: 30 de Octubre de 2011, 12:51:52 »
Cuenta las aperturas de { y sus cierres }, creo que alli tienes otro error...
Ademas primero declaras el puerto A como todo analogico y despues seteas uno de sus bits como digital, creo que alli hay una incompatibilidad que en la otra aplicacion soluciona CCS y en esta no, por esos misterios de CCS.
Si tienes solo dos entradas analogicas, puedes declarar solo esas y deberia funcionar OK. :mrgreen: :mrgreen:
Mira la ayuda de CCS respecto a Setup_porta(), alli puedes ver como hacerlo.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Saiga

  • PIC10
  • *
  • Mensajes: 6
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #3 en: 30 de Octubre de 2011, 15:06:03 »
Gracias jhozate y MGLSOFT por darme bola :)

Citar
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //Configura Timer0//
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);     //Define como analogico el Puerto A//
setup_adc(ADC_CLOCK_INTERNAL);
bit_set(TRISA,2);                         
bit_set(TRISB,0);                         //B0 como entrada//
bit_set(TRISB,1);                         //B1 como entrada//

De esta manera defino el puerto todo el puerto A como analogico, y utilizo como entrada B0 y B1 del puerto B. Como le defino es correcto, no?

Citar
if (input(PIN_B0)==1)           //Lee B0. B0=1?//
   {                           
   set_timer0(0);               //Resetea el Timer0//
   }
if(input(PIN_B1)==1)
   {
CONTADOR=get_timer0();                            //Almacena la cuenta del TMR0 en la variable CONTADOR//
   }

            switch (CONTADOR)
            {  No escribo los case por que queda muy largo  }
     

De esta manera si ingresa un 1 logico en B0 se resetea el tmr0. Y cuando ingrese otro uno logico en B1 tomara el valor de tmr0 y lo almacenara en la variable CONTADOR, para despues compararlo con los case dentro del switch. Seria correcto como lo desarrolle?

-------
Esos arreglos los hice en base a sus comentarios, aunque posiblemente le haya errado en algo todavia (soy muy nuevo en esto de la programacion de microcontroladores).
Arregle los problemas con los {} que me habian quedado colgados un par, y ahora al momento de simularlo puedo medir tension y corriente, mentras que Cosfi aunque se refresca queda siempre colgado en 1.00

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #4 en: 30 de Octubre de 2011, 15:15:22 »
Podras colgar de nuevo este ultimo programa ??
A ver si lo revisamos y podemos ayudarte...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Saiga

  • PIC10
  • *
  • Mensajes: 6
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #5 en: 30 de Octubre de 2011, 21:56:55 »
MGLSOFT, aca lo acabo de subir  :smiley:

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #6 en: 30 de Octubre de 2011, 22:46:30 »
Una de dos:
O el timer no esta corriendo o el pulsador en B1 no funciona por algo.
La sentencia Input(pin) ya genera instrucciones para setear los tris, asi que yo sacaria todo lo de los tris y sus declaraciones, ya que estan en el archivo de cabecera del Pic.
Con solo comentar el segmento

Citar
#BYTE TRISA=0X85
#BYTE PORTA=0X05
#BYTE TRISB=0x86                          //Variable definida de TRISB en 0x86
#BYTE PORTB=0x06                          //Variable definida de PORTB en 0x06
#BYTE OPTION_REG=0x81                     //OPTION_REG en 0x81//
#BYTE STATUS=0x03                         //STATUS en 0x03//
#BYTE TMR0=0x01                           //TMR0 en 0x01//

y este otro tambien

Citar
bit_set(TRISA,2);                         //PortA como entrada//
bit_set(TRISB,0);                         //B0 como entrada//
bit_set(TRISB,1);                         //B1 como entrada//

es muy probable que ya tu programa funcione, CCS es muy sensible a dobles declaraciones... :mrgreen: :mrgreen:

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Saiga

  • PIC10
  • *
  • Mensajes: 6
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #7 en: 30 de Octubre de 2011, 23:24:38 »
Gracias por toda la ayuda MGLSOFT ! Mañana voy a quemar el pic, y probar ensayandolo a ver si obtengo algun resultado diferente.
Cualquier avance o caida lo comento jajaja. Gracias de nuevo por todo :smiley:
Un abrazo enorme

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: PIC16F877-PCW- problemas al acoplar programas
« Respuesta #8 en: 30 de Octubre de 2011, 23:26:20 »
Cuando escriben quemar el Pic se me enfria la sangre !! :D :D :D
Prefiero que lo grabes con el nuevo codigo !! :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.