You are here

Problem whit PSOC1 ADCINC and LM35 | Cypress Semiconductor

Problem whit PSOC1 ADCINC and LM35

Summary: 4 Replies, Latest post by danaaknight on 15 Oct 2012 06:14 AM PDT
Verified Answers: 1
Last post
Log in to post new comments.
maytzuc's picture
17 posts

 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





user_460349's picture
1362 posts

It would help if you upload your project here.

maytzuc's picture
17 posts

  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.


user_14586677's picture
7646 posts

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.




user_14586677's picture
7646 posts

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.

Log in to post new comments.