Mostrando entradas con la etiqueta Informática. Mostrar todas las entradas
Mostrando entradas con la etiqueta Informática. Mostrar todas las entradas

domingo, 28 de enero de 2024

Mejorando teclado Mars Gaming

Muy buenas a todos!

Normalmente no nos fijamos mucho ( o nos fijamos demasiado) en el elemento que más utilizamos para controlar nuestro ordenador, el teclado y el ratón. En este caso, El teclado.

Los hay de muchos tamaños colores y precios... y oiga que precios... un teclado de un marca más o menos puntera no baja de los 100, que ojo, yo no digo que no lo cueste, pero no es muy accesible para todos los bolsillos. En mi caso buscaba que tuviera dos características básicas, que fuera TKL (Ten Key Less) por sus siglas en ingles y que viene a significar que tienes 10 teclas menos y es un poco más pequeño, la otra característica es que tuviera RGB.

El RGB me parece algo que, además de quedar muy bonito en los vídeos, es muy útil en muchos ambitos y no solo para jugar. En mi caso tengo hasta 5 posibilidades. Uno para jugar, los otros para programar y uno que es con todas las teclas en blanco que va muy bien por la noche.

Bueno que me lío... Buscando por aquí y allá encontré el Mars Gaming MKREVOPRO y no me pareció excesivamente barato, tampoco quería comprar una porquería de 10€. Este me costo en torno a 35 o 40€.



El tema del RGB fue un poco duro al principio incluso parecía que no iba a poder usarlo ya que al usar GNU/Linux no trae drivers ni programa con el que poder controlarlo. Y así conocí OpenRGB.

OpenRGB es un software para gestión todos tus dispositivos RGB desde una sola aplicación tanto en Linux como en Windows. Este programa tiene una gran cantidad de opciones y una buena comunidad donde encontrar solución a casi todo. De echo, si no es por ellos ahora tendría un triste teclado sin colorines.

Lo primero que hice fue instalar las librerías que recomiendan en su web


sudo apt install git build-essential qtcreator qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libusb-1.0-0-dev libhidapi-dev pkgconf libmbedtls-dev

Una vez hemos instalado las dependencias nos vamos a la pagina https://gitlab.com/CalcProgrammer1/OpenRGB/-/releases/release_0.7#Linux-64-bit y hacemos clic en la parte superior nos da varias opciones y la que use fue Source code (zip) en la parte superior

OpenRGB descarga

viernes, 26 de enero de 2024

Actualizar Python en Ubuntu con apt

Revisando la versión de Python y aprovechando una reinstalación del sistema que he realizado hace poco, tenía que revisar unos programas y antes de empezar he revisado la versión que tengo actualmente instalada y era la 3.1 lo que me pareció un poco baja ya que la ultima vez, y la que tengo en el otro equipo, es la 3.8

Para actualizar Python primero vemos la versión que tenemos actualmente instalada con el comando:


python3 --version

Python 3.10.12


Una vez tenemos esta información actualizamos el sistema con el siguiente comando:

domingo, 19 de noviembre de 2017

Usos para Raspberry Pi

Muy buenas a todos y todas!!!

Esta publicación va con un poco de retraso... ya tenía la Raspberry Pi 2 desde hacia bastante tiempo, pero como la tenia en otros usos y no he podido hacerle una entrada en el blog como se merece.

En principio esta entrada va a ser un poco presentación de la placa.
Vamos a echar un vistazo a las distintas posibilidades que nos ofrece:

martes, 6 de octubre de 2015

Moviendo desvíos con servos y Arduino

Buenas a todos y todas los amantes de Arduino!!!

Después de estar mirando como poder mover los desvíos de mi nueva maqueta (aun en construcción) y viendo los precios y los diferentes sistemas (electroimanes, relés, motores caseros, etc..) me he decantado por los servos de modelismo y Arduino.

Lo que más me ha convencido son su bajo precio y lo fácil que son de instalar, si a eso le añadimos una placa Arduino, la cosa se hace mucho más interesante.

Ya no es que solo podamos mover el servo con Arduino, sino que también podremos tener salidas para poder conectar semáforos o cualquier otra cosa que queramos como los corazones de los desvíos.


Servo Tower Pro 9G:


sábado, 14 de septiembre de 2013

Visual Basic 6.0 y base de datos Access

Muy Buenas a todos y todas!!!

Seguimos trabajando en Visual Basic 6.0 y ahora le toca el turno a las bases de datos.
Para ello he utilizado las bases de datos Access, el complemento ADODB, un DataGrid, un Common Dialog Control y un PictureBox; Todos ellos los están en el apartado "Complementos".

El ejemplo es sencillo con unos pocos campos para el nombre, Apellidos y el nombre de la imagen que aparerá en un PictureBox.

La imagen se puede seleccionar en cualquier carpeta y al guardar el registro se copiara automáticamente a la carpeta \picture del path principal en el que tenemos copiada la carpeta principal del programa.

Para que la opción de copiar funcione correctamente, hay que seleccionar en el apartado /Proyecto/Referencias la referencia a "Microsoft Scripting Runtime". Con eso funcionara perfectamente. (En el ejemplo para descargar la referencia ya esta activada)


Proyectos\Referencias

Referencia Microsoft Scripting Runtime

Espero que este ejemplo le sirva a alguien para algún proyecto además siempre se puede mejorar ;-)



VERSION 5.00

Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Base de datos Access con DataGrid "
   ClientHeight    =   5085
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   8490
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   5085
   ScaleWidth      =   8490
   StartUpPosition =   3  'Windows Default
   Begin MSComDlg.CommonDialog CDialog 
      Left            =   8400
      Top             =   2760
      _ExtentX        =   847
      _ExtentY        =   847
      _Version        =   393216
   End
   Begin MSAdodcLib.Adodc Adodc1 
      Height          =   495
      Left            =   8520
      Top             =   2520
      Width           =   1200
      _ExtentX        =   2117
      _ExtentY        =   873
      ConnectMode     =   0
      CursorLocation  =   3
      IsolationLevel  =   -1
      ConnectionTimeout=   15
      CommandTimeout  =   30
      CursorType      =   3
      LockType        =   3
      CommandType     =   8
      CursorOptions   =   0
      CacheSize       =   50
      MaxRecords      =   0
      BOFAction       =   0
      EOFAction       =   0
      ConnectStringType=   1
      Appearance      =   1
      BackColor       =   -2147483643
      ForeColor       =   -2147483640
      Orientation     =   0
      Enabled         =   -1
      Connect         =   ""
      OLEDBString     =   ""
      OLEDBFile       =   ""
      DataSourceName  =   ""
      OtherAttributes =   ""
      UserName        =   ""
      Password        =   ""
      RecordSource    =   ""
      Caption         =   "Adodc1"
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "MS Sans Serif"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      _Version        =   393216
   End
   Begin VB.CommandButton cmdDelete 
      Caption         =   "&Eliminar"
      Height          =   300
      Left            =   2880
      TabIndex        =   12
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton cmdGuardar 
      Caption         =   "&Guardar"
      Height          =   300
      Left            =   1560
      TabIndex        =   11
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton cmdClose 
      Caption         =   "&Cerrar"
      Height          =   300
      Left            =   4200
      TabIndex        =   10
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton Cmdnuevo 
      Caption         =   "&Nuevo"
      Height          =   300
      Left            =   240
      TabIndex        =   9
      Top             =   2880
      Width           =   975
   End
   Begin VB.CommandButton Cmdcargar 
      Caption         =   "&Cargar imagen"
      Height          =   300
      Left            =   6240
      TabIndex        =   8
      Top             =   2880
      Width           =   1215
   End
   Begin VB.PictureBox Picture1 
      Appearance      =   0  'Flat
      BackColor       =   &H80000005&
      ForeColor       =   &H80000008&
      Height          =   2535
      Left            =   5280
      ScaleHeight     =   2505
      ScaleWidth      =   2985
      TabIndex        =   7
      Top             =   240
      Width           =   3015
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   2
      Left            =   2040
      TabIndex        =   6
      Top             =   2160
      Width           =   3015
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   1
      Left            =   2040
      TabIndex        =   5
      Top             =   1320
      Width           =   3015
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   0
      Left            =   2040
      TabIndex        =   4
      Top             =   360
      Width           =   3015
   End
   Begin MSDataGridLib.DataGrid DataGrid1 
      Height          =   1455
      Left            =   360
      TabIndex        =   0
      Top             =   3480
      Width           =   7935
      _ExtentX        =   13996
      _ExtentY        =   2566
      _Version        =   393216
      HeadLines       =   1
      RowHeight       =   15
      BeginProperty HeadFont {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "MS Sans Serif"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "MS Sans Serif"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ColumnCount     =   2
      BeginProperty Column00 
         DataField       =   ""
         Caption         =   ""
         BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED} 
            Type            =   0
            Format          =   ""
            HaveTrueFalseNull=   0
            FirstDayOfWeek  =   0
            FirstWeekOfYear =   0
            LCID            =   3082
            SubFormatType   =   0
         EndProperty
      EndProperty
      BeginProperty Column01 
         DataField       =   ""
         Caption         =   ""
         BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED} 
            Type            =   0
            Format          =   ""
            HaveTrueFalseNull=   0
            FirstDayOfWeek  =   0
            FirstWeekOfYear =   0
            LCID            =   3082
            SubFormatType   =   0
         EndProperty
      EndProperty
      SplitCount      =   1
      BeginProperty Split0 
         BeginProperty Column00 
         EndProperty
         BeginProperty Column01 
         EndProperty
      EndProperty
   End
   Begin VB.Label Label1 
      Caption         =   "Nombre Foto:"
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   2
      Left            =   240
      TabIndex        =   3
      Top             =   2160
      Width           =   1815
   End
   Begin VB.Label Label1 
      Caption         =   "Apellidos:"
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   1
      Left            =   720
      TabIndex        =   2
      Top             =   1320
      Width           =   1215
   End
   Begin VB.Label Label1 
      Caption         =   "Nombre:"
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Index           =   0
      Left            =   960
      TabIndex        =   1
      Top             =   360
      Width           =   1095
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim A As New Scripting.FileSystemObject
Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim X As String
Dim Cuenta As Integer

Private Sub cmdClose_Click()
End
End Sub

                                '----BOTON GUARDAR----
Private Sub cmdGuardar_Click()

If Text1(0).Text = "" Or Text1(1).Text = "" Or Text1(2).Text = "" Then
MsgBox "Por favor Rellene todos los campos"
Call clear
Else
Call Asignar_Datos
Rs.Update
Call Visualizar_Datos
Cmdnuevo.Enabled = True
cmdDelete.Enabled = True
End If
A.CopyFile CDialog.FileName, App.Path & "\picture\" & CDialog.FileTitle
Call Carga_Imagenes
End Sub
                                '----BOTON PARA CARGAR IMAGENES-----
Private Sub Cmdcargar_Click()

CDialog.ShowOpen
Picture1.Picture = LoadPicture(CDialog.FileName)
Text1(2).Text = CDialog.FileTitle
If Text1(2).Text = "" Then
    MsgBox "seleccione una imagen"
Else
    Text1(2).Text = CDialog.FileTitle
End If
End Sub

                                '-----BOTON ELIMINAR-----
Private Sub cmdDelete_Click()
On Error Resume Next
If Rs.RecordCount = 1 Then
MsgBox "No se puede eliminar el último registro, Por favor modifiquelo y pulse Guardar"
Else
 With DataGrid1
        If MsgBox("Se va a eliminar el registro : ¿Está seguro? ", _
                    vbExclamation + vbYesNo, "Eliminar") = vbYes Then
            
            
            Rs.Delete
                        
            ' Actualiza el recordset
            Rs.Update
            DataGrid1.Refresh
        End If
    End With
             ' muestra los datos en los textbox
    Call Visualizar_Datos
    Call Carga_Imagenes
   
        
        ' si elrecordset llegó al final se posiciona en el último
        If Rs.EOF Then
             Rs.MoveFirst
                Call Visualizar_Datos
                Call Carga_Imagenes
            'MsgBox "  Ultimo registro ", vbInformation
       End If
        
If Text1(2).Text = "" Then
Text1(2).Text = "Nopicture.jpg"
Call Carga_Imagenes
End If
End If
If Err Then
MsgBox "No se puede borrar registro"
End If
End Sub
                                '-----BOTON NUEVO-----
Private Sub Cmdnuevo_Click()
Call clear
Cmdnuevo.Enabled = False
cmdDelete.Enabled = False
Rs.AddNew
Text1(2).Text = "Nopicture.jpg"
Call Carga_Imagenes
Text1(0).SetFocus


End Sub

Private Sub Form_Load()

Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\bd1.mdb" & ";Persist Security Info=False"

Rs.Source = "Agenda"
Rs.CursorType = adOpenKeyset
Rs.LockType = adLockOptimistic
Rs.CursorLocation = adUseClient
Rs.Open "select * from Agenda", Cn, 3, 3  ' adOpenDynamic, adLockOptimistic


Dim Rs2 As New ADODB.Recordset
Set Rs2 = New ADODB.Recordset
Call Visualizar_Datos

If Text1(2).Text = "" Then
Text1(2).Text = "Nopicture.jpg"
End If
Call Carga_Imagenes

Call Cargar_data(DataGrid1)
With DataGrid1
        .AllowUpdate = False
        .Width = 7800
        .Columns(0).Width = 2300
        .Columns(1).Width = 3600
        .Columns(2).Width = 1560
End With
End Sub
Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)
With Rs
If (.Sort = .Fields(ColIndex).[Name] & " Asc") Then
.Sort = .Fields(ColIndex).[Name] & " Desc"
Else
.Sort = .Fields(ColIndex).[Name] & " Asc"
End If
End With
End Sub

'Abre el formulario para Editar el registro seleccionado
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Editar()

    Dim i As Integer
    
    If DataGrid1.Row = -1 Then Exit Sub
    Call Visualizar_Datos
    Call Carga_Imagenes
        DataGrid1.Refresh
        
End Sub

Private Sub datagrid1_DblClick()
    Call Editar
End Sub
' Sub que carga los datos del recordset y los asigna a los textbox
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Visualizar_Datos()
 On Error Resume Next
  Text1(0).Text = Rs.Fields("Nombre")
  Text1(1).Text = Rs.Fields("Apellidos")
  If Text1(2).Text = "" Then Text1(2).Text = "nopicture.jpg"
  Text1(2).Text = Rs.Fields("imagen")
End Sub
' Sub que asigna los datos al recordset
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Asignar_Datos()
If Rs.EOF Then
Rs.MoveLast
End If
  Rs.Fields("Nombre") = Text1(0).Text
  Rs.Fields("Apellidos") = Text1(1).Text
  Rs.Fields("imagen") = Text1(2).Text
End Sub

' Limpia las cajas de texto
Private Sub clear()
  Text1(0).Text = "Nombre"
  Text1(1).Text = "Apellidos"
  Text1(2).Text = "Nopicture.jpg"
End Sub
  
