Autor Tema: Problema con PIC16f84A  (Leído 2765 veces)

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

Desconectado lalala26

  • PIC10
  • *
  • Mensajes: 3
Problema con PIC16f84A
« en: 17 de Junio de 2011, 13:46:22 »
Me acabo de registrar en este foro porque he visto cosas muy interesantes y ahora tengo un problema, que espero me puedan ayudar a resolver

Pues resulta que en la universidad me dejaron como tarea hacer un programa en ccs y pic 16f84 que haga lo siguiente:

1. Encender un led (L1) al insertar de manera correcta la siguiente combinacion con push buttons (boton (b1) , luego boton2 (b2) y al ultimo los 2 botones al mismo tiempo (B1,B2) )

2. Solo cuando el led anterior (L1) ya esta encendido, al apretar otro boton (B3) se encenderan 3 leds (L2,L3,L4) al mismo tiempo y al apretar otra vez B3 los leds L1,L2,L3, se apagaran.

3.  Para apagar el led (L1) la combinacion sera la misma que la de encendido.

4. Si apagamos L1 y los otros leds (L2,L3,L4) estan prendidos, estos ultimos deberan apgarse secuencialmente.

5. El pic tendra un pin de salida conetado a un pin de entrada (feedback), que funcionara bajo las misma condiciones de L1, solo si esta conectado el cable(feedback), al presionar B3 se podra encencer L2,L3,L4, independientemente de que L1 ya este activado, si el desconectamos cable de feedback los leds L2,L3,L4, se apagaran secuencialmente, una vez que lo volvamos a conectar el feedback, deberemos apretar B3 para volver a encenderlos.

He hecho el programa en ccs y al simlarlo en proteus funciona muy bien.
Pero al hacerlo en protoboard no me funciona correctamente.

Dejo el programa adjunto y el archivo de proteus.

*Nota: Soy principiante y a mi parecer la programacion esta algo confuso, espero su ayuda a modificar el programa o si alguien lo puede hacer bien desde un principio lo agradeceria mucho
Código: [Seleccionar]
#include "C:\Documents and Settings\XPMUser\Escritorio\pruebas\ok.h"

   int encend=0;
   
   int arranc=0;
 
 
   #byte port_b=0x06
   #byte port_a=0x05
   #byte trisa=0x85
   #byte trisb=0x86

void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   trisb=0x00;
   trisa=0xff;
   port_b=0;
   
   
 
   
   do{
      do{
        if(input(pin_a0)){   //EL PROBLEMA ES AQUI, SIEMPRE ENTRA A ESTA CONDICION Y REALIZA LAS SIGUIENTES INSTRUCCIONES
            output_high(pin_b0);
            delay_ms(1000);
            output_low(pin_b0);
            delay_ms(1000);
            output_high(pin_b0);
            delay_ms(1000);
            output_low(pin_b0);
            delay_ms(1000);
            output_high(pin_b0);
            delay_ms(4000);
            output_low(pin_b0);
            delay_ms(4000);
           
           
            if(input(pin_a1)){
               output_high(pin_b0);
               delay_ms(400);
               output_low(pin_b0);
               delay_ms(400);
               output_high(pin_b0);
               delay_ms(400);
               output_low(pin_b0);
               delay_ms(400);
               output_high(pin_b0);
               delay_ms(1000);
               output_low(pin_b0);
               delay_ms(1000);
               output_high(pin_b0);
               delay_ms(1000);
               output_low(pin_b0);
               delay_ms(1000);
               output_high(pin_b0);
               delay_ms(2500);
               output_low(pin_b0);
               delay_ms(2500);
               
               if(port_a==3){
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  output_high(pin_b4);
                  encend=1;
               }
            }
        }
      }while(encend==0);
      if(encend==1){
         do{
         if(input(pin_a2) && input(pin_a3) && arranc==0){
               output_high(pin_b1);
               output_high(pin_b2);
               output_high(pin_b3);
               arranc=1;
               delay_ms(2000);
         }
         if(input(pin_a2) && input(pin_a3) && arranc==1){
               output_low(pin_b1);
               output_low(pin_b2);
               output_low(pin_b3);
               arranc=0;
               delay_ms(2000);
         }
                 
         if(port_a==9){
            output_high(pin_b0);
            delay_ms(500);
            output_low(pin_b0);
            delay_ms(500);
            output_high(pin_b0);
            delay_ms(500);
            output_low(pin_b0);
            delay_ms(500);
            output_high(pin_b0);
            delay_ms(2000);
            output_low(pin_b0);
            delay_ms(2000);
            output_high(pin_b0);
           
            if(port_a==10){
               output_high(pin_b0);
               delay_ms(400);
               output_low(pin_b0);
               delay_ms(400);
               output_high(pin_b0);
               delay_ms(400);
               output_low(pin_b0);
               delay_ms(400);
               output_high(pin_b0);
               delay_ms(1000);
               output_low(pin_b0);
               delay_ms(1000);
               output_high(pin_b0);
               delay_ms(1000);
               output_low(pin_b0);
               delay_ms(1000);
               output_high(pin_b0);
               delay_ms(2500);
               output_low(pin_b0);
               delay_ms(2500);
               output_high(pin_b0);
               if(port_a==11){
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_high(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  delay_ms(200);
                  output_low(pin_b0);
                  output_low(pin_b4);
                 
                  encend=0;
               }
            }
        }
        if(input(pin_a3)==0){
               delay_ms(3000);
               output_low(pin_b1);
               delay_ms(3000);
               output_low(pin_b2);
               delay_ms(3000);
               output_low(pin_b3);
         }
      }while(encend==1);
      }
     
   }while(true);
}
 
         
Estoy usando oscilador de 12Mhz, porque es el unico que tengo

Archivo Proteus
http://www.megaupload.com/?d=OV5YZD8V


Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema con PIC16f84A
« Respuesta #1 en: 17 de Junio de 2011, 14:13:32 »
como tienes la configuracion de los fuses? probaria mejor usando un cristal de 4Mhz, el datasheet de ese pic como máximo pone 10Mhz
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado lalala26

  • PIC10
  • *
  • Mensajes: 3
Re: Problema con PIC16f84A
« Respuesta #2 en: 17 de Junio de 2011, 14:47:10 »
Los fuses los tengo asi:
Código: [Seleccionar]
#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=12000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=8)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problema con PIC16f84A
« Respuesta #3 en: 17 de Junio de 2011, 15:01:55 »
Para 4Mz XT no HS, por lo menos yo siempre lo pongo asi.
Habilita el PUT.

Desconectado lalala26

  • PIC10
  • *
  • Mensajes: 3
Re: Problema con PIC16f84A
« Respuesta #4 en: 17 de Junio de 2011, 18:07:29 »
Problema solucionado!!. Estaban mal conectados los Botones, jajaja

Por cierto si puede trabajar con el oscilador a 12Mhz