Elektronika.lt
 2012 m. gegužės 25 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale  Ieškoti LT | EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 NaujienosSąrašas
 StraipsniaiSąrašas
 Vaizdo siužetaiSąrašas
 Nuolaidos, akcijosSąrašas
 Produktų apžvalgosSąrašas
 Naudingi patarimaiSąrašas
 Vykdomi projektaiSąrašas
 Schemų archyvasSąrašas
 - Garso technika
 - Automobilių elektronika
 - Buitinė elektronika
 - Maitinimo šaltiniai
 - Mikrovaldikliai
 - Kompiuterių elektronika
 - Radiotechnika
 - Šviesos efektai
 - Įvairi elektronika
 Teorija, žinynaiSąrašas
 Nuorodų katalogai
 Įvairūs siuntiniai
 Bendravimas
 Skelbimų lenta
 Robotų kūrėjų klubas
 RTN žurnalo archyvas






 Verta paskaityti
Gegužės 25 d. 12:22
Netrukus virtualioje erdvėje duris atvers elektroninis prekybos centras „mamy.lt“
Gegužės 25 d. 07:19
Marko Zuckerbergo invazija į Silicio slėnį
Gegužės 24 d. 20:03
(Ne)realus taupymo planas: atvirasis kodas valstybinėse institucijose
Gegužės 24 d. 13:54
Post „Kinect“ era: judesius atpažins elektromagnetiniai laukai ir garso bangos
Gegužės 24 d. 10:04
Išrinkti perspektyviausi nacionaliniai išradimai
Gegužės 24 d. 06:52
Kokie patentuoti išradimai yra sėkmingi?
Gegužės 23 d. 18:51
Esame skaitmeninė karta? „Eurobarometro“ tyrimas apie asmens duomenų apsaugą internete
Gegužės 23 d. 13:45
Kas kaltas dėl „Facebook“ akcijų smukimo? (1)
Gegužės 23 d. 08:47
„Dropbox“ – jūsų duomenys padebesy
Gegužės 23 d. 07:52
Mobilusis telefonas siejamas su Lietuvos mokinių galvos skausmais, nerimu ir dilgčiojimu ausyse
 Schemų archyvas » Mikrovaldikliai Dalintis | Spausdinti

Stereo garso lygio indikatorius su AVR mikrovaldikliu

Publikuota: 2005-03-06 14:48
Tematika: Mikrovaldikliai
Tipas: Paprasta
Autorius: el. paštas Darius Grigaitis
Aut. teisės: el. paštas ©Elektronika.lt

Pagrindinis stereo garso lygio indikatoriaus elementas yra „Atmel“ firmos AVR mikrovaldiklis „Atmega16“. Papildomai prietaiso pagaminimui reikės 16 šviesos diodų, 17–16 MHz kvarcinio rezonatoriaus, kelių kondensatorių bei mažos galios varžų...

 Rodyti komentarus (18)
Įvertinimas:  1 2 3 4 5 

Įvadas

Pagrindinis stereo garso lygio indikatoriaus elementas yra „Atmel“ firmos AVR mikrovaldiklis „Atmega16“. Papildomai prietaiso pagaminimui reikės 16 šviesos diodų, 17–16 MHz kvarcinio rezonatoriaus, keleto kondensatorių bei mažos galios varžų (1 pav.). Schemos veikimas yra toks: stereo garsas paduodamas į mikrovaldiklio ASK (analoginį skaitmeninį keitiklį) per K. (kairysis kanalas) ir D. (dešinysis kanalas) įėjimus. Prieš tai nufiltruojamos aukštesnės dedamosios RC žemų dažnių filtru (10K ir 1 uF). Mikrovaldiklio ASK gali maksimaliai 15 kHz dažniu diskretizuoti įėjimo signalą vienam kanalui (pvz.: 40 mikrovaldiklio išvadas).

