uControl
Febrero 24, 2017, 11:48:13 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: [Problema CCS] Timer0 y Multiplexion Display 7 Segmentos  (Leído 113 veces)
0 Usuarios y 1 Visitante están viendo este tema.
robo_z
PIC10F
*
Desconectado Desconectado

Mensajes: 3


« : Enero 23, 2017, 08:52:31 »

Hola Amigos hace poco me anime a hacer una rutina de Multiplexion para un Display Catodo Comun de 4 Digitos con ayuda del Timer0, pero he tenido un inconveniente, Segun Mi Codigo Deberia Mostrar el Numero 9782 pero No enciende el Primer Digito(Numero 9).

No entiendo a causa de que sucede este error, aqui les dejo mi Codigo para que puedan darle una Ojeada:

Código:
#include <16F628A.h>

#FUSES PUT                      //Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES CPD                      //Data EEPROM Code Protected
#FUSES PROTECT                  //Code protected from reads
//#FUSES NOWDT

#use delay(internal=4MHz)
#use FIXED_IO( A_outputs=PIN_A3,PIN_A2,PIN_A1,PIN_A0 )
#use FIXED_IO( B_outputs=PIN_B3,PIN_B2,PIN_B1,PIN_B0 )
#define Pin_DispUnidad   PIN_A0
#define Pin_DispDecena   PIN_A1
#define Pin_DispCentena   PIN_A2
#define Pin_DispMillar   PIN_A3
#define Pin_DecoA   PIN_B0
#define Pin_DecoB   PIN_B1
#define Pin_DecoC   PIN_B2
#define Pin_DecoD   PIN_B3

int CorreCaso=0;
//Creamos Un Arreglo que Contiene los Numeros del CERO al NUEVE
const int Numeros[10]={0b00000000, 0b00000001, 0b00000010, 0b00000011, 0b00000100, 0b00000101, 0b00000110, 0b00000111, 0b00001000, 0b00001001};

void Setup()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32|RTCC_8_BIT);      //8.1 ms overflow
   set_timer0(100); //Cargamos 100 para un Retardo de 5 MiliSegundos
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);
}

void main()
{
   Setup();

   while(TRUE)
   {
   
   }
}

#INT_RTCC
void  RTCC_isr(void)
{
   switch (CorreCaso)
   {
      case 0:
      output_bit(Pin_DispUnidad,0);
      output_bit(Pin_DispDecena,1);
      output_bit(Pin_DispCentena,1);
      output_bit(Pin_DispMillar,1);
      output_b(Numeros[2]);
      CorreCaso=1;
      break;
     
      case 1:
      output_bit(Pin_DispUnidad,1);
      output_bit(Pin_DispDecena,0);
      output_bit(Pin_DispCentena,1);
      output_bit(Pin_DispMillar,1);
      output_b(Numeros[8]);
      CorreCaso=2;
      break;
     
      case 2:
      output_bit(Pin_DispUnidad,1);
      output_bit(Pin_DispDecena,1);
      output_bit(Pin_DispCentena,0);
      output_bit(Pin_DispMillar,1);
      output_b(Numeros[7]);
      CorreCaso=3;
      break;
     
      case 3:
      output_bit(Pin_DispUnidad,1);
      output_bit(Pin_DispDecena,1);
      output_bit(Pin_DispCentena,1);
      output_bit(Pin_DispMillar,0);
      output_b(Numeros[9]);
      CorreCaso=0;
      break;
   }
   set_timer0(100);
}

De Antemano se Agradece su tiempo y la Ayuda que Puedan Brindar  Cool

* Display.jpg (179.48 KB - descargado 11 veces.)
En línea
Leon Pic
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5693


Cumulonimbus


WWW
« Respuesta #1 : Febrero 03, 2017, 11:19:33 »

Hola robo_z
De CCS no se nada (o muy poquito).
¿Te aseguraste de que anda el display al que pertence al número millar?
Seguramente lo estarás exitando con un transistor. Debería de chequear que esto también funcione. Yo haría una prueba sencilla. Intercambiaría los display. Sabiendo que ese display anda, lo coloco en el millar y ver si se enciende. Si no se enciende, es problema de la electrónica, ya que al parecer, en el código no veo ningún error (pero recuerda que prácticamente no se nada de CCS, pero veo que mantiene la mismas lógica con los demás números.

Otra cosa que puede estar pasando, es que la interrupción, no deje que llegue a encender el número 9; pero es una suposición.
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
HJ
Moderador
dsPIC
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5657



« Respuesta #2 : Febrero 03, 2017, 02:52:32 »

Hola robo_z, no sé absolutamente nada de CCS, pero viendo la lógica de tu programa la encuentro coherente, al igual que Leon Pic, pero no veo que hayas definido, en ninguna parte del programa, que estas por utilizar el puerto A como digital.

En este micro, el PIC16F628A el puerto A arranca, cuando es alimentado o después de un reset, como analógico y debes indicarle al programa que vas ha utilizarlo como digital.
Eso se hace en ASM como:
Código:
         movlw          0x07
          movwf          CMCON

en algunos BASIC como:
Código:
All_Digital = TRUE

Y no veo nada parecido en tu código... aunque puede que lo haga automáticamente el compilador de CCS, pero al no utilizarlo es algo que desconozco, aunque debería estar esa información en la ayuda del compilador.

Saludos
HJ


Edito: Veo que has incluido una captura de pantalla de una simulación, puede que por algún motivo ajeno a tu programa este fallando dicha simulación, o que se deba a una de los tantos bugs propios de cada versión de ccs.
« Última modificación: Febrero 03, 2017, 03:00:44 por HJ » En línea

"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.083 segundos con 24 consultas. (Pretty URLs adds 0.006s, 2q)