Autor Tema: Ayuda con interrupcion para el timer1!!.  (Leído 8801 veces)

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

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Ayuda con interrupcion para el timer1!!.
« en: 04 de Marzo de 2007, 16:36:55 »
Hola,

Estoy intentando que una interrupcion salte cuando se gire el timer1.
El contador si va contando, porque lo veo en el simulador, pero cuando se gira el TMR1H, no va a la interrupcion.
Estoy usando un pic16f88 y cristal externo de 16Mhz.

;*****************************************************************************
; Program start
;*****************************************************************************
                        ORG     0          ; RESET vector location
RESET                   goto    START
;*****************************************************************************
; Interrupt vector
;*****************************************************************************
                        ORG     4              ; interrupt vector location
;*****************************************************************************
; Interrupt Routine.
;*****************************************************************************
Interrupt               movwf   intWsave
                        movf    STATUS,W
                        movwf   intStatusSave
                        bcf     PIR1,TMR1IF      ; Clear the timer interrupt
                        incf    tmr1h,F            ; and advance high counter.
                        movf    intStatusSave,W
                        movwf   STATUS
                        swapf   intWsave,F
                        swapf   intWsave,W
                        retfie
;*****************************************************************************

;*****************************************************************************
; Program start
;*****************************************************************************
START                   clrf    STATUS           ; Clear Status
                        clrf    INTCON           ; Disable interrupts
                        clrf    PCLATH           ; Keep in lower KByte
                        clrf    PORTA            ; Clear ports
                        clrf    PORTB

                     bsf     STATUS,RP0       ;Select bank 1
                     clrf   ANSEL           ;All pins are Digital
                 ;   bsf       OSCCON,6        ;Set oscilator to 4Mhz
                 ;   bsf       OSCCON,5
                     movlw   H'07'
                     movwf   CMCON           ;Turn off comparators
                     movlw   B'00010000'      ; i/o port value
                        movwf   TRISA
                        movlw   B'00000001'      ; i/o port value
                        movwf   TRISB
                        movlw   B'10000101'      ; pullup off, prescaler=64,
                        movwf   OPTION_REG       ; Set the OPTION register
                        bcf     STATUS, RP0      ; Select bank 0
                        movlw   b'00100001'     ;Prescaler=1:4(1us)  TMR1=ON
                        movwf   T1CON           ;configura T1CON

                        bsf     PIR1,TMR1IF    ; unmask the timer0 interrupt
                        bsf     PIE1,TMR1IE       ; and enable interrupt.

                        clrf    tmr1h            ; clear high timer
                        clrf    TMR1             ; clear timer
                       
LOOP                    btfsc   INP
                        goto    LOOP             ; Wait for pulse Low
waitHigh                btfss   INP              ;
                        goto    waitHigh         ; Wait for pulse high
.....
....
...

Hay algo que se me olvida...
Espero que me podais ayudar.
Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #1 en: 04 de Marzo de 2007, 17:00:01 »
El problema es que tenes que habilitar las interrupciones globales!
Agrega bsf INTCON,GIE.
Eso habilita todas las interrupciones configuradas.

Ojo con esto:

bsf     PIR1,TMR1IF    ; unmask the timer0 interrupt

Yo no lo pondria ahi, excepto que quieras forzar que se produzca por primera vez la interrupcion del timer sin esperar tiempo.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #2 en: 04 de Marzo de 2007, 17:19:01 »
Gracias bruno!!.

Tambien he añadido, el periferico, PEIE:

                        movlw   b'00100001'     ;Prescaler=1:4(1us)  TMR1=ON
                        movwf   T1CON           ;configura T1CON
                        bsf     INTCON,GIE
                        bsf     INTCON,PEIE
                        bsf     STATUS, RP0      ; Select bank 1
                        bsf     PIR1,TMR1IF    ; unmask the timer1 interrupt
                        bsf     PIE1,TMR1IE       ; and enable interrupt.
                        bcf     STATUS, RP0      ; Select bank 0
