Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/08/2013 #1

Avatar de cmontoya

Configurar pin clock del 16f628 en CCS
Hola amigos del foro
En estos momentos estoy haciendo unas prácticas con el 16f628A y el CCS, me dio por utilizar un 4017 y la verdad me confundí.
Me explico:
El Pic manda la señal CLOCK al 4017 para que haga su función, para eso escogimos un pin (A0), y en el puerto B lo utilizo para que me prenda unos leds a diferente tiempo y diferente orden, No se cómo hacer para que el Pic siga haciendo el CLOCK por el pin (A0) de forma independiente y no se deje afectar por las instrucciones que doy al puerto B
Espero que me hayan entendido y agradezco por su ayuda.
Saludos
Código:
#Include <16F628A.h>                                                                 
#Fuses INTRC_IO, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOCPD, NOPROTECT                   
#Use Delay (Clock=4000000)                                                           
#Use Fast_Io(B)                                                                    
#Use Fast_Io(A)
#define clock PIN_A0
long stop = 100;


void CLK(void)
{

output_bit(CLOCK,0);
delay_us(2);
output_bit(CLOCK,1);

}
void derecha(void)
{
CLK();
output_high(PIN_b0);
CLK();
delay_ms(stop);
CLK();
output_low(PIN_b0);
CLK();

output_high(PIN_b1);
delay_ms(stop);
output_low(PIN_b1);

output_high(PIN_b2);
delay_ms(stop);
output_low(PIN_b2);

output_high(PIN_b3);
delay_ms(stop);
output_low(PIN_b3);

output_high(PIN_b4);
delay_ms(stop);
output_low(PIN_b4);

output_high(PIN_b5);
delay_ms(stop);
output_low(PIN_b5);

output_high(PIN_b6);
delay_ms(stop);
output_low(PIN_b6);

}


    void main(void){

      set_tris_a(0); 
      set_tris_b(0);   
                do{
           CLK();
           derecha();
             CLK();
            }while(TRUE);
                }
02/08/2013 #2
Moderador

Avatar de D@rkbytes

Puedes usar este ejemplo para generar el pulso de reloj mientras corre tu programa.
En ese ejemplo se usa la interrupción por TMR1 y también un cristal externo, pero se puede configurar para hacerlo internamente.
Solo hay que modificar un poco el programa.

Saludos.
02/08/2013 #3


Lo que estás discribiendo como una meta a lograr con tu programa se hace facilmente empleando interrupciones, como indicaste hay dos rutinas en el PIC, la del "clock" se "dispara" ciclicamente cada cierto tiempo, independientemente de lo que esté haciendo la otra rutina, la cual se detiene/congela momentaneamente, terminadas las operaciones del "clock" se retoma la rutina que se detuvo.
Investiga el tema "interrupciones" en los pic.
02/08/2013 #4

Avatar de cmontoya

Hola amigos del foro…..
Gracias por los comentarios……….y pues bueno me di a la tarea de estudiar un poco las interrupciones … y pues también viendo el ejemplo de D@rkbytes me anime a hacer algunas modificaciones a mi código…….y me consto arto trabajo y neuronas je je je pero me funciono como yo quería, (lo probé en la simulación y el físico )
Código:
#Include <16F628A.h>                                                                 
#Fuses INTRC_IO, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOCPD,NOPROTECT                  
#Use Delay (Clock=4000000)                                                         
#Use Fast_Io(B)                                                                   
#Use Fast_Io(A)     

void config(void){
      set_tris_a(0x00);
      set_tris_b(0x00);
      output_a(0x00);
      output_b(0x00);
      SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT);
      SET_TIMER0(317);
}


void ejemplo(void)
{
output_high(PIN_b0);
output_high(PIN_b1);
delay_ms(500);
output_low(PIN_b1);
delay_ms(1000);
output_high(PIN_b0);
output_high(PIN_b1);
delay_ms(500);
output_low(PIN_b0);
delay_ms(1000);

}


#INT_TIMER0
void Interrupcion_x_desbordamiento(void){
      output_toggle(PIN_a0);
      SET_TIMER0(317);
}

void main(void){
      config();
      ENABLE_INTERRUPTS(GLOBAL);
      ENABLE_INTERRUPTS(INT_TIMER0);
      
do{                       
      ejemplo();
      }while(TRUE);
while(TRUE);
}
Saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.