elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15
41  Programación / Programación Visual Basic / Re: ¿Cómo reiniciar un timer en visual basic 6? en: 25 Diciembre 2010, 20:57 pm
Muchísimas gracias por sus respuestas.

Trataré de corregir mi código y luego les comento como quedó.

De verdad muchas gracias y ¡Feliz navidad!
42  Programación / Programación Visual Basic / ¿Cómo reiniciar un timer en visual basic 6? en: 25 Diciembre 2010, 02:47 am
Hola a todos:

Escribo para plantear una pequeña duda que me tiene preocupado: ¿Hay forma de reiniciar un timer en vb6?

Estoy tratando de recibir datos por el puerto COM en formato RS232. La PC debe recibir un bloque de 30 caracteres para procesarlo, pero tengo la propiedad rthreshold a 1 para que se produzca un evento OnComm cada vez que se reciba un caracter.

El objetivo es que cada vez que llegue un caracter se reinicie un timer para evitar que éste último produzca un evento Timer(). Si se produce el evento Timer() quiere decir que el caracter ha tardado en llegar y suponer entonces que ha ocurrido un problema con la comunicación.

Así, por ejemplo, si después del cuarto caracter el quinto no llega en un determinado tiempo, el sistema reiniciará su lógica de recepción y el siguiente caracter que llegue será considerado el primero de una nueva cadena.

De manera burda, lo tengo así:

Código:
Dim contacaracter as integer
Dim s as string

private sub Comm1_OnComm()
    if comm1.commevent=comevreceive then 'Si se ha recibido un caracter.
         if contacaracter = 0 then     ' y si es el primero en recibirse
              timer1.enabled = true    ' se habilita el timer.
         else
              timer1.enabled = false   ' Aquí trato de reiniciar el timer apagándolo
              timer1.enabled = true    ' y luego encendiéndolo, pero al parecer no
                                                 ' funciona.
         endif

        s = s & comm1.input
        'Aquí proceso el caracter recibido.
        ' Cuando se reciban tdos los caracteres se inhabilita el timer.
    endif
end sub

private sub timer1_Timer()
    contacaracter=0     ' El siguiente caracter que llegue será considerado el primero.
    s=""   ' Vacía la cadena de recepción.
   timer1.enabled=false   
end sub

Cuando apago el timer (timer1.enabled=false) al parecer sólo lo detengo, pero no lo hago regresar a su valor inicial de conteo.

Si alguien pudiera ayudarme, muchísimas gracias.
43  Informática / Electrónica / Re: LM35 y DS18S20 en: 11 Diciembre 2010, 06:26 am
Bueno, todo depende de las circunstancias:

Si se dispone de un microcontrolador con ADC integrado, el LM35 es muy adecuado, ya que manejar el convertidor AD de un microccontrolador es muy sencillo.

La desventaja del LM35 es que su salida es analógica, por lo cual es muy susceptible a las interferencias y a la distorsión por la distancia de los cables cuando se requiere realizar lecturas remotas. En este caso, es mejor utilizar un sensor con interfaz serial, ya que es más difícil distorsionar una señal digital que una analógica.

Desventajas del sensor con interfaz i2c: el protocolo i2c es muy complejo y la programación se volvería muy tediosa, sobre todo si se utilizan interrupciones.
44  Informática / Electrónica / ¿Por qué el minisplit tiene 2 sensores de temperatura? en: 19 Noviembre 2010, 02:49 am
Hola a todos:

Se me presentó un proyecto en el cual debo controlar los minisplit de un pequeño edificio mediante la computadora.

A pesar de que ya existen sistemas de minisplits controlados por computadora, el proyecto consiste en que sea yo el diseñador del software y el hardware del sistema de control.

Por lo tanto, como no puedo interferir en la tarjeta de control de los minisplits, he decidido diseñar mi propia tarjeta de control para cada minisplit.

Al principio yo pensé que bastaba con un simple sensor de temperatura para leer la temperatura de la habitación, de manera que se encendería el compresor hasta lograr la temperatura deseada, después permanecería apagado hasta que la temperatura vuelva a subir. Pero acabo de enterarme que los minisplit tienen 2 sensores de temperatura. ¿Alguno de ustedes puede decirme, por favor, con qué objetivo es esto?

         Gracias por su atención.
45  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 13 Septiembre 2010, 04:45 am
Hola, Meta:

Me parece que los mensajes todavía los tienes en la programación ocupando espacio. Debes quitarlos, ya que no los ocupas puesto que ahora están en la 24LC256.

Si ya los quitaste, entonces la directiva IF FinTabla > 0xFF... debes ponerla después de los goto's, más o menos así:

Código
  1.   movf   PORTC,W
  2.   andlw  b'00111111'
  3.   addwf  PCL,F
  4.   goto    Configuracion0
  5.   goto    Configuracion1
  6.   goto    Configuracion2
  7.           .
  8.           .
  9.           .
  10.   goto    ConfiguracionX
  11. FinTabla
  12.  
  13.   IF (FinTabla > 0xFF)
  14.    ERROR "CUIDADO!: La tabla ha superado el tamaño de la página de los"
  15.   MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
  16.   ENDIF
  17.  
  18. Configuracion0
  19.    ; Código de la configuracion 0.
  20.  
  21. Configuracion1
  22.   ; Código de la configuracion 1.
  23.  
  24.         .
  25.         .
  26.         .
  27.  

Con respecto a lo de usar lenguaje C, pues te vendría mejor, ya que el compilador gestiona la memoria tanto de datos como de programa y no hay que seleccionar bancos ni páginas de programa como en ensamblador.

Si aún haciendo lo que te dije sigue marcando error, entonces sí debes usar el "truquito" para poner la tabla.

             Saludos.
46  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 11 Septiembre 2010, 18:00 pm
Mi buen Meta:

Te faltaron algunas intrucciones:

Código
  1.    movf   PORTC,W
  2.    andlw  b'00111111'
  3.    addwf  PCL,F
  4.    goto    Configuracion0   ; Te faltaron estas instrucciones.
  5.    goto    Configuracion1
  6.    goto    Configuracion2
  7.            .
  8.            .
  9.            .

Pero ya está corregido. Te lo envié por si las dudas.

             Saludos.
47  Informática / Electrónica / Re: Duda con lector de banda magnetika en: 10 Septiembre 2010, 20:22 pm
Oye, hijocker:

¿No crees que podría ser problema del micro (hay la posibilidad)?

Sinceramente, no encuentro información relevante en internet sobre este lector.

             Saludos.
48  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 10 Septiembre 2010, 20:13 pm
Hola, Meta:

Bien, para arreglar tus problemas con el LCD vamos a hacer lo siguiente:

Citar
Recuerda que cada entrade del LCD puede haber mensajes a la vez en diferentes líneas, no que se borre toda la pantalla y que se vea sola una línea por cada actualización. Esto de la EEPROM y asm es un poco infierno.

Para solucionar eso debes quitar de la subruitna "M24LC256_Mensaje_a_LCD" la instrucción que borra la pantalla (call   LCD_borra).

Bueno, hasta ahí se soluciona el problema de que se borre un mensaje al poner otro.

Ahora, debes tomar en cuenta otro aspecto importantísimo: para visualizar un mensaje en una línea determinada debes:

1. Colocar el cursor al principio de la línea correspondiente.
2. Visualizar espacios en blanco hasta que se llene la línea (es decir, borrar la línea).
3. Regresar el cursor al principio de esa línea.

Aquí te dejo las funciones que hacen eso para cada una de las líneas del LCD.

Código
  1. LCD_Linea1EnBlanco
  2. call LCD_Linea1   ; Sitúa el cursor al principio de la línea 1.
  3. call LCD_LineaEnBlanco  ; Borra la línea.
  4. call LCD_Linea1   ; Regresa el cursor al principio de la línea.
  5. return
  6.  
  7. LCD_Linea2EnBlanco    ; Similar que la anterior.
  8. call LCD_Linea2
  9. call LCD_LineaEnBlanco
  10. call LCD_Linea2
  11. return
  12.  
  13. LCD_Linea3EnBlanco   ; Similar que la anterior.
  14. call LCD_Linea3
  15. call LCD_LineaEnBlanco
  16. call LCD_Linea3
  17. return
  18.  
  19. LCD_Linea4EnBlanco   ; Similar que la anterior.
  20. call LCD_Linea4
  21. call LCD_LineaEnBlanco
  22. call LCD_Linea4
  23. return

Esas rutinas pégalas en tu archivo "LCD_4BIT.INC".

Siempre que quieras visualizar un mensaje en una línea determinada deberás llamar esas rutinas. Por ejemplo, en el caso de la Configuración0, sería algo más o menos así:

Código
  1. Configuracion0
  2.    call LCD_Linea1EnBlanco ; Borra la línea 1 y se sitúa al principio de dicha línea.
  3. movlw PAGINA_00   ; Lee a partir de la dirección 00 de esta página
  4. call M24LC256_Mensaje_a_LCD ; de la memoria.
  5. call Retardo_2s
  6. goto ActivaSalida