Ahora funciona. Donde lo pondrias?
Gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #3 en: 04 de Marzo de 2007, 17:52:12 »
josearrow verificá que el PIE y el PIR no estan en la misma página en el pic que estas usando.


Deberás setear el RP0 del status antes de acceder al PIE y luego borrarlo para volver a la página 0.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #4 en: 04 de Marzo de 2007, 19:33:53 »
Maunix ahí te paso otro problemita. Segui su consejo.

Yo no lo pondría en ningun lado al bsf PIR1,TMR1IF.
El PIC se encarga de setearlo automaticamente cuando se desborda el contador alto del TIMER1 y eso es lo que produce la interrupcion del TIMER1 si el INTCON,GIE esta seteado tambien. Lo que no hace el PIC es limpiarlo automaticamente. Por eso debes limpiarlo manualmente (fijate que tenes puesto bcf PIR1,TMR1IF)

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #5 en: 05 de Marzo de 2007, 10:42:21 »
Hola,

Si, lo puse así.

                        bcf     STATUS, RP0      ; Select bank 0
                       
                        movlw   b'00100001'      ;Prescaler=1:4(1us) TMR1=ON
                        movwf   T1CON            ;config T1CON
                        bsf     INTCON,GIE
                        bsf     INTCON,PEIE
                        bsf     STATUS, RP0      ; Select bank 1
                        bsf     PIR1,TMR1IF      ; unmask the timer0 interrupt
                        bsf     PIE1,TMR1IE      ; and enable interrupt.
                        bcf     STATUS, RP0      ; Select bank 0
                       

                        clrf    tmr1h            ; clear high timer
                        clrf    TMR1L            ; clear timer
                        clrf    TMR1H            ; clear timer

Lo que no se, es si esta en el mismo banco el pie1 y pir1.
sabeis?. El pic es un 16f88
SAludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #6 en: 05 de Marzo de 2007, 11:14:19 »
En el datasheet figura cada registro, direccion de memoria y banco.

Todos los registros desde 0x00 a 0x7F banco 0
Todos los registros desde 0x80 a 0xFF banco 1
...

Sino podes poner antes de trabajar con un registro BANKSEL lo que asegura que el mpasm cambie al banco correcto.

Ej:

bcf     STATUS, RP0      ; Select bank 0
                       
                        movlw   b'00100001'      ;Prescaler=1:4(1us) TMR1=ON
                        movwf   T1CON            ;config T1CON
                        bsf     INTCON,GIE
                        bsf     INTCON,PEIE
                        bsf     STATUS, RP0      ; Select bank 1
                        BANKSEL PIR1
                        bsf     PIR1,TMR1IF      ; unmask the timer0 interrupt
                        BANKSEL PIE1
                        bsf     PIE1,TMR1IE      ; and enable interrupt.
                        bcf     STATUS, RP0      ; Select bank 0


Ojo! Es lindo usarlo, pero recorda que el BANKSEL afecta los bits RP0 y RP1 por lo que hay que tener extremo cuidado, ademas que genera mas codigo del que muchas veces se necesita.

Sigo insistiendo en que saques esta linea:                         bsf     PIR1,TMR1IF

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #7 en: 05 de Marzo de 2007, 12:51:47 »
Gracias Bruno,

Entonces lo dejo así, para más facilidad. Lo he probado con el simulador, y parece que va bien. Antes se ponia el pir1 a '1' cuando habia acarreo, ahora no se mueve, parece que funciona igualmente.
Otra cosa, para desactivar el timer0, tengo que quitar la linea del option_reg simplemente o hace falta tenerlo ahi ya sea por la configuracion de los pullups o algo similar??.

Saludos.               


                       START                   clrf    STATUS           ; Clear Status
                        clrf    INTCON           ; Disable interrupts
                        clrf    PCLATH           ; Keep in lower KByte
                        clrf    PORTA            ; Clear ports
                        clrf    PORTB

                        bsf     STATUS,RP0       ; Select bank 1
                        clrf   ANSEL           ; All pins are Digital
                        movlw   H'07'
                        movwf   CMCON           ; Turn off comparators
                        movlw   B'00010000'      ; i/o port value
                        movwf   TRISA
                        movlw   B'00000001'      ; i/o port value
                        movwf   TRISB
                        movlw   B'10000001'      ; pullup off, prescaler=4,
                        movwf   OPTION_REG       ; Set the OPTION register
                        bcf     STATUS, RP0      ; Select bank 0
                       
                        movlw   b'00100001'      ; Prescaler=1:4(1us) TMR1=ON
                        movwf   T1CON            ; config T1CON
                        bsf     INTCON,GIE
                        bsf     INTCON,PEIE
                     ;  bsf     PIR1,TMR1IF      ; unmask the timer1 interrupt (bank0)
                        bsf     STATUS, RP0      ; Select bank 1
                        bsf     PIE1,TMR1IE      ; and enable interrupt.
                        bcf     STATUS, RP0      ; Select bank 0

firstLow                btfsc   INP              ; Wait for first ignition
                        goto    firstLow         ; pulse before starting
firstHigh               btfss   INP              ; the retard checking.
                        goto    firstHigh                       

                        clrf    tmr1h            ; clear high timer
                        clrf    TMR1L            ; clear timer
                        clrf    TMR1H            ; clear timer

                       
LOOP                    btfsc   INP
                        goto    LOOP             ; Wait for Ignition Low
waitHigh                btfss   INP              ;
                        goto    waitHigh         ; Wait for Ignition high

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #8 en: 05 de Marzo de 2007, 16:16:34 »
El timer0 no tiene deshabilitador.  Lo puedes activar como "contador" si quieres que no te moleste pero contará los pulsos que le ingresen por el pin habilitado a tal fin en tu pic y esto tampoco no te lo recomiendo.

Si necesitas 'detener' el timer, entonces el timer0 no es tu elección, deberas elegir otro timer.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #9 en: 05 de Marzo de 2007, 18:56:46 »
Hola Mauricio,

Es que el timer0, no lo uso para nada, no es por ningun motivo. Estoy usando el timer1, además con la interrupcion tengo 24bits, asi que no me hace falta para nada el timer0. A mi no me importa que esté contando, per decía de desactivarlo ya que no lo uso.

He estado intentando dejar el timerl a un valor fijo  y que solo cuente 100 conteos y salte el alto. Poniendo 156 en el timer1L, asi cuenta 100 veces, con 1:4  prescaler y 16Mhz de crystal. Tengo 100us en cada incremento del timer1H. Pero no soy capaz de encontrar una forma eficiente.

START               clrf    STATUS           ; Clear Status
                        clrf    INTCON           ; Disable interrupts
                        clrf    PCLATH           ; Keep in lower KByte
                        clrf    PORTA            ; Clear ports
                        clrf    PORTB

                        bsf     STATUS,RP0       ; Select bank 1
                        clrf   ANSEL           ; All pins are Digital
                        movlw   H'07'
                        movwf   CMCON           ; Turn off comparators
                        movlw   B'00010000'      ; i/o port value
                        movwf   TRISA
                        movlw   B'00000001'      ; i/o port value
                        movwf   TRISB
                   ;     movlw   B'10000001'      ; pullup off, prescaler=4,
                   ;     movwf   OPTION_REG       ; Set the OPTION register
                        bcf     STATUS, RP0      ; Select bank 0
                       
                        movlw   b'00100001'      ; Prescaler=1:4(1us) TMR1=ON
                        movwf   T1CON            ; config T1CON
                        bsf     INTCON,GIE
                        bsf     INTCON,PEIE
                     ;  bsf     PIR1,TMR1IF      ; unmask the timer1 interrupt (bank0)
                        bsf     STATUS, RP0      ; Select bank 1
                        bsf     PIE1,TMR1IE      ; and enable interrupt.
                        bcf     STATUS, RP0      ; Select bank 0

                        clrf    tmr1h            ; clear high timer
                        clrf    TMR1L            ; clear timer
                        clrf    TMR1H            ; clear timer                   
                        ;
                        ;       100uS loop time
                        ;       16MHz clock / 4 = 4MHz instruction cycle - 0,25us
                        ;       prescaler set to divide by 4
                        ;       preset TMR1 = 256, when = 0  =  100uS
                        ;       156 to 255 = 100 x 0,25us x 4(prescaler) = 100 us
                        ;
                        movlw .156   ; fixed timer1 to 156
                        movwf TMR1L               
                   
