ATENCIÓN

La presente página es sólo un testimonio de una antigua versión del programa de foros. No es posible aquí ni escribir ni registrarse

El foro actual de webcampista está en la página .: https://www.webcampista.com 
Página 2 de 5 PrimerPrimer 12345 ÚltimoÚltimo
Resultados 21 al 40 de 95

Tema: Dmx

  1. #21
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    Ensamblador, estas loco... Desde luego el código se puede extrapolar pero me llevaría trabajo. Aun así es un reto, y entender ASM te ayuda a entender lenguajes mas altos. De todas formas estoy pensando la opcion de usar un módulo PWM externo via serie y subir a los Khz y no volverme loco con el filtro integrador. En cualquier caso pásamelo y lo miro entre convolución y convolución. Si necesitas un mail dimelo.

    Gracias Óscar.
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  2. #22
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Si quieres arañar micro segundos... tienes que acabar en ensamblador... en programas complicados es imposible, incluso leí que un buen compilador genera igual o mejor código que un programador de ensamblador (humano) mediano. además la ganancia sería pequeña en conjunto. Pero en programas sencillo como este, donde "cualquiera" lo entiende, seguro que supone doblar la velocidad.

    Hay instrucciones que, si no configuras bien el compilador, usan dos instrucciones de ensamblador por que son a piñón, imagina este caso, el contador es el mismo para los 8 canales, en el bucle comparas todos los datos con ese contador. Bien, pues para hacer eso en C, primero se pasar el dato del contador al acumulador y después se compara el acumulador con el dato, la siguiente vez, como es otra instrucción de comparación en C, se vuelve a llevar otra vez el contador al acumulador, así 8 veces, cuando no es necesario, lo llevas una vez y ahí se queda durante todo el bucle, ya que no cambia. En un bucle de 16 instrucciones te has ahorrado 7... y si fueran 16 canales, 15.

    Y no conozco ningún compilador (para mincrocontrolador) que no permita meter bloques en ensamblador, en el diseño de los sistemas operativos (buenos...) se hace, se diseña todo en C (o C++ u otro), pero los cuellos de botella, los bloques de código críticos para la velocidad, se rediseñan en ensamblador, o por lo menos se comprueban a ver si son mejorables.


    El problema va a ser encontrarlo hace poco que tiré un montón de disquettes de 3 1/2...

    ¿Te corre mucha prisa?, si no lo encuentro te lo pongo en seudocódigo.


    Sobre los filtros, me pillas... eso ya me queda muy lejos y apenas lo he usado recientemente, cuando lo he hecho siempre ha sido para sistemas leeentos, donde daba un poco igual el rizado.
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  3. #23
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    No te preocupes, hasta el 26 de junio estio liado con álgebra...
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  4. #24
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    La rutina de PWM (en C) sería algo así.

    Código PHP:
    byte contador;
    byte[8dato;

    while (
    true)
    {
        if (
    contador>dato[0]) then
            PortB0
    =0
        
    else 
            
    PortB0=1;

        if (
    contador>dato[1]) then
            PortB1
    =0
        
    else 
            
    PortB1=1;

        if (
    contador>dato[2]) then
            PortB2
    =0
        
    else 
            
    PortB2=1;
    .
    .
    .


        if (
    contador>dato[7]) then
            PortB7
    =0
        
    else 
            
    PortB7=1;

        
    contador++; // como es un byte, el solo desborda y se pone a cero. 

    // del while


    // el if puede sustituirse por esto
    // PortBX= (Contador<=dato[X]);   y funciona en la mayoría de compiladores... 
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  5. #25
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Espera... hay que depurarlo, creo que el 1 y el 0 están al revés... creo que tenía una pega de que siempre, aunque fuera 0, daba un pequeño pulso... hace tanto tiempo...
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  6. #26
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    Otra opción sería subir la frecuencia del PIC a lo maximo que de, con cristal y todo. Eso sí, tocaría tocar todo el codigo de la USART para que leyese el DMX como debe. Pero en ese caso tendría que documentarme.
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  7. #27
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    A ver ahora, Tiene como pega que el último bit de los 256 siempre está a cero, aunque el dato sea FFh (255d) y si en vez de poner < en los if, pones <=, entonces el primer bit de los 256 estará siempre a 1, aunque el dato sea 00h.


    Código PHP:
    // PWM Versión mejorada. 

    byte contador;
    byte[8dato;  //aquí van a parar los datos recibidos en la rutina de DMX

    while (true)
    {
        
    PortB00h;
        if (
    contador<dato[0]) then
            PortB0
    =1;
        
        if (
    contador<dato[1]) then
            PortB1
    =1;
        
        if (
    contador<dato[2]) then
            PortB2
    =1;    
    .
    .
    .

        if (
    contador<dato[7]) then
            PortB7
    =1;

        
    contador++; // como es un byte, el solo desborda y se pone a cero. 

    // del while


    // En este caso el if se puede sustituir, pero dependiendo del compilador, podría no ser tan rápido.
    // PortB[x]= (Contador<=dato[x]); 

    Esta versión además tiene como "ventaja" el que, según el compilador, ahorrará un salto por "if" y atención por que en cuanto a la rapidez, a lo mejor es preferible hacer la comparación al revés
    if (dato[X]>=contador)
    hablamos de acelerarlo "mucho", todo dependerá del como lo interprete el compilador y como sea de bueno...
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  8. #28
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Cita Iniciado por Josefe17 Ver mensaje
    Otra opción sería subir la frecuencia del PIC a lo maximo que de, con cristal y todo. Eso sí, tocaría tocar todo el codigo de la USART para que leyese el DMX como debe. Pero en ese caso tendría que documentarme.
    Eso es lo primero según la versión, puedes llegar a 24Mhz, me parece...
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  9. #29
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    Me cuesta entender la idea de que haya diferentes compiladores, sintaxis y demás, ya que viniendo de Java, donde todo es siempre lo mismo, alto nivel y excepciones. Solo es un comentario.
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  10. #30
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Cita Iniciado por Josefe17 Ver mensaje
    Me cuesta entender la idea de que haya diferentes compiladores, sintaxis y demás, ya que viniendo de Java, donde todo es siempre lo mismo, alto nivel y excepciones. Solo es un comentario.
    El Java... ¿no es parecido al C? al menos al C# y este al C... ¿o ya estoy desfasado incluso en eso?
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  11. #31
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Por cierto, ¿en microcontroladores también usáis Java? no me extraña que vaya lento...
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  12. #32
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    Noooooooooooo. Dios vaya desfase. Java corre sobre una máquina virtual y está orientado a objetos. La sintaxis básica y la forma de enfocar los programas es similar pero digamos que la máquina y la memoria son transparentes para el usuario y que tu solo trabajas con encapsulamiento en clases y objetos, todo de alto nivel. No hay, por ejemplo, punteros, sino referencias a objetos. Los objetos son dinámicos y se muren si se quedan sin referencias. Y si por ejemplo intentas acceder a la posición -1 de un array, el programa lanza una excepción (error) y se para, no lee la posicion relativa de memoria -1.

    Más en http://es.wikipedia.org/wiki/Java_%2...maci%C3%B3n%29

    Y micros en Java como que no.
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  13. #33
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Oye, pues no estaba tan mal encaminado, lo que es lo de la programación a objetos de toda la vida...

    Sospecho que si te metes en la programación de micros te tocará aprender C...
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  14. #34
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    Si en el fondo me apetecería. Tengo intenciones de en su día coger un programador de lavadora de carraca y levantarle todos los cronogramas de todos los pines con ayuda de Matlab y Arduino (activa un pin, comprueba con cuales de los otros tiene continuidad, lo almacena y pasa al siguiente, y luego con Matlab hacer los plots) y luego pasarlos a un micro. Es solo experiental, por hacerlo y aprender. Lo jodido sería luego digitalizar la temperatura de la lavadora. Requeriría cambiar termostato por NTC (uno cualquiera de lavadora, teniendo su curva sería suficiente, y si no se levanta) o dejar el mando termostático antiguo, y también cambiar la electoválvula de un cuerpo por otra de 4 cuerpos (o 4 simples empalmadas) para las 4 jaboneras, porque las de carraca distribuyen el agua con una varilla desde el programador.
    Ya te digo, no creo que lo haga por necesidad, pero sí para aprender a usar C en serio.
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  15. #35
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Cita Iniciado por Josefe17 Ver mensaje
    Si en el fondo me apetecería. Tengo intenciones de en su día coger un programador de lavadora de carraca y levantarle todos los cronogramas de todos los pines con ayuda de Matlab y Arduino (activa un pin, comprueba con cuales de los otros tiene continuidad, lo almacena y pasa al siguiente, y luego con Matlab hacer los plots) y luego pasarlos a un micro. Es solo experiental, por hacerlo y aprender. Lo jodido sería luego digitalizar la temperatura de la lavadora. Requeriría cambiar termostato por NTC (uno cualquiera de lavadora, teniendo su curva sería suficiente, y si no se levanta) o dejar el mando termostático antiguo, y también cambiar la electoválvula de un cuerpo por otra de 4 cuerpos (o 4 simples empalmadas) para las 4 jaboneras, porque las de carraca distribuyen el agua con una varilla desde el programador.
    Ya te digo, no creo que lo haga por necesidad, pero sí para aprender a usar C en serio.
    Tú ríete, pero en el pueblo tengo una lavadora de los 70 que funciona de cine... salvo el programador, que de un tiempo a esta parte se para en un punto y no pasa.... Compré una placa de relés en ebay y en algún movil tengo apuntados las entradas, las salidas, algunos tiempos... no sé como acabará la cosa por que la tengo lejos y no somos los que más la usamos (hay más presión por acabarla pronto una vez empiece) pero... está to' preparado para cuando llegue el momento
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  16. #36
    Senior Member hablador Avatar de Josefe17
    Fecha de ingreso
    14 May, 11
    Ubicación
    Madrid
    Edad
    29
    Mensajes
    1,039
    ¿La del R6? Algo habia oido tuyo de una lavadora y relés pero pensaba que era la del boquete. En cualquier caso si se te para el programador es que no le llega corriente al motor de arrastre o que hay un engranaje tocado. ¿Cómo saberlo? Neon soldado en paralelo con el motor de arrastre del programador. Cuando se pare el programador, si el neón está encendido es fallo mecánico =>Planteate levantar el programa y hacer el código en ese momento. Si no le llega corriente al motor es que algo que no hace contacto. Normalmente llevan un contacto para el motor de arrastre, y dependiendo del diseño, el motor de arrastre se parará cuando acabe el ciclo o también en las fases de carga y calentamiento, pasando a depender del presostato y del termostato, aunque normalmente no dependen de ello por seguridad con el agua. Eso sí, seguro que es bitemperatura: o frio o caliente con termostato por botón, y presostato de un nivel . No creo que lleve muchos contactos el programador, y por no tener no tendrá ni micro de puerta (blocapuertas ni lo pienso). En cualquier caso si te aburres, levanta el cronograma y haz la placa, y ya lo tienes.

    Por cierto, vi por ahí un esquema super interesante para manejar un motor asíncrono de lavadora sacando los 3 modos de funcionamiento con un condensador. A ver si lo encuentro. Hubo suerte: http://cdn3.grupos.emagister.com/ima..._538723_t0.jpg Eso sí, yo en vez de poner una conmutador doble con parada para el lavado ponía uno doble sin parada y los comunes en vez de ir directos a fase y condensador los ponia en los otros bornes libres del de centrifugado. Así con 2 conmutadores dobles o relés gestionaba el sentido de giro y velocidad, e interrumpiendo la fase el encendido.
    J = σ · E , P = ∫∫(E x H)·dS
    Sun Roller Jazz 49Cp + Hyundai Trajet. Con ganas de probarlos.


  17. #37
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Cita Iniciado por Josefe17 Ver mensaje
    ¿La del R6? Algo habia oido tuyo de una lavadora y relés pero pensaba que era la del boquete. En cualquier caso si se te para el programador es que no le llega corriente al motor de arrastre o que hay un engranaje tocado. ¿Cómo saberlo? Neon soldado en paralelo con el motor de arrastre del programador. Cuando se pare el programador, si el neón está encendido es fallo mecánico =>Planteate levantar el programa y hacer el código en ese momento. Si no le llega corriente al motor es que algo que no hace contacto. Normalmente llevan un contacto para el motor de arrastre, y dependiendo del diseño, el motor de arrastre se parará cuando acabe el ciclo o también en las fases de carga y calentamiento, pasando a depender del presostato y del termostato, aunque normalmente no dependen de ello por seguridad con el agua. Eso sí, seguro que es bitemperatura: o frio o caliente con termostato por botón, y presostato de un nivel . No creo que lleve muchos contactos el programador, y por no tener no tendrá ni micro de puerta (blocapuertas ni lo pienso). En cualquier caso si te aburres, levanta el cronograma y haz la placa, y ya lo tienes.

    Por cierto, vi por ahí un esquema super interesante para manejar un motor asíncrono de lavadora sacando los 3 modos de funcionamiento con un condensador. A ver si lo encuentro. Hubo suerte: http://cdn3.grupos.emagister.com/ima..._538723_t0.jpg Eso sí, yo en vez de poner una conmutador doble con parada para el lavado ponía uno doble sin parada y los comunes en vez de ir directos a fase y condensador los ponia en los otros bornes libres del de centrifugado. Así con 2 conmutadores dobles o relés gestionaba el sentido de giro y velocidad, e interrumpiendo la fase el encendido.

    Sí, es la del R6, pero no la del boquete jo, después dicen de dar información por la red...

    Un respeto para la lavadora ¿eh? que es de las primeras automáticas la temperatura se controla linealmente, todo/nada pero con su mando de ajuste, entre "0" y 90º sí, es el motor de arrastre, le das un toquecito y vuelve a funcionar, de los esquemas he mirado un montón, y tengo ya pensado como poner los relés para el tema del motor

    Incluso recuerdo haber visto que lo controla con un PLC.

    Vamos que tengo ideas a mogollón, lo malo será que el día que se estropee definitivamente no estaré para hacer el cambio (ni tendré el programa hecho ) y mi hermana, que es la que la usa pues va más veces, irá a la tienda y comprará una...
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  18. #38
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    ¡Lo encontré!

    Lo pongo tal cual, está. Tiene control de paso por cero, por que es la última versión en la que tenía que controlar 3 leds solo (por eso están comentados los otros) y como la tensión de red no estaba filtrada, solo rectificada, pues había que sincronizar para evitar parpadeos. También está la rutina para recibir DMX y el código relativo a un controlador DA de dos canales por SPI, que luego no se usó, pero la idea era que la misma programación sirviera para dos cosas, configurable mediante un jumper-soldadura.

    Código PHP:
    asm:
    ;; 
    De bit
    DMXok        EQU 00H    
    PARA LA RUTINA SERIE
    Input        EQU 02H    
    para serie
    Conf        EQU 03h 
    para serie
    bloquenuevo    EQU 05h     
    HADR        EQU 06h    
    para llegar a los 512 
    Pata256        EQU 07h 
    Esta es para llegar a los 256lo dejaremos a cero de momento
    ms20        EQU 
    08h    Si han pasado 20 ms
    SalvaRB8    EQU 0d5h 
    es F0,  de proposito general,  para recibir DMX si esta a uno

    De Byte
    DecDirDMX    EQU 
    08Para no cambiar la direcciónla ponemos aqui y contamos
    Direccion    EQU 
    09h    para guardar la dirección de los interruptores
    GuardaASerie    EQU 0Ah    
    para guardar A en la interrupción serie
    GuardaPSWSerie    EQU 0Bh 
    para guardar la palabra de estado en IRQ serie
    DAtoDACA    EQU 0Ch    
    Dato que coge la rutina para el canal A
    DAtoDACB    EQU 0Dh 
    Dato que coge la rutina para el canal B
    DatoAnterior01    EQU 0Eh    
    Para saber si hay que mandar o no
    DatoAnterior02    EQU 0Eh    
    Para saber si hay que mandar o no
    DatoAnterior03    EQU 0Eh    
    Para saber si hay que mandar o no

    Puertos
    DOUT        EQU    P3.7
    CLKDAC        EQU    P3.4
    CSDAC        EQU    P3.5


    PWM01    EQU 50h    
    ;  // Primer byte para PWM
    PWM02    EQU 51h    ;  // Primer byte para PWM
    PWM03    EQU 52h    ;  // Primer byte para PWM
    PWM04    EQU 33h    ;  // Primer byte para PWM
    PWM05    EQU 34h    ;  // Primer byte para PWM
    PWM06    EQU 35h    ;  // Primer byte para PWM
    PWM07    EQU 36h    ;  // Primer byte para PWM
    PWM08    EQU 37h    ;  // Primer byte para PWM
    PWM09    EQU 38h    ;  // Primer byte para PWM
    PWM10    EQU 39h    ;  // Primer byte para PWM
    PWM11    EQU 3Ah    ;  // Primer byte para PWM
    PWM12    EQU 3Bh    ;  // Primer byte para PWM
    PWM13    EQU 3Ch    ;  // Primer byte para PWM
    PWM14    EQU 3Dh    ;  // Primer byte para PWM
    PWM15    EQU 3Eh    ;  // Primer byte para PWM
    PWM16    EQU 3Fh    ;  // Ultimo byte para PWM

    DMX01    EQU 40h    ;   // Primer byte que recibe DMX
    DMX02    EQU 41h    ;  // 
    DMX03    EQU 42h    ;  // 
    DMX04    EQU 43h    ;  // 
    DMX05    EQU 44h    ;  // 
    DMX06    EQU 45h    ;  // 
    DMX07    EQU 46h    ;  // 
    DMX08    EQU 47h    ;  // 
    DMX09    EQU 48h    ;  // 
    DMX10    EQU 49h    ;  // 
    DMX11    EQU 4Ah    ;  // 
    DMX12    EQU 4Bh    ;  // 
    DMX13    EQU 4Ch    ;  // 
    DMX14    EQU 4Dh    ;  // 
    DMX15    EQU 4Eh    ;  // 
    DMX16    EQU 4Fh    ;  // Ultimo byte que recibe DMX

    ;DatoRecibido    EQU 50H aqui esta el dato reallo siguiente es "un puntero"
    PrimeroDMX    EQU 50H    es para poner un inmediatoasi siempre apunta bien
    UltimoDMX    EQU 50H
    +3    es para poner un inmediatoasi siempre apunta bien

    ContadorPWM    EQU 60h    
    Es el que lleva la cuenta de hasta donde debe llegar

    Pila         EQU 68h 
    Es para dejar sitio

    DatoA        EQU    00100001b
    DAtoB        EQU    00100010b
    RecargaTH0    EQU    256
    -55


        ORG 0000h
        LJMP INICIO


        ORG 00BH    
    timer 0se encargara de contar los 255 hasta llegar a 20 ms
        LJMP BuclePWM    
    Mide el minimo pulso 20 256

        ORG 0013H    
    Externa 0pata 12
        RETI
    ;    CLR IE1
        LJMP Externa1_PasoPorCero    
    Paso Por 0 de la tensión

        ORG 0023h
    Serie

           
    MOV GuardaAserieA
           MOV GuardaPSWSerie
    PSW
    ;    SETB RecibiDMX
    ;     LJMP LRecepDMX 

    ; *************************************************** RUTINA SERIE

    LRecepDMX

           
    MOV ASBUF                ;RECEPCION      1EAD
           MOV C
    RB8
           MOV SalvaRB8
    C
           CLR RI
           JB Bloquenuevo
    LDMXOFF     Si aun no se ha hecho caso del otrono recibas nada
           JB DMXok
    rec1old
           CJNE A
    #00H, LDMXOFF    
           
    JB SalvaRB8LDMXOFF
           SETB DMXok
           SJMP LRETORNO
     
    rec1old
    JB ConfRec2old
           CJNE A
    #00H, LDMXOFF    
           
    JNB RB8LDMXOFF
           SETB Conf
           MOV DecDirDMX
    Direccion
           MOV C
    Pata256        Para que el DMX sea a partir de 256
           CPL C            
           MOV HADR
    C        
           SJMP LRETORNO
     
    rec2old
    JB InputL1EF2
           JNB SalvaRB8
    LDMXOFF
           DJNZ DecDirDMX
    LRETORNO
           JBC HADR
    LRETORNO
           SETB Input
     
    L1EF2
    JNB SalvaRB8LDMXOFF
           MOV 
    @R0A                
    Lnadas
    INC R0
    Lnadar
    CLR C
           CJNE R0
    #UltimoDMX, L1F05       ;; Antes #6bH
           
    SETB Bloquenuevo
        CPL P3.5
           SJMP LDMXOFF

    L1F05
    JC LRETORNO

    LDMXOFF

           
    MOV R0#PrimeroDMX
           
    CLR DMXok
           CLR Conf
           CLR Input
     
    LRETORNO
    :                       ; 1F17
           MOV A
    GuardaAserie
           MOV PSW
    GuardaPSWSerie
           RETI


    ; ***************************************************************************************
    INICIO:
        
    ANL P3#E9h    ;; Solo P3.4, P3.2 y P3.1  a cero
           
    MOV R0#00H
    LaceroINC R0                  Este bucle es para poner TODA la memoria 
           MOV 
    @R0#00H             ; interna a 00H
           
    CJNE R0#7FH, Lacero
    yaacero:
           
    MOV P1#0FFH     ;; Aqui P1 sirvira para la salida de datos por display
           
    MOV R0#PrimeroDMX    ;; para la recepcion serie
    ;       MOV R1#PrimeroDMX
           
    MOV SP#Pila             ;; La pila solo va a tener 16 posiciones 
           

           
    MOV SCON#090H       ;; SCON Modo 2 ( 9 bits ); REN =1,  Preparado 
           
    MOV PCON#00H        ;; SMOD = 0
           
    MOV TMOD#00100010B    ;; TMOD Timers 0 y 1 en modo 2 ( 8 bits CON )
        
    MOV TCON#04H        ;; Externa 1 por flanco
        
    MOV TH0#RecargaTH0
        
    MOV TL0TH0    
    ;    SETB TR0

           MOV IP
    #10H      ;; IP, Prioridad serie
           
    SETB ES
           SETB EA
        SETB ET0    
    tIMER 0
    ;    SETB EX1    eXTERNA 1
           SETB PS        
    Prioridad seriede momento
    ;    SETB PX1    Y Tambien Externa 1
    ;    MOV Direccion#1    ;; Aunque sea el canal 0, es el 1
        
    SETB Pata256    Simula la pata del puerto a 1
        
        



    ;TARDAMASPWM:
    ;    
    SETB BloqueNuevo
    ;BUCLEDAC:
    ;    
    NOP
    ;    NOP
    ;    NOP
    ;    NOP
    ;    NOP
    SIMISMO
    :
        
    JB P3.6SiMismo    P1.0 es la y P1.1 del operacionalP3.6 es la salida
        ANL P3
    #E9h    ;; Solo P3.4, P3.2 y P3.1  a cero
        
    CLR TR0
    Esperaeluno
    :    ; 
        
    JNB P3.6Esperaeluno    Asi esperamos que se ponga a unoy ahora si que entramos
        SETB P3.3
        CLR Bloquenuevo        
    Para Poder recibir más datos
        MOV COntadorPWM
    #0    ;; No tenemos externa 1
        
    MOV TL0TH0
        SETB TR0
        MOV A
    P1    Esperamos que se ponga abajo
        RRC A        
    Pasamos de lo que diga P1.0 en la direccion
        RRC A
        ORL A
    #C0H    ;; Pasamos de P1.0 y P1.1
        
    CPL A
        JNZ YaEsta
        INC A        
    Para que el cero sea 1
    YaEsta
    :
        
    MOV DireccionA
        CLR P3.3
        ANL P3
    #E9h    ;; Solo P3.4, P3.2 y P3.1  a cero
        
    SJMP SiMismo
    ;    JNB BloqueNuevoBUCLEPWM     ;BUCLEDAC
    ;    MOV ADatoDACA
    ;    CJNE APWM01MandaDato
    ;    MOV ADatoDACB
    ;    CJNE APWM02MandaDato
    ;    SJMP BuclePWM    ;BucleDAC
    ;MandaDato:
    ;    
    MOV DatoDACAPWM01
    ;    MOV DatoDACBPWM02
    ;    LCALL LMandar
    ;;    CLR BloqueNuevo
    ;;    SJMP BUCLEDAC

    ; **************************************    Cada Cierto Tiempo
    BUCLEPWM
    :

        
    MOV AContadorPWM
        CJNE A
    PWM01P01
    P01
    :
        
    MOV P3.1C
        CJNE A
    PWM02P02
    P02
    :
        
    MOV P3.2C
        CJNE A
    PWM03P03
    P03
    :
        
    MOV P3.4C
    ;    CJNE APWM04P04
    ;P04:
    ;    
    MOV P1.3C
    ;    CJNE APWM05P05
    ;P05:
    ;    
    MOV P1.4C
    ;    CJNE APWM06P06
    ;P06:
    ;    
    MOV P1.5C
    ;    CJNE APWM07P07
    ;P07:
    ;    
    MOV P1.6C
    ;    CJNE APWM08P08
    ;P08:
    ;    
    MOV P1.7C
    ;    CJNE APWM09P09
    ;P09:
    ;    
    MOV P2.0C
    ;    CJNE APWM10P10
    ;P10:
    ;    
    MOV P2.1C
    ;    CJNE APWM11P11
    ;P11:
    ;    
    MOV P2.2C
    ;    CJNE APWM12P12
    ;P12:
    ;    
    MOV P2.3C
    ;    CJNE APWM13P13
    ;P13:
    ;    
    MOV P2.4C
    ;    CJNE APWM14P14
    ;P14:
    ;    
    MOV P2.5C
    ;    CJNE APWM15P15
    ;P15:
    ;    
    MOV P2.6C
    ;    CJNE APWM16P16
    ;P16:
    ;    
    MOV P2.7C
    FindelBucle
    :
    ;    
    ADD A#4    ;; Voy de 4 en 4 para no tener que dividir por 4 todos los demas
    ;    MOV ContadorPWMA
        SETb P3.7
        INC ContadorPWM
        MOV A
    ContadorPWM
        JNZ FinBuclePWM
        ANL P3
    #E9h    ;; Solo P3.4, P3.2 y P3.1  a cero
        
    CLR TR0
    ;    CLR ms20    
    ;    MOV P1#0
    ;    MOV P2#0
    ;    MOV PWM01DatoRecibido
    ;    CLR Bloquenuevo        Para Poder recibir más datos sino lo resetea el paso por cero
    FinBuclePWM
    :    
        
    CLR P3.7
        RETI

    ; ***********************************************    Se produce una interrupción en el paso por cero
    Externa1_PasoPorcero
    :
        
    ANL P3#E9h    ;; Solo P3.4, P3.2 y P3.1  a cero
        
    MOV ContadorPWM#0
        
    CLR Bloquenuevo        Para Poder recibir más datos
        CPL P3.5
        RETI


    ; ****************************************        RUTINA DAC *************

    LMandar:
        
    MOV    A#DatoA    ;; Primero le decimos el canal, Ahora El A
        
    CLR    CSDAC
        RLC    A
        MOV    Dout
    C
    1bit
    :    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    2Bit    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    3Bit    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    4Bit    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    5Bit    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    6Bit    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    7Bit    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    8Bit    SETB    CLKDAC

        MOV    A
    DatoDACA    Ahora el DATO De A
        CLR    C        
    Para meter un cero
    ;    RLC    A        Para poner ACC.7 en C
    ;    MOV    FaseAC    y mandarlo a la fase
        CLR    CLKDAC
        RLC    A
        MOV    Dout
    C        
    1bit2
    :    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    2Bit2    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    3Bit2    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    4Bit2    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    5Bit2    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    6Bit2    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    7Bit2    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    8Bit2    SETB    CLKDAC
        NOP
        CLR    CLKDAC
        NOP    
        SETB    CSDAC    
        NOP
        CLR    CSDAC    
        MOV    A
    #DatoB    ;; Ahora le decimos el canal B
        
    RLC    A
        MOV    Dout
    C
    1bitB
    :    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    2BitB    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    3BitB    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    4BitB    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    5BitB    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    6BitB    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    7BitB    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    8BitB    SETB    CLKDAC

        MOV    A
    DatoDACB
        CLR    CLKDAC
        CLR    C        
    Para meter un cero
    ;    RLC    A        Para poner ACC.7 en C
    ;    MOV    FaseBC    y mandarlo a la fase
        RLC    A
        MOV    Dout
    C
    1bitB2
    :    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    2Bit2B    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    3Bit2B    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    4Bit2B    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    5Bit2B    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    6Bit2B    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    7Bit2B    SETB    CLKDAC
        RLC    A
        CLR    CLKDAC
        MOV    Dout
    C
    8Bit2B    SETB    CLKDAC
        NOP
        CLR    CLKDAC
        NOP
        SETB    CSDAC
    FinMandar
    :
        
    RET 
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  19. #39
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    Que recuerdos...

    Prototipo de la controladora DMX de 8 canales cara soldadura
    Nombre:  20150528_1044441.jpg
Visitas: 38
Tamaño: 56.8 KB

    Cara componentes
    Archivo adjunto 131201


    Prototipo tapa

    Nombre:  20150528_104503.jpg
Visitas: 38
Tamaño: 43.3 KB


    Final

    Archivo adjunto 131199


    Prototipos de dos versiones del receptor de DMX que controlaba un motor paso paso y este a su vez un circulo de colores.

    Nombre:  20150528_104319.jpg
Visitas: 38
Tamaño: 58.4 KB
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

  20. #40
    Adict Member hablador Avatar de Aunolose
    Fecha de ingreso
    01 Jun, 05
    Ubicación
    En el foro de Webcampista
    Mensajes
    37,697
    En la cara de componentes salió una que no era...

    Nombre:  20150528_1044281.jpg
Visitas: 37
Tamaño: 70.8 KB
    Cuanto más se aleja una ciencia de las matemáticas, menos tiene de ciencia.

    Ni en mi cartera ni en mi bragueta

Página 2 de 5 PrimerPrimer 12345 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •