Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: AD0 not working properly - help

2006-03-03 by Sutton Mehaffey

Sorry.  Using LPC2148 on an Embedded Artists Quickstart and Prototype
Board.  Prototype board is nice to have.  Conversion starts because I
get the DONE bit set after a few cycles.  But value read is always all
10 bits high.  I've tried all 3 AD0 (0 doesn't exist) channels (1
channel was determined bad - it has a short to ground).  Haven't
figured out why yet on the all high readings.

Sutton



--- In lpc2000@yahoogroups.com, Richard Duits <yahoo@...> wrote:
>
> You did not say which part you are using. The issues with the ADC pins 
> not being fully 5 volt tolerant may be solved in the newer parts 
> (LPC214x, etc).
> 
> The others items were things I would check or do diffirently, I had no 
> idea if they are the cause of your problem. Are you sure the conversion 
> starts? You can add a counter to the wait loop to see if it waits a few 
> cycles. If it doesn't, you did not start the AD conversion and you need 
> to check the value you write to the ADCR register.
> 
> Richard.
> 
> 
> Sutton Mehaffey wrote:
> > Richard,
> >
> > I had these set up in an init file that I didn't include with the
code.
> >
> > Also, it didn't matter if I did the write to AD0CR all at once or
> > separate.  No change in the data.
> >
> > I couldn't find anything in the errata sheet.  I printed out Errata
> > 1.2 released on 2/27.  Where is the errata you were referring to?
> >
> > Sutton
> >
> >
> > IODIR0 &= 0x8FFFFFFF;   // AD0 (P0.28, P0.29, P0.30) defined as inputs
> > PCONP |= 0x00001000;    // Enable AD0
> > PINSEL1 |= 0x15000000;  // AD0.1, AD0.2, AD0.3 all defined
> >
> > AD0CR = 0x01200404;
> >
> > // AD0CR |= 0x00200000;  // turn on AD0
> > // AD0CR |= 0x00000400;  // divide 12Mhz clock by 3 (max 4.5Mhz
ADC clk)
> > // AD0CR |= 0x00000004;  // select channel AD0.2
> > // AD0CR |= 0x01000000;  // start conversion now
> >
> > while ((AD0STAT & 0x00000004) == 0);  // DONE2 status bit in AD0STAT
> > result = (AD0DR2 & 0x0000FFC0) >> 6;  // bits 6-15 are result (0-2055)
> >
> >
> >
> >
> > --- In lpc2000@yahoogroups.com, Richard Duits <yahoo@> wrote:
> > >
> > > You should start the AD conversion with a single write and not a
series
> > > of read-modify-write operations.
> > >
> > > Also make sure that none of the ADC capable pins stay below 3.3 Volt
> > > even if they are not used as ADC inputs (see errata for more info).
> > >
> > > Make sure you configure the pin as ADC input with the pin
configuration
> > > registers.
> > >
> > > Regards,
> > > Richard.
> > >
> > >
> > >
> > >
> > > Sutton Mehaffey wrote:
> > > > Please help us to improve Yahoo! Groups. Take the survey now!
> > > > <http://v2.decipherinc.com/survey/yahoo/yah05014?list=18>
> > > > I am trying to read a battery voltage (~12V) on AD0 channel 2.
 I have
> > > > a breadboard circuit with a voltage divider that is working
properly
> > > > that gives a reading between 1.8V and 2.3V more or less.  I am
using a
> > > > variable power supply to generate these voltages.
> > > >
> > > > When I connect the 1.8-2.3V to P0.29 (AD0.2), I read CFF (all
10 bits
> > > > high) no matter what.  Can someone tell by the code below if I
have a
> > > > setting wrong?  My PCLK is 12Mhz.
> > > >
> > > >
> > > > AD0CR |= 0x00200000;  // turn on AD0
> > > > AD0CR |= 0x00000400;  // divide 12Mhz clock by 3 (max 4.5Mhz
ADC clk)
> > > > AD0CR |= 0x00000004;  // select channel AD0.2
> > > > AD0CR |= 0x01000000;  // start conversion now
> > > >
> > > > while ((AD0STAT & 0x00000004) == 0);   // DONE2 status bit in
AD0STAT
> > > > result = (AD0DR2 & 0x0000FFC0) >> 6;   // bits 6-15 are result
> > (0-2055)
> > > >
> > > > DONE2 is set, and result is always CFF.
> > > >
> > > > Sutton - dodge1955
> > >
> >
> >
>

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.