Jump to content
ELFORUM - Forumul electronistilor
gsabac

Comunicatii USB HID, Scriere-Citire cu PIC18Fxxxx si Visual Studio C# sau Basic

Recommended Posts

Comunicatia intre un aparat construit cu PIC si un PC, se face comod prin porturile calculatorului de tipul COM, LPT sau USB.

Comunicatia COM este extrem de facila si codurile scrise in VB6, VS2010 C# sau VS2010 Basic sunt simple si functioneaza

pe toate sistemele de operare 98, XP, W7, W8. Deasemenea si codurile MikroC sau mikroBasic raspund la comunicarea

cu PC-ul, atit fizic cit si virtual prin IDE-ul Proteus. Nu este nevoie de nici un driver auxiliar si am reusit cu usurinta acest

tip de comunicatie bilateral PIC-PS.

 

Comunicatia cu portul LPT, daca PC-ul are acest tip de port, se face prin intermediul unor driveri specializati.

Acestia sunt specializati pe sisteme de operare si necesita licentiere. Sunt si nenumarate drivere demo, utile pentru studiu,

care au limitari de viteza si dupa citeva minute scot o pagina in care te invita sa il cumperi.

 

Comunicatia USB se face prin intermediul unor driveri de tipul HID (Human Interface Device).

Recunoasterea aparatului cu PIC este automata si se evidentiaza prin sunetele caracteristice de conectare si deconectare.

Programele scrise in limbaj C# sau Basic cu Microsoft Visual Studio, au o mare popularitate si utilitate pentru comunicatia

cu PC-ul, prin simplitatea codurilor, autocorectia editarii si indicatii interactive in timpul excutiei, facilitati care rezolva

cele mai complicate si diverse situatii. Am studiat sute de exemple cu nenumarati driveri HID cu XP sau W7 si am

obtinut rezultate doar in W7 cu un driver "demo" numit "EasyUSBHidNetClass.dll" free. Programul "demo" pentru PIC

si pentru Visual Studio le-am luat de pe situl Mikroe si au aparut in ultimii ani.

Bazat pe ele si pe Visual Studio am realizat un mod de comunicare USB dintre PIC18F2550, PIC18F4550

sau PIC18F87J50 si un program de comanda din PC. Scopul este realizarea de aparate mai complexe, de tipul osciloscop,

generator de audio su RF, sweeper, etc.

 

Topicul este destinat comunicatiilor PIC-PC si este de dorit prin intermediul aplicatiilor verificate, functionale
care sa fie intradevar de folos tuturor userilor interesati. Deasemenea datele postate ar fi corect sa fie "free",

"open source" cu toate detaliile necesare.

In poza este aplicatia pentru un generator comandat prin PC. Codurile sunt "free", dar modul de folosire al lor

se poate face treptat prin expuneri detaliate, care sa duca la succes. Apreciez ca este nevoie de un nivel

mediu de cunostinte necesar programarii pentru PIC si PC.

 

@gsabac

post-238209-0-29996000-1493025156_thumb.jpg

Edited by gsabac
Link to comment
Share on other sites

Comunicatii virtuale COM si USB

 

Pentru comunicatia virtuala cu simulatorul se pot folosi programe de firma iar rezultatele sunt afisate direct pe aplicatia de comunicatie

Cu acest mod de comunicare se pot testa scheme electronice mai simple sau chiar complexe prin transmiterea de date la microcontroller

si verificarea raspunsului prin intermediul programului de comunicare virtuala.

Pentru comunicarea virtuala seriala COM, RS232 se poate folosi programul VSPE (Virtual Serial Port Emulator) iar pentru legatura fizica directa,

un cablu de interconectare.

Programul se poate descarca de aici: http://eterlogic.com

Se alege Virtual Serial Port Emulator->Download si se ruleaza setup-ul pe PS. Cu ajutorul sau se poate face legatura intre un program personal

de comunicatie de pe PC si schema din Proteus, care la rindul

sau foloseste fisierul “hex” creat in diverse programe cu diverse limbaje de programare.

post-238209-0-83543000-1493469514_thumb.jpg

Dupa cum se vede, programul arata ca a initializat comunicatia virtuala prin intermediul portului de comunicatie COM4, de exemplu.

Desigur aceasta este intre un program din PC si o schema simulata in Proteus. Programul din PC se poate realiza in C, C#, Pascal,

