00001
00002
00003
00004
00005 #define USE_OR_MASKS
00006 #include "piccolo_all.h"
00007 #include "adc.h"
00026
00027 #if !defined(USE_INTERRUPT)
00028 #error "Nincs definiálva az USE_INTERRUPT szimbólum!"
00029 #endif //USE_INTERRUPT
00030 #if !defined(USE_USB)
00031 #error "Nincs definiálva az USE_USB szimbólum!"
00032 #endif //USE_USB
00033
00034 #if defined(__18F14K50)
00035 #define CH_POT ADC_CH10 //a potméter AN10-re csatlakozik
00036 #define CH_THERMO ADC_CH11 //a hőmérő AN11-re csatlakozik
00037 #define VREF_IN_mV 3300 //VDD = 3,3 V milivoltokban
00038
00039 #define vref 0x3FF //A VDD-hez tartozó ADC érték
00040 #elif defined(__18F4550)
00041 #define CH_POT ADC_CH0 //a potméter AN0-ra csatlakozik
00042 #define CH_THERMO ADC_CH1 //a hőmérő AN1-re csatlakozik
00043 #define VREF_IN_mV 5000 //VDD = 5,0 V milivoltokban
00044 #define vref 0x3FF //A VDD-hez tartozó ADC érték
00045 #else
00046 #error "A választott mikrovezérlőt nem támogatja a PICCOLO project!"
00047 #endif
00048
00049
00050 #pragma interrupt hi_isr
00051 void hi_isr() {
00052 USBDeviceTasks();
00053 }
00054
00055 #pragma interruptlow lo_isr
00056 void lo_isr() {
00057 }
00058
00066 void Init_ADC(void) {
00067 #if defined(__18F14K50)
00068 TRISBbits.TRISB4 = 1;
00069 TRISBbits.TRISB5 = 1;
00070 OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD,
00071 CH_POT | ADC_INT_OFF,
00072 ADC_REF_VDD_VSS,
00073 ENABLE_AN10 | ENABLE_AN11);
00074 #elif defined(__18F4550)
00075 TRISAbits.TRISA0 = 1;
00076 TRISAbits.TRISA1 = 1;
00077 OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD,
00078 CH_POT | ADC_INT_OFF | ADC_REF_VDD_VSS,
00079 ADC_2ANA);
00080 #else
00081 #error "A választott mikrovezérlőt nem támogatja a PICCOLO project!"
00082 #endif
00083 }
00084
00091 unsigned int read_ADC(unsigned char chan) {
00092 SelChanConvADC(chan);
00093 while (BusyADC());
00094 return ReadADC();
00095 }
00096
00097 void main(void) {
00098 long a,b;
00099 int i;
00100 InitializeSystem();
00101 Init_ADC();
00102 while (!usb_cdc_kbhit()) {
00103 ProcessIO();
00104 }
00105 #if defined(__18F14K50)
00106 outString("PICCOLO-14K50 adclib.c program\n");
00107 #else
00108 outString("PICCOLO-4550 adclib.c program\n");
00109 #endif
00110 while (1) {
00111 a=0L; b=0L;
00112 for(i=0; i<VREF_IN_mV; i++) {
00113 a+=read_ADC(CH_POT);
00114 b+=read_ADC(CH_THERMO);
00115 }
00116 a=a/vref;
00117 outString(" Vpot = ");
00118 outdec(a,3);
00119 outString(" V Hőmérséklet = ");
00120 b=b/vref-500L;
00121 outdec(b,1);
00122 outString(" C \n");
00123 delay_ms(2000);
00124 }
00125 }