Wednesday, May 9, 2012

AVR микроконтроллерийн Аналог тоон хөрвүүлэгчийн тухай


            Энэ бичлэгээр ADC хэрхэн ажилладаг, AVR микроконтроллерийн ADC системийн талаар авч үзнэ. Ямар нэгэн үзэгдлээс мэдээлэл ихэвчлэн тус зүйлийг хэмждэг мэдрэгчээс (сенсор) аналог сигналаар ирдэг. Энэхүү сигналийг ашиглан үр дүy гаргахын тулд тоон сигнал болгон хувиргадаг бөгөөд энэ хувиргалтыг хоёртын толуур дээр суурьласан аналог тоон хувиргагч ашиглана. Доорх зурагт тоолуур дээр суурьласан тоон хувиргагчийг харуулсан байна. Хэрэв гаднаас орж ирж байгаа аналог сигнал DAC-аас гарч байгаа хүчдэлээс бага байх юм бол тоолуур тоолж байх ба тоолуурын утга нэмэгдэхэд DAC-ийн гаралтын хүчдэл нэмэгдэн явсаар  аналог оролтын хүчдэлтэй тэнцэхэд тоолуур зогсоно. Энэ үеийн тоолуурын гаралт гаднаас өгч буй хүчдэлийн тоон утга болно.

Зураг: Тоолуур дээр суурьласан ADC
ATMega микроконтроллерийн ADC нь тоолуур дээр суурьласан систем юм.
10-битийн үр дүнг харуулна
±2 LSB нарийвчлалтай
13 - 260 μs хооронд хөрвүүлэх хугацааг тохируулж болно
 15 kSPS хүртэл хурдаар өгөгдөлийг боловсруулж чадна
 Нэг шугамыг мультиплексерээр олшруулсан 8 оролттой
7 –н дифферециал оролттой
2 дифференциал оролт нь тусгай 10x, 200x хүчдэл өсгөгчтэй
0 - VCC ADC хүртэл оролтын хүчдэлийн далайцтай байж болно
Тулгуур (reference) хүчдэлийг  гаднаас болон дотроос 2.56V –оор тохируулж болно
Чөлөөтэй болон нэг удаа хөрвүүлэхыг сонгож болно
ADC ажиллахдаа автоматаар хөрвүүлэлтыг эхлэх боловсруулах үйл ажилгааг хийнэ
Хөрвүүлж дууссан бол програмд тасалдал өгч болно
Шуугиангүй болгох идэвхгүй горимтой
                              Зураг 5.2:
ADC регистерүүд
            Зурагт АТМега микроконтроллерийн ADC системийн регистрүүдийг харуулав. Бидний жишээ авсан аналог тоон хувиргуурыг бодвол энэ систем маань хурьцангуй олон хүчирхэг үйлдлүүдийг гүйцэтгэж чаддаг. Гурван төрлийн регистер системд байна.
ADC Multiplexer Selection Register.  ADMUX
            Энэ регистерт тулгуур хүчдэлийг тохируулах REFS[1:0] битүүд багтана.
REFS[0:0] = 00: AREF гадаад хөлөнд өгсөн потенциал ADC системийн тулгуур хүчдэл болно
REFS[0:1] = 01: AVCC хөлөөр тулгуур хүчдэлээ авах ба AREF портонд конденсатор холбож өгнө
REFS[1:0] = 10: AREF хөлөөр
REFS[1:1] = 11: Дотоод 2.56-VDC хүчдэл тулгуур хүчдэл болох ба энэ горимоор ажиллахдаа AREF хөлөнд конденсатор холбож өгөх шаардлагатай
ADLAR бит нь өгөгдөлийн регистрийн байрлалийг зохицуулна. Системийн нарийвчлал нь 10 бит ба бид 8 битийн микропроцессор ашиглаж байгаа учир хоёр регистерт хувааж байрлуулах шаардлага гарна. Хэрэв ADLAR=1 байвал ахлах регистер дүүрэн өгөгдөлийн сүүлийн 2 бага бит хоёр дахь бага регистерт багтсан байна.
MUX[4:0] битүүд нь аль сувгийн өгөгдөлийг авахыг зааж өгнө. MUX4,3 битүүд дифференциал өсгөгч удирдах битүүд MUX 2,1,0 нь алв сувгаар өгөгдөл авахыг заана.  Жишээ нь MUX[4;0]=00011 дифференциал өсгөгч ашиглахгүй ADC3 хөлний хүчдэлийн утгыг өгөгдөл болгон авч байна.
           
