TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
03 de Septiembre de 2010, 05:24:49

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
257111 Mensajes en 28437 Temas por 27916 Usuarios
Último usuario: zororyuzaki
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  * PROYECTOS * (Moderadores: J1M, jfh900, MGLSOFT, Modulay, Sasián, LABmouse)
| | |-+  Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: Proyectus: Romanus Horae ad RR2 targetatis ó Un PIC hablando Latín Clásico.  (Leído 1070 veces)
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 4876



WWW
« : 02 de Septiembre de 2006, 08:30:05 »

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.  Shocked

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)  Smile

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.  Mr. Green  Mr. Green  Mr. Green

Código
GeSHi (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.  Mr. Green  Mr. Green  Mr. Green






Código
GeSHi (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, 01:03:57 por RedPic » En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
samshiel_pic
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 431



« Respuesta #1 : 02 de Septiembre de 2006, 10:52:09 »

 lol lol 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.  lol lol
En línea

Ni duermo ni como en el foro, ni machaco teclados, ni soy un ser supremo, ni etc, etc...  (lol jejeje lol)pero aqui estoy para lo que pueda ayudar.  

ESPAÑA - ANDALUCIA - SEVILLA

Saludos CANDI.
samshiel_pic@todopic.zzn.com
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 12825



WWW
« Respuesta #2 : 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  lol
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
sfriswolker
PIC10
*
Desconectado Desconectado

Mensajes: 22


« Respuesta #3 : 03 de Septiembre de 2006, 02:02:38 »

Si, Asterix y Obelix yo lo usaba pa irme a dormir....  Smile

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)
En línea
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 4876



WWW
« Respuesta #4 : 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.  Mr. Green

Commercium Epistularum Latinum Europaeum

Latinitas Viva

Nexus Paginae Latinae

Vincula Via Latinitatis

En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 4876



WWW
« Respuesta #5 : 17 de Julio de 2009, 09:31:02 »

Llevaba mucho tiempo buscando esta frase, que ya conocía, y por fin la encontré.  Mr. Green

¡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  lol lol lol
En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
migsantiago
Moderador Global
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 6836



WWW
« Respuesta #6 : 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?
En línea

RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 4876



WWW
« Respuesta #7 : 17 de Julio de 2009, 01: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.  Mr. Green

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






« Última modificación: 17 de Julio de 2009, 01:08:41 por RedPic » En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
migsantiago
Moderador Global
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 6836



WWW
« Respuesta #8 : 17 de Julio de 2009, 01:12:32 »

Curioso, gracias Diego.  Surprised
En línea

TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 válido! CSS válido!
Página creada en 0.199 segundos con 22 consultas.