Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
06/03/2013 #1


Transmisor datos USB en MSP430
Buen dia

Estoy construyendo un equipo de dos canales que me permita adquirir 52734 muestras por segundo por canal, y enviar los datos adquiridos por USB al PC. Estoy usando dos ADC ADS1271 conectados en modo Daisy chain, con interface SPI hacia un microcontrolador MSP430F5510.

Los datos enviados desde el conversor hasta el microcontrolador llegan bien pero cuando se inicia la transmisión de los datos por USB y como los conversores continúan enviando datos algunos datos se dañan es como si el USB interrumpiera la adquisición, no se si con DMA pueda suprimir el problema.

este es le codigo cuando esta adquiriendo los datos y cuando "MEGA_DATA_LENGTH" se llena inicia el envio de los datos por USB

Código:
#define MEGA_DATA_LENGTH 1908 /// length of bytes
BYTE buffer[MEGA_DATA_LENGTH]; //// buffer

int inc; /// increment for each sample


 case ST_ENUM_ACTIVE:                
                 if (!(P1IN & BIT1)){ /// wait the sample ready pin DRDY

                    
                    while (!(UCB1IFG & UCTXIFG));                   
                    UCB1TXBUF = 0x00;                    
                    while (!(UCB1IFG & UCRXIFG));   /// wait RXBUF received complete  byte 3 ADC 1            
                      buffer[inc] = UCB1RXBUF;                      
                      while (!(UCB1IFG & UCTXIFG));                   
                      UCB1TXBUF=0x00;                       
                      while (!(UCB1IFG & UCRXIFG));    /// wait RXBUF received complete byte 2 ADC 1
                      buffer[inc+1] = UCB1RXBUF;                       
                      while (!(UCB1IFG & UCTXIFG));                      
                      UCB1TXBUF=0x00;                      
                      while (!(UCB1IFG & UCRXIFG));      /// wait RXBUF received complete  byte 1 ADC 1
                      buffer[inc+2] = UCB1RXBUF;                                             
                      while (!(UCB1IFG & UCTXIFG));
                      UCB1TXBUF=0x00;                            
                      while (!(UCB1IFG & UCRXIFG));   /// wait RXBUF received complete  byte 3 ADC 2
                      buffer[inc+3] = UCB1RXBUF;                      
                      while (!(UCB1IFG & UCTXIFG));                          
                      UCB1TXBUF=0x00;                           
                      while (!(UCB1IFG & UCRXIFG));   /// wait RXBUF received complete  byte 2 ADC 2
                      buffer[inc+4] = UCB1RXBUF;                       
                      while (!(UCB1IFG & UCTXIFG));                        
                      UCB1TXBUF=0x00;                            
                      while (!(UCB1IFG & UCRXIFG));  /// wait RXBUF received complete  byte 3 ADC 2
                      buffer[inc+5] = UCB1RXBUF;
                      inc = inc + 6;  //// inc the next 6 bytes                   
                      ///////////////////////////////
                      if(inc == MEGA_DATA_LENGTH) {        //// when inc == 1908 bytes send data            
                         USBCDC_sendData(buffer,MEGA_DATA_LENGTH,CDC0_INTFNUM);
                         inc = 0;                         
                     }             
                 }                
                break;
1908 bytes x 6 bytes = 318 muestras por canal

esta la grafica de como se ve
http://www.freeimagehosting.net/8b4ow

Gracias por la ayuda
06/03/2013 #2

Avatar de Ardogan

¿Usando la función cdcSendDataWaitTilDone pasa lo mismo?. USBCDC_SendData empieza el envío de datos, pero no espera a que se hayan enviado todos para retornar.
Puede estar pasando que la velocidad de toma de datos de los 2 ADC sea mayor a lo que se puede transmitir por el bus USB. ¿A cuantas muestras por segundo estás muestreando?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.