LOOP                    btfsc   INP
                        goto    LOOP             ; Wait for pulse Low
waitHigh                btfss   INP              ;
                        goto    waitHigh         ; Wait for pulse high

El problema es que la primera vez lo fijo bien, pero una vez en el loop, cuando espera pulso low, si desborda una vez ya empieza en 0, y no en 156, yo quiero que siempre cuente desde 156 a 256, para ir incrementando el TIMER1H en incrementos de 100us. Supongo que habría que poner tanto a la hora de esperar el low como el high, un btfss para ver si el timerl = 0 y si es igual a 0 fijar a 156 para que siga contando a partir de ese valor...
Espero que me podais dar alguna idea, quizas hay alguna forma tipica de hacer esto, yo soy bastante novato aún...
Por cierto, como ves, he quitado las lineas del option_reg y asi el timer0 no hacia nada, y el programa parecía ir bien, así que no se si lo dejo o lo quito, por lo que me has comentado antes... Yo el timer0 no lo quiero para nada.

Gracias por la ayuda.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #10 en: 05 de Marzo de 2007, 23:32:12 »
Lo que pasa es que estas queriendo usar un timer para lo cual no fue concebido.  Si quieres hacer eso de que cada 100 useg se incremente otra variable, te sugiero SI entonces uses el TIMER0 con un prescaler en caso de ser necesario (digamos si cambias el clock por ejemplo).

No le veo mayor sentido al uso que le quieres dar al timer1 de esa forma.

Una forma ideal desatendida de contar N microsegundos es usar el PR2 del Timer2.  Cuando el timer2 llega a la cuenta PR2, se enciende el flag TMR2IF y ahí puedes hacer lo que quieras, además el TIMER2 se pone a 0 solo.  Para bases de tiempo, es ideal.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #11 en: 06 de Marzo de 2007, 10:43:33 »
Hola,

El caso es que el programa estaba hecho para 4Mhz, y con prescaler de 64.
El problema es que yo quiero usar una interrupcion para poder escribir directamente mediante rs232 en la flash.
Este programa cuenta frencuencia, que va desde 2hz a 265hz, y segun los conteos que haga, mirará en una posicion de una tabla y hará ese retardo, prescrito en la tabla. Lo que quiero hacer es poder mandar tablas directamente desde el pc, sin tener que enviar el programa completo.
El 16f88 tiene la posibilidad de escribir en la flash. El programa funcionaba con 4Mhz y 64 prescaler, siendo cada instruccion de 1us. Para implementar esto, me recomendaron que aumentara el oscilador a 16Mhz, y que si el prescaler era entre 4 y 8 sería ok! para poder hacer esto mejor.
Por ello al usar 16Mhz y 1:4 prescaler, tengo 1us incrementos por el contador, si no fijara el contador para que de saltos de 100us o 50us, un valor aceptable, la tabla sería infinita, ya que desde 2hz a 265hz habría infinidad de conteos intermedios...
Por ello la idea es ajustar de alguna forma el contador para que tenga saltos de 100us, con lo que me salen 160 valores en la tabla, creo recordar....
El problema es que al ajustar el timer1 a que el low cuento 100 veces y salte el timerH, solo tendría 256 x 100us cada conteo, que no me da para 2hz, por eso usé la interrupcion, asi si es posible.
Si uso el timer2, tengo el problema de que al ser de 8bits, aún usando una interrupcion, sería de 16bits y no me da para 2hz, de ahi a usar el timer1 ampliado a 24bits. PEro claro tengo q poder ajustar para que cada incremento del high sea de 100us...

