OSCILOSKOP S VÝSTUPEM NA GRAFICKÝ DISPLEJ

Bc. Kocián Daniel, Bc. Pazour Zbyněk

Obsah:   

            1)Úvod

            2)Realizace

            3)Závěr

            4)Literatura


Úvod

Cílem projektu bylo vytvořit jednoduchý osciloskop, který zobrazuje data na grafickém displeji. Jako převodník dat je použit integrovaný 10-ti bitový převodník mikroprocesoru ATmega16. Výsledná data jsou zobrazen na grafický displej o 128 x 64 pixelů s řadičem KS0108. Maximální frekvence vstupního periodického signálu je 5kHz a amplituda 5V špička-špička.

Realizace

Jádrem celého osciloskopu je mikroprocesor ATmega16, který má v sobě již zabudovaný 10-ti bitový AD převodník na portu A. Pomocí vnitřního multuiplexoru můžeme využívat všechny piny portuA (8 x 10-bitový převodník). Pro náš osciloskop byl vybrán převodník na portu PA1, na který přivedeme vstupní signál. Jelikož převodník snímá pouze kladné hodnoty napětí, musíme vstup převodníku ošetřit pro harmonický signál, jenž se pohybuje v rozmezí <-U, U>, posunutím stejnosměrné složky.

    Pro posunutí stejnosměrné složky slouží zapojení na obrázku 1. Zde jsou zapojeny dva OZ jako invertující sledovače napětí. První část OZ pouze invertuje vstupní signál. Do neinverujícího vstupu druhého OZ je přivedeno stejnosměrné napětí , které se přičítá k vstupnímu signálu na invertujícím vstupu a posunuje tím jeho stejnosměrnou složku. Pomocí trimru R5 lze pak velikost stejnosměrné složky měnit. Výsledný průběh pro sinusový signál lze vidět na obrázku 2, pilový průběh zde.



Obrázek 1:    Schéma zapojení pro posunutí stejnosměrné složky

Obr2 

Obrázek 2:   Průběh vstupního a výstupního (s posunutou stejnosměrnou složkou o +2,5V) signálu

   
    Program pro ovládání osciloskopu byl napsán v jazyce C (GCC). Při pokusu vytvořit osciloskop v reálném čase, jsme zjistili, že obsluha grafického displeje je značně časově náročná a maximální zobrazitelná frekvence se pohybuje okolo 100Hz. Z důvodů maximálního využití převodníku jsme se proto rozhodli napsat program pro osciloskop, který sice nebude pracovat v reálném čase, ale zobrazí nám průběh až do frekvence 5 kHz.

V prvním kroku hlavního programu obsluhy osciloskopu si navzorkujeme periodu  vstupního signálu. Vzorkovací frekvence je nastavena pomocí předděličky na fvzor = 77kHz což dokonale splňuje  vzorkovací teorém. Z důvodu nalezení minima a maxima amplitudy je navzorkováno 400 vzorků, i když na grafickém displeji máme nastavenou oblast pro zobrazení průběhu pouze na 100 pixelů (100 vzorků)..

//Navzorkovani periody//    
    for ( i=0;i<400;i++)
        {
        ADCSRA |= (1<<ADSC);                        //spusteni AD prevodu
        loop_until_bit_is_set(ADCSRA,ADIF);    //cekam dokud prevod neskonci
        data[i] = ADCW;                                     //vysledek ulozim do pole hodnot
        }


Po navzorkování periody probíhá zjištění maximální a minimální hodnoty napětí vstupního signálu. 


//nalezeni maxima a minima navzorkované amplitudy//
    maximum=0;
    minimum=1024;
    for ( i=0;i<300;i++)
    {
            if (maximum<data[i])             //    |
                {                                       //    |
                maximum=data[i];             //    } Nalezení maxima
                index_max=i;                    //    |
                }
               
                if (minimum>data[i])        //    |
                {                                     //    |
                minimum=data[i];             //    } Nalezení minima
                index_min=i;                    //    |
                }
                           
    }

Pro plynulé zobrazení vstupního signálu musíme zajistit, aby se signál zobrazoval vždy od stejné střední hodnoty.
//Nalezení středu amplitudy//
   
    stred = (maximum + minimum)/2;
    stred2=0;                           
    for ( i=0;i<300;i++)
    {

        if (data[i]<=stred)
        {
        if (data[i]>stred2 && data[i+1]>stred)
        {
        stred2=data[i];
        index_stred=i;
        if(stred2!=0 && data[i+1]>stred ) i=200;
        }
        }    
    }

Následující kód slouží pro výpočet aktuální hodnoty napětí špička-špička.


//Výpočet aktuální hodnoty napětí Vpp (špička-špička)
pomoc = (maximum-minimum);
vpp = (5*pomoc)/1023;                              //Napeti VPP  (V)
vpp2 = (((pomoc*50)/1023))-(vpp*10);     //Napětí Vpp  (mV)
sprintf (nap,"%d,%dV",vpp,vpp2);             //Konstanta pro zobrazení napětí


Po zjištění všech potřebných konstan už následuje nastavení rastru LCD displeje a zobrazení vstupního signálu. Pro přehledné zobrazení popisku os a  vstupního napětí Vp-p byl zvolen rozsah zobrazované oblasti  na  64*100 bodů pro vstupní signál.

//zobrazeni na displeji //
       
    for ( a=0;a<100;a++)                                                           //Rozsah zobrazované oblasti 63x100 pixelů    
    {
    data2 =63-(((63000/1023)*(data[index_stred+a]))/1000);   //Začátek zobrazení vždy od středu amplitudy (0V)
       
       
            if (a>0)
            {
            line (a-1,pred,a,data2,1);
            }
            pred=data2;
    }

Na následujících obrázcích jsou zachyceny námi změřené průběhy pro frekvenci 1kHz a  5kHz.


Sinus1k       Sinus5K
           Obrázek 3:    Sinusový průběh 1kHz                                                               Obrázek 4:    Sinusový průběh 5kHz




pila1k    Pila5K
           Obrázek 5:    Pilový průběh 1kHz                                                                    Obrázek 6:    Pilový průběh 5kHz
   



Obdelnik1k       Obdelnik5K
           Obrázek 7:    Obdélníkový průběh 1kHz                                                             Obrázek 8:    Obdélníkový průběh 5kHz       






Závěr

    Tvorba osciloskopu pomocí 8-bitového mikroprocesoru ATmega16 byl docela zajímavý projekt, kde jsme zjistili, že největším problémem nebyl mikroprocesor, ale grafický displej, jehož obsluha je časově velmi náročná. I přes tento problém byl vytvořen osciloskop, který pracuje do frekvence 5kHz. Celý  projekt byl orientován pro použití osciloskopu na vývojových deskách v laboratořích UREL, proto při použití  generátoru s posunem stejnosměrné složky  nejsou potřeba žádné další externí součástky a osciloskop jde realizovat na jakékoliv vývojové desce.
    Při tvorbě osciloskopu jako samostatného přístroje by šel program upravit pro přepínání rozsahů vstupního napětí, časové osy a mnoho dalších rozšíření. Současný program zabírá 50% programové paměti mikroprocesoru ATmega16. Celý program pro AVR studio lze stáhnout zde a zdrojový(hex) soubor zde.



Literatura

[1] Matoušek D. Práce s mikrokontroléry ATMEL AVR-ATmega16. Ben-Technická literatura 2006. ISBN 80-7300-174-8