Pokročilé programovanie mikropočítačov v jazyku C. Diel č.2 Publikované: , Kategória: Mikroprocesory Skúmame ADCčko Ahoj

Podobné dokumenty
Pr_06

Úloha č.2 Meranie odporu rezistorov Vladimír Domček Astrofyzika semester Skupina č Laboratórne podmienky: Teplota: 22,6 C Tlak:

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Snímka 1

STRUČNÝ NÁVOD KU IP-COACHU

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

Resolution

Prezentace aplikace PowerPoint

Elektronické meracie prístroje

Import absencí z ASC

Prevodník USB/20mA

PL_FMS5713_004_

MERANIE U a I.doc

IQ Easy firmy Simco-ION Nová generácia výrobkov pre ovládanie statickej elektriny SÚHRN: Firma Simco-ION predstavuje novú generáciu výrobkov pre elimi

ZB_Daikin_SETUP_HPSU_compact_V52_ _00_0417_SK.book

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE Fakulta informatiky a informačných technológií STU Ústav počítačových systémov a sietí ZADANIE SEMESTRÁLNE

MO_pred1

STRUČNÝ NÁVOD KU IP-COACHU

VH ELECTRONICS Tel./Fax: , Sady Cyrila a Metoda 21/ Nová Dubnica SLOVENSKÁ REPUBLIKA Výrobca:

Hardwarové prerušenie Nasledujúci kód ukazuje inštaláciu obsluhy časovača vrátane jeho inicializácie // inicializace časovače, přerušení každou milise

PYROMETER AX-6520 Návod na obsluhu

VH ELECTRONICS Tel./Fax: , Sady Cyrila a Metoda 21/ Nová Dubnica SLOVENSKÁ REPUBLIKA Výrobca:

VSDC Free Video Editor stručný návod na používanie Link na sťahovanie softvéru: K prog

Sprievodný list SofComs.r.o., Priemyselná 1, Liptovský Mikuláš Program basic.sk Verzia ( ) Dátum Autor Ing. J. Malíček

Osciloskopický adaptér k TVP Publikované: , Kategória: Merače a testery Toho času vo fóre bola debata na tému, oscilosko

Regulované napájacie zdroje DC AX-3005DBL jednokanálový AX-3005DBL 3-trojkanálový

_manual_sk

1 Portál pre odborné publikovanie ISSN Heuristický adaptívny PSD regulátor založený na miere kmitavosti Šlezárová Alexandra Elektrotechnika

6 Kapitola 6 Výsledky vyšetrení počas projektov Lekári idú do ulíc a MOST 2008 Počas mesiacov júl a august v rámci projektu Lekári idú do ulíc a počas

Bombové hodiny prevedené vyvolajú vždy efekt WOW! Hodinky sú asi jedným z n

Microsoft PowerPoint - Prog_p08.ppt

AerobTec Device Terminal Zobrazovacie zariadenie a multimeter pre modelárov AerobTec Device Terminal Užívateľský manuál 1

PowerPoint-Präsentation

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií Ilkovičova 2, , Bratislava 4 Internet vecí v našich ž

Návod na obsluhu CompactIO 1

Záznamník teploty a vlhkosti AX-DT100 Návod na obsluhu

Microsoft Word - 18.doc

Elektronický ukazovateľ polohy s batériou Návod na použitie

Digitálne technológie v každodennom živote 3. ročník akademický rok 2019/2020 Harmonogram prednášok

Spustenie založenej VM mimo vmware ESX

Microsoft Word - ESD_-_DA_-_MA_-_Ucastnicka_verzia_video_V_3.docx

Užívateľský manuál FULL HD LED stropný monitor (AUX/HDMI/USB/FM-TX)

Manuál pre nastavenie tlače z VRP tlačiarní bluetooth Bluetooth Manuál pre nastavenie tlače z VRP tlačiarní -1-

Microsoft Word - Priloha_1.docx

(Microsoft Word Zadanie na s\372\235a\236 KROS DESIGN AWARD .doc)

dFlex Nitra spol. s r.o.

INTERNET BANKING Práca s tokenom VŠETKO, ČO JE MOŽNÉ with.vub.sk, Bank of

Microsoft PowerPoint - Paschenov zakon [Read-Only] [Compatibility Mode]

PowerPoint Presentation

Ako hrat Burlesque Queen V 1.4

7002

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

Externé mediálne karty Používateľská príručka

Preco kocka stací? - o tom, ako sú rozdelené vlastné hodnoty laplasiánu v limite, ked sú velké

(Microsoft Word - Registr\341cia \372\350tu Hik-Connect.docx)

Auna Weimar Návod na použitie Vážený zákazník, zakúpením produktu ste získali kvalitný produkt, ktorý odpovedá súčasnému stavu vývoj

NÁVRH UČEBNÝCH OSNOV PRE 1

Microsoft Word - 06b976f06a0Matice - Uzivatelska Dokumentacia

Microsoft Word - prirucka_katedry_nova

Záverečná správa Test sondy VARiON Plus 700 IQ - meranie NH4-N a NO3-N v aktivácii na ČOV Matejovce Vypracoval: Robert Bezák WTW meracia a analytická

Centrum vedecko-technických informácií, Odbor pre hodnotenie vedy, Oddelenie pre hodnotenie publikačnej činnosti Vyhľadávanie a práca so záznamami - C

Zobrazenie čísiel v počítači Celé nezáporné čísla - čísla bez znamienka dvojková sústava iné používané sústavy - šestnástková a osmičková BCD kódovani

Príloha č. 1 k USM_UGKK SR_6/2019

aplikácia do mobilého telefónu na stiahnutie digitálneho tachografu

Návod na obsluhu

Pracovný postup pre vypĺňanie údajov elektronického formulára IŠIS pre spravodajskú jednotku 1

76101_HHK_05_Kap2_SK

Microsoft Word prist_prava_ Popadic.doc

FAQ

Microsoft Word - 6 Výrazy a vzorce.doc

Manuál pre nastavenie tlače z VRP Bluetooth, USB tlačiarne Bluetooth, USB tlačiarne Manuál pre nastavenie tlače -1-

Prístupový kontrolér E inbio 16/260/460 Návod na použitie Návod na použitie Prístupový systém Kontrolér E inbio 16/260/460 Strana 1

Axiomet AX-150

1

Teória pravdepodobnosti Zákony velkých císel

Návod na obsluhu AX-7020

03_ControlFlow.dvi

DediĊnosť

ČASOVÝ HARMONOGRAM LABORATÓRNYCH CVIČENÍ Z PREDMETU ELEKTRICKÉ STROJE STRIEDAVÉ

C-Monitor WIN klient pre verziu 2.8

Pomôcka Setup Používateľská príručka

Hrúbkomer Elcometer 500 Spoľahlivé meranie hrúbky povlaku až do 10 mm na betóne a podobných substrátoch. rýchle, presné a opakovateľné meranie robustn

DJ 1T ID ver 1.2 Návod na použitie Návod na použitie Dverná jednotka DJ 1T ID Strana 1

IAB budicek - Branding Landscape & Research options_FINAL_Gregor.pptx

Január 2012 (verzie ) Popis zmien v systéme PROLUC

Konfigur[PleaseinsertPrerenderUnicode{á}intopreamble]cia dynamick[PleaseinsertPrerenderUnicode{é}intopreamble]ho smerovania na routroch Cisco - Seme

SK_mTransfer_Technicka_dokumentacia_ indd

Vlastná Vlastná tvorba tvorba Neobmedzene Neobmedzene Voľný Voľný obsah obsah my website Kdekoľvek Kdekoľvek na na internet internet Jednoduché Jednod

0022-vub-mobilne-tokeny-200x200-v03.indd

Spustenie skonvertovanej C-Image zálohy v MS Virtual PC

Používateľská príručka elektronických služieb pre žiadateľov o štatistické informácie október 2016

Sila [N] Sila [N] DIPLOMOVÁ PRÁCA Príloha A: Sila v ose skrutky v mieste predpätia P = 0,

DAHUA WEBOVÉ ROZHRANIE 1

test z informatiky - hardvér Test vytvoril Stanislav Horváth Vstupno - výstupné zariadenia Otázka č.1: Aké zariadenie je na obrázku? (1 bod) a) vstupn

PLATAN Hlohovec tel/fax:033/ tel:033/ , PRIMARE Heydukova 27, Bratislava tel:02/

Microsoft Word - prechod_euro_prolca.doc

PAGER V3.0

Vzorové riešenia úlohy 4.1 Bodovanie Úvod do TI 2010 Dôvod prečo veľa z Vás malo málo bodov bolo to, že ste sa nepokúsili svoje tvrdenia dokázať, prič

RAZER ABYSSUS ESSENTIAL Slovenská príručka Táto príručka slúži len ako návod základné vedomosti s hlavných funkcií a nastavení zariadenia. Podrobnejši

Prepis:

Pokročilé programovanie mikropočítačov v jazyku C. Diel č.2 Publikované: 15.11.2015, Kategória: Mikroprocesory www.svetelektro.com Skúmame ADCčko Ahojte programátori. Analog to Digital Converter (ADC) patrí bezpochyby medzi najdôležitejšie periférie každého MCU. Zámerne píšem MCU pretože existujú aj MPU, ktoré ADCčko pri svojej činnosti takmer vôbec nepotrebujú. Nechcem tu rozoberať načo nám ADCčko slúži, ale skôr sa zamerať na jeho vlastnosti a parametre z hľadiska dymaniky a presnosti, ktoré potrebujem poznať pred použitím vo finálnej aplikácii. Ako inak... použijem na to Atmegu8 s 10 bitovým ADCčkom. Hneď na úvod treba poznamenať, že je to prevodník s postupnou aproximáciu. Existuje mnoho iných typov AD prevodníkov. Najčastejšie sa v bežných MCU stretneme práve s prevodníkom s postupnou aproximáciou. MCU, ktoré sú určené na veľmi presné meranie, obsahujú takzvaný sigma-delta prevodník. Sigma-delta prevodník je všeobecne v porovnaní s prevodníkom s postupnou aproximáciou pomalší ale naopak je presnejší, dosahuje väčšie rozlíšenie a dosahuje vysokú linearitu v celom rozsahu merania. O AD prevodníkoch existuje mnoho článkov na webe, napr. tento. Datasheet Atmegy8 obsahuje okrem hlavnej kapitoly o ADCčku aj trochu skrytú kapitolu alebo tabuľku s charakteristikou ADCčka. Tabuľka je na strane 241 datasheetu. Spomínaná tabuľka je priložená aj v tomto článku a sú v nej vyznačené údaje, ktoré ma zaujímajú najviac. Tabuľka s charakteristikami ADCčka Prvé čo ma zaujíma je Resolution teda rozlíšenie. ADCčko na Atmege8 má 10 bitové rozlíšenie.väčšina modernejších MCU má ADCčko s nastaviteľným alebo meniteľným rozlíšením, napr. 10, 12, 14,16 a podobne. 10 bitové rozlíšenie

v jednoduchosti znamená, že AD prevodník je schopný rozlíšiť 2^10 (1024) úrovní, pričom jedna úroveň je U ref /2^10 (pre Atmegu 8 je to 5V/1024 = 4.88mV). Táto jedna úroveň sa označuje aj ako LSB (Least significant bit). Druhá vec čo ma zaujíma je Absolute Accuracy alebo aj presnosť ADCčka. Tu si môžeme všimnúť, že chyba ADCčka sa zvyšuje s narastajúcimi frekvenciou hodín ADCčka. 3 LSB pri maximálnej frekvencii hodín je, myslím si, veľmi slušná presnosť aj pri 10 bitovom rozlíšení. Datasheet Atmegy8 na stranách 196 až 198 stručne popisuje chyby ADCčka ako je INL, DNL, Offset a Gain Error. Ďalšia dôležitá vec je Conversion Time teda doba trvania jedného prevodu vo Free running mode. Je to mód kedy ADCčko v momente keď dokončí jeden prevod začne hneď druhý prevod. ADCčko Atmegy 8 dokáže jeden prevod vykonať za 13 us, ak je živené maximálnou frekvenciou hodín, teda podľa datasheetu 1MHz. Čím bude hodinový signál (frekvencia hodín) ADCčka nižšie tým sa doba prevodu predlžuje. S najkratšou dĺžkou prevodu suvisí aj posledný dôležitý riadok z tabuľky a to je Input Bandwidth. Je to vlastne maximálna frekvencia signálu, ktorú dokážem týmto ADCčkom na tomto MCU odmerať s tým, že výsledok mi bude dávať aspoň aký taký zmysel. Ako sa k tejto hodnote dopracovali? Pre tých, čo poznajú Schannon-Kotelnikov teorém je to viac menej jasné. Ale v podstate veľmi jednoducho. Zoberem si najkratšiu dobu prevodu teda 0,000013s dam na mínus prvú (dostanem frekvenciu) a podelím ešte dvomi. Preco delím dvoma? Presne o tom hovorí Shannon-Kotelnikov teorém. V skratke, frekvencia vzorkovania signálu musí byť minimálne dvakrát väčšia ako je frekvencia meraného signálu. Viac sa dočítate, keď zadáte Shannon Kotelnik teorem do googlu. Dobre, nechajme už teóriu teóriou a podme si niečo aj reálne vyskúšať. Hneď na úvod som vytvoril tabuľku frekvencie hodín pre ADCčko aj s dobou trvania prevodu pre jednotlivé hodiny ADCčka. Vstupné hodiny pre ADCčko idú najskôr cez deličku. Najmenšia delička je 2 a najväčšia 128. Delička hodín sa nastavuje v registri ADCSRA pomocou spopných troch bitov ADPS0, ADPS1 a ADPS2. Dobu trvania prevodu som meral veľmi podobne ako aj časy v predchádzajúcom článku. ADCčko som si spustil do free running modu a v prerušení od skončenia prevodu som nastavil ľubovolný pin do jednotky, prečítal som výsledok a pin som hodil naspät do nuly. Oscilátor atmegy som mal nastavený na 8 Mhz a postupne som menil hodnoty preddeličky hodín pre ADCčko. Meral som čas medzi dvoma prerušeniami od ADCčka. Ukážka kódu :

#include <avr/io.h> #include <avr/interrupt.h> #ifndef F_CPU #define F_CPU 8000000 #endif //globalna premenna adc volatile unsigned int adc; // prerusenie skoncenie AD prevodu ISR(ADC_vect){ PORTD = (1 << PD2); // PD0 do jednotky adc = ADC; // zapis vysledok prevodu PORTD &= ~(1 << PD2); // PD0 do nuly int main(){ OSCCAL= 0xBE; DDRD = 0x04; PORTD= 0x00; // PD2 ako vystupný pin ostatné ako vstupne // PD2 do nuly ADMUX = (1 << MUX0); //pin na ktorom meriam // zapnutie AD prevodnika, Free runing, preddelicka 128 pri frek. hodin 8MHz ADCSRA = (1 << ADEN) (1 << ADSC) (1 << ADFR) (1 << ADIE) (1 <<ADPS2) (1 <<ADPS1) (1 <<ADPS0); sei(); //povol globalne prerusenia while(1){

Tab.1 Tabuľka nameraných a dopočítaných hodnôt MCU 8MHz 4MHz 1MHz Preddelička ADC hodín pre ADC [khz] Doba prevodu [us] Max frekvencia meraneho signalu [khz] hodín pre ADC [khz] hodín pre ADC [khz] 2 4000 4.4 113.64 2000 500 4 2000 6 83.33 1000 250 8 1000 13 38.46 500 125 16 500 26 19.23 250 62.5 32 250 52 9.62 125 31.25 64 125 106 4.72 62.5 15.625 128 62.5 212 2.36 31.25 7.8125 Meranie som robil len pre frekvenciu MCU8 MHz. Z merania je vidieť, že doba prevodu je lineárne závislá od frekvencie hodín ADCčka. Preto som pre 4MHz a 1 MHz už meranie ani nerobil pretože očakávam rovnakú závislosť a väčšina nastavení sa prelína. Čo ma prekvapilo je to, že som mohol nastaviť hodiny pre ADCčko aj vyššie ako 1 MHz. 1Mhz je uvedený v datasheete ako maximálna hodnota pre hodiny ADCčka. Preto som sa v druhom príklade zameral na prenosť ADCčka v závislosti od nastavenia frekvencie hodín ADCčka. V druhom príklade opäť mením frekvenciu hodín ADCčka pomocou preddeličky. Po inicializácii ADCčka spustím prevod a uložím si prvých 256 výsledkov z meraní do poľa. Potom pomocou UARTU a ľubovolného softwaru pre prácu so sériovou linkou si celé pole vypíšem na obrazovku PC. Dáta z obrazovky jednoducho prekopírujem do excelu a analyzujem. Ja som použil Serial Com v3.0.0 (obr.2) od Luboša (http://lubosweb.php5.sk/serial-com-v3-0/). Knižnicu pre UART komunikáciu som použil od zawina, ktorú zverejnil vo svojom článku (http://svetelektro.com/clanky/programujeme-avr-v-jazyku-c-8-cast-511.html). Meral som napätie na napäťovom delici (R1 a R2). Najskôr bez filtračného kondenzátora C1 a potom aj s filtračným kondezátorom. (schéma zapojenia na obr.1) Výsledky sú zobrazené na grafoch 1 a 2. Meral som jednosmerné napätie preto sa mi C1 zišiel. Existujú však prípady, kedy filtračný C1 nie je vhodné použiť. Problematika AD prevodníkov je veľmi rozsiahla a líší sa projekt od projektu. Obr.1 Schéma zapojenia Ukážka kódu:

#include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include <stdio.h> #include "uart.h" #ifndef F_CPU #define F_CPU 8000000 #endif //globalna premenna adc volatile unsigned int adc; volatile unsigned int result[256]; volatile char counter = 0; // prerušenie na akciu skončenia AD prevodu ISR(ADC_vect){ result[counter]=adc; // zapis vysledok prevodu counter++; int main(){ char text[32]; int i; OSCCAL= 0xBE; ADMUX = (1 << MUX0); //referencia 5V, nastavenie pinu na ktorom meriam. // zapnutie AD prevodnika, Free runing, preddelicka 128 pri frek. hodin 8MHz ADCSRA = (1 << ADEN) (1 << ADSC) (1 << ADFR) (1 << ADIE) (1 <<ADPS2) (1 <<ADPS1) (1 <<ADPS0); // inicializacia uart na rychlost 19200bd uart_init(19200); sei(); //povol globalne prerusenia while(1){ if (counter == 255) { ADCSRA = 0x00; //vypnutie ADCcka // vypis vysledkov na obrazovku PC for (i=0;i<255;i++) { sprintf(text,"%dn",result[i]); uart_puts(text); counter=0;

Obr.2 Serial Com 3.0, software pre prácu so sériovou linkou od Luboša Graf č.1 Meranie bez C1, mením hodiny pre ADC.

Graf č.2 Meranie s C1, mením hodiny pre ADC Záver si môže spraviť každý. Ja sa ho pokúsim zhrnúť do nasledovných bodov: Čím má ADCčko nižšiu frekvenciu hodín, tým meria alebo malo by merať presnejšie ale zároveň aj dlhšie. ADCčko na Atmege 8 dokáže merať aj s frekvenciou hodín vyššou ako je datasheetovych 1MHz ale presnosť klesá, aj keď nie nejako rapídne. Podľa mňa je to stále veľmi slušná presnosť. Presnosť merania závisí aj od návrhu hardweru. Meranie s C1 (graf č.2) bolo presnejšie pre všetky hodnoty clockov v porovnaní s meraním bez C1 (graf č.1). Výber vhodného ADCčka a aj MCU treba vždy správne uvážiť. Treba brať dôraz na to čo idem merať, aký signál chcem merať, akú presnosť požadujem, ako často potrebujem merať, či potrebujem aj niečo s výsledkom ďalej robiť a podobne. Použitý hardware: R1 = 680kΩ, R2 = 300kΩ, C1 = 0,1uF a pár káblíkov Atmega 8 Development board. USB to RS232 prevodník AVR STK500 ako programátor Toľko tento článok. Chcem na záver len pripomenúť, že somv tomto článku pracoval s AD prevodníkom s postupnou aproximáciou. Niektoré závery nemusia pre iné typy prevodníkov platiť. V budúcom článku sa trochu viac pohráme s úpravou a spracovaním nameraného signálu. Skúsime si nameraný signál softwarovo filtrovať.