Hazlo así y te debería funcionar. Espero tus comentarios.

                 ¡¡¡Buen día!!!
49  Programación / Programación Visual Basic / Re: [Ayuda] CheckBox en: 10 Septiembre 2010, 01:54 am
Es muy sencillo:

Código:
Option Explicit

Private Sub Check1_Click()
    If Check1.Value = vbChecked Then
        MsgBox "Activado"
    Else
        MsgBox "Desactivado"
    End If
End Sub
50  Informática / Electrónica / Re: Resolver problemas con tablas 6 bits. en: 9 Septiembre 2010, 18:22 pm
Hola, Meta:

En verdad que esta vez sí tenías muchos errores. Te mencionaré unos pocos:

1. La rutina para enviar mensaje al LCD nunca borraba la pantalla. Por eso el mensaje ocupaba todo el LCD.

Aquí te pongo la subrutina corregida. Nota que la única diferencia es que esta vez sí se borra la pantalla.

Código
  1. M24LC256_Mensaje_a_LCD
  2. movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
  3. clrf M24LC256_AddressLow
  4. call M24LC256_InicializaLectura
  5. call LCD_Borra    ; Borra la pantalla.
  6. M24LC256_LeeOtroByte
  7. call I2C_LeeByte ; Lee la memoria 24LC256.
  8. movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
  9. movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
  10. btfsc STATUS,Z ; que sea "0x00", que es código indicador final
  11. goto M24LC256_FinMensaje ; del mensaje, sale de la subrutina.
  12. movf M24LC256_ValorCaracter,W ; Recupera el valor leído.
  13. call LCD_Caracter ; Lo visualiza en la pantalla del LCD.
  14. incf M24LC256_AddressLow,F ; Apunta a la siguiente posición.
  15. goto M24LC256_LeeOtroByte
  16. M24LC256_FinMensaje
  17. call M24LC256_FinalizaLectura
  18. return

2. En tu programa principal tienes un bucle infinito:

Código
  1. Principal
  2. movlw PAGINA_00
  3. call M24LC256_Mensaje_a_LCD
  4. call Retardo_2s
  5. goto Principal

Si no lo quitas jamás vas a llegar a la zona de configuraciones (mejor, porque en la zona donde están las configuraciones tienes el error más grande).

3. En tu código tienes esto:

Código
  1. movf   PORTC,W
  2.   andlw   b'00111111'
  3.   addwf   PCL,F
  4.   call      Configuracion

Eso está bastante mal, porque la instrucción addwf   PCL,F es el encabezado de las configuraciones. Esa instrucción debería estar dentro de la subrutina Configuracion.

Código
  1. movf   PORTC,W
  2.   andlw   b'00111111'
  3.   call      Configuracion

Y dentro de la rutina Configuracion:

Código
  1. Configuracion
  2. addwf PCL,F   ; Aquí debe estar la instrucción addwf PCL,F.
  3. goto Configuracion0 ; 0 0 0 0 0 0
  4. goto Configuracion1 ; 0 0 0 0 0 1
  5. goto Configuracion2 ; 0 0 0 0 1 0
  6.                          .
  7.                          .
  8.                          .

4. Tu rutina Configuración nunca retorna (nunca ejecuta la instrucción return).

Lo que sucede es que en tu rutina Configuración pones instrucciones de brinco:

    goto   Configuracion0
    goto   Configuracíon1
          .
          .

y en las respectivas zonas de códigos ejecutas un goto al programa principal.

Código
  1. Configuracion1
  2.               goto ActivaSalida
  3.                       .
  4.                       .
  5.                       .
  6.          ActivaSalida
  7.                goto        Principal

Nunca ejecutas Return.

5. Por estética, es mejor que todos los elementos de una rutina estén todos en un mismo archivo. ¿Qué es lo que sucede con tu código?

La rutina Configuracion hace brincos (goto) hacia instrucciones que se encuentran en tu programa principal. Lo mejor es que esas instrucciones se encuentren también dentro del archivo de la subrutina de Cofiguracion.

En fín, te mandé al correo el programa corregido. Este sí debes revisarlo muy bien, porque le corregí muchas cosas.

Sigue echándole muchas ganas. Yo también empecé así. Me ocurrió casi de todo. He cometido casi todos los errores que se pueden cometer en ensamblador y es por eso que he podido resolver los tuyos.

                Saludos.
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines