TODOPIC
Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: damico 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
-
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)
}
-
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
-
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.