ADC (Anlog to
digital Coverter)with LPC2148 (ARM) :
Program: ADC using Temperature Sensor :
#include<lpc214x.h>
#include<stdio.h>
#define PLLE 0
#define PLLC 1
#define PLOCK 10
#define rs 16
#define rw 17
#define en 18
#define lcdport IO0SET
#define lcdportclr IO0CLR
void daten(void);
void cmnd(void);
void pllinit(void);
void delay(int);
void lcdcmd(char);
void lcddata(char);
void lcdinit(void );
void lcdstring( char *);
void adcinit(void);
unsigned long int temp;
char res[4];
int main()
{
PINSEL0=0x000;
PINSEL2=0;
IO1DIR=0xffff0000;
pllinit();
lcdinit();
adcinit();
lcdstring("ADC VAL 4 TMP IS:");
while(1)
{
AD0CR|=(1<<24);
while((AD0GDR & (unsigned long )(1<<31))==0);
temp=(AD0GDR>>6)&0x3ff;
lcdcmd(0xc0);
sprintf(res,"%d",temp/3);
lcdstring(res);
delay(10);
}
}
void adcinit()
{
PINSEL1=(1<<24); //select AD0.1 Functionality
AD0CR=0x00200302;
}
void lcdinit()
{
IO0DIR|=(0xff<<16);
lcdcmd(0x02);
lcdcmd(0x28);
lcdcmd(0x01);
lcdcmd(0x0e);
lcdcmd(0x80);
}
void lcdcmd(char ch)
{
IO0SET = ((ch&0xf0)<<15);
cmnd();
IO0CLR = ((ch&0xf0)<<15);
lcdport = (((ch<<4)&0xf0)<<15);
cmnd();
lcdportclr = (((ch<<4)&0xf0)<<15);
}
void lcddata(char ch)
{
lcdport = ((ch&0xf0)<<15);
daten();
lcdportclr = ((ch&0xf0)<<15);
lcdport = (((ch<<4)&0xf0)<<15);
daten();
lcdportclr = (((ch<<4)&0xf0)<<15);
}
void cmnd()
{
lcdportclr = (1<<rs);
lcdportclr = (1<<rw);
lcdport = (1<<en);
delay(1);
lcdportclr = (1<<en);
delay(2);
}
void daten()
{
lcdport = (1<<rs);
lcdportclr = (1<<rw);
lcdport = (1<<en);
delay(1);
lcdportclr = (1<<en);
delay(5);
}
void lcdstring(char *x)
{
while(*x != '\0' )
{
lcddata(*x);
x++;
}
}
void delay(int ms)
{
T1CTCR=0x00;
T1TC=0;
T1PC=0;
T1PR=59999;
T1TCR=0x02;
T1TCR=0x01;
while( T1TC != ms);
T1TCR=0;
}
void pllinit()
{
PLL0CFG=0x24;
PLL0CON=PLL0CON|(1<<PLLE);
PLL0FEED=0xAA;
PLL0FEED=0x55;
//PLL0CON=PLL0CON|(1<<PLLC);
while( (PLL0STAT & (1<<PLOCK))==0);
PLL0CON=PLL0CON|3;
PLL0FEED=0xAA;
PLL0FEED=0x55;
VPBDIV=0x01;
}
Program: ADC using Temperature Sensor :
#include<lpc214x.h>
#include<stdio.h>
#define PLLE 0
#define PLLC 1
#define PLOCK 10
#define rs 16
#define rw 17
#define en 18
#define lcdport IO0SET
#define lcdportclr IO0CLR
void daten(void);
void cmnd(void);
void pllinit(void);
void delay(int);
void lcdcmd(char);
void lcddata(char);
void lcdinit(void );
void lcdstring( char *);
void adcinit(void);
unsigned long int temp;
char res[4];
int main()
{
PINSEL0=0x000;
PINSEL2=0;
IO1DIR=0xffff0000;
pllinit();
lcdinit();
adcinit();
lcdstring("ADC VAL 4 TMP IS:");
while(1)
{
AD0CR|=(1<<24);
while((AD0GDR & (unsigned long )(1<<31))==0);
temp=(AD0GDR>>6)&0x3ff;
lcdcmd(0xc0);
sprintf(res,"%d",temp/3);
lcdstring(res);
delay(10);
}
}
void adcinit()
{
PINSEL1=(1<<24); //select AD0.1 Functionality
AD0CR=0x00200302;
}
void lcdinit()
{
IO0DIR|=(0xff<<16);
lcdcmd(0x02);
lcdcmd(0x28);
lcdcmd(0x01);
lcdcmd(0x0e);
lcdcmd(0x80);
}
void lcdcmd(char ch)
{
IO0SET = ((ch&0xf0)<<15);
cmnd();
IO0CLR = ((ch&0xf0)<<15);
lcdport = (((ch<<4)&0xf0)<<15);
cmnd();
lcdportclr = (((ch<<4)&0xf0)<<15);
}
void lcddata(char ch)
{
lcdport = ((ch&0xf0)<<15);
daten();
lcdportclr = ((ch&0xf0)<<15);
lcdport = (((ch<<4)&0xf0)<<15);
daten();
lcdportclr = (((ch<<4)&0xf0)<<15);
}
void cmnd()
{
lcdportclr = (1<<rs);
lcdportclr = (1<<rw);
lcdport = (1<<en);
delay(1);
lcdportclr = (1<<en);
delay(2);
}
void daten()
{
lcdport = (1<<rs);
lcdportclr = (1<<rw);
lcdport = (1<<en);
delay(1);
lcdportclr = (1<<en);
delay(5);
}
void lcdstring(char *x)
{
while(*x != '\0' )
{
lcddata(*x);
x++;
}
}
void delay(int ms)
{
T1CTCR=0x00;
T1TC=0;
T1PC=0;
T1PR=59999;
T1TCR=0x02;
T1TCR=0x01;
while( T1TC != ms);
T1TCR=0;
}
void pllinit()
{
PLL0CFG=0x24;
PLL0CON=PLL0CON|(1<<PLLE);
PLL0FEED=0xAA;
PLL0FEED=0x55;
//PLL0CON=PLL0CON|(1<<PLLC);
while( (PLL0STAT & (1<<PLOCK))==0);
PLL0CON=PLL0CON|3;
PLL0FEED=0xAA;
PLL0FEED=0x55;
VPBDIV=0x01;
}
Thanks for above article!!
ReplyDeleteI want to interface multiple sensors with lpc2148.Is there any reference How do I select and read multiple ADC in LPC2148.