Autor Tema: Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.  (Leído 4131 veces)

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5416
    • Picmania by Redraven
Cita. In illio tempor Caesare dixit ad milites suos: ¡Milites! Si deambulandun per la via publicam vieribus mulieribus quid dixieribus "... morenus ...". Non facendum caso, putaverant sunt. Fin de la cita.  :shock:

Fórmula Magistral: Tómese un tercio de RRBOARD2, añádasele otro tercio de DS1307 desatado y por último mézclese con una pizca de Flex_LCD y tendremos un Reloj. (Sí, eso, un simple reloj, nada mas que un reloj, un reloj a secas, como millones de relojes que hay por el mundo)  :)

Pero si además le construimos una rutina que sea capaz de convertir de Números Arábigos a Números Romanos tendremos exactamente lo que dice el Título del Proyecto: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.  :mrgreen:  :mrgreen:  :mrgreen:

Código: C
  1.  ------
  2. const int8 Numeros[] = {  1,    4,   5,    9,  10,   40,  50,   90, 100,  400, 500,  900, 1000};
  3. char H_in_RomanusNumericum[12];
  4. char M_in_RomanusNumericum[12];
  5. char S_in_RomanusNumericum[12];
  6.  ------
  7. void dec_to_roman(int8 LI, char* ptr){
  8.  
  9.    char tmp[12];
  10.    char* ptmp = (char*) tmp;
  11.    strcpy(ptr,"");
  12.    // transformo  de la tabla Arábiga a la Románica Latinitatis
  13.    // {  1,    4,   5,    9,  10,   40,  50,   90, 100,  400, 500,  900, 1000};
  14.    // { 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M'};
  15.    for(i=12;i!=255;i--){
  16.       while(LI >= Numeros[i]){
  17.          LI = LI - Numeros[i];
  18.          Switch(i){
  19.             case 0:
  20.                strcpy(ptmp,"I\0");
  21.                break;
  22.             case 1:
  23.                strcpy(ptmp,"IV\0");
  24.                break;
  25.             case 2:
  26.                strcpy(ptmp,"V\0");
  27.                break;
  28.             case 3:
  29.                strcpy(ptmp,"IX\0");
  30.                break;
  31.             case 4:
  32.                strcpy(ptmp,"X\0");
  33.                break;
  34.             case 5:
  35.                strcpy(ptmp,"XL\0");
  36.                break;
  37.             case 6:
  38.                strcpy(ptmp,"L\0");
  39.                break;
  40.             case 7:
  41.                strcpy(ptmp,"XC\0");
  42.                break;
  43.             case 8:
  44.                strcpy(ptmp,"C\0");
  45.                break;
  46.             case 9:
  47.                strcpy(ptmp,"CD\0");
  48.                break;
  49.             case 10:
  50.                strcpy(ptmp,"D\0");
  51.                break;
  52.             case 11:
  53.                strcpy(ptmp,"CM\0");
  54.                break;
  55.             case 12:
  56.                strcpy(ptmp,"M\0");
  57.                break;
  58.          }
  59.          ptr=strcat(ptr,ptmp);
  60.       }
  61.    }
  62. }
  63.  -----
  64.    ds1307_get_time(hrs,min,sec);
  65.    dec_to_roman(hrs, (char*) H_in_RomanusNumericum);
  66.    dec_to_roman(min, (char*) M_in_RomanusNumericum);
  67.    dec_to_roman(sec, (char*) S_in_RomanusNumericum);
  68.  
  69.  

Pasen y sírvanse de ello.  :mrgreen:  :mrgreen:  :mrgreen:






