Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

USB на PIC18
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=15678
Страница 1 от 1

Автор:  Н'бабане Гт'муан'га [ Съб Яну 06, 2018 1:33 pm ]
Заглавие:  USB на PIC18

Имам (пак) въпрос за гадното усб...
Значи подкарал съм някаква форма на трансфер, образува ми се ком порт, търчат някакви данни по него, обаче ползвам луп с четене от усб и пращане към уарт и обратното. Пропускам много данни по тоя начин.
Та въпроса ми е има ли някой който да е правил усб трансфер на пик18 с прекъсвания и е готов да ми помогне с код/пример? Просто искам да прехвърлям данни от и към уарт като сериен порт.

Автор:  stoyanoff [ Съб Яну 06, 2018 1:42 pm ]
Заглавие:  Re: USB на PIC18

Я дай малко повече инфо! За какво прекъсване говориш? Кой стек използваш? За CCS, XC8, MicroC?
Правил съм разни неща. Мисля, че за XC8 CDC си използва прекъсване за приемане на данни през USB, само трябва да си добавиш кода за UART-a.
Поздрави!

Автор:  Н'бабане Гт'муан'га [ Съб Яну 06, 2018 1:46 pm ]
Заглавие:  Re: USB на PIC18

Ползвам ХС8 с МСС и съм конфигурирал стека като за прекъсвания. Там обаче само се вика една функция:
if(PIR3bits.USBIF) USB_USBDeviceTasks();
Нямам проблем да ползвам нещо друго за ХС8, обаче по принцип съм адски зле на тема усб и не знам дали бих се оправил. МСС поне ми го изгенерира само.

Автор:  stoyanoff [ Съб Яну 06, 2018 2:46 pm ]
Заглавие:  Re: USB на PIC18

Версията, която съм използвал, е от преди година -
Код:
USBDeviceInit();
USBDeviceAttach();
while(1)
{
SYSTEM_Tasks();//това са ти останалите процеси
        #if defined(USB_POLLING)
            // Interrupt or polling method.  If using polling, must call
            // this function periodically.  This function will take care
            // of processing and responding to SETUP transactions
            // (such as during the enumeration process when you first
            // plug in).  USB hosts require that USB devices should accept
            // and process SETUP packets in a timely fashion.  Therefore,
            // when using polling, this function should be called
            // regularly (such as once every 1.8ms or faster** [see
            // inline code comments in usb_device.c for explanation when
            // "or faster" applies])  In most cases, the USBDeviceTasks()
            // function does not take very long to execute (ex: <100
            // instruction cycles) before it returns.
            USBDeviceTasks();
        #endif


        /* If the USB device isn't configured yet, we can't really do anything
         * else since we don't have a host to talk to.  So jump back to the
         * top of the while loop. */
        if( USBGetDeviceState() < CONFIGURED_STATE )
        {
            /* Jump back to the top of the while loop. */
            continue;
        }

        /* If we are currently suspended, then we need to see if we need to
         * issue a remote wakeup.  In either case, we shouldn't process any
         * keyboard commands since we aren't currently communicating to the host
         * thus just continue back to the start of the while loop. */
        if( USBIsDeviceSuspended()== true )
        {
            /* Jump back to the top of the while loop. */
            continue;
        }

        //Application specific tasks
      APP_DeviceCDCBasicDemoTasks();//това ти е за обработка на USB пакетите
}

Отделно имаш още 2 неща:
Код:
bool USER_USB_CALLBACK_EVENT_HANDLER(USB_EVENT event, void *pdata, uint16_t size)
{
    switch( (int) event )
    {
        case EVENT_TRANSFER:
            break;

        case EVENT_SOF:
            /* We are using the SOF as a timer to time the LED indicator.  Call
             * the LED update function here. */
            //APP_LEDUpdateUSBStatus();
            break;

        case EVENT_SUSPEND:
            /* Update the LED status for the suspend event. */
            //APP_LEDUpdateUSBStatus();

            //Call the hardware platform specific handler for suspend events for
            //possible further action (like optionally going reconfiguring the application
            //for lower power states and going to sleep during the suspend event).  This
            //would normally be done in USB compliant bus powered applications, although
            //no further processing is needed for purely self powered applications that
            //don't consume power from the host.
            SYSTEM_Initialize(SYSTEM_STATE_USB_SUSPEND);
            break;

        case EVENT_RESUME:
            /* Update the LED status for the resume event. */
            //APP_LEDUpdateUSBStatus();

            //Call the hardware platform specific resume from suspend handler (ex: to
            //restore I/O pins to higher power states if they were changed during the
            //preceding SYSTEM_Initialize(SYSTEM_STATE_USB_SUSPEND) call at the start
            //of the suspend condition.
            SYSTEM_Initialize(SYSTEM_STATE_USB_RESUME);
            break;

        case EVENT_CONFIGURED:
            /* When the device is configured, we can (re)initialize the
             * demo code. */
            APP_DeviceCDCBasicDemoInitialize();
            break;

        case EVENT_SET_DESCRIPTOR:
            break;

        case EVENT_EP0_REQUEST:
            /* We have received a non-standard USB request.  The HID driver
             * needs to check to see if the request was for it. */
            USBCheckCDCRequest();
            break;

        case EVENT_BUS_ERROR:
            break;

        case EVENT_TRANSFER_TERMINATED:
            break;

        default:
            break;
    }
    return true;
}