Private Sub Carga_Imagenes()
On Error Resume Next
X = App.Path
Picture1.Picture = LoadPicture(X & "\picture\" & Text1(2).Text)
If Err Then
MsgBox "Se ha producido un error al cargar la Imagen. Esta la imagen en la carpeta?"
If Text1(2).Text = "" Then
Text1(2).Text = "Nopicture.jpg"

End If
End If

End Sub

Private Sub Cargar_data(Dg As DataGrid)
  Dg.MarqueeStyle = dbgHighlightRow
    Set Dg.DataSource = Rs
    Dg.Refresh
End Sub


Otros artículos sobre Visual Basic 6.0 que te pueden interesar:

Nos vemos en el próximo artículo, saludos!!!

domingo, 1 de septiembre de 2013

Velocímetro Gaugemeter con Visual Basic 6

Muy buenas a todos y todas!!!

Después de mucho buscar un velocímetro sencillo, he dado con un ejemplo el cual sirve perfectamente para la mejora que quiero hacer en el software de la maqueta.

Se trata de un sencillo programa donde dibujamos una linea (Line1) sobre una imagen (Picture1).

También dibuja unos puntos en arco en la imagen como un velocímetro.
Es lo más sencillo que he podido encontrar y modificar, sin necesidad de ningún OCX.



Espero que os sea de utilidad

Archivo: velocímetro.frm


VERSION 5.00

Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Form1"
   ClientHeight    =   2070
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   3555
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   2070
   ScaleWidth      =   3555
   StartUpPosition =   3  'Windows Default
   Begin VB.Timer Timer1 
      Left            =   720
      Top             =   3360
   End
   Begin VB.PictureBox Picture1 
      Appearance      =   0  'Flat
      BackColor       =   &H80000005&
      ForeColor       =   &H80000008&
      Height          =   1095
      Left            =   600
      ScaleHeight     =   1065
      ScaleWidth      =   2265
      TabIndex        =   1
      Top             =   240
      Width           =   2295
      Begin VB.Line Line1 
         X1              =   600
         X2              =   1560
         Y1              =   480
         Y2              =   1200
      End
   End
   Begin MSComctlLib.Slider Slider1 
      Height          =   615
      Left            =   360
      TabIndex        =   0
      Top             =   1440
      Width           =   2895
      _ExtentX        =   5106
      _ExtentY        =   1085
      _Version        =   393216
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
   Dim ejeX As Integer, ejeY As Integer
   Dim D_Conv As Double
   Dim mI As Integer
   Dim blnStart As Boolean
   
Private Sub Form_Load()
 Dim I As Integer
      Form1.Caption = "Velocimetro Infotronikblog"
      D_Conv = (Atn(1) * 4) / 180         'Pi 3.141593....
      Slider1.Max = 180                   'valor máximo de
      Slider1.TickFrequency = 10
      Picture1.Width = 2340
      Picture1.Height = 1170              'Creamos un rectangulo
     
      
    ejeX = Picture1.ScaleWidth / 2        'Calculamos el centro del eje X
    ejeY = Picture1.ScaleHeight / 1 - 50  'Calculamos la parte inferior del eje Y, y lo subimos 50
    
    Line1.X1 = ejeX
    Line1.Y1 = ejeY                            'centramos la linea en los ejes X Y
    Line1.BorderWidth = 3                      'Ancho de la Linea
    Line1.BorderColor = vbBlack                'Pintamos el Line1 de color negro
    Line1.X2 = ejeX + Sin(-90 * D_Conv) * 800  'Establece el punto final de X en el Line1
    Line1.Y2 = ejeY - Cos(-90 * D_Conv) * 800  'Establece el punto final de Y en el Line1
    Picture1.AutoRedraw = True                 'Ponemos la propiedad autoredraw del picture1 en verdadero
   
    For I = -90 To 90 Step 4                           'El "FOR" dibuja los puntos, el tamaño y el color
        Picture1.DrawWidth = IIf(I Mod 5 = 0, 5, 2)    'Crea los puntos del velocimetro
        Picture1.ForeColor = IIf(I Mod 5 = 0, vbGreen, vbBlack) 'Cambia los colores de los puntos del velocimetro
        Picture1.PSet (ejeX + Sin(I * D_Conv) * 1000, ejeY - Cos(I * D_Conv) * 1000)  'Dibuja los puntos del velocimetro
    Next
   
End Sub

Private Sub Slider1_Click()
         
 If Slider1.Value > 0 Then  'Si el valor del slider es mayor de 0 enciende el timer1
     Timer1.Interval = 10
     Timer1.Enabled = True
 Else
    Timer1.Enabled = False  'Si es False, lo apaga.
 End If
 End Sub
 
Private Sub Timer1_Timer()
    mI = Slider1.Value - 90
         Line1.X2 = ejeX + Sin(mI * D_Conv) * 800  '800 es el largo del Line1 en el eje X
         Line1.Y2 = ejeY - Cos(mI * D_Conv) * 800  '800 es el largo del Line1 en el eje Y
End Sub


Otros artículos sobre Visual Basic 6.0 qu te pueden interesar:

Un saludo!!!

jueves, 18 de julio de 2013

Comunicación Serial, transmitiendo datos PIC a Visual Basic 6

Muy Buenas a todos y todas!!!

Después de actualizar a la versión 1.1 del programa CDLA, ahora le toca el turno al programa en Visual Basic 6 para controlar las locomotoras desde el PC.

Este programa ya transmitía datos desde el PC al PIC, ahora lo que quiero que haga es que lea el control manual y muestre en la pantalla del ordenador los datos que envía el microcontrolador.

Para esto he utilizado el objeto MSCOMM1 que ya trae Visual Basic 6 con la instrucción "MScomm1.input".

Intentare explicarlo un poco y espero que sea comprensible:

Enviando datos desde PIC a VB6

Los datos que se mandan desde el microcontrolador PIC son transmitidos a una velocidad de 9600 bauds y cada variable va separada por ",":


include "modedefs.bas"   'Activa el modo de comunicación

Masterout var portc.6

Serout portb.1, N9600, [#variable1,#variable2,#variable3,"AK"]

* La variable 1 es una variable tipo BYTE que va desde 0 a 255
* La variable 2 es una variable tipo BYTE que va desde 1 a 8
* La variable 3 es una variable tipo BIT que va desde 0 a 1

Con serialComunicator de Mecanique nos mostrará en pantalla los datos en el siguiente formato:

010AK 010AK 010AK.... (Variable1 = 0, Variable2 =1, Variable3 =0, AK)

12831AK 12831AK 12831AK... (Variable1 = 128, Variable2 =,3 Variable3 =1, AK)

Esta es la trama de datos que se envían desde el microcontrolador PIC y que tendremos que decodificar en VB6.


Obtención de datos en VB6

Ahora, ¿como extraemos de esa maraña de caracteres los datos que nos interesan?

Para obtener los datos tenemos la función .Input de MScomm. con el adquirimos los datos del cual luego iremos desgranando dato por dato.

La rutina que vamos a utilizar esta dentro de un timer como podemos ver en el siguiente ejemplo:


Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim dataIn, tdataIn, Vel, total As String
Dim C, T, N, X As Integer   'cantidad, tipo, numero, valor

Private Sub Command1_Click()
  Timer1.Enabled = True
  MSComm1.PortOpen = True
  Command1.Enabled = False
  Command2.Enabled = True
End Sub

Private Sub Command2_Click()
  Command1.Enabled = True
  Command2.Enabled = False
  Timer1.Enabled = False
  MSComm1.PortOpen = False
End Sub

Private Sub Form_Load()
  Timer1.Enabled = False
  Command1.Enabled = True
  Command2.Enabled = False
End Sub

Private Sub Timer1_Timer()

  dataIn = MSComm1.Input
  If dataIn <> "" Then ' Si no es un texto vacio entonces...
    tdataIn = Len(dataIn)
    
    If tdataIn = 7 And Right(dataIn, 2) = "AK" Then
      Text2.Text = (Right(dataIn, 2))
      Text1.Text = dataIn
    
      Vel = Mid$(dataIn, 1, 3)
      total = ""
      For X = 1 To Len(Vel)
        If InStr("0123456789", Mid$(Vel, X, 1)) Then
          total = total & Mid(Vel, X, 1)
          N = total
        End If
      Next X
    
      dataIn = (Right(dataIn, 4))
      C = Left(dataIn, 1)
    
      dataIn = Right(dataIn, 3)
      T = Left(dataIn, 1)
    
      Text3.Text = C
      Text4.Text = T
      Text5.Text = N
    End If
  End If
End Sub

  • Text1: Lectura de toda la trama de datos enviados por el PIC.
  • Text2: Lectura de los caracteres de confirmación (AK).
  • Text3: Lectura de la Variable2
  • Text4: Lectura de la Variable3
  • Text5: Lectura de la Variable1


El tema de como sacar el los números de una cadena, viene muy bien explicado y con varios ejemplos en este magnifico foro de Visual Basic.


Espero que les sea de ayuda para entender como comunicar un microcontrolador PIC 16F628 o 16F876A con un sistema Visual Basic 6

Saludos a todos y todas!!!

domingo, 7 de julio de 2013

La Rueda del ratón en el IDE de VB6 en W7 y XP

Muy buenas a todos y todas! Si estas empezando con Visual Basic 6.0 y te encuentras con
el problema de que la comodísima rueda del ratón no funciona, tranquilo, la solución es mucho más sencilla de los que piensas.

Debido a su antigüedad para que funcione la rueda del ratón en VB6 necesitas descargarte el DLL que activa esta función, el DLL en cuestión se llama VB6IDEMouseWheelAddin.dll.

También vamos a necesitar registrarla y activarla en el IDE de Visual Basic 6.0 y esto lo conseguiremos con estos sencillos pasos:

  1. Descarga desde Github el repositorio que contiene VB6IDEMouseWheelAddin.dll, también he incluido un archivo llamado mousefixvb6.bat para hacer registro de una manera más sencilla y cómoda.

  2. Para evitar errores lo mejor es ser el administrador de tu sistema, si no lo eres puedes usar el siguiente truco: Reinicia el sistema y pulsa F8 para entrar en modo seguro, Windows se cargara pero con el sistema básico pero el suficiente como para realizar las acciones necesarias para este tutorial.

  3. Ahora solo tienes que copiar los archivos VB6IDEMouseWheelAddin.dll y mousefixvb6.baten el directorio raíz C:\ y ejecutar cmd. Normalmente aparecerás en C:\WINDOWS , escribe cd.. y te aparecerá C:\ . una vez ahí escribimos: mousefixvb6.bat .

  4. Después de esto abrimos Visual Basic y vamos a las opciones de Complementos buscamos la propiedad MouseWheelFix y verificamos que en el apartado comportamiento de carga queden las dos primeras opciones como validas, esto hace que se cargue la rueda cada vez que se inicia VB6.

Con esto ya podemos utilizar la rueda del ratón en VB6. También podemos registrar manualmente el DLL. Para el registro manual solo tenemos que escribir en la consola CMD.exe:


regsvr32 C:\vb6IDEMousewheeladdin.dll

Pero tenemos que asegurarnos que el DLL está en el directorio raíz C:\

Un error muy común es que no os deje registrar la librería porque no sois el administrador. Esto pasa sobre todo en Windows 7 que es mucho más restrictivo que su antecesor XP.

Un Saludo!!!

martes, 16 de octubre de 2012

Control de Locomotoras DC con VB6 y PBP

Muy buenas a todos y todas los amantes de la programación y los trenes a escala!!!

Ya tengo preparado el control para las locomotoras de los tres circuitos que componen mi maqueta.

Realizado en Visual Basic 6, controla 3 locomotoras o 3 circuitos independientes, con todas sus funciones, Avance, Retroceso y Parada.

Control de velocidad hasta 127 pasos. Subida y bajada progresiva de velocidad independiente y parada de emergencia.

El manejo de cada locomotora es totalmente independiente con una parada de emergencia común para todas.

Todas las funciones son configurables: Tiempos entre pasos en las detenciones y cambios de sentidos, tiempo entre pasos de la subida y bajada progresiva con su velocidad máxima independiente.

El programa también controla hasta 7 desvíos. Los desvíos están ordenados para mi maqueta, en mi caso 5 desvíos y 2 auxiliares, que pueden ser desvíos o luces o lo que se quiera.

Las comunicaciones corren por parte del puerto COM, y puedes configurar el puerto y la velocidad de transmisión del puerto serial.

El receptor de todos estos datos es un PIC 16f876A, bueno en este caso de dos, un master, que es el que recibe toda la información y la reenvía a otro 16f876A.

Esto es gracias a sus 2 salidas HPWM y un PWM aparte, controlan la velocidad de las tres locomotoras.

PIC Master 16f876A

  • Recibe los datos desde el PC a 9600 baudios y los reenvía al PIC secundario en modo PC.
  • Recibe los datos del secundario y los muestra en la pantalla en modo Manual.
  • Pantalla LCD 16x2 donde se muestra la velocidad y los desvíos.
  • Teclado para el control manual.
  • Salida para 7 desvíos

PIC secundario 16F876A

  • Recibe los datos del PIC principal en modo PC
  • Envía datos al PIC principal en modo manual
  • Controla los 3 relés para el cambio de dirección
  • Controlas las 3 salidas PWM (2 HPWM y 1 PWM)
  • Pequeño teclado de 2x3 para el control de dirección
  • 3 Potencíometros para el control manual

En los esquemas en proteus, la mayoría de motores y relés los he sustituido con LED´s y en el programa en PBP están comentadas las lineas que se refieren al HPWM y PWM porque al hacer la simulación hacían que mi portátil parezca una tostadora.

En la aplicación practica es el mismo que tengo montado en mi maqueta funciona muy bien.

Los desvíos son movidos por un integrado ULN2003.

El modulo de tracción corre a cargo de 3 transistores de tipo Darlington TIP110.

Esto da un resultado de paradas y arranques bastante suaves y se mantiene muy bien con las locomotoras a bajas velocidades.

Todo esto esta hecho en placas individuales:

Para poder incluir otro tipo de circuitos y en caso de rotura poder sustituir los componentes de una manera cómoda.


Les mantendré informados de las próximas novedades!!! Saludos!!!

viernes, 25 de mayo de 2012

Mis programas imprescindibles !!!

Esta entrada se me ha ocurrido porque he tenido que formatear y volver a instalarlo todo otra vez... Esta es una tarea algo tediosa y aburrida, de hecho la hago a ratos.

Primero lo mejor para no tener sustos es hacer un BACKUP de todo lo que sea importante para nosotros. En mi caso poco, ya que este ordenador solo lo uso para navegar y programar, para ver películas, guardar fotos y todo eso uso el de casa que es más potente.

Empecemos:

Un windows XP de modo desatendido. Es lo más rápido y fácil. Lo mejor (si dispones de otro pc) es simularlo con algún programa como Virtual Box. La mayoría viene con un montón de programas tipo VLC, Codec´s, CCleaner, y algún antivirus. Los podéis encontrar en CD y DVD, normalmente vienen en formato .ISO. En mi caso prefiero los CD, hay menos posibilidad de malware. Bien una vez lo tengas comprobado pasas a copiarlo en su correspondiente formato con algún programa como Nero.


Con la instalación limpia y todos los Drivers de tarjetas y vídeo, lo primero es un antivirus, Avast! antivirus es el que utilizo y no me da problemas. Otro muy recomendable es NOD32. Tampoco estaría de más algo como Ad-Aware free y Spyboot Seach &amp;amp; Destroy.

Y aquí empieza la "chicha".El orden es lo de menos, así que empezaremos:

Microcode Studio de Mecanique


Es el editor de código para Pic Basic Pro, entre otras cosas resalta el código con ayuda contextual. También resalta todos los define, los alias, variables y modificadores. También permite el cortar, pegar, deshacer, búsqueda etc.
Al compilar también identificará y corregirá los errores y tiene soporte para MPASM.


Proteus 7 Profesional

Proteus es una potente herramienta para simular circuitos electrónicos tanto digitales como analógicos, con el puedes crear proyectos sencillos como apagar y encender un LED o simular los programas que crees con  Microcode Studio.

Para mi este tipo de software es imprescindible ya que con el se ahorra gran cantidad de tiempo, ya que con unos simples clics podremos simular casi cualquier circuito. Entre otras cosas Proteus incluye, Microcontroladoes, pantallas LCD, osciloscopio, conexión con puerto COM, LPT;


Virtual Serial Port Driver de Eltima Software


Virtual serial Port, es una sencilla herramienta para simular pares de puertos COM.
Tiene compatibilidad completa con el control de HandFlow (hardware y Xon/off),
También tiene diferentes configuraciones como estandar, bucle o personalizado.
Los puertos una vez configurados se vuelven a crear al reiniciar el sistema
Este programa es casi imprescindible si estas trabajando con Proteus y Visual Basic sobre todo si estas probando la comunicación con el puerto COM.

Descargar Virtual Serial Port de Eltima Software


Visual Basic 6.0 (Visual Studio 6)

Visual Studio 6 es la ultima versión de basic que no trabaja sobre .NET y la ultima en correr en un windows 9x. También es la ultima versión en incluir Visual Basic basado en component objet model y aunque las versiones posteriores incorporan una versión muy diferente del lenguaje con muchas mejoras (fruto de la plataforma .NET), para empezar y como lenguaje más bien simplón, podremos hacer casi cualquier programa que imaginemos.
Aunque si lo que quieres es aprender programación creo que seria mejor que empezaras con C o Phyton, en mi caso y al ser por hobby, con Visual Studio 6 obtengo muy buenos resultados.

Inkscape

Inkscape, es un editor de gráficos vectoriales de código abierto, con capacidades similares a Illustrator, freehand, CorelDraw, usando el estándar de la W3C. El formato de este programa es SVG (Scalable Vector Grafic). Inkscape también soporta meta-datos Creative commons, edición de nodos, capas, operaciones complejas con trazos, vectorización de archivos gráficos, texto en trazos, alineación de textos, edición de XML directo y mucho más. Puede importar formatos como Postscript, EPS, JPEG, PNG y TIFF y exporta PNG así como otros formatos basados en vectores.


Descargar Inkscape ultima versión estable 0.48.2-1 

Lamentablemente y debido a como están las cosas, solo pongo los enlaces oficiales de los programas, ya que los demás son para uso personal podéis encontrarlos todos por las vías normales como torrent o e-mule e incluso en Taringa.

Espero que esta lista de programas os sean de ayuda, espero poder ampliarla con enlaces próximamente!!

Un saludo!!

lunes, 21 de mayo de 2012

Cambiando a bootloader tinybld198

Después de llevar utilizando un tiempo el bootloader Screamer-v1.4, la verdad me fue muy bien hasta que comencé a trabajarlo con un LCD 16X02. En ese momento empezó a darme un error y no había manera de poder pasar al Pic el programa mediante este bootloader. Decidí buscar otro... y lo encontré!!! Se llama Tiny PIC bootloader.

Pues bien con este bootloader este error desaparece, bueno realmente no desaparece del todo. Tiny bootloader detecta este problema y lo repara. si, así de fácil.

El error tiene algo que ver con GOTO que al compilarlo se pone donde no debe, o eso entendí yo cuando estuve buscando información.



Bien por el momento voy a seguir utilizando este con el PIC 16f876A a 20Mhz aunque tengo que mirar la manera de hacerlo funcionar a 4Mhz, ya que tengo un par por ahí y me gustaría aprovecharlos también.

En la carpeta \picsource\ vienen los .hex para los diferentes microcontroladores.
Para el 16F876A a 20Mhz estoy utilizando el archivo tinybld_16F876A_20MHz.HEX  con una velocidad de transmisión de 115200 Baudios y por el momento estoy muy contento con el resultado.

TinyBootloader lo puedes encontrar en la sección de descargas o en la pagina del autor.

Un Saludo!!

By PeYuTrOn

jueves, 8 de diciembre de 2011

BrutusShutdown 1.2

Ya esta disponible la nueva versión para BrutusShutdown. BrutusShutdown 1.2 añade las opciones de reiniciar y suspender.

La opción "Suspender" es muy útil sobre todo en portátiles.


Descargar BrutusShutdown 1.2

By PeYuTrOn

martes, 4 de octubre de 2011

Comunicación PC con PIC con MAX232

Buenas a todos y todas!!!

Revisando el blog, me he dado cuenta que no he explicado como conectar el Max232 para la comunicación entre el PC con el microcontrolador.

Para este tipo de comunicaciones vamos a utilizar el puerto serial del PC o mejor conocido como puerto COM.


Para realizar la conexión solo necesitamos 3 pines de los 9 que tiene el puerto serie con conector DB-9 estos pines son:

  • Pin 2: RX Es el pin por el cual el PC recibe los datos que le enviamos desde el Pic.
  • Pin 3: TX Es el pin por el cual el PC manda los datos al Pic.
  • Pin 5: Es GND, este tiene que ser común con el GND del Pic

Los demás pines no se utilizan para el Max232.



Y esta es la conexión que tenemos que realizar para que nuestro Max232 funcione correctamente.

Normalmente los condensadores C1, C2, C3 y C4 son de 1uF. Pero cuando lo probé no me funciono pero al cambiarlos por los de 10uF funciono correctamente.

A mi así me funciona al 100%.

La alimentación del MAX232 va desde los 4.5V hasta los 5,5V con un consumo de 8mA.

Al tener un consumo tan reducido lo podemos conectar directamente a la fuente regulada de 5v que utilicemos para la alimentación del microcontrolador.

Con este componente simple y barato (el último que compre no llego a 1€) y unos pocos condensadores, podemos conectar el PC al PIC y viceversa. Este lo tengo en el Bootloader con un 16F876A, aunque también lo he utilizado en comunicaciones por RF y cable con un 16F628A.

Otros artículos sobre programación con microcontroladores MicroChip que os pueden interesar:

Saludos a todos y todas!!!

sábado, 16 de julio de 2011

Entrada de osciloscopio con PC y tarjeta de sonido

Muy buenas a todos!!

Esta vez me ha dado por hacer una herramienta que seguro sera muy útil a más de uno se trata de una entrada para osciloscopio en PC.

Hoy la he probado y bueno, no tengo ni idea de como se usa... pero le he conectado un 555 con pwm para probar.

Después de unos momentos de tensión (no me fiaba mucho) ha salido algo en la pantalla y tocando aquí y allá pues al final si que he conseguido ver algo.

Como he dicho no lo he usado en la vida, así que ahora me toca tomar nota de como se utiliza el osciloscopio y como se le puede sacar partido con los microcontroladores PIC o más actualmente con Arduino.

El circuito original es este:

Lo he sacado de un post de este foro y es para aprovechar la salida estéreo de la tarjeta de sonido.

Como solo voy a usar un canal, le hemos hecho unos cambios al circuito y ha quedado así:

Porque la verdad me daba igual que fuera estéreo... primero a ver como funciona en mono y luego ya actualizamos!!!

El único cambio ha sido la resistencia variable de 5K, como no tenía con ese valor, hemos puesto una de 4K7.

Funcionar funciona lo he probado con Winscope y Soundcard Scope de Christian Zeitnitz (Versión 1.40 en español) el ordenador es un 433 a 256MB de memoria ram y una tarjeta de sonido de 16 bits PCI que tenia por ahí.

No pongo capturas porque lo he terminado tarde y no me ha dado tiempo ya que las pruebas las hago en otro PC que no tiene conexión a nada.

Saludos!!!

sábado, 9 de julio de 2011

Arduino: El documental

He encontrado un documental sobre Arduino, había escuchado algo sobre  este documental, pero no había profundizado mucho en el tema. 

Así que ahora toca darle un vistazo a todo lo relacionado con Arduino su historia y sus virtudes.

sábado, 2 de julio de 2011

Coche RC VB6

Muy buenas a todos y todas!!!

Aprovechando software que ya tenia por ahí y haciendo unas pocas modificaciones, a salido este programa para controlar un coche RC vía puerto COM con Visual Basic 6. Algo que, sin duda, junta lo mejor de ambos mundos, programación y RC.

Me ha llevado un par de días ya que aun sigo aprendiendo pero ya esta terminado y funcionando 100%.


Coche RC Visual Basic 6

Fácil de configurar también utiliza el DTR - RTS por si necesitamos alimentar algo con los 5V que salen del puerto COM teniendo cuidado de no meter mucha carga como ya explique en otro post llamado Activar DTR RTS Visual Basic


En la configuración se puede cambiar el puerto de comunicaciones COM que queramos y cambiar el modo de transmisión.

La configuración del joystick es también sencilla, podemos buscar el joystick y definir la velocidad del mismo.

Es un programa sencillo y fácil de entender para quien quiera aprender un poco de programación y electrónica.



Otros artículos sobre Visual Basic 6.0 que te pueden interesar:

Saludos a todos!!!

sábado, 5 de marzo de 2011

Veotutoriales

Después de darme cuenta de que muchos amigos consultan tutoriales online, normalmente de Youtube, me he decidido a crear veotutoriales.blogspot.com.

Principalmente estoy subiendo videos relacionados con programas informáticos y electrónica, pero ahora mismo estoy empezando y no descarto ampliar los temas, así que estoy abierto a sugerencias.

Los más completos son:

By PeYuTrOn

domingo, 6 de febrero de 2011

LCD 16x2 para PC por LPT1

LCD 16x2 para PC por puerto LPT1

Muy buenas a todos y todas!!

Este es un proyecto que llevaba tiempo en el tintero para darle añadir un pequeño gadgets que es muy sencillo y puede estar listo y funcionando en el ordenador en menos de un par de horas.

Bueno lo primero es tener los materiales, todos fáciles de conseguir y que no superan los 15€ (a mi me ha salido por unos casi 0€ ya que menos la pantalla (y el ordenador) todo lo demás es reciclado y la pantalla ya la tenia y me salio por unos 3€ o 4€.

Materiales:

  • Pantalla LCD 16x2 compatible HD44780
  • Conector DB25 Macho
  • Resistencia variable 10K
  • Resistencia variable 100 ohm
  • Conector tipo molex para fuente de PC

Bien una vez que tenemos todo lo necesario, toca ponerse manos a la obra con las conexiones, el esquema que he seguido es el siguiente:



El original lo saque de Neoteo pero le he modificado la patilla de R/W conectándola directamente a masa, ya que esta patilla se utiliza para la lectura/escritura del LCD.

Cuando la conectamos a GND ponemos el LCD directamente lo habilitamos para escritura. En el original va conectado a la patilla 14 del DB25.

Fotos del Montaje:

Esta es la pantalla LCD 16x02 compatible con HD44780 que he utilizado


Primero recorte el frontal de plástico del PC con unos orificios para meter los potenciómetros, yo utilice de los pequeñitos que no llevan "mango" no por nada en especial solo que era lo que tenia a mano.

Después de recortar comprobar que todo encaja bien y que esta bien centrado, di por terminada esta pieza que es casi la mitad del trabajo.


Este es el aspecto del LCD con sus soldaduras hechas, 11 lineas en total para el puerto LPT1 y 2 para alimentación (+5V y GND)

Aquí ya esta todos los componentes montados, el conector DB25 y el conector tipo molex para la alimentación a +5V (en mi fuente el cable de color ROJO) y la toma de GND.

Solo falta de ponerle un adhesivo para que quede mas bonito.

LCD 16x2 para PC por puerto LPT1


Y este es su aspecto una vez terminado y puesto en su sitio.

Bueno después de montarlo necesitamos el software para hacerlo funcionar junto con el sistema operativo, para esto estoy utilizando el programa LCD Smartie 5.4.1 con soporte para para Windows 7.

También sigo investigando que más hay por ahí más programas para el LCD y pongo una lista de programas y plugins.

Saludos!!!!

domingo, 24 de octubre de 2010

Peyutsubot 2.4 Beta

Saludos a todos!!

Este es el programa que llevo desarrollando y mejorando desde hace un tiempo.
Por el momento esta en construcción, pero espero tener algo un poco más serio dentro de poco.
Bueno echarle un vistazo y a ver que os parece!!


Este es el enlace con el instalador y el programa en PBP.

Saludos!!

By PeYuTrOn

lunes, 13 de septiembre de 2010

B-Trainer con oruga cebek C-6083

Bueno ya era hora de ir juntando los "cacharritos" jejejeje y la verdad ha quedado bastante bien, aunque sigo trabajando en ello (ahora le estoy haciendo su propio circuito)

En principio es bastante básico y encontrareis multitud de videos de orugas/tanques en youtube o similares, el sistema de oruga es el mismo que el de uno de mis anteriores post aunque un poco modificado (ahora es más estrecho).

Para esto he necesitado de algunos de mis circuitos que a tenia hechos como el max 232 y el del transmisor Rf 433 para conectarlos al pc y mandar la señal. Se controla desde un programita (siempre en evolución) hecho con Visual Basic.

Seguramente dentro de poco lo publicare a ver si os gusta y si alguien sabe como depurarlo, pues no me vendría mal un poco de ayuda. También lleva una mini camara que se puede ver en el mismo programa de VB aunque en el video no aparece, es totalmente funcional.

Y bueno este es el resultado:

Saludos!!