Código: C
  1. // Real Time Clock & NVRAM
  2. // Hardware DS1307 of Dallas Maxim
  3. // With interface I2C
  4. // Output over LCD & RSD232
  5. // Clock in Arabic and Roman Numbers
  6. // by Redpic
  7.  
  8. #include <18f4550.h>
  9. #fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
  10. #use delay(clock=20000000)
  11. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  12. #include <string.h>
  13.  
  14. // Libreria DS1307.c //////////////////////////////////////////////////////////
  15.  
  16. #define RTC_SDA  PIN_B0
  17. #define RTC_SCL  PIN_B1
  18. #define USE_INTERRUPTS 1
  19. #include "..\..\lib\ds1307.c"
  20.  
  21. // Libreria FLEX_LCD_2.c ///////////////////////////////////////////////////////
  22.  
  23. #define LCD_DB4   PIN_D7
  24. #define LCD_DB5   PIN_D6
  25. #define LCD_DB6   PIN_D5
  26. #define LCD_DB7   PIN_D4
  27. #define USE_LCD_RW   1
  28. #define LCD_RS    PIN_D1
  29. #define LCD_RW    PIN_D2
  30. #define LCD_E     PIN_D3
  31. #include "..\..\lib\flex_lcd_2.c"
  32.  
  33. ///////////////////////////////////////////////////////////////////////////////
  34.  
  35. const int8 Numeros[] = {  1,    4,   5,    9,  10,   40,  50,   90, 100,  400, 500,  900, 1000};
  36. char H_in_RomanusNumericum[12];
  37. char M_in_RomanusNumericum[12];
  38. char S_in_RomanusNumericum[12];
  39.  
  40. ///////////////////////////////////////////////////////////////////////////////
  41.  
  42. int1 flanco=0;
  43. int1 dump=0;
  44. int  n,i=0x00;
  45. char c=0x00;
  46. char rec=0x00;
  47. byte sec;
  48. byte min;
  49. byte hrs;
  50. byte day;
  51. byte month;
  52. byte yr;
  53. byte dow;
  54. char sdow[11];
  55. char LCDText[34];
  56. //-----------------------------------------------------------------------------
  57.  
  58. void dec_to_roman(int8 LI, char* ptr){
  59.  
  60.    char tmp[12];
  61.    char* ptmp = (char*) tmp;
  62.    strcpy(ptr,"");
  63.    // transformo  de la tabla Arábiga a la Románica Latinitatis
  64.    // {  1,    4,   5,    9,  10,   40,  50,   90, 100,  400, 500,  900, 1000};
  65.    // { 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M'};
  66.    for(i=12;i!=255;i--){
  67.       while(LI >= Numeros[i]){
  68.          LI = LI - Numeros[i];
  69.          Switch(i){
  70.             case 0:
  71.                strcpy(ptmp,"I\0");
  72.                break;
  73.             case 1:
  74.                strcpy(ptmp,"IV\0");
  75.                break;
  76.             case 2:
  77.                strcpy(ptmp,"V\0");
  78.                break;
  79.             case 3:
  80.                strcpy(ptmp,"IX\0");
  81.                break;
  82.             case 4:
  83.                strcpy(ptmp,"X\0");
  84.                break;
  85.             case 5:
  86.                strcpy(ptmp,"XL\0");
  87.                break;
  88.             case 6:
  89.                strcpy(ptmp,"L\0");
  90.                break;
  91.             case 7:
  92.                strcpy(ptmp,"XC\0");
  93.                break;
  94.             case 8:
  95.                strcpy(ptmp,"C\0");
  96.                break;
  97.             case 9:
  98.                strcpy(ptmp,"CD\0");
  99.                break;
  100.             case 10:
  101.                strcpy(ptmp,"D\0");
  102.                break;
  103.             case 11:
  104.                strcpy(ptmp,"CM\0");
  105.                break;
  106.             case 12:
  107.                strcpy(ptmp,"M\0");
  108.                break;
  109.          }
  110.          ptr=strcat(ptr,ptmp);
  111.       }
  112.    }
  113. }
  114.  
  115. void flash_porte(void){
  116.  
  117.    for(i=0;i<3;i++){
  118.       output_e(0x07);
  119.       delay_ms(75);
  120.       output_e(0x00);
  121.       delay_ms(75);
  122.    }
  123. }
  124.  
  125. void lee_y_escribe_lcd_time(void){
  126.  
  127.    ds1307_get_time(hrs,min,sec);
  128.  
  129.    printf("%2u:%2u:%2u\r\n",hrs,min,sec);
  130.    dec_to_roman(hrs, (char*) H_in_RomanusNumericum);
  131.    dec_to_roman(min, (char*) M_in_RomanusNumericum);
  132.    dec_to_roman(sec, (char*) S_in_RomanusNumericum);
  133.    printf("%s %s %s",H_in_RomanusNumericum,M_in_RomanusNumericum,S_in_RomanusNumericum);
  134.    printf("\r\n\n");
  135.    strcpy(LCDText,"");
  136.    sprintf(LCDText,"\f%2u:%2u:%2u        \r\n%s %s %s",hrs,min,sec,H_in_RomanusNumericum,M_in_RomanusNumericum,S_in_RomanusNumericum);
  137.    lcd_put_string((char*) LCDText);
  138. }
  139.  
  140. // INTERRUPCION por EXT2 Clock Out --------------------------------------------
  141.  
  142. #int_ext2
  143. ext2_handler() {
  144.  
  145.    if(flanco==1){
  146.       ext_int_edge(2,H_TO_L);
  147.       output_high(PIN_E0);
  148.    }else{
  149.       ext_int_edge(2,L_TO_H);
  150.       output_low(PIN_E0);
  151.       dump=1;
  152.    }
  153.    ++flanco;
  154. }
  155.  
  156. //-----------------------------------------------------------------------------
  157.  
  158. void main() {
  159.  
  160.    disable_interrupts(global);
  161.    disable_interrupts(int_timer1);
  162.    disable_interrupts(int_rda);
  163.    disable_interrupts(int_ext);
  164.    disable_interrupts(int_ext1);
  165.    disable_interrupts(int_ext2);
  166.    setup_adc_ports(NO_ANALOGS);
  167.    setup_adc(ADC_OFF);
  168.    setup_spi(FALSE);
  169.    setup_psp(PSP_DISABLED);
  170.    setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
  171.    setup_timer_0(RTCC_OFF);
  172.    setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
  173.    setup_timer_2(T2_DISABLED,0,1);
  174.    setup_timer_3(T3_DISABLED);
  175.    setup_comparator(NC_NC_NC_NC);
  176.    setup_vref(FALSE);
  177.    port_b_pullups(FALSE);
  178.    set_tris_b(0b00000111);
  179.    set_tris_e(0b00010000);
  180.    output_e(0x00);
  181.    set_tris_c(0b10000000);
  182.    delay_ms(500);
  183.    lcd_init();
  184.    flash_porte();
  185.    ext_int_edge(2,H_TO_L);
  186.    flanco=0;
  187.    enable_interrupts(int_ext2);
  188.    enable_interrupts(global);
  189.    ds1307_init(DS1307_OUT_ON_DISABLED_HIHG | DS1307_OUT_ENABLED | DS1307_OUT_1_HZ);
  190.    
  191.    printf("\r\nRomanus Horae ad RR2 targetatis\r\n\n");
  192.    do{
  193.       if(dump==1){
  194.          dump=0;
  195.          lee_y_escribe_lcd_time();
  196.       }
  197.    } while (TRUE);
  198. }
  199.  