Delphi sa Basic si el transmite si receptioneaza datele de la PIC. Datele ajunse virtual la PIC se pot vizualiza cu ajutorul

terminalului virtual serial din Proteus, ca in poza

post-238209-0-78039800-1493469552_thumb.jpg

Pentru realizarea legaturii PC-PIC mai intii se realizeaza comunicatia virtuala, apoi simularea Proteus

si in final comunicatia cu PC-ul.

 

Pentru comunicarea virtuala USB-HID cu PIC-ul se poate folosi programul “ HID Terminal” din mikroC,

mikroPascal sau mikroBasic sau programul “HID Port Communication”. Acesta este gratuit (free)

si se poate descarca de aici: https://sourceforge.net/projects/usbhidcommunica

post-238209-0-92433900-1493469597_thumb.jpg

Programul HID Terminal evidentiaza dispozitivele USB conectate, dar orice manipulare gen Send, Clear sau de scriere si citire pe alt dispozitiv

setat in afara de PIC, blocheaza calculatorul. De exemplu, este ca si cum ai transmite mouse-lui comenzi de PIC.

Terminalul ”Embedded Lab!” este permisiv si realizeaza numai comunicatia cu PIC-ul, se pot scrie orice fel de date

si nu blocheaza sistemul sau programul.

Aceasta este comunicatia directa virtuala cu schema cu PIC din Proteus, dar pentru ralizarea comunicatiei virtuale bilaterale

intre PIC si PC se foloseste, de exemplu, un driver virtual numit “EasyUSBHidNetClass.dll”,

de la Mikroelectronica (libstock.mikroe.com).

Am mentionat special acest driver, aparut in ultimii ani,deoarece are si o varianta demo, functionala in C# sau Basic

din Visual Studio 2010 sau mai nou. Se poate cumpara si cu 45$ 1 aplicatie sau 65$ 10 aplicatii.

Nu am reusit comunicatia virtuala functionala cu nici un alt driver. Pentru comunicatia fizica se utilizeaza driverul “mcHID.dll”

ce se poate obtine de pe siteul Mikroe sau internet iar codul de comunicatie Basic sau C# este acelasi ca la comunicatia virtuala.

Un exemplu functional este in poza din postarea #1,cu microBasic, Proteus, Visual Studio 10 Basic.

In general pentru o comunicatie virtuala se foloseste urmatoarea combinatie:

post-238209-0-72845900-1493469628_thumb.jpg

Realizarea unei simulari este un proces complex si trebuiesc cunoscute programele si codurile din fiecare bloc functional. Se poate realiza

destul de usor si este de mare ajutor la crearea de aparatura, fara folosirea dispozitivelor sau circuitelor fizice.

 

@gsabac

Edited by gsabac
Link to comment
Share on other sites

Setul de postari din link si derivatii sunt foarte interesante, am si eu citeva zeci, dar le voi prezenta ulterior.

 

Pentru inceput voi prezenta un mod complet si simplu de comunicare tip COM si ulterior USB-HID.

O proiectare eficienta, de succces, a unui sistem de aparate cu PIC si PC, se poate realiza,

prin intermediul portului serial COM, cu portul virtual VSPE, asa cum am aratat intr-o postare anterioara.

Nu este nevoie sa se scrie programul HEX in PIC, iar rezultatele apar direct in terminalul virtual Proteus

si programul din Visual Studio 6. Dupa finalizarea proiectului in VS6, mikroC sau mikroBasic si Proteus

se poate trece la realizarea fizica a circuitelor.

Asa arata circuitul cu PIC18F877 in Proteus, programul este in atasament si este in acelas director cu

programul mikroBasic pentru comunicatia seriala cu PIC18F877.

post-238209-0-27686300-1494927262_thumb.jpg

Programul din VS6 pentru un generator DDS, este in atasament si arata ca in poza.

post-238209-0-06605800-1494927274_thumb.jpg

Tot in atasament se afla si un fisier comprimat, numit bb1.vspe, care se incarca in programul VSPE,

pentru activarea portului serial COM4, prin care se va face comunicatia Emisie-Receptie. In poza este

aratat programul VSPE in actiune pentru COM4.

post-238209-0-34390500-1494927285_thumb.jpg

Ordinea de operare este impusa si consta in activarea portului serial cu bb1.vspe, apoi rularea

programului Proteus in care s-a setat fisierul HEX realizat de mikroBasic sau mikroC apoi rularea

programului DDS din VS6. Se transmit datele despre frecventa cu litera “F” in fata si litera “A”