Pagal Naikvisto teoremą, maksimalus paduodamas signalas, kurį dar galima atkurti po konvertavimo yra 7,5 kHz (sinusinio signalo atveju). Mūsų atveju naudojami du kanalai (1 pav.), taigi 7,5 kHz dalinasi iš 2 ir lieka 3,75 kHz vienam kanalui. Kadangi mums reikalingi signalo dažniai nesiekia kiloherco, tai mikrovaldiklio resursų pakankamai užtenka stereo garso signalų matavimui (mikrovaldiklio apkrovimas ~10 %). ASK konvertuodamas analoginio signalo reikšmes, įrašo į ADCL ir ADCH registrus 10 bitų tikslumu. Kadangi toks tikslumas šiuo atveju nereikalingas, todėl panaudojami tik 8 bitai, nuskaitant ADCH registrą, prieš tai nustačius ADMUX registre nuskaitymo iš ADC būdą. Panaudojant tuos 8 bitų duomenis, paprasčiausiu skaičių palyginimu galima įjungti ir išjungti šviesos diodus. Prie to pačio, panaudojus mikrovaldiklio įėjimo kanalų multiplekserį, galima fiksuoti keletą skirtingų dažnio juostų. Mūsų atveju panaudoti du kanalai iš aštuonių (kanalus galima labai lengvai perjunginėti keičiant ADMUX registro parametrus).


1 pav. Principinė lygio indikatoriaus schema (padidinti)

Šviesos diodų perjunginėjimas

Pagal ASK pateiktas skaitines signalų reikšmes, galima spręsti kokio lygio įėjimo signalas ir atitinkamai įjungti prie PORTB ir PORTD prijungtus šviesos diodus. 2 paveiksle parodytas diodų junginėjimo galimas suskirstymas. Kai turime didėjantį įėjimo signalą (juoda kreivė atitinka vieno iš kanalų augančią įtampą trumpu laiko momentu), dėl programoje numatytų lyginimo reikšmių (1, 2, 4 ... 256) įjungiamas didesnis šviesos diodų skaičius. Įtampos lygiui krintant, vykdomas atvirkščias procesas, šviesos diodai išjunginėjami. Taip gauname įtampa valdomą šviesos diodų stulpelį.


2 pav. Šviesos diodų įjungimo pavyzdys

Kadangi garsiniai signalai laike kinta, tai pateiktos schemos šviesos diodai atitinkamai į tai reaguoja. Dėl schemoje panaudotų žemų dažnių filtrų, šviesos diodai daugumoje reaguoja tik į žemus dažnius, keičiant filtrų kondensatorių talpas bei varžas galima keisti signalų dažnių sritį, kurio lygį norima matuoti. Lygio indikatoriaus programos kodo pavyzdys, rašytas IAR'u, pateiktas žemiau. Pradžioje atliekamas ASK parametrų nustatymas ADMUX ir ADCSRA registruose. Bei įjungiamos globalios pertrauktys _SEI(). Toliau programa įjunginėja diodus, priklausomai nuo ADCH registro skaitinės vertės. Programoje lyginimo duomenys nuo (2 pav.) skiriasi dėl to, kad kompiuterio garso kortos, kurią naudojau signalo padavimui, nepakako maksimaliai reikšmei išgauti (vidinis ASK stiprintuvas šiuo atveju nenaudojamas). Vienas iš galimų variantų jautrumui padidinti tai paprasčiausiai pakeisti if.. then sąlygose naudojamas lyginimo reikšmes.

Laiko vėlinimas prie kiekvienos sąlygos yra tam, kad kurį laiką būtų užlaikytas diodo švietimas, taip pašalinamas kartais atsirandantis silpnas diodo šviesos srautas. Kuo didesnė reikšmė ADCH reikšmė, tuo ilgiau reik palaikyt šviesos diodą įjungtą, taip suvienodinamas viso diodų stulpelio apšvietimas. Visa tai tenka daryti dėl to, kad kuo žemesnė diodo eilė, tuo ilgiau jis šviečia, o greitai kintantis sritis yra būtent aukštos eilės diodų (1 pav. pažymėjimai 1..8). Vėlinimo laikas buvo parinktas empiriškai, geriausias vėlinimo reikšmes galite pasirinkti patys keisdami programos kodą.


#include <iom16.h>
#include "ina90.h"
// Laiko vėlinimo funkcijos aprašymas
void Laikas2(unsigned int m); 
// Globalus kintamasis stereo kanalų išskyrimui
char i=0;

void main()
{
	//PORTB ir PORD nustatymas kaip išėjimo prievadai
	DDRB=255; DDRD=255; 
	//ADMUX registras skirtas ASK valdymui
	//REFSx – nustato etaloninį maitinimo šaltinį, skirtą ASK
	//MUXx – viduje esančio multiplekserio nustatymui
	// MUX1->1 ir MUX0->1 nustato kaip įėjimą 37 išvadą
	//ADLAR - nustato nuskaitymo iš duomenų registro ADC būdą
	ADMUX=(1<<REFS1)|(1<<REFS0)|(1<<ADLAR)|
	(1<<MUX1)|(1<<MUX0);
	//ADCSRA – ASK valdymo, įjungimo, išjungimo registras
	//ADEN ->1- įjungiame ASK, ADSC->1 
	//pradėti vienkartinį konvertavimą
	//ADFR->1 Laisvo konvertavimo režimas,
	//ADIE – konvertavimo pertraukties įjungimas
	//ADPS – skirtas ASK veikimo spartai keisti
	//pagal kvarcinį rezonatorių
	ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIE)|
	(1<<ADFR)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
	_SEI(); // Globalių pertraukčių įjungimas
	while(1)
	{} // Amžinas ciklas
}

// ASK pertraukties paprogramė
#pragma vector=ADC_vect
__interrupt void Analog()
{
	char a; // Tarpinio kintamojo išskyrimas
	a=ADCH;// nuskaitom
	if (i==0){// Kairio kanalo diodų įjungimo tvarka
		//Lyginam ASK reikšmes su mūsų pačių 
		//nustatymo diodų perjungimo reikšmių
		if (a>5) PORTB=1;
		if (a>10)PORTB=3;
		if (a>15) {PORTB=7;Laikas2(50);}
		if (a>20){PORTB=15;Laikas2(100);}
		if (a>26) {PORTB=31; Laikas2(200);}
		if (a>33) {PORTB=63; Laikas2(300);}
		if (a>39){PORTB=127;Laikas2(400);}
		if (a>44){PORTB=255;Laikas2(500);}
		//Sudarom sąlygas dešinio kanalo diodų įjungimui
		i=1;
		// Perjungiam multiplekserį prie 40 išvado kitam kanalui
		ADMUX=(1<<REFS1)|(1<<REFS0)|
		(1<<ADLAR)|(0<<MUX1)|(0<<MUX0);
	// Dešinio kanalo diodų įjungimo tvarka
	}else{
		//Lyginam ASK reikšmes su mūsų pačių nustatymo
		//diodų perjungimo reikšmių
		if (a>5) PORTD=1;
		if (a>=10)PORTD=3;
		if (a>15) {PORTD=7;Laikas2(50);}
		if (a>20){PORTD=15;Laikas2(100);}
		if (a>26) {PORTD=31; Laikas2(200);}
		if (a>33) {PORTD=63; Laikas2(300);}
		if (a>39){PORTD=127;Laikas2(400);}
		if (a>44){PORTD=255;Laikas2(500);}
		//Sudarom sąlygas kairio kanalo diodų įjungimui
		i=0;
		// Perjungiam multiplekserį prie 37 išvado kitam kanalui
		ADMUX=(1<<REFS1)|(1<<REFS0)|(1<<ADLAR)|
		(0<<MUX4)|(1<<MUX1)|(1<<MUX0);
	}
}

// Laiko vėlinimo paprogramė
void Laikas2(unsigned int m) 
{ 
	unsigned int i=0, k=0;
	for (i=0; i<m; i++)
	{
		for (k=0; k<150; k++){}
	}
}

Sukompiliuotą programą „Atmega16“ mikrovaldikliui galite parsisiųsti čia: lygio_indikatorius.hex. Į mikrovaldiklį galite įrašyti naudodami „PonyProg“ programėlę su programatoriumi.

Šio lygio indikatoriaus schemai, galima parašyti žymiai sudėtingesnes programas, sudarant keletą galimų diodų junginėjimo variantų, taip pagyvinant savo gamintą garso stiprintuvą. Kadangi mikrovaldiklio apkrovimas tokiai programai labai mažas, galima drąsiai didinti tikrinimo kanalų skaičių (iki 8), skirtingiems dažniams.

Tokiu pačiu principu galima sudaryti schemą turinčią 16 šviesos diodų vienam kanalui, arba keletą kanalų skirtingiems dažniams. Tokiu atveju programos kodas keisis bet principas gali išlikti toks pats.

Papildoma informacija ir testavimo rezultatai

Tokio tipo programa pakankamai neblogai veikia, pradžioje nustačius (2 pav.) reikšmes nepakako įėjimo signalo lygio, kad būtų įjungti visi šviesos diodai. Signalą galima pastiprinti vidiniu diferencialiniu stiprintuvu, bet paprasčiausiai pakeičiau lyginimo reikšmes: if (a>44)... taip sumažindamas lyginimo diapazoną nuo 255 maksimalios iki daugiau nei 44.

