Elektronika.lt
 2024 m. lapkričio 21 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
Lapkričio 21 d. 20:39
Asfaltas klojamas, o ryšys stringa: kodėl infrastruktūros spragos stabdo skaitmeninę pažangą Lietuvoje?
Lapkričio 21 d. 18:37
Norite kalbėti vokiškai, itališkai ar kiniškai? „Microsoft Teams“ atnaujinimas pavers jus poliglotu
Lapkričio 21 d. 16:45
5 tendencijos 2025-iesiems: žmonės ieško pusiausvyros tarp technologijų ir realybės, vis labiau vertina autentiškumą
Lapkričio 21 d. 14:24
NKSC įspėja apie dažniausias Juodojo penktadienio apgavystes
Lapkričio 21 d. 12:29
Palygino IT ir automobilių gigantus: į akis krenta sudėtinga problema
Lapkričio 21 d. 10:12
Elektronikos prekių pardavimai per Juodąjį penktadienį: taupysime ne tik dėl akcijų
Lapkričio 21 d. 08:20
Ką turime nuveikti šiandien, kad taptume konkurencingesni ateities inovacijų srityje?
Lapkričio 20 d. 20:21
Su vietos trūkumu susiduria daugelis „Gmail“ naudotojų: pateikiame paprastas gudrybes, kurios leis išspręsti opią problemą
Lapkričio 20 d. 17:34
Sukčiai platina netikras nuorodas, prisidengdami Lietuvos prekių ženklais
Lapkričio 20 d. 14:31
Odos vėžio nustatymas naminiams gyvūnams – KTU doktorantė siekia sukurti diagnostinę metodiką pasitelkiant DI
FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
LEGO
Mänguköök, mudelautod, nukuvanker
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
GTA 6 Weapons
GTA 6 Characters, GTA 6 Map, GTA 6 Vehicles
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
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

Electronic component supply – „Eurodis Electronics“

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

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas


Reklama
‡ 1999–2024 © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Reklama | Turinys | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina Valid XHTML 1.0!
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama