Autor Tema: EL RELOJITO (REGISTRO DE DESPLAZAMIENTO) CON PIC  (Leído 6507 veces)

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

Desconectado damico

  • PIC10
  • *
  • Mensajes: 2
EL RELOJITO (REGISTRO DE DESPLAZAMIENTO) CON PIC
« en: 11 de Julio de 2011, 09:16:07 »
hola amigos del foro, estoy intentando hacer una pequeña prueba con PIC, trata del el proyecto llamado el RELOJITO  que encontrareis en este enlace,
http://www.ucontrol.com.ar/wiki/index.php?title=El_relojito

mi intencion no es hacer todo el reloj sino una parte que es la de los 60 LED del segundero con el PIC16F628A y el registro de desplazameinto 74HC164N.
SI me podeis ayudar con el programa en CCS, lo que yo he hecho pensando que funcionaria es el sigueinte programa,

//Device/Fuses/Etc.---------------------------------
#INCLUDE <16F628A.H>            //Usamos un 16F628A
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Con oscilador a cristal...
#use delay(clock=4000000)       //..de 4MHz.
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //No protegemos el codigo.
#FUSES NOBROWNOUT               //No Brownout Reset
#FUSES NOLVP                    //No low voltage prgming
#FUSES NOCPD                    //No EE protection

//Declaramos la posición de los puertos-----------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86

//Definimos el valor de CLOCK y DATA
#DEFINE DATA2  PIN_A2 //Nos referimos a PORTA.2 como "data7"
#DEFINE CLOCK2 PIN_A3 //Nos referimos a PORTA.3 como "clock7"

//--------------------------------------------------
//---Envia un digito al registro de desplazamiento:
//--------------------------------------------------
//Declaramos la Variable:
int1 bit_aux;         //Declaro la variable auxiliar
main(){
bit_clear(TRISA,2);
bit_clear(TRISA,3);
//--------------------------------------------------
//---Envia un DATO al registro de desplazamiento:
//--------------------------------------------------
void escribo_segundo(int1){
   if (bit_aux) {output_high(DATA2);} //Si es "1", lo escribo en DATA2.
   if (!bit_aux) {output_low(DATA2);} //Si es "0", lo escribo en DATA2. 
   output_low(CLOCK2);   //Pongo el CLOCK en bajo...
   output_high(CLOCK2);  //...y de nuevo en alto. Listo!
}
void borro_segundero(void){
   int i;
   for (i=0;i<60;i++) {   // "i" irá de 0 a 60, de 1 en 1.
      escribo_segundo(0); //Envio un "0" al registro de desplazamiento
   }
}

}

 
PERO NADA DE NADA LO HE SIMULADO EN PROTEUS Y NO FUNCIONA, ademas nose si utiliza el DS1307 para lo que yo quiero hacer en definitiva si me podeis ayudar os estaria agradecido.

Un saludo

Desconectado marviiin

  • PIC10
  • *
  • Mensajes: 1
Re: EL RELOJITO (REGISTRO DE DESPLAZAMIENTO) CON PIC
« Respuesta #1 en: 19 de Noviembre de 2011, 15:29:50 »
hola, yo si quiero hacer todo el reloj, pero a la hora de copiar el programa y compilarlo en "C" me marca como 30 errores, alguien me podria ayudar, mira esto es lo que pongo:
#INCLUDE <16F628A.H>            //Usamos un 16F628A
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Con oscilador a cristal...
#use delay(clock=4000000)       //..de 4MHz.
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //No protegemos el código.
#FUSES NOBROWNOUT               //No Brownout Reset
#FUSES NOLVP                    //No low voltage prgming
#FUSES NOCPD                    //No EE protection

//Declaramos la posición de los puertos-----------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86

//Y asignamos cada pin como E/S según corresponda:
PORTA_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
PORTB_TRIS = 0b11110001; //1=ENTRADA, 0=SALIDA
//Declaramos la Variable:
int1 bit_aux;         //Declaro la variable auxiliar

//--------------------------------------------------
//---Envia un DATO al registro de desplazamiento:
//--------------------------------------------------
void escribo_segundo(int1){
   if (bit_aux) {output_high(DATA2);} //Si es "1", lo escribo en DATA2.
   if (!bit_aux) {output_low(DATA2);} //Si es "0", lo escribo en DATA2. 
   output_low(CLOCK2);   //Pongo el CLOCK en bajo...
   output_high(CLOCK2); } //...y de nuevo en alto. Listo!


main()
{
   //Asignamos cada pin como E/S según corresponda:
   PORTA_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
   PORTB_TRIS = 0b11110001; //1=ENTRADA, 0=SALIDA
}

#INCLUDE <16F628A.H>            //Usamos un 16F628A
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Con oscilador a cristal...
#use delay(clock=4000000)       //..de 4MHz.
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //No protegemos el codigo.
#FUSES NOBROWNOUT               //No Brownout Reset
#FUSES NOLVP                    //No low voltage prgming
#FUSES NOCPD                    //No EE protection
(void borro_segundero(void){
   int i;
   for (i=0;i<60;i++) {   // "i" irá de 0 a 60, de 1 en 1.
      escribo_segundo(0); //Envio un "0" al registro de desplazamiento
   }
}


//Declaramos la posición de los puertos-----------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86

//Definimos el valor de CLOCK y DATA
#DEFINE DATA7  PIN_A2 //Nos referimos a PORTA.2 como "data7"
#DEFINE CLOCK7 PIN_A3 //Nos referimos a PORTA.3 como "clock7"

//--------------------------------------------------
//---Envia un digito al registro de desplazamiento:
//--------------------------------------------------
void escribo(int8 aux){
   int i;
   for (i=0;i<8;i++) {   // "i" irá de 0 a 7, de 1 en 1.
      //Si el bit es "0", escribo un "0".
      if (bit_test(aux,i) == 0) {
         output_low(DATA7);    //Pongo "0" en DATA7...
         output_low(CLOCK7);   //Pongo el CLOCK en bajo...
         output_high(CLOCK7);  //...y de nuevo en alto. Listo!   
      }
      //Si el bit es "1", escribo un "1".
      if (bit_test(aux,i) == 1) {
         output_high(DATA7);    //Pongo "1" en DATA7...
         output_low(CLOCK7);   //Pongo el CLOCK en bajo...
         output_high(CLOCK7);  //...y de nuevo en alto. Listo!   
      }
   }
}
//--------------------------------------------------
//---Limpia el display:
//--------------------------------------------------
void borro_display(void){
   int i;
   for (i=1;i<33;i++) {   // "i" irá de 1 a 32, de 1 en 1.
         output_low(DATA7);    //Pongo "0" en DATA7...
         output_low(CLOCK7);   //Pongo el CLOCK en bajo...
         output_high(CLOCK7);  //...y de nuevo en alto. Listo!
   }
}
main(){
   //Asignamos cada pin como E/S según corresponda:
   PORTA_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
   PORTB_TRIS = 0b11110001; //1=ENTRADA, 0=SALIDA
   //Limpiamos el display
   borro_display();
   //Escribo un "2" en el primer display
   escribo(157); //  'Valor decimal de "2" (ver tabla)
   //Escribo un "3" en el segundo display
   escribo(188); //  'Valor decimal de "3" (ver tabla)
   //Escribo un "1" en el tercer display
   escribo(40); //  'Valor decimal de "1" (ver tabla)
   //Escribo un "5" en el cuarto display
   escribo(182); //  'Valor decimal de "5" (ver tabla)
}

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: EL RELOJITO (REGISTRO DE DESPLAZAMIENTO) CON PIC
« Respuesta #2 en: 19 de Noviembre de 2011, 16:44:05 »
tienes errores tipo:
(void borro_segundero(void){

el parentesis primero sobra


o tambien la creacion de 2 main

creo que has copiado 2 codigos y los has juntado porque se ven 2 codigos distintos

Desconectado josezumino

  • PIC10
  • *
  • Mensajes: 4
Re: EL RELOJITO (REGISTRO DE DESPLAZAMIENTO) CON PIC
« Respuesta #3 en: 06 de Agosto de 2012, 20:14:58 »
Hola....Estoy estudiando uC en CCS. Tengo un proyecto que he creado y estoy terminando. Es un reloj basado en un PIC 16f628a. Controla nueve 74HC595 que a su ves cada uno maneja un display de 7 segmentos. El reloj está pensado para ser implementado en carreras de autos, por eso lo diseñe con decimas, centesimas y milésimas. He tratado de sacarle el máximo provecho al uC por eso utilizo interrupciones para el control del tiempo y en los procesos de entrada de datos..... Se puede modificar la hora y también configurar el tiempo de la alarma (asi lo llamo), para activar o desactivar una carga..... Avisame si te interesa y te doy una mano..... Saludos.


 

anything