Lygio indikatorius nesukalibruotas, todėl jis rodo tik besikeičiančius signalo lygius. Norint, kad jis rodytų tikrąsias signalo dB reikšmes, reiktų signalų generatoriaus bei voltmetro ir sukalibruoti prietaisėlį. Laiko vėlinimo įtraukimas pakeitė diodų švietimo trukme, padidino jų ryškumą nors galima naudoti ir be jo, tada programos kodas dar labiau sutrumpėja. Labai geras stereo kanalų lygio išryškėjimas įrodantis, kad pateikta programėlė veikia nepriekaištingai. Vietoj RESET išvadui naudojamo kondensatoriaus ir varžos geriausia naudoti RESETO valdymui skirtą mikroschemą, taip padidinamas veikimo patikimumas (pvz.: ADM1811 ar analogiški). Kai kuriems pradedantiesiems iškyla problemų su „Atmega“ tipo mikrovaldikliais, dėl jų kvarcinio rezonatoriaus parametrų nustatymo, „Atmega16“ mikrovaldikliui galite nustatyti šiuos parametrus:


3 pav. „PonyProg“ programoje parametrų „Atmega16“ mikrovaldikliui nustatymai

Taip pat rekomenduoju prieš programuojant „Atmega16“ paskaityti šios mikroschemos PDF aprašymą. Jei atsiras norinčių pakartoti bei patobulinti esamą schemą, būtų malonu, kad pasidalintumėte savo rezultatais.




Draudžiama platinti, skelbti, kopijuoti
informaciją su nurodyta autoriaus teisių žyma be redakcijos sutikimo.

TMS ELECTRONICS
TMS ELECTRONICS

RCL – elektronika ir technika

www.rslietuva.com - 400.000 pramoninių komponentų per 1 dieną

„ELFA Distrelec“ – visa pramoninė elektronika

GPSMeistras.lt – GPS navigacijos, nemokamos konsultacijos, remontas, supirkimas, nuoma, priedai

„Sandas“ – verslo valdymo sistemos

Laboratorinė įranga, svarstyklės, matavimo įranga, analizatoriai – UAB „MORIS Technology“

EMP – elektronikos atliekų surinkimas iš gyventojų ir įmonių

Kondicionieriai, šildytuvai, drėkintuvai, sausintuvai

ASUS nešiojamų kompiuterių parduotuvė | Asusshop.lt - ASUS technika vienoje vietoje

Kompiuterių parduotuvė, prekyba buitine technika | Kompiuteriai.lt

Prekyba relėmis ir instaliacijos komponentais

Elektroninių parduotuvių kūrimas - Freeshop.lt e. verslas
internetinės parduotuvės

Reklama
‡ 1999–2012 © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina Valid XHTML 1.0!
SEO paslaugos, tinklapių optimizavimas, tyrimai
www.SEOtyrimai.lt
„TV programa“ – tiksli
televizijos programa

www.tvprograma.lt
Projektas „Mokslas verslui ir visuomenei“
www.mokslasplius.lt
Svetainių kūrimas, SEO, el. parduotuvių kūrimas
www.webtechnologijos.lt
Kompiuteriai, navigacija, televizoriai, fotoaparatai
www.pirkpigiau.lt
Lietuvių k. informacinėse technologijose
www.likit.lt
ESET, ABBYY, DRUVAA, FOXIT sprendimai verslui
www.nodbaltic.lt
Baldai, medžiagos, technika, kompiuteriai
www.b-a.lt
Optical systems, optical electronics, laser crystals
www.eksmaoptics.com
Detalieji planai. Pasyvūs, nulinės energijos namai
www.jpiarchitektai.lt
Mobilusis 4G internetas, nešiojamieji kompiuteriai
www.mezon.lt
400 000 pramoninių komponentų per 1 dieną
www.rslietuva.com
Wireless, point to point, backhaul, PTP
www.ligowave.com
Treniruokliai, matuokliai, kontaktiniai lęšiai
www.hiperfarma.lt
SEO paslaugos, reklama „Google“, el. rinkodara
www.marketrats.lt
CEREC sistema, lazeriai, skaitmeninis rentgenas
www.pilene.lt
„Google AdWords“, „Google“ reklama
www.cet.lt
3D models platform.
Aircraft 3D models

www.cgtrader.com
Reklama
Reklama