и обработката за USB:
Код:
void APP_DeviceCDCBasicDemoTasks()
{
    /* If the user has pressed the button associated with this demo, then we
     * are going to send a "Button Pressed" message to the terminal.
     */
    uint8_t numBytesRead;
    numBytesRead = getsUSBUSART(readBuffer, sizeof(readBuffer));

    if(numBytesRead>0)
    {
        AddDataToIncomeBuffer();
        ClearReadBuffer();
    }
   
    if(USBUSARTIsTxTrfReady()==true)
    {
        SendUSBData();
    }
       
    CDCTxService();
}

Може малко да съм го модифицирал последното. Не знам дали е 1 към 1 с оригинала.

Автор:  slav4o.com [ Съб Яну 06, 2018 3:43 pm ]
Заглавие:  Re: USB на PIC18

То освен Device - CDC - Basic Demo има и Device - CDC - Serial Emulator framework. Което си е готов преобразувател, няма нужда от дописване. Поне не толкова.

Автор:  TheWizard [ Съб Яну 06, 2018 3:59 pm ]
Заглавие:  Re: USB на PIC18

иска да си допишете ринг-буферите, без тях само 64 байта

Автор:  Н'бабане Гт'муан'га [ Съб Яну 06, 2018 4:26 pm ]
Заглавие:  Re: USB на PIC18

slav4o.com написа:
То освен Device - CDC - Basic Demo има и Device - CDC - Serial Emulator framework. Което си е готов преобразувател, няма нужда от дописване. Поне не толкова.


@stoyanoff, мерси! Сега ще видя дали ще стане и при мен.

@slav4o.com, къде да го намеря тоя фреймуърк? В МСС виждам само "MLA USB Device Lite"

Автор:  slav4o.com [ Съб Яну 06, 2018 4:38 pm ]
Заглавие:  Re: USB на PIC18

@Н'бабане, то от 2014г. по друг начин е цялата MLA. На microchip_solutions_v2013-02-15 го има. Вероятно всички неща ги има и на най-новата, но са по друг начин подредени нещата.... Иначе тоя пик 18 със сигурност ще тръгне със библиотеката от 2013
C:\microchip_solutions_v2013-02-15\USB\Device - CDC - Serial Emulator

Автор:  Н'бабане Гт'муан'га [ Съб Яну 06, 2018 4:46 pm ]
Заглавие:  Re: USB на PIC18

Това добре ама откъде да я взема тая библиотека от 2013?

Автор:  slav4o.com [ Съб Яну 06, 2018 4:49 pm ]
Заглавие:  Re: USB на PIC18

https://www.microchip.com/mplab/microch ... plications
отдолу цъкваш таб-а да е на Downloads Archive

Автор:  Desert Leo [ Съб Яну 06, 2018 6:49 pm ]
Заглавие:  Re: USB на PIC18

Н'бабане Гт'муан'га написа:
... по принцип съм адски зле на тема усб ...

Що не използваш FT230X и да си работиш с уартите?

Автор:  slav4o.com [ Съб Яну 06, 2018 7:18 pm ]
Заглавие:  Re: USB на PIC18

Мда принципно само за чист конвертор е безсмислено с пик....

Автор:  Н'бабане Гт'муан'га [ Съб Яну 06, 2018 7:24 pm ]
Заглавие:  Re: USB на PIC18

Не е чист конвертор, иначе хич не бих се занимавал...

Автор:  Desert Leo [ Нед Яну 07, 2018 9:07 am ]
Заглавие:  Re: USB на PIC18

Е, то кучето винаги е заровено в конкретиката, та ти си знаеш най-добре кое е правилното решение за теб.
Аз просто нямам време да се занимавам с USB стекове в контролера. Където ми трябва, слагам FT230XQ.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/