OSCILOSKOP S VÝSTUPEM NA GRAFICKÝ DISPLEJ
Bc. Kocián Daniel, Bc. Pazour Zbyněk
Obsah:
Ú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
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.

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

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