pentru atenuare. In final pentru comanda unui aparat cu PIC se poate folosi un cod complex, in felul

urmator de exemplu: “F123456789 A32.7 S42 C12, etc”

Pentru rularea programelor am folosit Windows7 32 bit.

Sunt ceva probleme pina la punerea la punct a sistemului de proiectare, dar dupa aceia rezultatele

si progresul se poate vedea imediat, ca si inlaturarea erorilor de programare la PIC sau VB6.

@gsabac

 

 

 

mikroBasic si Proteus si Terminal Virtual VSPE cu RS232 si PIC16F877.rar

DDS bebe VB6 RS232.rar

bb1.rar

Link to comment
Share on other sites

Asa este, dar idea din postare este excelenta, mai ales ca se foloseste un DLL generic USB-HID la liber,

care se poate aplica si actual in Visual Studio 2010, 2013, 2015 sau chiar in specialul 2017. Trebuie mentionat ca

functioneaza numai cu circuite fizice.

 

@gsabac

Edited by gsabac
Link to comment
Share on other sites

Cea mai simpla comunicatie USB_HID dintre un PC si microcontrollerul PIC18F4550 se realizeaza prin intermediul

programului Visual Studio 6. In aceasta aplicatie conteaza doar personalizarea codurilor de identificare a comunicatiei

prin marimile VendorID si ProductID. Aceste coduri sunt imprimate in descrierea modulului de comunicatie USBdsc.mbas

si se pot schimba pentru personalizare.

Schema pentru PIC18F4550 este in poza.

Click pentru marire

post-238209-0-13591100-1495385017_thumb.jpg

Visual Basic 6 dispune de seturi puternice de prelucrare a stringurilor si numerelor

si astfel faciliteaza realizarea unui cod din citeva linii pentru emisie receptie. Bineinteles o mare parte din cod este

destinata activarii liniei de comunicatie USB-HID prin intermediul unui DLL la liber usbHID.dll. Acesta are predefinite

numeroase functii, care sunt definite in VB6 intr-un modul de cod. DLL-ul are propriile coduri de identificare, dar nu

sunt importante in aceasta aplicatie.

Aplicatia in actiune este in poza.

post-238209-0-25231600-1495385042_thumb.jpg

Se pot transmite si receptiona 2 numere predefinite in doua etichete. Practic se citeste stringul, se elimina punctele,

apoi se formeaza un cuvint de cod 0F123456789. Intotdeauna prima cifra trebuie sa fie zero, fapt impus de diferenta

dintre definirea indicilor unui buffer in C++ si VB. Litera F este codul de recunoastere a transmisiei si la identificarea

receptiei, PIC-ul retransmite datele primite pentru confirmare. Acelas procedeu este utilizat la receptia datelor in VB6.

Pentru citirea datelor de comunicatie este prevazut un buton de verificare a conexiunii.

 

In atasament sunt programele functionale si merg in Windows 7 32 bit. Desigur pentru actualizare se poate

folosi VS2010 cu C# sau Visual Basic.

 

@gsabac

Pic18F4550 mikroBasic-Proteus USB-HID.zip

Scriere-Citire PIC cu USB-HID si VB6.zip

Edited by gsabac
Link to comment
Share on other sites

Voi relua transmisia comenzilor la PIC, prin porturile seriale COM si Visual Studio 2010.

Programul este compatibil si cu VS2013 sau 2015 si este scris in limbajul Visual Basic,

si se remarca schimbarea codului si aspectul vizual deosebit al aplicatiei.

Programul si hex-ul pentru PIC este acelasi ca in in postarea anterioara cu VB6 si este

scris si compilat cu mikroBasic. Avantajul folosirii acestuia consta in utilizarea unui

limbaj de nivel inalt, eficient si deosebit de accesibil.

Schema din Proteus.

Click pentru marire.

post-238209-0-29381200-1495518210_thumb.jpg

In VS2010 codurile pentru transmisia COM au fost schimbata in metoda mai evoluata tip NET,

de exemplu la transmisie.

Private Sub btnSend_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

On Error GoTo rex

SerialPort1.Write("F" & Text1.Text)

Me.lblResult.Text = "" : Me.Label12.Text = "" : rec = ""

Me.Timer1.Interval = 100

Me.Timer1.Start()

Exit Sub

rex:

MsgBox("Portul este neconectat, comadati Conect")

