1 Reply Latest reply on Feb 23, 2015 6:40 PM by user_14586677

    adc

    user_304190885

       problems sending data of adc  and uart :

         
          
           #include <device.h>    
          
                
          
           /* Macro definitions */    
          
                
          
           #define DELAY               (5000u)    
          
                
          
           /* Resistor Values */    
          
                
          
                
          
           volatile uint32 windowFlag = 0u;    
          
           volatile uint8  dataReady  = 0u;    
          
                
          
                
          
           /* Send the channel number and voltage to UART */    
          
           static void SendChannelVoltage( int16 mVolts);    
          
                
          
           /* Interrupt prototypes */    
          
           CY_ISR_PROTO(ADC_ISR_Handler);    
          
                
          
           void main()    
          
           {    
          
                 
          
               int16 mVolts  = 0;     
          
            /* Start the Components */    
          
                  
          
               ADC_Start();    
          
               IDAC_Start();    
          
               UART_Start();    
          
                   
          
               /* Start ISRs */    
          
               ADC_IRQ_StartEx(ADC_ISR_Handler);    
          
                 
          
                   
          
               /* Enable global interrupts */    
          
               CyGlobalIntEnable;    
          
                   
          
                
          
                   
          
               /* Start ADC conversion */    
          
               ADC_StartConvert();    
          
                
          
               for(;;)    
          
               {    
          
                       
          
                   CyDelay(DELAY);    
          
                   /* Wait for ADC conversion */    
          
                   while(dataReady == 0u)    
          
                   {    
          
                   }    
          
                       
          
                   /* Convert the ADC counts to mVolts. ADC is configured to be single channel */    
          
                   mVolts = ADC_CountsTo_mVolts(0u, ADC_GetResult16(0u));    
          
                   SendChannelVoltage( mVolts);    
          
                   dataReady = 0u;    
          
                             
          
               }    
          
           }    
          
                
          
                
          
           static void SendChannelVoltage( int16 mVolts)    
          
           {    
          
               /* Clear Screen */     
          
                  
          
               /* Print Channel */    
          
               UART_UartPutString(" Channel = ");    
          
               /* Display the channel number starting from 1 */    
          
                 
          
               /* Convert Channel number to ASCII and send */    
          
                 
          
                   
          
                   
          
                   
          
               /* Send Volts to UART */    
          
               UART_UartPutChar(mVolts);    
          
                 
          
               UART_UartPutString(" mV");    
          
               UART_UartPutCRLF(0u);    
          
           }    
          
                
          
                
          
           /******************************************************************************    
          
           * Function Name: ADC_ISR_Handler    
          
           *******************************************************************************    
          
           *    
          
           * Summary:    
          
           *  Interrupt Service Routine. Check the ADC status and sets window and data    
          
           *  ready flags.    
          
           *    
          
           ******************************************************************************/    
          
           CY_ISR(ADC_ISR_Handler)    
          
           {    
          
               uint32 intr_status;    
          
                
          
               /* Read interrupt status registers */    
          
               intr_status = ADC_SAR_INTR_MASKED_REG;    
          
               /* Check for End of Scan interrupt */    
          
               if((intr_status & ADC_EOS_MASK) != 0u)    
          
               {    
          
                   /* Read range interrupt status and raise the flag */    
          
                   windowFlag = ADC_SAR_RANGE_INTR_MASKED_REG;    
          
                   /* Clear range detect status */    
          
                   ADC_SAR_RANGE_INTR_REG = windowFlag;    
          
                   dataReady = 1u;    
          
               }    
          
               /* Clear handled interrupt */    
          
               ADC_SAR_INTR_REG = intr_status;    
          
           }