; ADC - pokusy ; na pinu AN10 - RB4 je vstup AD prevodniku ; dale pouzit citac TMR4 , tim generuji preruseni po 1 ms . LIST P=PIC16F1708 ; typ procesoru, PRED include #include p16F1708.inc ; nacucne uvedeny file ; podivejte se, co je v nem ; najdeme ho v C:\Program Files (x86)\Microchip\MPLABX\v3.15\mpasmx CODE __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _CLKOUTEN_OFF ; & _CLKOUTEN_OFF timhle se da vypnout vnitrni oscilator na pinu RA4 - pin 3 __CONFIG _CONFIG2, _WRT_OFF & _LVP_OFF & _PPS1WAY_ON & _ZCDDIS_ON & _PLLEN_OFF & _STVREN_ON & _LPBOR_OFF & _BORV_HI & _LPBOR_OFF pocitatko: equ 0x20 org 0x0000 ; processor reset vector GOTO START ; go to beginning of program org 4 banksel PIR1 ; vsechny PIR ve stejne bance - strana 25 datasheetu btfsc PIR2,TMR4IF goto odcitace btfsc PIR1,ADIF goto odADC goto $ ; sem to nikdy nesmi dolezt - fatalni chyba odcitace: bcf PIR2,TMR4IF banksel PORTB bcf PORTB,7 ; na zacatku prevodu nulujeme SS banksel pocitatko movf pocitatko,0 incf pocitatko banksel ADCON0 bsf ADCON0,1 ; odstartuji prevod pomoci bitu GO/DONE retfie odADC: bcf PIR1,ADIF banksel ADRESH movf ADRESH,0 ; sem breakpoint nop ; a podivame se do Variables, co se prevedlo movf ADRESL,0 nop banksel PORTB bsf PORTB,7 ; na konci prevodu do 1 retfie ; TODO ADD INTERRUPTS HERE IF USED START ; oscilator 0 1101 x 1x nechci PLL, 4MHz oscil., x, vnitrni oscilator ; 0110 1x1x 0x6a banksel INTCON clrf INTCON banksel OSCCON movlw 0x6a ; 0110 1010 - 1101 pro delicku - 4MHz movwf OSCCON movlw 0 ; stredni frekvence movwf OSCTUNE banksel ANSELA clrf ANSELA clrf ANSELC clrf ANSELB bsf ANSELB,4 ; tady je vstup AD prevodniku AN10 bsf ANSELA,1 ; RA AN1 - pro pokusy, vstup referencniho napeti banksel TRISA movlw 0xff movwf TRISA movwf TRISB movwf TRISC bcf TRISB,7 ; vystupni, ; v klidu 1, po dobu převodu v 0 banksel T4CON ; 1 msec na preruseni, takze delim 1000 movlw .249 ; 4 v prescalleru, 250 v RP4 movwf PR4 ; 1 v PR4 znamena, ze delime 2 !!!!!!! Proto o 1 mene movlw 0x05 ; x000 0101 movwf T4CON banksel FVRCON movlw 0x82 ; referencni napeti 2.048V movwf FVRCON ; jen pro pokusy, v tomto programu nepouzivame ; ADCON0 x010 1000 AN10, zatim vypnut, Go/DONE v 0 banksel ADCON0 movlw 0x28 movwf ADCON0 ; ADCON1 1001 x000 right justified ; Fosc / 8 - 2 mikrosec TAD bity 6-4 ; bit2 - Uref- je GND ; bity 1-0 Uref+ je +5V movlw 0x90 ; pak si to zmente a hrajte si s tim 0x90 movwf ADCON1 ; ADCON2 0000 xxxx trigsel je bitem CO/DONE movlw 0x00 movwf ADCON2 bsf ADCON0,0 ; tim zapiname ADC banksel PIE2 bsf PIE2,TMR4IE bsf PIE1, ADIE ; registry PIE1 a IE2 jsou ve stejne bance banksel pocitatko clrf pocitatko bsf INTCON, PEIE bsf INTCON,GIE sem: nop nop nop goto sem END