« Última modificación: 17 de Julio de 2009, 13:03:57 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 773
    • Electrónica·Ingenia
Re: Proyecto: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #1 en: 02 de Septiembre de 2006, 10:52:09 »
 :D :D Realmente bueno Diego es lo que faltaba ya!!!!! jejeje

Al pic ya le queda una lengua muerta menos que conocer, la proxima en cuneiforme, jejeje.  :D :D

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17506
    • MicroPIC
Re: Proyecto: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #2 en: 03 de Septiembre de 2006, 04:28:42 »
Por favor, Diego, la próxima vez que veas un capítulo de Astérix y Obélix, acuéstate directamente  :D
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado sfriswolker

  • PIC10
  • *
  • Mensajes: 22
Re: Proyecto: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #3 en: 03 de Septiembre de 2006, 14:02:38 »
Si, Asterix y Obelix yo lo usaba pa irme a dormir....  :)

Muy currao, pero una pequeña objección: ¿no sería más sencillo sustituir el switch(i) por un un array de cadenas cuyo puntero es (i)? En mi opinión tarda menos en ejecutarse, son menos líneas y gasta menos pila (stack, no batería)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5416
    • Picmania by Redraven
Re: Proyecto: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #4 en: 09 de Septiembre de 2006, 04:02:00 »
Nada de Axterix y Obelix, yo sigo diciendo que para reunificar Europa hay que adoptar como idioma común el Latin y pasar de una vez de inglés, francés y/o alemán.  :mrgreen:

Commercium Epistularum Latinum Europaeum

Latinitas Viva

Nexus Paginae Latinae

Vincula Via Latinitatis

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5416
    • Picmania by Redraven
Re: Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #5 en: 17 de Julio de 2009, 09:31:02 »
Llevaba mucho tiempo buscando esta frase, que ya conocía, y por fin la encontré.  :mrgreen:

¡Qué mejor sitio que éste para colgarla!

Quidquid latine dictum sit altum videtur (Cualquier cosa dicha en latín, suena mas profunda)

Ja ja, ja  :D :D :D
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8259
    • Sitio de MigSantiago
Re: Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #6 en: 17 de Julio de 2009, 12:14:01 »
Oye Diego yo desconocía este tema, qué interesante.

¿Tendrás fotos o video del latin vicis fabrica?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5416
    • Picmania by Redraven
Re: Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #7 en: 17 de Julio de 2009, 13:05:20 »
Oye Diego yo desconocía este tema, qué interesante.

¿Tendrás fotos o video del latin vicis fabrica?



Sí, es que los links estaban todavía apuntando al antiguo servidor.  :mrgreen:

No me preguntes por qué se me ocurrió hacer una función Arábigo Romano ... son cosas que me dan. Ja, ja, ja  :D :D :D






« Última modificación: 17 de Julio de 2009, 13:08:41 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8259
    • Sitio de MigSantiago
Re: Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
« Respuesta #8 en: 17 de Julio de 2009, 13:12:32 »
Curioso, gracias Diego.  :o


 

anything