Jump to content

ADC and USB Data sending to MatLab

Recommended Posts

Okay, so I found out from my previous post that the output value from the ADC can be accessed through pui32ADC0Value...now, im trying to send that data via USB device mode in Tiva, however, my concerns are will my code work? And if it works, how do I access that data via MatLab. Thanks


Once again, credits to the maker of the ADC code.


#include <stdbool.h>

#include <stdint.h>

#include "inc/hw_memmap.h"

#include "driverlib/adc.h"

#include "driverlib/gpio.h"

#include "driverlib/sysctl.h"

#include "driverlib/adc.h"

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/usb.h"

#include "usblib/usblib.h"

#include "usblib/usblibpriv.h"

#include "usblib/device/usbdevice.h"

#include "usblib/device/usbdevicepriv.h"


main(void) {


uint32_t pui32ADC0Value[1];


SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN| SYSCTL_XTAL_16MHZ);                                                                            //Set clock at 40 Mhz , Sometimes                                                                          //ADC may not work at 80Mhz 



ADCReferenceSet(ADC0_BASE, ADC_REF_INT); //Set reference to the internal reference

                                        // You can set it to 1V or 3 V



ADCSequenceDisable(ADC0_BASE, 3); //It is always a good practice to disable ADC prior                                                        //to usage ,else the ADC may not be accurate                                                               //   due to previous initializations                  

ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); //Use the 3rd Sample sequencer                                                                    


ADCSequenceStepConfigure(ADC0_BASE, 3, 0,ADC_CTL_CH8 | ADC_CTL_IE | ADC_CTL_END); 

//Configure ADC to read from channel 8 ,trigger the interrupt to end data capture //          


ADCSequenceEnable(ADC0_BASE, 3);   //Enable the ADC

ADCIntClear(ADC0_BASE, 3);     //Clear interrupt to proceed to  data capture


uint8_t* Data = "pui32ADC0Value";


// Configure Endpoint 1.


USBDevEndpointConfigSet(USB0_BASE, USB_EP_1, 64, //DISABLE_NAK_LIMIT, 

                        USB_EP_MODE_BULK | USB_EP_DEV_IN);


// Configure FIFO as a device IN endpoint FIFO starting at address 64

// and is 64 bytes in size.




while (1) {

ADCProcessorTrigger(ADC0_BASE, 3);   //Ask processor to trigger ADC

while (!ADCIntStatus(ADC0_BASE, 3, false))

{ //Do nothing until interrupt is triggered



ADCIntClear(ADC0_BASE, 3); //Clear Interrupt to proceed to next data capture                                          

ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value); //pui32ADC0Value is the value read                                                                     


SysCtlDelay(SysCtlClockGet() / 12);



// Put the data in the FIFO.


USBEndpointDataPut(USB0_BASE, USB_EP_1, Data, 64);


// Start the transmission of data.




//USBEndpointDataGet(USB0_BASE, USB_EP_1, Data, 32);

} //Suitable delay



Share this post

Link to post
Share on other sites

why you don't use CDC communicate with PC,them you could get return data from rs232 protocol. 


They probably meant using USB CDC (Communications Device Class), which creates a virtual serial port running across the USB connection.

You can use the debug port on the launchpad (which provides a virtual serial port connected to UART0 on the launchpad processor).

Or you could use the launchpad processors USB port and build your own USB CDC driver.

In either case it would look like a serial port from the point of view of your host operating system.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now