Elektronika.lt
 2019 m. rugsėjo 16 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
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
 - Kompiuterių elektronika
 - Maitinimo šaltiniai
 - Mikrovaldikliai
 - Radiotechnika
 - Šviesos efektai
 - Įvairi elektronika
 Teorija, žinynaiSąrašas
 Nuorodų katalogai
 Įvairūs siuntiniai
 Bendravimas
 Skelbimai ir pasiūlymai
 Elektronikos remontas
 Robotų kūrėjų klubas
 RTN žurnalo archyvas






 Verta paskaityti
Rugsėjo 16 d. 07:13
Blokų grandinės ir bitkoinai – Lietuvos ateitis ar dabartis?
Rugsėjo 15 d. 10:22
Pokalbis su duomenimis: ką jie man gali pasakyti
Rugsėjo 14 d. 18:13
Frankfurte „Mercedes-Benz“ parodė naujus, galingus ir efektyvius modelius
Rugsėjo 14 d. 16:19
„Tesla“ tyrėjai teigia, kad naujos kartos baterijos tarnaus iki 1 mln. mylių – jau rengiama gamybos linija (1)
Rugsėjo 14 d. 10:29
Susitinkame su draugais, bet nosys – telefonuose: juose praleidžiame daugiau laiko nei atostogaujame
Rugsėjo 13 d. 21:13
Kanadoje pradedamas pirmasis toks pasaulyje projektas, kurį jau dabar vadina „keičiančiu žaidimo taisykles“ (3)
Rugsėjo 13 d. 20:31
Koperniko mokslo centro šou Vilniaus universitete skelbė mokslo festivalio pradžią
Rugsėjo 13 d. 17:39
Modernus muziejus neatsiejamas nuo išmaniųjų technologijų
Rugsėjo 13 d. 16:33
Ar egzistuoja tobula IT saugumo politika?
Rugsėjo 13 d. 14:27
Repas ir rokas, menas ir kūryba – padeda mokytis lengviau
FS 19 Tractor mods
Farming Simulator 19 Mods, FS 19 Maps, How to install
ATS mods
ATS trailer mods, ATS truck mods, ATS map mods
FS 19 Tractors
Farming Simulator 19 Mods, FS 19 Maps, FS 19 Trucks
FS19 Maps, FS19 Trucks
Farming Simulator 2019 Mods, FS19 Tractors
Install MC Mods
Minecraft Dungeons Mods, Minecraft Dungeons Skins, Minecraft Dungeons Maps
FS19 Combines
Farming Simulator 19 Mods, FS19 Trucks, FS 19 Mods
How to Install Mods
Minecraft Dungeons Mod, Minecraft Dungeons Maps, Minecraft Dungeons Skins
Mobilieji telefonai
Mobilieji telefonai internetu, telefonų dėklai, telefonų priedai
Reklama
 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.

Global electronic components distributor – Allicdata Electronics

TMS ELECTRONICS
TMS ELECTRONICS

www.rslietuva.com – nemokamas elektronikos komponentų pristatymas

www.matuok.lt - Interneto spartos matavimo sistema

Lietuvos mokinių neformaliojo švietimo centras

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Technologijos.lt

Mokslo festivalis „Erdvėlaivis Žemė

www.esaugumas.lt – apsaugok savo kompiuterį!

LTV.LT - lietuviškų tinklalapių vitrina

CRM sistema – „Hanna CRM“

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

MRO Supply


Reklama
‡ 1999–2019 © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Reklama | Turinys | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina Valid XHTML 1.0!
Farming Simulator 2017 Mods, FS 17 Mods
ls2017.com
„TV programa“ – tiksli
televizijos programa

www.tvprograma.lt
Lietuvos mokinių neformaliojo švietimo centras
www.lmnsc.lt
Lietuvių kalba informacinėse technologijose
www.likit.lt
Svarstyklės – čia, matuokliai, laboratorinė įranga
www.moris.lt
Farming Simulator 2019 Mods, LS19 Mods, FS19 Mods
fs19.net
Mokslo ir technologijų pasaulis – naujienos ir straipsniai
www.technologijos.lt
Farming Simulator 2019 Mods, FS19 Tractors, FS19 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – geriausių lietuviškų tinklalapių katalogas
www.ltv.lt/technologijos/
FS 2019 Mods, FS 2017 Mods, FS 2015 Mods
www.farming2015mods.com
Mokslo populiarinimo projektas „Mokslas verslui ir visuomenei“
www.mokslasplius.lt
Reklama


Reklama