Kreator Postat Februarie 8, 2017 Partajează Postat Februarie 8, 2017 (editat) Hi all! Am facut montajul si exemplul de la mikroe referitor la HID terminal si precizez ca functioneaza OK program HID_Read_Write_Interruptdim cnt as chardim readbuff as byte[64] absolute 0x500 ' Buffers should be in USB RAM, please consult datasheetdim writebuff as byte[64] absolute 0x540sub procedure Interrupt() USB_Interrupt_Proc() ' USB servicing is done inside the interruptend submain: ADCON1 = ADCON1 or 0x0F ' Configure all ports with analog function as digital CMCON = CMCON or 7 ' Disable comparators HID_Enable(@readbuff,@writebuff) ' Enable HID communication while TRUE while(HID_Read() = 0) wend for cnt=0 to 63 writebuff[cnt] = readbuff[cnt] next cnt while(HID_Write(@writebuff,64) = 0) wend wend Va rog sa-mi spuneti cum sa a afisez in HID terminal o variabila cand se executa TMR0 fiindca nu reusesc deloc, adica sa nu trebuiasca sa tot dau eu SEND. Va multumesc LE eroarea la compilare este ca incerc sa incerc sa execut o procedura din doua locuri deodata. Asta-i programul meu program Usb_termodim cnt as chardim readbuff as byte[64] absolute 0x500 ' Buffers should be in USB RAM, please consult datasheetdim writebuff as byte[64] absolute 0x540dim txt as string[64]dim i as bytedim kk, prim, j as bitsub procedure Interrupt() if INTCON.TMR0IF then i = i + 1 TMR0l = 96 INTCON.TMR0IF = 0 if i = 100 then i = 0 PORTA.4=NOT PORTA.4 ByteToStr(PORTA.4, txt) for cnt=0 to 7 writebuff[cnt] = txt[cnt] next cnt while(HID_Write(@writebuff,64) = 0) wend end if end if USB_Interrupt_Proc() ' USB servicing is done inside the interruptend submain: ADCON1 = 0x0F 'ADCON1 = ADCON1 or 0x0F ' Configure all ports with analog function as digital CMCON = CMCON or 7 ' Disable comparators TRISA=0 PORTA.4 = 0 TMR0L = 100 ' //load timer0 with 100 T0CON = 0xC4 '; //prescaler = 32 INTCON = 0xA0 '; //enable TMR0 interrupt HID_Enable(@readbuff,@writebuff) ' Enable HID communication prim = 0 j = 0 while TRUE while(HID_Read() = 0) wend wendend. si erorile sunt: 4158 365 Reentrancy is not allowed: function 'USB_Transfer_Packet' called from two threads __Lib_USB_genHID.c 2414 365 Reentrancy is not allowed: function 'USB_Handle_Busy' called from two threads __Lib_USB_genHID.c Editat Februarie 8, 2017 de Kreator Link spre comentariu
mars01 Postat Februarie 8, 2017 Partajează Postat Februarie 8, 2017 Incearca sa folosesti un alt timer. Cine stie, poate librariile mikroe (closed source) incluse in proiect se folosesc de Timer0. Link spre comentariu
Kreator Postat Februarie 8, 2017 Autor Partajează Postat Februarie 8, 2017 (editat) Dorinta mea e sa se afiseze o variabila in fereastra HID terminal fara a trebui sa apas butonul Send, dar nu stiu cum se face. Editat Februarie 8, 2017 de Kreator Link spre comentariu
gsabac Postat Aprilie 19, 2017 Partajează Postat Aprilie 19, 2017 (editat) Exemplul functioneaza in mikroBasic demo in conlucrare cu "HID Terminal", din mediul IDE, meniul "Tools". Daca am incercat sa recompilez, am obtinut urmatoarele date: 0 134 Compiled Successfully0 434 Demo Limit Demo Limit0 453 Unsuccessful linking 'HID_Read_Write_Polling.mbppi0 102 Finished (with errors): 19 Apr 2017, 16:29:58 HID_Read_Write_Polling.mbppi Adica a compilat dar nu face fisierul ".hex" deoarece se depaseste limita "demo" In continuare, am facut un nou program cu acelasi continut mikroBasic, intr-un nou folder si mesajele de eroare sunt altele si se indica ca lipseste libraria "__Lib_USB_genHID.c" si ca nu poate rezolva extern problema. Am continuat cu acelasi program in mikroC si rezultatul este acelasi, in ambele medii IDE am folosit PIC18F2550 si PICF4550, PIC18F87J50. Mediul de design si simulare Proteus poate simula acelasi HID_Read_Write_Polling, prin desenarea schemei, setarea si simularea ei. Click pentru marire. Pentru aceasta este nevoie de un Virtual USB driver, care este in chitul Proteus si se instaleaza. Atunci cind se ruleaza exemplul, dupa citeva secunde se aude mesajul sonor de conectare a unui produs USB, exemplul este conectat la portul virtual USB si apare consola de comunicatii din Proteus. Pentru comunicare cu microcontrollerul, se foloseste orice program gen "USB HID Communication" se scriu date si se transmit cu "Send" si aceleasi date se receptioneaza prin raspunsul PIC-ului. Urmatorul pas este crearea unei console proprii de test in PC, pentru a transmite orice fel de date spre un produs fizic, multimetru, frecventmetru, osciloscop, generator DDS, etc. prin portul USB: - prin portul UARTCOM RS232, am reusit aceste transmisii cu consola proprie, pentru un generator DDS. - prin portul USB am reusit recunoasterea codului de driver, VendorID si ProductID, transmiterea de date si deocamdata nu receptionez decit "00000" pe primele 5 locatii ale bufferului, voi continua in orb prin incercari de exemple. Ce ma intereseaza in mod deosebit este cum pot rezolva eroarea "__Lib_USB_genHID.c" nu se poate rezolva extern. Poate stie un membru mai avansat al forumului. Multumesc anticipat. @gsabac Editat Aprilie 19, 2017 de gsabac Link spre comentariu
mars01 Postat Aprilie 19, 2017 Partajează Postat Aprilie 19, 2017 (editat) Nu programez in Basic dar spuneti ca ati compilat si exemplul in mikroC. Daca cumva este vorba de acest exemplu (in Library Manager este selectata doar libraria 'USB'): /* * Project name: HID Read Write Interrupt (USB HID Read & Write Test) * Copyright: (c) MikroElektronika, 2005-2010 * Revision History: 20100512: - initial release; * Description: This example establishes connection with the HID terminal that is active on the PC. Upon connection establishment, the HID Device Name will appear in the respective window. The character that user sends to PIC from the HID terminal will be re-sent back to user. * Test configuration: MCU: PIC18F4550 http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf Dev.Board: EasyPIC7 http://www.mikroe.com/easypic/ Oscillator: HS 8.000 MHz (USB osc. is raised with PLL to 48.000MHz) Ext. Modules: on-board USB-HID SW: mikroC PRO for PIC http://www.mikroe.com/mikroc/pic/ * NOTES: (*) Be VERY careful about the configuration flags for the 18F4550 - there's so much place for mistake! - Place jumpers J12 in the right position */ unsigned char readbuff[64] absolute 0x500; // Buffers should be in USB RAM, please consult datasheet unsigned char writebuff[64] absolute 0x540; char cnt; char kk; void interrupt(){ USB_Interrupt_Proc(); // USB servicing is done inside the interrupt } void main(void){ ADCON1 |= 0x0F; // Configure all ports with analog function as digital CMCON |= 7; // Disable comparators HID_Enable(&readbuff,&writebuff); // Enable HID communication while(1){ while(!HID_Read()) ; for(cnt=0;cnt<64;cnt++) writebuff[cnt]=readbuff[cnt]; while(!HID_Write(&writebuff,64)) ; } } atunci sa stiti ca se compileaza corect in mikroC for PIC PRO, fara erori pentru un uC 18F4550 adica exact exemplul gasit in structura de directoare a mikroC. LE: Oops, ati folosit exemplul cu polling si nu am fost atent. Acum l-am compilat si pe acela in mikroC for PIC PRO si se compileaza si acesta fara erori. Editat Aprilie 19, 2017 de mars01 Link spre comentariu
gsabac Postat Aprilie 20, 2017 Partajează Postat Aprilie 20, 2017 Multumesc, am sa incerc sa schimb fisierul hex din Proteus, cu cel compilat din mikroBasic si cu consola USB HID Communication, voi testa comunicarea de scriere si citire cu uC-ul. Codul Microsoft Basic este in mare, cu modificari esentiale, nu se face autocorectie si spre disperarea utilizatorilor rodati cu Visual Studio, este si "Case sensitive" @gsabac Link spre comentariu
gsabac Postat Aprilie 21, 2017 Partajează Postat Aprilie 21, 2017 (editat) In locatia originala cu exemple, compilarea se face cu succes, dar daca se face un proiect nou cu alt uC, in alta locatie, apare eroarea "__Lib_USB_genHID.c" programul spune ca nu se poate rezolva extern. Rezolvarea este simpla, la crearea unui nou proiect se scrie sau se copiaza fisierul programului si se salveaza cu extensia "C" sau "mbas" dupa caz. La salvare, in directorul programului trebuie sa existe un fisier numit "USBdsc.c" sau "USBdsc.mbas" Acesta se include in program si apoi se salveaza proiectul. Scopul lui este sa descrie modul cum se va compila procesorul ales in proiect. Dupa aceasta, la compilare nu mai apare eroarea "__Lib_USB_genHID.c" si fisierul hex se compileaza cu succes. Urmeaza sa si functioneze in simulare, apoi pe modelul real. @gsabac Editat Aprilie 21, 2017 de gsabac Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum