Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Analóg-digitális átalakítás. Mit jelent? •Analóg jel: folyamatosan változik az időben, elvileg bármilyen értéket felvehet. idő (s) feszült ség (V)

Hasonló előadás


Az előadások a következő témára: "Analóg-digitális átalakítás. Mit jelent? •Analóg jel: folyamatosan változik az időben, elvileg bármilyen értéket felvehet. idő (s) feszült ség (V)"— Előadás másolata:

1 Analóg-digitális átalakítás

2 Mit jelent? •Analóg jel: folyamatosan változik az időben, elvileg bármilyen értéket felvehet. idő (s) feszült ség (V)

3 •Digitális jel: csak meghatározott értékeket vehet fel. Például 0V vagy 5V. Példa:

4 •Ha a digitális jel sok lehetséges értéket vehet fel, jól megközelítheti az analóg jelet. Például egy tíz bites ADC 10 biten 2 10 különböző lehetséges digitális értékkel közelíti az analóg jelet. 0-5V analóg jel esetén ez kb V-os ugrásokat jelent. Az átalakítás menete: Az átalakító adott időnként (mintavételi idő) mintát vesz a bementén levő analóg jelből és azt a hozzá legközelebb álló digitális értékkel helyettesíti.

5 Bemenetek: •Single ended: A láb fölhöz képesti feszültsége az átalakítandó jel, (F-port 8 lába) •Differenciális bemenet: A két láb feszültsége közti különbség az átalakítandó jel (ADC1,ADC0 és ADC3, ADC2 lábak). Ezeken a bemeneteken 1x,10x,200x előerősítést (gain) lehet beállítani.

6 Működési mód •Egyetlen konverziót hajtson végre •Folyamatosan konvertáljon •Az átalakításhoz használt referencia feszültség beállítása

7 Hogyan kell beállítani a működési módot, a bemeneti csatornát, a gain-t, hogyan kell kiolvasni a konvertált értéket stb •A megfelelő regiszterek megfelelő bitjeit kell beállítani, illetve kiolvasni. •Pl: •Az eredmény 10 bitje az ADCH illetve ADCL regiszterekben van, eredetileg jobbra igazítva. •Analog input channel and differencial gain: MUX bitek az ADMUX regiszterben. •ADMUX=0xED (ADC3-ADC2, 10xgain, 2.56V reference, left adjusted result, a táblázatból derül ki! ADMUX bitjei (h-l):REFS1,REFS0,ADLAR,MUX4,2,1,0 00 : internal Vref ADLAR bit: 0-jobbra igazítás az eredménynél 1-balra igazítás MUX4: –ADC0 single ended input ADC1,ADC0 differencial input 10x gain –>TB!

8 •ADCSRA –regiszter bitjei: A konverzió kezdete, vége. (kezdet: ADEN bit 1, vége ADEN bit 0) •Az átalakító képes az átalakításhoz kapcsolódó megszakításokat is kezelni! •(köv alk) •FELADAT: feladatlap kitöltése •Mintaproject beüzemelése •Az adc.c megértése stb

9 ADCH,ADCL a konvertált érték Ha kész a konverzió elindít egyeljárást: interrupt Kontrol, státusz ADCSRA Maga a konverter és a vezérlő áramkör bemenetválasztás •Gain választás: MUX dekóderből •Műveleti erősítő bemenetek

10 A konverzió akkor kezdődik amikor az ADSC bitet egyre állítjuk. Amikor vége a konverziónak lenullázódik. Ekkor az ADCR regiszterben van az eredmény. Folyamatos üzemmódban újra és újra konvertál. Ehhez az ADFR bitet az ADCSRA-ban 1-re kell állítani, utána kell indítani a konverziót. A folyamatos konvertálást úgy kell leállítani, hogy az ADCIF –et nullára húzzuk. A konverzió sebességét az órajel frekvencia valahanyad részére lehet beállítani. The prescaling is set by the ADPS bits in ADCSRA. The prescaler starts counting from the moment the ADC is switched on by setting the ADEN bit in ADCSRA. The prescaler keeps running for as long as the ADEN bit is set, and is continuously reset when ADEN is low.

11 The reference voltage for the ADC (VREF) indicates the conversion range for the ADC. Single ended channels that exceed VREF will result in codes close to 0x3FF. VREF can be selected as either AVCC, internal 2.56V reference, or external AREF pin. Az F-porthoz van kötve! F 0-7, ADC 0-7

12

13 Melyik mód van beállítva? void ADC_init(void) { unsigned int test_conversion; //A MUXn bitekkel allitjuk be az ADC csatornat ADMUX |= _BV(MUX0) | _BV(MUX1); /MUX0,MUX1  1, ADMUX |= (1 << REFS0) /*| (1 << REFS1)*/;//belso AVcc hasznalatanak engedelyezese //Az ADC engedelyezese es frekvencia osztasanak beallitasa, 8 MHz / 128 = 62.5 kHz ADCSRA |= (1 << ADEN); ADCSRA |= (1 << ADPS0) | (1 << ADPS1) | (1 << ADPS2); // ADCSRA &= ~_BV(ADFR);//Egyetlen egy konverzio, jobbra igazitas ADCSRA &= ~(_BV(ADFR));//Egyetlen egy konverzio, jobbra igazitas //Egyetlen egy beolvasast vegzunk, hogy a tobbi konvertalas pontos es gyorsabb legyen test_conversion = ADC_read(); }

14 int ADC_read(void) { unsigned char i; int ADC_temp; unsigned int ADCr = 0; ADCSRA |= _BV(ADEN); //Engedelyezzuk az ADC-t //Egy beolvasast vegzunk ADCSRA |= (1 << ADSC); //Egyetlen atalakitas while(!(ADCSRA & (1 << ADIF))); //Varakozunk mig a konverzio befejezodik, az ADIF jelzobit aktiv for (i=0;i<8;i++) //8-szor vegezzuk az ADC atalakitast, hogy pontosabb eredmenyt kapjunk { ADCSRA |= (1 << ADSC); //Egyetlen konverziot csinalunk while(!(ADCSRA & (1 << ADIF))); //Varunk mig az atalakitas be nem fejezodik. Az ADIF flag aktiv ADC_temp = ADCL; //Kiolvassuk az ADCL regisztert ADC_temp |= (ADCH << 8); //Kiolvassuk az ADCH regisztert ADCr += ADC_temp; //Az eredmeny (8 minta alapjan) osszegyujtese a tovabbi atlagolashoz } ADCr = ADCr >> 3; //8 minta kozeperteke ADCSRA &= ~_BV(ADEN); //Letiltjuk az ADC-t return ADCr; }

15 adc.c, adc.h –t beinkludolni! adc_init() adc_read() Használati példa: getvolt eljárás az adc.c-ben! void getVolt(void) { unsigned char volt[6]; unsigned int ADCresult = 0; ADCresult = ADC_read(); //előtte inicializálni kell! //Egy valos valtozot sztringge alakitjuk at dtostrf(3.27 * ADCresult / 1024, 5, 3, volt); //A PC-be kuldjuk a feszultseg erteket //ehhez soros kommunikáció is kell sendString("A beolvasas eredmenye: "); sendString(volt); sendString(" volt.\r"); }

16 adc.c,adc.h,uart.c,uart.h, uartinit,adcinit és a főprogram: main.c

17


Letölteni ppt "Analóg-digitális átalakítás. Mit jelent? •Analóg jel: folyamatosan változik az időben, elvileg bármilyen értéket felvehet. idő (s) feszült ség (V)"

Hasonló előadás


Google Hirdetések