Hallo,

Ik heb in JAL (Just Another Language) o.b.v. het boek van Bert Van Dam van elektor een programma gemaakt voor PIC18F4550. Het programma stuurt de analoge waarden door via usb met RS232 emulatie. (CDC RS232 emulation demo)
De gegevens ontvangen (en verzenden) verloopt probleemloos via HyperTerm.

Nu wou ik hiervoor een programma maken in Visual basic. Ik heb reeds programma's gemaakt om via de gewone COM poort te communiceren met PIC's, maar als ik dit hiervoor op dezelfde manier doe, werkt het niet.

Wat moet er hiervoor anders gedaan worden?
Of wat moet ik in Visual Basic als instellingen gebruiken (zoals bv. de baud rate: in HyperTerm maakt het niet uit wat je daarvoor invult)

Met vriendelijke groeten,
Tom Bleeser

Op 31 augustus 2016 17:57:05 schreef elektronica:
Nu wou ik hiervoor een programma maken in Visual basic. Ik heb reeds programma's gemaakt om via de gewone COM poort te communiceren met PIC's, maar als ik dit hiervoor op dezelfde manier doe, werkt het niet.

Als je het al een keer werkend gehad hebt via Visual basic over je compoort, dan zou je het via een Max232 kunnen doen. Maar dan moet je wel je programma iets aanpassen en bijv. RSin_Pin en RSout_Pin of Hserin en Hserout gebruiken. Ik weet alleen het commando niet voor JAL.

Ik heb mij misschien verkeerd uitgedrukt, maar wat ik bedoelde is:

-Situatie 1: Wat ik werkende gehad heb, was communicatie via de échte fysieke COM poort van mijn pc (via visual basic) en de PIC. Dit was inderdaad met een MAX232.

-Situatie 2: Wat ik nu wil doen is om de PIC via usb te laten communiceren met mijn pc. Het programma in de PIC is in orde, als ik de PIC insteek in de pc, zie ik een extra virtuele COM poort staan (COM7). Wanneer ik op mijn pc het programma HyperTerm gebruik, kan ik vlekkeloos communiceren met de PIC.
Wat ik nu wil doen is HyperTerm vervangen door een zelfgemaakt programma in Visual basic. Wanneer ik hiervoor hetzelfde Visual basic programma gebruik als in situatie 1 (en dan COM7 selecteer), werkt dit niet. Wat moet ik hiervoor aanpassen in de instellingen van visual basic?

En wat is bijvoorbeeld de baud rate die ik daarvoor in visual basic moet gebruiken? In Hyperterm maakt het niet uit welke baudrate je kiest.

Ik weet niet zeker of VB met virtuele COM poorten overweg kan?

Op 31 augustus 2016 19:43:05 schreef elektronica:
-Situatie 1: Wat ik werkende gehad heb, was communicatie via de échte fysieke COM poort van mijn pc (via visual basic) en de PIC. Dit was inderdaad met een MAX232.

Dit heb ik dan verkeerd begrepen. :)

Wat ik nu wil doen is HyperTerm vervangen door een zelfgemaakt programma in Visual basic. Wanneer ik hiervoor hetzelfde Visual basic programma gebruik als in situatie 1 (en dan COM7 selecteer), werkt dit niet. Wat moet ik hiervoor aanpassen in de instellingen van visual basic?

Moet je dan niet gewoon een USB protocol maken in VB?

voor VB zal de baudrate ook niet heel veel uitmaken.

als het goed is weet VB helemaal niet welke hardware er aan een poort zit, VB praat gewoon tegen een device. en of dat dat op een PCI of USB bus zit wil je helemaal niet weten.

maar als je VB6.0 of een oude vb.net kan het zijn dat je component er niet mee overweg kan. dan kan je opzoek naar een modern component, ofdirect de windows api's moeten gebruiken, of een nieuwere omgeving moeten vinden.

welke windows versie gebruik je, welke VB versie, en welk component.. (mscomm kan je sowieso vergeten)

[Bericht gewijzigd door Progger op (10%)]

Ik gebruik visual basic 2008 express edition.
Bij apparaatbeheer staat COM7 (de virtuele) gewoon bij COM1 en COM2 (de fysieke COM poorten). Maakt het voor visual basic dan toch zoveel verschil of het een virtuele of fysieke COM is?

Oudere software kan vaak direct alleen met 'echte' COM poorten werken. Virtuele kan wel, via de Windows API's

En hoe gebruik ik die Windows API's?

dat is een lastige.

vertel eerst eens hoe je nu werkt. welk object roep je aan?

probeer dit voorbeeld project eens:
https://code.msdn.microsoft.com/windowsdesktop/COM-Port-Sample-0c3f254…

[Bericht gewijzigd door Progger op (48%)]

Bedankt, ik zal het straks eens uitproberen.

Hoe ik het nu doe is door in visual basic in de grafische interface te kiezen voor "SerialPort". En dan moet je enkel nog baudrate enzo instellen. Dat werkte perfect met de echte fysieke COM poort.

Wat als je de oude configuratie gebruikt maar ipv de vaste com poort een FTDI USB-serial omzetter. Bijvoorbeeld deze.

Dat werkt, progger! Bedankt!

Alleen heb ik nog niet helemaal begrepen hoe je gegevens moet ontvangen. Nu doe ik dit:


        aant = CommPort.Read(3)
        Dim a() As Byte
        a = CommPort.InputStream

        For teller = 0 To a.Length - 1
            TextBox2.Text = TextBox2.Text & a(teller) & " "
        Next
        CommPort.ClearInputBuffer()

Hoe kan ik de volledige input buffer inlezen?

Dat doe je al.

For teller = 0 To a.Length - 1 => a.Length is de hoeveelheid karakters die in je input buffer zitten.

In dat visual basic project zat al een timer voor gegevens van een modem te ontvangen, maar daarmee kan je ook gewoon gegevens ontvangen. Dat had ik nog niet gezien.

Dan werkt alles wat ik wou doen!

Enorm bedankt allemaal!!