End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If Len(rec) = 12 Or Len(rec) = 5 Then

Timer1.Stop()

afiseaza()

End If

End Sub

Private Sub afiseaza()

If Strings.Left(rec, 1) = "F" Then

lblResult.Text = rec

Exit Sub

ElseIf Strings.Left(rec, 1) = "A" Then

Label10.Text = rec

Exit Sub

Else

'ok

End If

End Sub

Acesta este tot codul pentru transmisie si tot programul functional este in atasament.

O poza cu aplicatia.

post-238209-0-60007400-1495518226_thumb.jpg

Modul de lucru este identic cu cel din postarea #5, cu transmisie seriala cu PIC si VB6.

Se comanda VSPE si se incarca bb1.vspe, se comanda rularea din Proteus apoi in aplicatie se alege

portul COM4, 9600 si Conect. In continuare se pot transmite si receptiona date si se poate modifica

frecventa din butoanele cu sageti.

@gsabac

Transmisie Receptie VB2010 RS232.zip

mikroBasic si Proteus cu RS232 si PIC16F877.zip

Edited by gsabac
Link to comment
Share on other sites

Buna ziua,

 

Un lucru interesant pe care il puteti face este sa realizati o functie de autoconectare.

 

Practic aplicatia PC va scana porturile seriale deschise pe PC, operatie efectuata cu ajutorul unui Timer pentru a nu ingreuna activitatea PC-ului. In momentul in care gaseste un port COM, interogheaza acel port dupa un string anume definit (ceva gen o parola, un string unic). In tot acest timp, se poate ca toata interfata sa fie in mod "disabled".

Cand se efectueaza conectarea, se face "enable" la controale si tot restul.

 

Evident, in firmware-ul PIC trebuie implementat acest "handshake", eventual tot cu un Timer (de data aceasta hardware) se poate testa starea conexiunii, si daca se realizeaza ca numai avem conexiune cu PC-ul, se pot salva datele curente in EEPROM si se poate incerca un restart software al PIC-ului cu incarcarea ulterioara a parametrilor salvati in EEPROM.

Sau treaba aceasta se poate face la nivel de aplicatie PC, din moment ce PIC-ul este in regim SLAVE iar aplicatia PC este in regim MASTER (adica este cea care trimite datele catre PIC).

 

In acest fel se poate trata cazul deconectarii accidentale.

Edited by mars01
Link to comment
Share on other sites

Interesante optimizari si aplicabile cu putin efort de programare. In aplicatiile pe care le voi prezenta

PC-ul este master si PIC-ul are rolul de interconectare intre aparatul periferic si PC. Complexul poate

monitoriza sau vizualiza in timp real sau intirziat, dupa cum datele esantionate sunt lente (voltmetre, procese, generatoare) sau la viteze

mari de esantionare (osciloscoape, frecventmetre). De fapt in acest topic voi balea toate posibilitatile de interconectare pe care le cunosc,

cu transmisii seriale intre PC prin COM sau USB-HID si microcontrollerele PIC. Toate exemplele sunt functionale si pe baza lor

se pot dezvolta nenumarate aplicatii complexe.

Am depasit faza driverului “EasyUSBHidNetClass.dll”, pentru care se cere 65$ si am selectat de pe internet

un driver "USBLibrary.dll" care are proiect in CSharp (VS2010) si care poate fi compilat si particularizat.

Se poate folosi in aplicatii C# (CSharp) sau Visual Basic 2010, pentru transmisii USB si nu numai.

 

@gsabac

Edited by gsabac
Link to comment
Share on other sites

Proiect de osciloscop 0-30KHz, o aplicatie cu PIC18F2550 si transmisie USB spre PC are schema in atasament.

- 5mV-10V/div - protectie la intrare, comutatie cu relee

- 1MOhm/47pF

- 50uS/div la 1sec/div cu rata de esantionare adaptata.

Se foloseste ADC-ul si memoria interna iar datele se transmit cu 15 pachete de 64 biti.

La receptia din PC, programul realizat cu VB6 preia salvele si le reconstitute in esantioane numerice pe 10 biti,

dupa care le afiseaza pe ecran. Ideea cu 10 biti foloseste la realizarea sectiunilor de atenuator soft de la 1 la 10

fix sau variabil.

post-238209-0-08172500-1497178865.png

Aplicatia cu PIC are schema si simularea in Proteus iar programul pe PC in Visual Studio 6.

 

@gsabac

osciloscop.PDF

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines