;****************************************** ;* DASHPIC ADC TEST NOV 5TH 2008 * ;****************************************** ; ;THIS PROGRAM WILL READ ADC PORT 0 AND OUTPUT DATA IN BINARY ;TO 8 LEDS ON WISH BOX. VOLTAGES WILL BE MONITORED. ;1 VOLT = 51, 2.5 VOLTS=127, 0V=0, 5V=255 PERFECTLY LINEAR! ;This test invloved a 4066 connected (as they will be) to ;switch two inputs into one. RD,0 &RD,1 was used. Had problem ;with Port E's TRISE bit4 being set by accident. Only TRISE1,2,3 ;are direction regs. PSP set PortD into a slve port so no good. ;Once corrected, all works well! ;The min. delay after 4066 is switched is 6uS, but it ; could be done at end of ADC in prep for next pass. ; ;The NOPs are a little long, but the original delay before next ;acquisition was 8uS. Seemed ok. ;A good way to sample would be: Sample/switch 4066/send or process ; ;ADC test complete NOV 5 2008 23:20 ; by Sandy Sims LIST P=16F74 INDF EQU 0X00 TMR0 EQU 0X01 PCL EQU 0X02 STATUS EQU 0X03 FSR EQU 0X04 PORTA EQU 0X05 PORTB EQU 0X06 PORTC EQU 0X07 PORTD EQU 0X08 PORTE EQU 0X09 PCLATH EQU 0X0A INTCON EQU 0X0B PIR1 EQU 0X0C PIR2 EQU 0X0D TMR1L EQU 0X0E TMR1H EQU 0X0F T1CON EQU 0X10 TMR2 EQU 0X11 T2CON EQU 0X12 SSPBUF EQU 0X13 SSPCON EQU 0X14 CCPR1L EQU 0X15 CCPR1H EQU 0X16 CCP1CON EQU 0X17 RCSTA EQU 0X18 TXREG EQU 0X19 RCREG EQU 0X1A CCPR2L EQU 0X1B CCPR2H EQU 0X1C CCP2CON EQU 0X1D ADRES EQU 0X1E ADCON0 EQU 0X1F OPTION_REG EQU 0X81 TRISA EQU 0X85 TRISB EQU 0X86 TRISC EQU 0X87 TRISD EQU 0X88 TRISE EQU 0X89 PIE1 EQU 0X8C PIE2 EQU 0X8D PCON EQU 0X8E PR2 EQU 0X92 SSPADD EQU 0X93 SSPSTAT EQU 0X94 TXSTA EQU 0X98 SPBRG EQU 0X99 ADCON1 EQU 0X9F TIMER1 EQU 0X20 TIMER0 EQU 0X21 TIMER2 EQU 0X22 SSTATUS EQU 0X23 ORG 0000 GOTO START ORG 0004 NOP ;INTERUPT VECTOR ORG 0005 START BSF STATUS,5 ;TRISES ARE IN UPPER MEM! MOVLW B'11111111' MOVWF TRISA MOVLW B'00000111' ;ONLY LAST 3 ARE PORT DIRECTION!! MOVWF TRISE MOVLW B'00000000' MOVWF TRISB ;OUT FOR LEDS MOVLW B'11111100' ;RD0,RD1 FOR SWITCHING A 4066 MOVWF TRISD BCF STATUS,5 LOOP BSF STATUS,5 ;ADCON1 IS UPPER MOVLW B'00000000' MOVWF ADCON1 ;SET ALL ADC IN'S BCF STATUS,5 ;RESET TO LOWER MOVLW B'10000001' ;BITS 5-3 SEL PIN USING /32 MOVWF ADCON0 NOP ;Tad TIME MUST BE GREATER THAN 1.6uS..?.. NOP ;DATASHEET SAYS 16uS... NOP NOP NOP NOP NOP NOP BSF ADCON0,2 ;START ADCWAIT BTFSC ADCON0,2 GOTO ADCWAIT NOP MOVF ADRES,W ;GET ADC DATA, DOESN'T WORK IN SIM... MOVWF PORTB CALL DELAY2 ;TOGGLE FOR 4066 BTFSS SSTATUS,0 ;4066 SWITCH SHOULD BE ALLOWED GOTO SET4066_1 ;AT LEAST 5uS! (ON SCOPE) BTFSC SSTATUS,0 GOTO SET4066_2 SET4066RET CALL DELAY ;TO ALLOW 4066 TO STABILIZE GOTO LOOP SET4066_1 BSF PORTD,0 BCF PORTD,1 BSF SSTATUS,0 GOTO SET4066RET SET4066_2 BSF PORTD,1 BCF PORTD,0 BCF SSTATUS,0 GOTO SET4066RET DELAY MOVLW 0X12 MOVWF TIMER2 DLLP DECFSZ TIMER2 GOTO DLLP RETURN DELAY2 MOVLW 0X00 ;ABOUT 1 SECOND PER ADC INPUT MOVWF TIMER1 CLRF TIMER0 DELAY2LP CALL DELAY DECFSZ TIMER0 GOTO DELAY2LP DECFSZ TIMER1 GOTO DELAY2LP RETURN CLRRAM1 ;CLEARS LOWER PAGE OF RAM 0020 TO 007F movlw 0x20 ;initialize pointer movwf FSR ;to RAM CLRRAM1LP clrf INDF ;clear INDF register incf FSR,F ;inc pointer btfss FSR,7 ;all done? goto CLRRAM1LP ;no, clear next BYTE RETURN END