Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - CarWarlock

#1
Buenas.

La Familia de ese micro HC05 a parte de estar ya absoleta es bastante mala son muy sensibles al ruido e inestables si tienes que hacer algo pásate a la familia HC08. yo trabajé con el MC68HC705KJ1 y sí se puede leer el código siempre que no esté protegido, tiene un registro llamado MOR de donde se le puede especificar con un bit  el acceso a lectura o no, en las especificaciones tampoco aseguran que sea muy estable este tipo de proteccion pero bueno tampoco lo he probado.

Saludos.
#2
Buenas.

Yo mismo lo he probado, por ejemplo programas basados en MS-DOS en los que usaba el puerto paralelo, con este driver  en el XP me han funcionado sin nigún problema, doy fe de ello.

Saludos

Carmelo.
#3
Buenas.

Es verdad el Link no chuta un fallo técnico  ;D

a ver ahora:
http://www.beyondlogic.org/porttalk/porttalk.htm


Salu2
#4
Buenas.

Si a alguien le interesa una explicación de el porqué a veces el puerto paralelo no funciona en el XP le recomiendo este Link (eso sí es muy técnico y en inglés).

  http://www.beyondlogic.org/porttalk/porttalk.htm

Ese driver es una pequeña maravilla para aquellos programas que usan puertos y no funcionan con los XP,NT...
además te dan el código fuente, flipante.

Saludos.

Carmelo.
#5
Buenas.

Me comentas que lo haces desde el Linux y la verdad es que ahí no te puedo ayudar no se como se lo hace realmente para trabajar con el puerto paralelo.

Salu2.
#6
Buenas.

Por lo que me cuentas algo no tienes normal, los datos siempren se mantienen hasta que no se indique lo contario, quizás tenga el puerto trabajando como bidirrecional y entonces estamos hablando de otra cosa (compruebalo en la BIOS) o quizás el código esté mal, estaría bien que enseñases como lo haces.

Salu2
#7
Buenas.

Si quieres activar salidas no lo hagas con la señal BUSY esa es de lectura, usa el bus de datos que va del pin 2 al 9.

Saludos.
#8
Buenas.

A quien esté interesado en los fuentes del ejemplo anterior aquí los podreis descargar.


http://rapidshare.de/files/1643248/puertoparaleloll.rar.html


Salu2.
#9
Buenas.

El ejemplo es muy sencillo activa unas salidas y lee el pin "SELECT IN", el programa se diseño para una aplicación ejemplo que tenía una protección Mochila.
Si alguien está interesado en los fuentes y sabe algún site donde dejarlos que me lo haga saber.



'Aquí está mi modulo de las declaraciones.

Public Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Public Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Public Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Public Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer
Public Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Public Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean

'api de retardo
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)



'Mi formulario

Dim sOrt As Byte   'valor de la salida puerto paralelo
Dim sIn As Byte    'valor de la entrada puerto paralelo

Dim pOut As Integer 'direccion del puerto paralelo para Activacion
Dim pIn As Integer  'direccion del puerto paralelo para lectura


Private Sub Form_Load()

Dim icon_punter As String

If IsDriverInstalled = True Then

    icon_punter = App.Path & "\" & "Harrow.cur"      'icono personalizado para la pantalla
    Screen.MouseIcon = LoadPicture(icon_punter)
   
    pOut = &H378           'puerto LPT1 (salida datos)
    pIn = &H379            'puerto LPT1 (Status impresora)
   
    sOrt = 0               'desactivo todas las salidas
    PortOut pOut, sOrt     'lo saco por el puerto
   
    Call Lee_Pin_Select    'leo el estado del pin

Else

   MsgBox "El Driver no se encuentra cargado en memoria ", vbCritical + vbOKOnly, "Error"
   Unload Me

End If


End Sub


Private Sub lblEntradas_Click(Index As Integer)

Dim valor As Byte
    valor = 2 ^ Index

If shpEntradas(Index).BackColor = vbWhite Then

    sOrt = sOrt Or valor
    shpEntradas(Index).BackColor = RGB(255, 0, 255)

Else
    sOrt = sOrt - valor
    shpEntradas(Index).BackColor = vbWhite

End If

'Sacalo por el puerto
PortOut pOut, sOrt      'lo saco por el puerto

'un pequeño retardo para no leer el pin inmediatamente
Sleep (100)

Call Lee_Pin_Select

End Sub

Private Sub Lee_Pin_Select()

sIn = PortIn(pIn)       'obtengo el valor del puerto paralelo &H379(LPT1) Status
sIn = sIn And &H10      'mascara para obtener el estado del pin Select In

If sIn = &H10 Then
    lblPinSelect.Caption = "1"
Else
    lblPinSelect.Caption = "0"
End If

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Screen.MousePointer = 0

End Sub
Private Sub fmrEntradas_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Screen.MousePointer = 0

End Sub

Private Sub lblEntradas_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

Screen.MousePointer = 99

End Sub



#10
Buenas.

El pin 11 del puerto paralelo es el BUSY,  trabaja con "inversión de hardware" o sea que si le pones 5V leeras un 0 en el pin y al revés si tienes 0V tendrás un 1.
Para empezar no se porque declaras un string para recibir el dato, creo que es un error hacer eso ya que luego no puedes enmascararlo bien.
yo lo haría así y partiendo de la libreria io.dll:

BytIn = PortIn(&H379)          'el valor lo almaceno en un byte
BytIn = BytIn And &H80        ' enmascaro el Busy

If BytIn = &H80 Then
    'Hay 0V en el pin
Else
    'Hay 5V en el pin
End If

Salu2