Re: AtoD (again)
"Kevin L. Pauba" <[email protected]> Wed, 24 May 2006 22:48:24 -0500
| Newsgroups | gmane.comp.lang.forth.picforth |
|---|---|
| Message-ID | <[email protected]> |
David Trethewey wrote: > Hi all, > Sorry about that previous message ( forgot the shift when I hit enter ) > I am currently working on a project fir the pic16f876 and I am using > picforth. My concern is with the analog to digital converter module. I > have read the documentation for the pic and its A-to-D registers and > have come across a few problems. First, the documentation says, for > the ADCON1 register, bits 0,1,2,3 and 7 are used, but in the > picforth.fs file these are not the bits used, and they do not have the > corresponding names. > My second problem is from what looks to me to be a typo of some kind. > In the pdf datasheet it lists the bits of the ADCON0 register, and it > gives a brief description of each one. Under the go//done bit it > explains: > GO/DONE: A/D Conversion Status bit > If ADON = 1: > 1 = A/D conversion in progress (setting this bit starts the A/D > conversion) > 0 = A/D conversion not in progress (this bit is automatically cleared > by hardware when the A/D > conversion is complete) > This clearly is confusing, because it is in fact the next ( > implemented ) bit that is named ADON. Its description: > ADON: A/D On bit > 1 = A/D converter module is operating > 0 = A/D converter module is shut-off and consumes no operating current > > Any helpful hints for implelentation would be gratefully appreciated. > Thanks in advance. > >------------------------------------------------------------------------ > >_______________________________________________ >PicForth mailing list >[email protected] >http://lists.rfc1149.net/mailman/listinfo/picforth > > Here's some code that I have used that works with an '877 (and I would think that it would work with the '876): pic16f87x include flib.fs \ define the variables used 2 pin-c LED0 3 pin-c LED1 : adcReadLowRes ( -- n ) adif bit-clr \ Clear A/D done flag 100us \ Stabilize after channel change go//done bit-set \ Start conversion begin go//done bit-clr? \ Wait for conversion to complete until adresh @ \ Use only the top 8 bits ; main : VariableFlashingLED ( -- ) init \ Initialize the ports $81 adcon0 ! \ Fosc/32, channel 0, ADC on $0e adcon1 ! \ Left justified, RA0 analog, \ RA1..RA7 digital LED0 >output LED0 high \ Initialize outputs LED1 >output LED1 high begin adcReadLowRes dup ( -- n n ) *10ms LED0 low ( -- n ) *10ms LED0 high ( -- ) again ; fosc-hs set-fosc \ High-speed (20MHz) oscillator false set-wdte \ Do not use watchdog timer false set-lvp \ No low-voltage programming