Elektronika.lt

Elektronika.lt - elektronikos, informacinių ir
ryšių technologijų portalas

Adresas: http://www.elektronika.lt
El. paštas: info@elektronika.lt
 Atspausdinta iš: http://www.elektronika.lt/schemos/mikrovaldikliai/19/paprastas-generatorius-su-avr-mikrovaldikliu/spausdinti/

Paprastas generatorius su AVR mikrovaldikliu

Publikuota: 2004-04-05 13:35
Tematika: Mikrovaldikliai
Tipas: Vidutiniška
Autorius: el. paštas Darius Grigaitis
Aut. teisės: el. paštas ©Elektronika.lt

Ši schemutė buvo sudėta, siekiant greitai pagaminti stačiakampių impulsų generatorių, kai generuojamo dažnio tikslumas nėra labai aktualus. Tokį generatorių konstravau, nes po ranka nebuvo kitų elektronikos komponentų.


Ši schemutė buvo sudėta, siekiant greitai pagaminti stačiakampių impulsų generatorių, kai generuojamo dažnio tikslumas nėra labai aktualus. Tokį generatorių konstravau, nes po ranka nebuvo kitų elektronikos komponentų. Schemoje naudojamas 12 MHz kvarcinis rezonatorius (bet galite naudoti ir kitokio dažnio, savaime aišku, kad generavimo dažnio diapazonas bus kitoks), du nefiksuojantys jungikliai skirti didinti ir mažinti generavimo dažnį. Varžos mažo galingumo, patogiausia naudoti planarinius. Patartina paskaityti AT90S2313 mikrovaldiklio aprašymą. Dažnis reguliuojasi spaudinėjant mygtukus. Norint žinot generuojama dažnį, galima naudotis oscilografu, arba dažniamačiu.

Stačiakampių impulsų generavimo skaitines vertes galima pateikti tokiu grafiku:

OCR1 yra vienas iš mikrovaldiklio laikmačio valdymo registrų, nuo kurio reikšmės priklauso generavimo dažnis. Kaip matyti iš grafiko, keičiant OCR1 registro reikšmę, pradžioje dažnis keičiasi dideliu žingsniu. Didesnis tikslumas gaunamas žemesniuose dažniuose (esant mažiau nei 20 kHz). Dabar pasiaiškinkime kaip veikia šis generatorius. Apačioje pateiktas programos kodas, parašytas C kalba su „IAR Embedded Workbench programa“.


#include "io2313.h" 
void main() 
{
	// Nustatome 3 kojelę porto B kaip išėjimą
	DDRB=(1<<DDB3); 
	
	// prijungiame išėjimą
	TCCR1A=(1<<COM1A0); 
	
	// Nustatomas dalinimo koeficientas
	TCCR1B=(1<<CS10)|(1<<CTC1); 
	
	// Generavimo dažnis tik įjungus maitinimą
	OCR1=1000; 
	
	// Nustatome pertraukčių reagavimo režimus
	// pagal krintantį įėjimo signalo frontą	
	MCUCR=(1<<ISC11)|(1<<ISC01); 
	
	// Įjungiamos int1 ir int0 pertrauktys
	GIMSK=(1<<INT1)|(1<<INT0); 
	
	// Įjungiamos globalios pertrauktys 
	SREG =128; 
	
	// Amžinas ciklas
	while(1) 
	{}
}

// Aprašoma INT0 pertrauktis
#pragma vector = INT0_vect  
__interrupt void INTer0() 
{
	// Mažiname dažnį (Dažnio didinimo mygtukas)
	OCR1+=10; 
}

// Aprašoma INT1 pertrauktis
#pragma vector = INT1_vect 
__interrupt void INTer1() 
{
	// Didiname dažnį (Dažnio mažinimo mygtukas)
	OCR1-=10; 
}

Pradžioje reikia nustatyti PORTB (15 kojelė) portą kaip išėjimą, tam į DDRB krypties registro DDB3 skiltį įrašome 1. TCCRA1A registras naudojamas laikmačio/skaitiklio valdymui. Įrašę 1 reikšmę į COM1A0 skiltį, prijungiame mikrovaldiklio laikmačio /skaitiklio išėjimą prie 15 kojelės. Registras TCCR1B taip pat skirtas laikmačio /skaitiklio valdymui. Įrašę į skiltį CTC1 nustatome laikmačio /skaitiklio registro TCNT, nusimetimo į nulį režimą. Į CS10 skiltį įrašytas 1, apibrėžia „preskalerio“ dalinimo koeficientą, lygų pačiam kvarcinio rezonatoriaus dažniui. GIMSK registre nustatome pagal kurį įėjimo signalo frontą turi įvykti pertrauktis. Įėjimo signalai paduodami į 6 ir 7 mikrovaldiklio kojelę. SREG registre įjungiame globalias pertrauktis.

Pats generavimas vykdomas lyginant OCR registro turinį su TCNT ir tuo pačiu metu didinant TCNT registro reikšmę vienetu. 15 kojelėje būna 1 tol, kol OCR ir TCNT reikšmės nesutampa. Kai reikšmės tampa vienodos, mikrovaldiklis TCNT registrą numeta į 0 ir skaičiavimai prasideda iš naujo. Tada 15 kojelėje būna loginis 0. Procesui kartojantis, 15 kojelėje keičiasi tai 0, tai 1. Tai sąlygoja stačiakampių impulsų atsiradimą. Manipuliuojant OCR registro reikšme, galima keisti generavimo dažnį.

‡ 1999–2024 © Elektronika.lt LTV.LT - lietuviškų tinklalapių vitrina Valid XHTML 1.0!