DLP-IO8 - Digitaal input signaal uitlezen

Stel hier je overige vragen over elektronica als ze niet in bovenstaande passen.
Plaats reactie
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

DLP-IO8 - Digitaal input signaal uitlezen

Bericht door tdp-murdock »

Gegroet :)

Voor mijn andere probleem ben ik erop uitgekomen om de volgende usb interface te gebruiken :

DLP-IO8 ( http://www.dlpdesign.com/usb/io8.shtml )

nu zit er bij deze interface geen DLL file om de input signalen makkelijk uit te lezen, zoals bvb bij de velleman kits. Op mijn vraag aan hen hoe ik dan wel makkelijk de inputs kan uitlezen kreeg ik dit antwoord :
___
No DLL is required. You simply open a COM port, set the baud rate and start sending single byte commands. The USB drivers make the DLP-IO8 look like an RS232 port.
____

Heeft hier iemand ervaring mee? kan ik die signalen makkelijk importeren in een VB6 programma?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Als je de Visual Basic 2005 .net editie gebruikt dan kan je de ingebouwde com module gebruiken. Als je wil kan ik wel wat code posten hoe je die gebruikt.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

dat mag je zeker doen aub! dat zou me een pak vooruit helpen...

met vb6 kan het niet , of?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Ok, dan post ik morgen (euhm straks kijkend naar de klok :p) wat code.

Bij vb6 zit die module niet erin dus kan het niet.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Eerst zet je een serialport bij je form:
<img src="http://www.elektronicastynus.be/ef/inde ... ort_vb.JPG">
Ik heb die dan mijn compoort genoemd.

Dan dit in de formload (of waar de seriële poort geopend moet worden zetten)

Code: Selecteer alles

        Control.CheckForIllegalCrossThreadCalls = False

        Try
            With mijncompoort
                .PortName = "COM1"
                .BaudRate = 2400
                .DataBits = 8
                .ReadTimeout = 1000
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
            End With
            mijncompoort.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
Dan kan je deze code gebruiken om data binnen te halen:

Code: Selecteer alles

    Private Sub mijncompoort_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles mijncompoort.DataReceived

        ontvangenTekst = mijncompoort.ReadExisting()
        TextBox1.Text &= ontvangenTekst

    End Sub
En voor data te verzenden:

Code: Selecteer alles

mijncompoort.Write(Data)
(met op de plaats van data de variabele die je wil sturen.[/code]
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

mooi mooi :) nu enkel nog die versie van vb vinden :)
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

Hoi, ik heb vandaag eindelijk de werkende modules om dit in rpaktijk te gaan omzetten binnen gekregen, nu kan ik via het testprogramma van de dlp-usb interface wel de ingangssignalen zien, maar krijg ze niet in vb met de serial port component, waarschijnlij doe ik iets verkeerds...de methode die hierboven staat heb ik geprobeerd, maar lijkt niets te doen?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Post je code enzo is. Dan kunnen we kijken wat er fout is.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

wel, kheb die van hierboven geprobeerd,

Code: Selecteer alles

 
Private Sub test()
        Control.CheckForIllegalCrossThreadCalls = False

        Try
            With Input2
                .PortName = "COM4"
                .BaudRate = 115200
                .DataBits = 8
                .ReadTimeout = 1000
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
            End With
            Input2.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try



    End Sub

    Private Sub mijncompoort_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived

        Dim ontvangentekst As String

        ontvangentekst = Input2.ReadExisting()
        TextBox1.Text &= ontvangentekst

    End Sub



en ook deze:

Code: Selecteer alles

   Private Sub serialporttest()
        ' Open een nieuwe verbinding via RS-232:
        Dim xCom As New System.IO.Ports.SerialPort("COM4", 115200, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One)
        xCom.Open()

        ' Vraag de digitale input op (0x41):
        xCom.WriteLine("A")
            String iReturnValue = halo.ReadLine();

        ' Sluit de verbinding:
        xCom.Close()
    End Sub
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

doe ik zometeen
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

ok, ik ben er bijna geraakt, met deze code: (merci stynus!)

