gnupic: Pic A/d Weirdness.


Previous by date: 9 Nov 2002 20:47:25 -0000 Re: 16F628 timer0, Scott Dattalo
Next by date: 9 Nov 2002 20:47:25 -0000 Re: Pic A/d Weirdness., Scott Dattalo
Previous in thread:
Next in thread: 9 Nov 2002 20:47:25 -0000 Re: Pic A/d Weirdness., Scott Dattalo

Subject: Pic A/d Weirdness.
From: Declan Moriarty ####@####.####
Date: 9 Nov 2002 20:47:25 -0000
Message-Id: <02110920431501.00832@genius.chateau.dec>

I have a little pic project goine here - e v e n t u a l l y!

The one fly in the ointment is a temprature routine, in which my A/D doesn't 
make sense, but returns a value of 3ff for the 10 bits :-(

The pic (a 16f877) is grounded to the - side of a -1.5V battery. Vref- is to 
the positive side of the -1.5V battery. Vref+ is exactly 1.2V above that. My 
temprature signal comes in at -Vref  +0.25V for 25 degrees C - I should get a 
reading of ~ 0x0d5 (0.25 / (1.2 /1024)). I flashed another configuring the 
pic to use  a 5V reference.  My reading this time should have been ~(1.75 / 
(5V/1024)) or 0x166; This time I saw 0x000 for the 10 bits. Here's the code 
I'm using  to set up in order of it should appear (I've not shown the bank 
change instructions, but they're there). Spot the gotcha? I don't. I don't 
know what to point a finger at. The resolving code simulated fine.

; INIT stuff
         clrf PORTA              ; clears data latches.
         clrf ADCON0             ; Sets a/d, but off
         movlw 0x41              ; W=0100 0001
         movwf PIE1              ; Bank1: Sets timer1 & adc as int. sources
         clrf TRISA
         movlw 0x1f              ; W= 0001 1111                               
                    
                 movwf TRISA             ; PORTA = 5 inputs
         movlw 0x8c              ; W=1000 1100
         movwf ADCON1            ; Bank1: Sets 3 a/d &2 ref inputs
         clrf ADRESL             ; clears low result byte of adc
         bsf ADCON0, 0           ; Turns A/D on, but idle.
         clrf ADRESH             ; Clears high result byte of a/d
         bsf INTCON, PEIE        ; enables Peripheral interrupts. Globally 
disabled still
         bsf INTCON, GIE         ; Turn on global interrupts.
; To Start a conversion
        bsf ADCON0, 2   ;  Starts A/D Conversion on RA0
; This responds with an interrupt
         btfsc PIR1, ADIF        ; A/D interrupt? 
         call ADC                ; Call temperature routine

; And finally
         bcf PIR1, ADIF  ; clears ADC interrupt signal

The processing routine dumps ADRESL to 0x72 which is readable from all bamks, 
then goes back to Bank 0 for sorting out the display of data.



-- 
	Regards,

	Declan Moriarty

Applied Researches - Ireland's Foremost Electronic Hardware Genius

	A Slightly Serious(TM) Company

Without the optimist, the pessimist wouldn't know how happy he isn't



Previous by date: 9 Nov 2002 20:47:25 -0000 Re: 16F628 timer0, Scott Dattalo
Next by date: 9 Nov 2002 20:47:25 -0000 Re: Pic A/d Weirdness., Scott Dattalo
Previous in thread:
Next in thread: 9 Nov 2002 20:47:25 -0000 Re: Pic A/d Weirdness., Scott Dattalo


Powered by ezmlm-browse 0.20.