Зураг: Регистерүүд
ADC Control and Status Register A- ADCSRA
            Энэ регистерт ADC-гийн ажиллагааг зөвшөөрч өгөх ADEN бит багтсан. Хэрэв уг бит нэг байвал ADC ажиллахыг зөвшөөрч өгсөн байна гэж үзнэ. Дараагийн нь ADSC бит ба энэ битийг зөвшөөрвөл хөрвүүлэлт эхлэх болно. Мөн хөрвүүлэлт гүйцэтгэгдэж дууслаа гэж мэдэгдэх ADIF бит багтсан байх бөгөөд ADC системийн ажиллах давтамжийг ADPS[2:0] битүүдээр тохируулна.
ADPS[2:0] = 000: division factor: 2
ADPS[2:0] = 001: division factor: 2
ADPS[2:0] = 010: division factor: 4
ADPS[2:0] = 011: division factor: 8
ADPS[2:0] = 100: division factor: 16
ADPS[2:0] = 101: division factor: 32
ADPS[2:0] = 110: division factor: 64
ADPS[2:0] = 111: division factor: 128
Ингэж хуваах тоо нь үндсэн микроконтроллерийг ажиллуулж байгаа системийн давтамжийг хуваасан тоог харуулна. Энэ давтамжаас ADC системийн ажиллах хурд хамаарах бөгөөд жишээ нь ADPS[2:0] = 010, ба микроконтроллерийн ажиллах давтамж 4MHz байсан бол хөрвүүлэлт хийх хугацааг дараах байдлаар тодорхойлно.
ADC ажиллах давтамж нь 4Mhz / 4 =1Mhz
Нэг удаа хөрвүүлэлт хийх давтамж нь 1Mhz / (210) =976.5hz буюу үе буюу нэг удаа хөрвүүлэлт хийх хугацаа нь 1 / 976.5hz= 1ms орчим болж байна.
            ADC-програм
2 төрлийн функцийг жишээ болгож тайлбарлая. Эхний функц нь ADC-г ажилгаанд бэлдэх горимыг тодорхойлж өгөх функц. Харин ReadADC гэсэн функцийн аргумент нь  аль сувгаар өгөгдөлийг унших, функцийн утга нь өгөгдөлийг илэрхийлнэ. Үндсэн програмаас уг функцийг ашиглахдаа хувьсагч=ReadADC(2); /2-р сувгын ADC-ний утгыг авъя/ гэсэн байдлаар бичиж өгнө.
void InitADC( void)
{
ADMUX = 0;        //тулгуур хүчдэлийг гаднаас AREF хөлөөр суваг 0-г сонго
ADCSRA = 0xC3;    //хөрвүүлэлтийг эхлүүлж давтамжийг 8 хуваа
while (!(ADCSRA & 0x10));//хөрвүүлэлт дуустал хүлээ
ADCSRA |= 0x10;
}
//**************************************************
//**************************************************
unsigned int ReadADC(unsigned char channel)
{
unsigned int adcdata;
unsigned int  adclow;
unsigned int adchigh;
ADMUX = channel;
ADCSRA |= 0x40;
while (!(ADCSRA & 0x10));
ADCSRA |= 0x10;
adclow = ADCL;
adchigh = ((unsigned int)(ADCH << 8));
adcdata = adclow | adchigh;
return adcdata; //ADCH:ADCL
}
 Atmega8 микроконтроллер дээр жишээ болгож AVRSTUDIO5 дээр нэг коде бичлээ. Доорх линкээр ороод татаад аваарай.
http://www.mediafire.com/?x7o1sarknk33tu6

Thursday, April 19, 2012

Infrared удирдлага хэрхэн хийх вэ?

Зурагт, проектор, ямар нэгэн төхөөрөмжийг алсаас удирдахад инфра гэрэл, инфра LED, инфра хүлээн авагч транзистор зэргийг ашигладаг. Инфра гэрлээр өгөгдөл дамжуулахдаа LED гэрлийн 36-40kHz давтамжаар асааж унтраан модулъяци хийх ба хүлээн авагч транзистор нь өөр дээрээ Демодулъци хийх хэсэгтэй байдаг. Микроконтроллераас өгөгдөл дамжуулахын тулд гадна талд нь ихэвчлэн давтамжийн үүсгүүр хэлхээ холбож өгдөг. Тэгвэл хэрхэн том хэлхээ хэрэглэхгүйгээр микроконтроллераас өгөгдөл дамжуулж болох талаар өөрийн хийж байсан зүйлээс жишээ үзүүлье. Атмега8 микроконтроллерт дараах үзүүлсэн байдалтай хэлхээг холбоё.
Тэгээд энэхүү инфра дамжууллыг UART протокол ашиглан 1200bps parity=0; stop=1; databit=8; байхаар шинээр протокол хийе.

#define tx_on PORTD|=0x80 //залгасан портоо 1 болгож тодорхойлж байна
#define tx_off PORTD&=0x7f // 0
#define DDR_on DDRD|=0x80
#define baudrate 1200

// 12MHz дамтамжид энэ кодыг бичсэн
void tx_bit(char bit)//нэг бит шидэх функц
{
long int asd=3000000/baudrate; //_delay_loop_2() функц 4-н clock саатуулдаг учир
if (bit)
{
tx_on;
_delay_loop_2(asd);
}
else
{
static int count=0;
if (count<3) count++;
else {count=0; asd +=75; }
while (asd>=0)
{
asd -=75;
tx_off;
_delay_loop_2(38);
tx_on;
_delay_loop_2(37);
}
}

}
void tx_byte(unsigned char a)// UART протоколоор нэг byte шидэх функц
{
DDR_on;
tx_bit(0);
int i;
for (i=0; i<8; i++)
{
tx_bit(a&0x01);
a=a>>1;
}
tx_bit(1);
tx_off;
}
void infra_string (const char *string) // цуваа шиднэ
{
while (*string)
{
tx_byte(*string++);
}
}
гэсэн хэдэн го фунцуудыг бичлээ гол анхаарах зүйл нь микроконтроллерийн дамтамжийг 12MHz давтамжаар тохируулж өгсөнийг мартаж болохгүй.
хийсэн эх файлийг доод линкээр ороод татаад аваарай.
http://www.mediafire.com/?f6zx3mmqscjk931

Sunday, February 13, 2011

Урилга

Оюутан, залуус та бүхэн өөрсдийн микроконтроллер ашиглан хийсэн төслүүдийг энэ блогд оруулахыг урьж байна. Ингэхийн тулд хийсэн ажлынхаа мэдээллийг блогийн модераторт beegii8@yahoo.com хаягаар ирүүлээрэй.

Wednesday, November 17, 2010

Ponyprog2000 windows7 64bit


Windows7 64bit үйлдлийн систем дээр суудаг жаахан эртний Ponyprog V.2.06f хувилбарыг танилцуулж байна. Хэрэв өөрийн чинь компьютер 64 битийн үйлдлийн системтэй бол энэхүү хувилбарыг татаад суулгаад үзээрэй.

татах 4shared

Friday, October 15, 2010

16x2 LCD Матрицан дэлгэц дээрх электрон цаг

Матрицан LCD дэлгэцээр автомашины автомат асаалттай электрон цаг хийх явцад дэлгэц дээр тоог томоор гаргах санаа төрсөн юм. 5х8 цэгтэй нэг үсэг гардаг хэсэгт тооны нэг сегментийг гаргаснаар 2 мөртэй LCD дэлгэцэн дээр цагны 4 тоог томоор гаргаж болно. Дээрх зурагт 2051 serial программатор дээр LCD дэлгэцийг туршилтын контроллерт нь холбож асаасныг үзүүлэв. Программаторын тухай энэ бичлэгээс үзэж болно.