Code: Selecteer alles

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.CheckForIllegalCrossThreadCalls = False

        Try
            With Input2
                .PortName = "COM4"
                .BaudRate = 115200
                .DataBits = 8
                .ReadTimeout = 1000
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
            End With
            Input2.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Code: Selecteer alles

    Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Dim ontvangenTekst As String
        ontvangenTekst = Input2.ReadExisting()

        Label1.Text = ontvangenTekst

    End Sub
nu ik kan pas iets binnenhalen als ik eerst een code stuur naar mijn toestel , om de eerste uitgang uit te kunnen lezen, moet ik "A" sturen, zo dus:

Code: Selecteer alles

 input2.Write("A")

, maar waar zet ik deze lijn best, ik had em in de formload gezet, maar dan leest hij enkel als ik het programma opstart, ik had em dan in een timer gezet, maar dan las hij dus elke seconde een nieuwe (ook dezelfde) waarde in. ik wil slechts iets met de "1" of de "0" doen als deze veranderd. dus zolang de input dezelfde is zou er niks mogen gebeuren...

wie kan me helpen?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Dan moet je in je microcontroller steken dat die alleen stuurt bij verandering.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

oei, is er geen mogelijkheid om dat via visual basic te doen, want m'n microcontroller is geprogammeerd door de firma die mijn zender/ontvanger units hebben gemaakt...
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Nee want vb kan niet weten of er iets verandert tenzij hij het met dat commando aan die microcontroller vraagt.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

kheb nu zoiets geprobeerd:

Code: Selecteer alles

    Private Sub input2_DataReceived(ByVal sender _
        As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
        Handles Input2.DataReceived
        Strinput2 = Input2.ReadExisting()

    End Sub



    Private Sub controlbases()
        If Strinput2 = 0 Then
            Timer1B.Stop()
            Timer1A.Start()
            LblBase1.BackColor = Color.Red
        Else
            If Strinput2 = 1 Then
                Timer1A.Stop()
                Timer1B.Start()
                LblBase1.BackColor = Color.Blue
            End If
        End If
    End Sub
maar krijg steeds volgende foutmelding:
De conversie van tekenreeks naar type string is ongeldig.

ook als ik "strinput2" boolean, single, long of weet ik veel wat maak geeft ie deze conversiefout, ik vermoed dat dat is omdat hij de nieuwe gegevens die het programma binnen haalt gewoon bij i die string schrijft, ipv hem telkens te overschrijven met een "1" of een "0", zou dat kunnen? en hoe kan ik ervoor zorgen dat de warde die binnenkomt wordt opgeslagen in een string of iets dergelijks, en dus overschreven wordt telkens een nieuwe "1é of "0" binnenkomt?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

is die strinput2 wel ergens gedeclareerd?
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

ja, die heb ik al op duizend manieren getracht te declareren, als string, boolean, variant, double, ... hij blijft op een klein puntje hangen, verdorie, kben zo kort:)
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

je zal een string moeten gebruiken.

Ofwel dit om het on te zetten naar een byte:
variable = asc(Input2.ReadExisting)
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

cool, tziet ernaaruit dat dit het is... effe verder testen, maar dit blijkt ogenschijnlijk te lukken...

op tig van fora naar oplossingen gezocht, en nergens een oplossing gevonden, maar dit lijkt me te gaan werken!
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

ollrightie, looks good so far, alsk nu een 2e uitgang van m'n device wil lezen, stuur ik dan via dezelfde virtual port een command?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Ja

En het antwoord krijg je ook dan via de zelfde data received sub.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
tdp-murdock
Berichten: 27
Lid geworden op: zo 27 jan 2008, 22:09

Bericht door tdp-murdock »

ai, das wel lastig, hoe kan ik dan de 2 van elkaar onderscheiden?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

als je je "datarequest" stuurt naar je µC dan zet je in een globale variabele welke data je hebt gevraagd.

Dan in datarecived ga je eerst de data ontvangen en dan kijken wat het is en daar dan een actie mee doen.
Dat kijken welke kan je denk ik best met een case structuur.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
Plaats reactie