A ver si me podeis aconsejar que hacer...
Gracias por todo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #12 en: 06 de Marzo de 2007, 11:43:26 »
Mi consejo es que uses el Timer2 con el PR2 y que uses una variable de 16 bits como contador extra y te "olvidas" del timer2, solo sabrás que cada 100useg se te encenderá el TMR2IF (y aquí ya decides tu si usas o no interrupción).

Esa variable de 16 bits te da para 65535 x 100usec = 6,5 seg , osea más que suficiente.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado josearrow

  • PIC10
  • *
  • Mensajes: 40
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #13 en: 06 de Marzo de 2007, 12:03:27 »
Gracias,

Ok, si es posible hacer eso por mi perfecto.
El caso es que no sabia que se podia hacer un contador de 16bits con una variable de 16bits...

El tema de la interrupción, yo creia que es necesaria para una vez que se acarrea un contador de 8bits, se aumente una variable en 1, asi cada vez... pero ni sabia que hay variables de 16bits... Si es así, por mi se quita la interrupcion porque mejor sin ella, no crees?.

Si es posible, y abusando de tu amabilidad, me gustaría que me explicaras más profundamente lo que tengo que ir haciendo, o algun ejemplo que haga algo parecido con este timer2. Yo soy un poco novato.

Saludos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ayuda con interrupcion para el timer1!!.
« Respuesta #14 en: 06 de Marzo de 2007, 12:41:25 »
El caso es que no sabia que se podia hacer un contador de 16bits con una variable de 16bits...

El tema de la interrupción, yo creia que es necesaria para una vez que se acarrea un contador de 8bits, se aumente una variable en 1, asi cada vez... pero ni sabia que hay variables de 16bits... Si es así, por mi se quita la interrupcion porque mejor sin ella, no crees?.
En assembler puedes hacer variables del tamaño que tu quieras, de hecho tienes el máximo control sobre tu microcontrolador.

De hecho para hacer variables de 16 bits, 24 bits o demás, solo te preocupas porque tengas tantos bytes como necesites.  Hasta si quieres le puedes poner el mismo nombre.

Ej:


MIVAR16 equ 0x20
MIVAR24 equ 0x22
MIVAR8   equ 0x25


MIVAR16 ocupará de 0x20 a 0x21
MIVAR24 ocupará 0x22, 0x23 y 0x24
MIVAR8 ocupará 0x25

Luego tu por software debes decidir como armar la variable, es decir qué byte dentro de la variable es el más significativo y cual el menos significativo.  Yo suelo usar el LittleEndian que es que el byte que ocupa la posición de memoria más baja es el menos significativo. Es el formato más común usado en las PCs porque es el que usa intel.

Entonces para acceder al byte menos significativo o LOW de MIVAR16 haces


     movlw    .120              ;un dato cualquiera
    movwf    MIVAR16+0


Para acceder al byte HIGH haces


    movlw  .25          ;un dato cualquiera
    movwf    MIVAR16+1


Idem con el de 24 bits


Si es posible, y abusando de tu amabilidad, me gustaría que me explicaras más profundamente lo que tengo que ir haciendo, o algun ejemplo que haga algo parecido con este timer2. Yo soy un poco novato.

Por supuesto, es bastante simple


    bcf         STATUS,RP0
    movlw       b'01111011'             ;Postscaler 1:16
    movwf       T2CON                   ;Prescaler  1:16

    bsf         STATUS,RP0
    movlw       0x64
    movwf       PR2
    bcf         STATUS,RP0

    bsf         T2CON,TMR2ON



Tu puedes cambiar la configuración de T2CON (revisa el datasheet) para ajustar los prescalers como quieras.

Cuando TMR2 sea igual a 100dec o 64hex , el TMR2IF se encenderá.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)