Зурагнаас нэг тоо нийт 6 үсэг тэмдэгтийн зайнд гарч байгааг харж болно. Тоог илэрхийлэхэд оролцож байгаа нэмэлт 6 тэмдэгтийг тоонуудын төгсгөлд харуулав. Эдгээр тэмдэгтүүдийг LCD дэлгэцийн хэрэглэгч өөрөө зохиож болдог 8 фонтны 6-г ашиглан гаргасан болно. Цагны протьюз дизайн файл болон ассемблер программ, интел HEX файлуудыг  эндээс татаж аваад үзээрэй.

Saturday, October 9, 2010

MIDE-51 Studio on OpCUBE site

Интернэт ухаж яваад OpCUBE гэдэг сонирхолтой вэбсайт олж үзэв. Эндээс төрөл бүрийн төслүүд, MIDE-51 Studio программ хангамж болон бусад программуудыг татаж авч болох нь ээ. Мөн энд 8051 микроконтроллерийн С компайлер байгааг татаж авч болно.

Friday, October 8, 2010

LCD ба 2051

Зарим оюутнууд LCD дэлгэц бүхий микроконтроллерийн систем угсрахдаа порт хүрэлцэхгүй нь хэмээн шууд 89С51 мэтийн 40 хөлтэй микроконтроллер сонгодог. Микроконтроллерийн бүрэн хүчин чадлыг ашиглаж чадахгүй, аль болох хялбар шийдэл рүү тэмүүлэх нь тухайн системийг зохион бүтээж буй хүний ур чадварыг муугаар харуулна. "Бөөсөнд хутга гаргав" гэгчээр нүсэр том контроллер сонгосон хэрнээ хийсэн зүйл нь өчүүхэн бага үүрэг гүйцэтгэдэг систем байх нь элбэг тохиолддог. Иймд АТ89С2051 микроконтроллерт LCD дэлгэцийг холбох 2 хувилбарыг хэлхээний зураг (png зураг, proteus дизайний хамт) болон ассемблер программийг энд татаж авахаар орууллаа. 
Энэхүү 4 битийн холболтын хувилбар нь дэлгэцэнд гаргах мэдээллийг 4, 4 битээр нь 2 удаа LCD дэлгэц рүү шиддэг. 4 битийн мэдээллээс гадна RS, EN гэсэн удирдлагын 2 дохиог холбодог бөгөөд нийт 6 шугамаар дэлгэцийг бүрэн удирдана. Ингэхээр Р1.0, Р1.1 болон Р3 бусад зүйлд ашиглагдаж болно.
Хэрвээ өмнөх хувилбар хангалтгүй бол 74НС595 шифт регистрийг ашиглан портийг өргөтгөж болох юм. Ингэвэл Р1.3-Р1.7 хүртэл 5 порт, шифт регистрийн Q5-Q7 хүртэл 3 порт нийт 8 порт ашиглагдах боломжтой болно. Ерөнхийдөө НС595 шифт регистрийг ар араас нь хэдийг ч холбож портийг өгөтгөж болно. Ингэхэд 2051 контроллероос дахин порт нэмж ашиглахгүй.
Дээрх зурагны эхний хувилбарт LCD дэлгэцийг 2хон портоор удирдахыг харуулжээ. Гэвч энэ хувилбарын хувьд RC хэлхээний хугацааны тогтмолоос хамаарах учир хугацааны саатал ихээр үүсгэж удааширдаг сөрөг талтай. Түүнчлэн программ нь сунжруу, төвөгтэй болох учир 3 утастай хувилбарыг илүүд үзсэн болно. 3 утастай хувилбарын хувьд SDA (Serial data) болон STB (Strobe) дохионуудыг эсэргүүцэгч, диод бүхий AND үйлдлээр холбон EN дохиог гаргаж порт хэмнэсэн байна.
Ингээд ихийг нуршилгүй protes файл болон прогаммыг эндээс татаж аваад өөрсдөө туршаарай.