4 Replies Latest reply on Oct 15, 2012 6:14 AM by user_14586677

    Problem whit PSOC1 ADCINC and LM35


       Hi, I'm starting to program in PSOC and I have problem with the ADCINC, I made a program for read a LM35, but when i conected it, to psoc it only read cero, if a remplace with a pot i can see the variation, i have been searching a explain but i cant found it. I hope that you can help me. I anex the code. excuse me for me redaction y and the coments in spanish.




      #include <m8c.h>        // part specific constants and macros


      #include "PSoCAPI.h"    // PSoC API definitions for all User Modules


      #include "stdlib.h"     //incluimos la libreria para conversiones


      #include "delay.h"      //incluimos la libreria para retardos


      #include "string.h"     //incluimos libreria para punto flotante


      #define _FTOA_TOO_LARGE -2


      #define _FTOA_TOO_SMALL -1




      /*El programa realizará una conversion analogica a digital para detectar temperatura mediante un sensor LM35


      y visualizarlo posteriormente mediante un LCD con barra grafica. 




      ADCINC:                                 PGA:


      DataFormat: UnSigned.                  Gain:  1.00


      Resolucion: 10bits.                  Input: AnalogComun_InputMUX_0


      Data Clock: VC1(2MHz).               Reference: VSS


      ClockPhase: Normal.                  AnalogBug: Disable


      PosInput:   ACB00


      NegInput:   --


      NegInputGain:  Disconected.














      Hoja de datas del ADCINC


      Hoja de datos del PGA


      Hoja de datos lenguaje C








      //                           CONDICIONES GLOBALES






      char*flotante;          //puntero para el punto flotante


      int valor;              //entero para almacenar valores


      float temperatura;          //flotante para generar voltaje


      int estado;             //estado de comparacion para el flotante




      //                           Codigo de Programacion






      void main(void)




      M8C_EnableGInt ;   //Abilitamos interrupciones globales.


      LCD_Start();           //inicializamos la LCD


      PGA_Start(3);           //iniciamos el PGA e indicamos que opera con potencia alta (3=PGA_HIGHPOWER)


      ADCINC_Start(3);       //iniciamos el ADCINC e indicamos que opera con potencia alta (3=ADCINC_HIGHPOWER)


      ADCINC_GetSamples(0);       //indicamos que el ADC registra muestras continuas. 


      LCD_InitBG(LCD_SOLID_BG);   //inicializamos la barra grafica con lineas




      while(1){               //iniciamos el bucle infinito


      LCD_Position(0,0);           //posicionamos el lcd para escritura


      LCD_PrCString("Temperatura:");   //escribimos la etiqueta voltaje




      while(ADCINC_fIsDataAvailable()!=0){        //mientras la lectura sea valida


      valor=ADCINC_wGetData();                //valor adquirirá el valor de lectura


      ADCINC_fClearFlag();                    //reseteamos la bandera del ADC incremental


      temperatura= (float)valor*100/1023;           //convertimos los bits a flotantes


      LCD_Position(0,9);                     //posicionamos el LCD


      flotante=ftoa(temperatura,&estado);         //conversion para impresion en LCD


      LCD_PrString(flotante);                 //imprimimos el voltaje






      Delay10msTimes(20);     //creamos un retardo


      LCD_Control(1);         //resetamos la lcd





        • 1. Re: Problem whit PSOC1 ADCINC and LM35

          It would help if you upload your project here.

          • 2. Re: Problem whit PSOC1 ADCINC and LM35

              Hola, estoy empezando a programar en PSOC y no tengo problema con el ADCINC, hice un programa para leer un LM35, pero cuando me conected, a PSoC sólo lectura cero, si un remplace con una olla que se puede ver la variación, he estado buscando una explican pero no puedo encontrarlo. Espero que usted me puede ayudar. I Anex el código. perdón por mi redacción y los coments y en español.

            • 3. Re: Problem whit PSOC1 ADCINC and LM35

              Your code needs to be changed to this -




              while(ADCINC_fIsDataAvailable() == 0);    // Loop until value ready
              ADCINC_iClearFlagGetData();                   // Clear ADC flag and get data
              temperatura= (float)valor*100/1023;           //convertimos los bits a flotantes
              LCD_Position(0,9);                                     //posicionamos el LCD
              flotante=ftoa(temperatura,&estado);          //conversion para impresion en LCD
              LCD_PrString(flotante);                             //imprimimos el voltaje


              Has the PGA input been routed to a pin, and pin set to High Z analog ?




              Regards, Dana.

              • 4. Re: Problem whit PSOC1 ADCINC and LM35

                Don't forget you have to scale the A/D reading to compute actual degrees C, see attached for


                the way you setup LM35. And trhen scale that to the bargraph. eg. number of degrees per bar






                Regards, Dana.