//************************************************************
//
// LED´S GIRATORIOS MAREADOS ;)
// Azicuetano (foro Todopic)
//
//************************************************************
#include <18F2550.h>
#fuses XTPLL,PROTECT,NOLVP,PLL1,CPUDIV3,PUT,NOBROWNOUT,NOMCLR
#use delay(clock=12000000)
//#use fast_io(C)
//#use fast_io(B)
void enciende(int);
void letra_I(void);
void letra_V(void);
void letra_A(void);
void letra_N(void);
void enciende(int leds_a_encender)
{
output_b(leds_a_encender);
}
void letra_I(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b11111111);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
}
void letra_V(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b0000001);
delay_ms(5);
enciende(0b0001111);
delay_ms(5);
enciende(0b1110001);
delay_ms(5);
enciende(0b1000000);
delay_ms(5);
enciende(0b0111001);
delay_ms(5);
enciende(0b0000111);
delay_ms(5);
enciende(0b0000001);
delay_ms(5);
}
void letra_A(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b10000000);
delay_ms(5);
enciende(0b11000000);
delay_ms(5);
enciende(0b10111101);
delay_ms(5);
enciende(0b00100011);
delay_ms(5);
enciende(0b10111100);
delay_ms(5);
enciende(0b11000000);
delay_ms(5);
enciende(0b10000000);
delay_ms(5);
}
void letra_N(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b11111111);
delay_ms(5);
enciende(0b10000111);
delay_ms(5);
enciende(0b00011000);
delay_ms(5);
enciende(0b11100001);
delay_ms(5);
enciende(0b11111111);
delay_ms(5);
enciende(0b00000001);
delay_ms(5);
}
void letra_T(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b11000000);
delay_ms(5);
enciende(0b10000000);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b11111111);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000000);
delay_ms(5);
enciende(0b11000000);
delay_ms(5);
}
void letra_O(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
enciende(0b01111110);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b01111110);
delay_ms(5);
}
void letra_D(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b11111111);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b01111110);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
}
void letra_P(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b11111111);
delay_ms(5);
enciende(0b10010001);
delay_ms(5);
enciende(0b00010001);
delay_ms(5);
enciende(0b00010001);
delay_ms(5);
enciende(0b00001110);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
}
void letra_C(void)
{
enciende(0b00000000);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
enciende(0b01111110);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b10000001);
delay_ms(5);
enciende(0b01000010);
delay_ms(5);
enciende(0b00000000);
delay_ms(5);
}
void main(void)
{
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_a(0b00000000);
port_b_pullups(FALSE);
output_high(PIN_B0);
output_high(PIN_C7);
delay_ms(500);
//************************************************************
//
// EXPLICACION
//
// Cada letra ocupa un tiempo de 40ms.
// En 200ms. haciendo girar el llavero a una velocidad
// normal, se repetirá 2 veces la palabra que pongamos.
//
//
//************************************************************
while(1)
{
letra_I();
letra_V();
letra_A();
letra_N();
// letra_T();
// letra_D();
// letra_P();
// letra_I();
// letra_C();
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
output_low(PIN_C7);
delay_ms(40); // retardo necesario para completar los 200ms.
// 40ms*4 letras + 40 ms = 200 ms.
}
}
a ver si este verano entre cañita y cañita me hago uno
1º) ¿nos dejarias el esquema de montaje del circuito?
2º) ¿Utilizaste por alguna razón en especial el 18F2550?, ¿conectaste el USB algún sitio desconocido?
3º) ¿Cuantas veces se te ha escapado el cacharro probandolo?
¿No llevan resistencias esos leds?
Jaja... Dios que vergüenza :oops: :D
Ponia:
MARIA ♥ MARIA ♥
jiji.
DEVICE = 16F84A ' VAMOS A USAR UN PIC16F84A
XTAL = 4 ' CON UN CRISTAL DE 4MHz
SYMBOL LED1 = PORTB ' RENOMBRO AL PUERTO B (PONGO UN ALIAS) CON "LED1"
DIM A AS BYTE 'DEFINO LA VARIABLE QUE VOY A USAR PARA LOS FOR .... NEXT
DELAYMS 100 'PAUSA HASTA ESTABILIZAR
LOW LED1 'ARRANCA TODO CON LAS SALIDAS EN ESTADO BAJO
INICIO:
A = 0
FOR A = 0 TO 20 'VAN A SER VEINTE GIROS CON EL TEXTO
DELAYMS 116 ' TIEMPO PARA COMPENSAR LA DURACIÓN DEL TEXTO MÁS EL RESTO DE LA VUELTA
' TOTAL DE LA VUELTA COMO MUESTRA EL VIDEO = 300 MS
'TIEMPO DE LETRAS = 184 MS + 116 MS = 300MS
'ESTO ES PARA QUE SIEMPRE APAREZCA EN EL MISMO LUGAR EL TEXTO SI SE MANTIENE
' CONSTANTE LA VELOCIDAD DE GIRO.
'*****************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %01111111
DELAYMS 2
LED1 = %00001000
DELAYMS 2 ' LETRA H
LED1 = %00001000
DELAYMS 2
LED1 = %00001000
DELAYMS 2
LED1 = %01111111
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %01000001
DELAYMS 2 ' LETRA O
LED1 = %01000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00111111
DELAYMS 2
LED1 = %01000000
DELAYMS 2 ' LETRA L
LED1 = %01000000
DELAYMS 2
LED1 = %01000000
DELAYMS 2
LED1 = %01000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %01111110
DELAYMS 2
LED1 = %00001001
DELAYMS 2 ' LETRA A
LED1 = %00001001
DELAYMS 2
LED1 = %00001001
DELAYMS 2
LED1 = %01111110
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2 'ESPACIO ENTRE PALABRAS
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00000001
DELAYMS 2
LED1 = %00000001
DELAYMS 2 ' LETRA T
LED1 = %01111111
DELAYMS 2
LED1 = %00000001
DELAYMS 2
LED1 = %00000001
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %01000001
DELAYMS 2 ' LETRA O
LED1 = %01000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %01111111
DELAYMS 2
LED1 = %01000001
DELAYMS 2 ' LETRA D
LED1 = %01000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %01000001
DELAYMS 2 ' LETRA O
LED1 = %01000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %01111111
DELAYMS 2
LED1 = %00001001
DELAYMS 2 ' LETRA P
LED1 = %00001001
DELAYMS 2
LED1 = %00001001
DELAYMS 2
LED1 = %00000110
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2 ' LETRA I
LED1 = %01111111
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'******************************************************
LED1 = %00000000
DELAYMS 2
LED1 = %00111110
DELAYMS 2
LED1 = %01000001
DELAYMS 2 ' LETRA C
LED1 = %01000001
DELAYMS 2
LED1 = %01000001
DELAYMS 2
LED1 = %00100010
DELAYMS 2
LED1 = %00000000
DELAYMS 2
LED1 = %00000000
DELAYMS 2
'*******************************************************
LED1 = %10000000
NEXT
'LAS LETRAS SE PUSIERON TODAS PARA HACER MÁS DIDÁCTICO EL PROGRAMA. LAS "O" PUEDEN USARSE CON LLAMADAS "GOSUB"
' SI SE QUIERE ACORTAR EL NÚMERO DE LÍNEAS
A = 0 'ESPACIO VACÍO SIN FRASE
LED1 = %10000000
DELAYMS 800
LED1 = %00000000
DELAYMS 400
LED1 = %10000000 'PARPADEA LA AMARILLA DEL BORDE
DELAYMS 800
LED1 = %00000000
DELAYMS 400
' LAS DURACIONES DEL FLASHEO DE LOS LED DEL EXTREMO, SON MÚLTIPLOS DE 300 PARA QUE AL VOLVER EL TEXTO A APARECER,
' LO HAGA EN EL LUGAR QUE SALÍA EN LA APARICIÓN ANTERIOR.
GOTO INICIO 'CIERRA EL LAZO DE PROGRAMA. TODO VUELVE A EMPEZAR
Bien, Mario, bien, muy chulo queda el bicho
PD: Me ha encantado tú bicho Mario. :mrgreen:Hola amigo!
No podré dormir hasta que no me digas una cosa... ha volado?? se te ha escapado alguna vez?? :D :D :D
¡Ten cuidadoooooo que van a salir los leds volando!
PS: Estoy deseando ponerme con un monstruo de estos, pero la parte mecánica no me deja, soy totalmente inútil en ello...
Hola Azicuetano, me he permitido una pequeña licencia para "compactar" el código y reducir el número de líneas:Código: C
//************************************************************ // // LED´S GIRATORIOS MAREADOS ;) // Azicuetano (foro Todopic) // //************************************************************ #include <18F2550.h> #fuses XTPLL,PROTECT,NOLVP,PLL1,CPUDIV3,PUT,NOBROWNOUT,NOMCLR #use delay(clock=12000000) #define delay_led 5 #define enciende(leds_a_encender) {output_b(leds_a_encender); delay_ms(delay_led);} #define TODOPIC //#use fast_io(C) //#use fast_io(B) //void enciende(int); void letra_I(void); void letra_V(void); void letra_A(void); void letra_N(void); /* void enciende(int leds_a_encender) { output_b(leds_a_encender); } */ void letra_I(void) { enciende(0b00000000); enciende(0b00000000); enciende(0b10000001); enciende(0b10000001); enciende(0b11111111); enciende(0b10000001); enciende(0b10000001); enciende(0b00000000); } void letra_V(void) { enciende(0b00000000); enciende(0b0000001); enciende(0b0001111); enciende(0b1110001); enciende(0b1000000); enciende(0b0111001); enciende(0b0000111); enciende(0b0000001); } void letra_A(void) { enciende(0b00000000); enciende(0b10000000); enciende(0b11000000); enciende(0b10111101); enciende(0b00100011); enciende(0b10111100); enciende(0b11000000); enciende(0b10000000); } void letra_N(void) { enciende(0b00000000); enciende(0b10000001); enciende(0b11111111); enciende(0b10000111); enciende(0b00011000); enciende(0b11100001); enciende(0b11111111); enciende(0b00000001); } void letra_T(void) { enciende(0b00000000); enciende(0b11000000); enciende(0b10000000); enciende(0b10000001); enciende(0b11111111); enciende(0b10000001); enciende(0b10000000); enciende(0b11000000); } void letra_O(void) { enciende(0b00000000); enciende(0b00000000); enciende(0b01111110); enciende(0b10000001); enciende(0b10000001); enciende(0b10000001); enciende(0b10000001); enciende(0b01111110); } void letra_D(void) { enciende(0b00000000); enciende(0b10000001); enciende(0b11111111); enciende(0b10000001); enciende(0b10000001); enciende(0b10000001); enciende(0b01111110); enciende(0b00000000); } void letra_P(void) { enciende(0b00000000); enciende(0b10000001); enciende(0b11111111); enciende(0b10010001); enciende(0b00010001); enciende(0b00010001); enciende(0b00001110); enciende(0b00000000); } void letra_C(void) { enciende(0b00000000); enciende(0b00000000); enciende(0b01111110); enciende(0b10000001); enciende(0b10000001); enciende(0b10000001); enciende(0b01000010); enciende(0b00000000); } void main(void) { set_tris_b(0b00000000); set_tris_c(0b00000000); set_tris_a(0b00000000); port_b_pullups(FALSE); output_high(PIN_B0); output_high(PIN_C7); delay_ms(500); //************************************************************ // // EXPLICACION // // Cada letra ocupa un tiempo de 40ms. // En 200ms. haciendo girar el llavero a una velocidad // normal, se repetirá 2 veces la palabra que pongamos. // // //************************************************************ while(1) { #ifdef TODOPIC letra_T(); letra_D(); letra_P(); letra_I(); letra_C(); #else letra_I(); letra_V(); letra_A(); letra_N(); #endif output_low(PIN_B0); output_low(PIN_B1); output_low(PIN_B2); output_low(PIN_B3); output_low(PIN_B4); output_low(PIN_B5); output_low(PIN_B6); output_low(PIN_B7); output_low(PIN_C7); delay_ms(40); // retardo necesario para completar los 200ms. // 40ms*4 letras + 40 ms = 200 ms. } }
Un saludo
Hola Azicuetano, me he permitido una pequeña licencia para "compactar" el código y reducir el número de líneas:
mmm :?
no estoy seguro, pero creo que lo que haces realmente es reducir el numero de lineas escritas, pero al compilar el programa ocupara mas... ya que un "define" simplemente reemplaza todos los "enciende(leds_a_encender)" por "output_b(leds_a_encender); delay_ms(delay_led);" al compilarse... en cambio una llamada a una funcion, como puede ser "enciende(leds_a_encender)" solo se grabara una vez en la memoria rom del pic y se accedera a ella cada vez que se requiera.
void letra_A(void)
{
enciende(0b00000000);
enciende(0b10000000);
enciende(0b11000000);
enciende(0b10111101);
enciende(0b00100011);
enciende(0b10111100);
enciende(0b11000000);
enciende(0b10000000);
}