Tuesday, October 4, 2011

Фриц хайрцаг

Фриц хайрцгийн талаар Галзуу хүмүүсийн өдрийн тэмдэглэл дээр бичив:
Фриц хайрцагтай холбоотой бусад бичлэг:

Tuesday, June 29, 2010

Суурилсан системийн хямдхан хавтан

Crosspost: http://mongolian-it.blogspot.com/2010/06/blog-post_26.html

Оюутан байхдаа Үйлдлийн системийн практик хэмээх нэгэн хичээл дээр сууж Motorola 68000 процессортой суурилсан систем (embedded system) програмчлах болов оо. Process scheduler өөрөө зохиох, GPIO (процессорын оролт гаралт) програмчлах гэх мэт зүйл хийх ёстой байлаа. Эхний өдөр яаж том төмөр дээр бичсэн код маань сериал портоор дамжиж суурилсан систем дээр хуулагдаж ажиллаад байгааг ойлгодоггүй, тэгээд суурилсан систем тун сонирхолтой санагдсан тул орой нь гэртээ очоод нэг гэрэлтдэг диод олж аваад сериал портын үзүүр дээр залгаж үзэв. RS232 сериал портын үзүүр -12 болон +12
вольтын хооронд хэлбэлзэж мэдээлэл дамжуулдаг тул юу гэж гэрэлтэх вэ дээ. (Уг нь параллель порт дээр залгасан бол асах байсан хэхэ) Үүнээс хойш суурилсан систем, тэр тусмаа микроконтроллер програмчлал сонирхох болсон билээ. Тухайн үед микроконтроллер програмчлалын/туршилтын хавтан их үнэтэй, над шиг шалдан оюутан худалдан авч чадахааргүй байв. 2005 онд сургуулиа төгсөөд эрдэм шинжилгээний ажилтан болсны дараа анхны цалингаараа Atmel STK500 гэдэг AVR микроконтроллер програмчлагч хавтан 100 еврогоор авч байж билээ. Тэр үеийг бодвол одоо микроконтроллер програмчлая гэвэл хямдхан хавтан байдаг болжээ. Хэрвээ суурилсан систем сонирхдог боловч их хэмжээний мөнгө зарах сонирхолгүй/чадалгүй хүмүүс байвал хэрэг болох болов уу гээд зарим нэгийг нь сонирхуулахаар шийдлээ:

MSP430 LaunchPad
Texas Instruments компани MSP430 хэмээх 16 битийн микроконтроллероо рекламдаж MSP430 LaunchPad гэж туршилтын хавтан хийжээ. 4.30$ -ын үнэтэй (2 пивоны үнэ гэсэн үг). 2 ширхэг микроконтроллер дагалдаж ирнэ. Shipping cost нь буюу тээвэрлэх хөлс нь үнэгүй гэж байгаа.

STM8S Discovery
STMicroelectronics компани STM8S хэмээх 8 битийн микроконтроллероо рекламдаж 10$ -ын үнэтэй STM8S Discovery гэдэг програмчлалын туршилтын хавтан хийжээ.

AVR Butterfly
Atmel компани AVR хэмээх 8 битийн микроконтроллероо рекламдаж AVR Butterfly хэмээх 20$ -ын үнэтэй туршилтын хавтан хийжээ. Эхний хоёр хавтантай харьцуулбал төрөл бүрийн мэдрэгч, LC дэлгэц болон speaker агуулсан учир юм гагнах дургүй хүмүүст хамгийн тохиромжтой. AVR микроконтроллер нь сонирхогчдын дунд хамгийн их тархсан микроконтроллеруудын нэг тул жишээ программ элбэг олддог.

Thursday, June 10, 2010

Сериал портоор файл солилцох

Crosspost: http://mongolian-it.blogspot.com/2010/06/blog-post_782.html

Сүүлийн хэдэн хоног хамаг цагаа оцон шувуу үйлдлийн системтэй Artila PAC-5010 хэмээх ARM9 эмбэддэд хавтантай ноцолдож өнгөрөөв. Сэриал портоор (монголчууд COM порт гэж яриад заншсан болохоос биш жинхэнэ нэр нь UART/RS232 юм) холбогдоод шууд бүрхүүл рүү нь хандаж болдог аж. Ингэж холбогдон хавтангаа тохируулах явцад өөрийн төмрөөс хэдэн ширхэг файл хавтан уруугаа хуулах хэрэгтэй болов. Энэ тохиолдолд хамгийн амархан арга нь хавтангаа сүлжээнд холбоод FTP/SSH ашиглан хуулах юм. Харамсалтай нь ойр хавьд илүү switch байгаагүй тул сэриал портоор файлаа зөөхөөс өөр аргагүйд хүрэв. Ингээд Гүүгл ахаас асуугаад kermit гэж програм байдгийг мэдэж авлаа. Энэ програмыг 80 аад оны дундуур хоорондоо хол орших төмрүүдийг утасны сүлжээ ашиглан модемоор холбож хоорондоо файл солилцоход ашигладаг байжээ. Одоо бол эмбэддэд систэм уруу сэриал портоор файл солилцоход л ашигладаг юм байна. За ингээд kermit ашиглан хэрхэн файл хуулах талаар бичье:
Эхлээд хэрэглэгчийн үндсэн хавтас дотор (эмбэддэд хавтан болон өөрийн төмөр дээр тус тус) .kermrc файл үүсгээд доорх текстийг хуулаад хадгалаарай.


set line /dev/ttyS0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5

Эхний мөр нь ямар сэриал порт ашиглан холбогдох вэ гэдгийг заана. Би эмбэддэд хавтан дээрээ /dev/ttyS0 ыг харин төмөр дээрээ USB2Serial хувиргагч ашигласан тул /dev/ttyUSB0 гэж тус тус бичсэн. Бусад мөрүүдийг өөрчлөх хэрэггүй. Эмбэддэд хавтангийн бүрхүүл дээр kermit -r гэж бичсэний дараа KERMIT READY TO RECEIVE... гэж гарч ирэнгүүт тэрминал программаа хаагаарай (тэрминал программаа хаахгүй бол сэриал порт чинь чөлөөлөгдөхгүй). Одоо төмөр дээрээ kermit -s filename гэж бичвэл файл тань хавтан руу хуулагдаж эхэлнэ.

Monday, December 21, 2009

AVR Tutorial 2: Тоолуур

Зарим тохиолдолд микроконтроллер дээр тодорхой хугацааны дараа юм уу эсвэл тодорхой давталтаар ямар нэгэн үйлдэл хийх хэрэгтэй болдог. Үүнд timer/counter буюу тоолуур ашиглана. AVR микроконтроллер төрлөөсөө хамаараад 8 болон 16 битийн хэд хэдэн тоолууртай байдаг. Энэ хичээлд ашиглаж буй Attiny2313 маань 8 битийн нэг (timer/counter дугаар: 0), 16 битийн нэг (timer/counter дугаар: 1), нийтдээ 2 тоолууртай.

Өмнөх хичээлийн оролт гаралт шиг тоолууруудыг мөн регистрүүдээр тохируулдаг. Энэ удаа 0 дугаарын 8 битийн timer/counter -ыг хэрхэн тохируулахыг тайлбарлая.

Тоолуур хэр хурдан тоолохыг timer/counter control register буюу TCCR0B регистрийн баруун захын CS02, CS01, CS00 (CS нь chip select -ийн товчлол) гэсэн гурван битээр тохируулна.
  • CS02=0, CS01=0, CS00=0 бол тоолуур ажиллахгүй байх болно.
  • CS02=0, CS01=0, CS00=1 бол тоолуур микроконтроллерын хурдаар тоолно.
  • CS02=0, CS01=1, CS00=0 бол тоолуур микроконтроллерын хурднаас 8 дахин удаан тоолно.
  • CS02=0, CS01=1, CS00=1 бол тоолуур микроконтроллерын хурднаас 64 дахин удаан тоолно.
  • CS02=1, CS01=0, CS00=0 бол тоолуур микроконтроллерын хурднаас 256 дахин удаан тоолно.
  • CS02=1, CS01=0, CS00=1 бол тоолуур микроконтроллерын хурднаас 1024 дахин удаан тоолно.
  • CS02=1, CS01=1, CS00=0 бол микроконтроллерын T0 хөлийн утга 1 -ээс 0 -руу шилжих мөчид тоолуурын утга нэгээр нэмэгдэнэ. Attiny2313 -ын хувьд T0 хөл бол PD4 хөл юм. Жишээ нь энэ хөлийг ашиглаж товчлуур хэд дахиж дарагдсаныг тоолж болно гэсэн үг.
  • CS02=1, CS01=1, CS00=1 бол микроконтроллерын T0 хөлийн утга 0 -ээс 1 -руу шилжих мөчид тоолуурын утга нэгээр нэмэгдэнэ.
Хэрвээ таны микроконтроллер 1 Mhz -ын хурдтай байвал доорх код 1 миллисекунд (1/(1000000/1024) = 0.001024 секунд) тутамд тоолуурын утгыг нэгээр ихэсгэнэ:

// CS02=1, CS01=0, CS00=1 -> 1/(1000000/1024) = 0.001024 секунд
TCCR0B = (1 << CS02) | (1 << CS00);

0 дугаар тоолуурын утга TCNT0 регистр дээр хадгалагдана.

Одоо энэ хоёр регистрийг ашиглаад PB1 хөл дээр залгасан LED диодоо секунд болгонд асааж унтраадаг болгоё:

#include "avr/io.h"

// 200 миллисекунд хүлээ
void wait_200_milliseconds() {
// Тоолуурыг тэглэнэ
TCNT0 = 0;
// Микроконтроллер 1000000 hertz ийн хурдтай ажиллаж байгаа
// 1/(1000000/1024) = 0,001024 секунд
// Тоолуурын утга 1,024 миллисекунд болгонд нэгээр ихсэнэ
TCCR0B = (1 << CS02) | (1 << CS00);
// Тоолуурын утга 200 болтол хүлээ
while (TCNT0 < 200);
// Тоолуур ажиллуулахын болиул
TCCR0B = 0;
}

int main() {
uint8_t i;

// PB1 хөл дээр LED залгасан
DDRB |= (1 << PB1);
// LED асаа
PORTB |= (1 << PB1);

while(1) {
// 5 удаа 200 миллисекунд хүлээх = нийтдээ нэг секунд
for (i = 0; i < 5; i++) {
wait_200_milliseconds();
}
// LED унтраастай бол асаа, асаалттай бол унтраа
PORTB ^= (1 << PB1);
}
return 0;
}

Дээрх кодын сул тал нь тоолуур ажиллаж байх үед микроконтроллер өөр юу ч хийх боломжгүй. Энэ асуудлыг хоёр янзын тасалдал (англиар interrupt) ашиглаж арилгаж болно. TCNT0 регистрийн утга 255 -аас 0 -руу шилжих мөчид timer/counter overflow interrupt эсвэл TCNT0 -ын утга OCR0A регистрийн утгаас илүү гарсан тохиолдолд timer/counter compare match interrupt тус тус үүсгэн ашиглаж болдог.
Timer/counter overflow тасалдал үүсгэхийн тулд TIMS (timer/counter interrupt mask) регистрийн TOIE0 битэд 1 гэсэн утга олгох хэрэгтэй. Харин timer/counter compare match тасалдал үүсгэе гэвэл TIMS регистрийн OCIE0A битийг 1 болгох ёстой бөгөөд тухайн тасалдлын үед тоолуурын утгыг тэглэе гэвэл TCCR0A регистрийн WGM01 битийг 1 болгоод бусад WGM битүүдийг тэглэнэ.

Дээр бичсэн кодыг одоо timer/counter compare match тасалдал ашигладаг болгож өөрчилье:

#include "avr/io.h"
#include "avr/interrupt.h"

volatile uint8_t i = 0;

ISR (TIMER0_COMPA_vect)
{
i++;
// 5 udaa 200 millisekunden = 1 sekund
if (i == 5) {
// LED g untraastai bol asaa, asaalttai bol untraa
PORTB ^= (1 << PB1);
i = 0;
}
}

int main() {
// PB1 hol deer LED zalgagdsan
DDRB |= (1 << PB1);
// LED g asaa
PORTB |= (1 << PB1);

// Tooluuriin utgiig 0 bolgo
TCNT0 = 0;
// tooluuriin utga OCR0A tai tentsvel tooluuriig tegle
TCCR0A |= (1 << WGM01);
// mikrocontroller 1000000 herz iin hurdtai ajillaj baigaa
// 1/(1000000/1024) = 0,001024 sekund
// tooluuriin utga 1,024 millisekund bolgond 1 eer nemegdene
TCCR0B |= (1 << CS02) | (1 << CS00);
// 200 millisekund tutamt compare match interrupt uusne
OCR0A = 199;
// compare match interrupt iig uusehiig zovshooroh
TIMSK |= (1 << OCIE0A);
// global interrupt zovshooroh
sei();
while(1) {
// end oor uildel hiij bolno
}
return 0;
}

0 дугаар тоолуур OCR0A -аас гадна OCR0B гэж бас нэгэн регистртэй.

Sunday, December 20, 2009

AVR Tutorial 1: Оролт гаралт

Энэ бичлэгтээ микроконтроллерийн оролт гаралтыг яаж ашигладаг болохыг товч тайлбарлая. AVR маань 8 битийн архитектуртай тул оролт гаралт болон бусад бүх тохиргоонуудыг 8 битийн регистрүүдээр хийдэг. Иймд микроконтроллерийн хөлийг найм наймаар нь A, B, C гэх мэтээр хувааж тус тусых нь DDR, PIN, PORT регистрүүдээр удирдана. Жишээ нь B -гийн найман хөлийг удирдъя гэвэл DDRB, PINB, PORTB регистрүүдийг ашиглана.

DDR регистрээр микроконтроллерийн хөлийг оролт уу гаралт уу гэдгийг зарладаг. Регистрийн X дэх бит 0 байвал X дүгээр хөл оролт, харин 1 байвал гаралт болно. Жишээ нь доорх код B -ийн 0 дугаар (PB0) хөлийг оролт харин 1 дүгээр (PB1) хөлийг гаралт болгоно.

// PB0 хөл оролт
DDRB &= ~(1 << PB0);
// PB1 хөл гаралт
DDRB |= (1 << PB1);

Хэрвээ хөлөө гаралт гэж тохируулсан бол PORT регистрээр тэр хөлөөрөө тог гаргах уу (битийн утга 1) үгүй юу (битийн утга 0) гэдгээ тохируулдаг. Доорх жишээ код B -ийн 1 дэх (PB1) хөлөөр эхэлж тэжээл гаргаад дараа нь унтрааж байна.

// PB1 хөлөөр тэжээл тараана
PORTB |= (1 << PB1);
// PB1 хөлөөр тог гарахгүй
PORTB &= ~(1 << PB1);

Хэрвээ та хөлөө оролтын хөл гэж зарласан бол PIN регистрээр тухайн хөл дээр тэжээл очсон эсэхийг шалгаж болдог. PIN регистрийн X дэх битийн утга 1 байвал тухайн хөл дээр тог очсон байна харин 0 байвал үгүй гэсэн үг. Доорх код PB0 хөл дээр тэжээл байгаа үгүйг шалгана.

if(PINB & (1 << PB0)) {
// PB0 хөл дээр тог очиж байна
} else {
// PB0 хөл дээр тог очихгүй байна
}

За ингээд өмнөх бичлэгийнхээ үндсэн хэлхээ дээр диод болон товчлуур нэмье. Товчлуур болон гэрэлт диод яаж залгадаг болохыг mncontroller -ын бичлэгүүдээс хараарай. Attiny2313 -ын PB0 хөл дээр товчлуур (энэ хөл оролт) харин PB1 дээр диод (гаралт) залгав.


Одоо товчлуур дээр дарвал диод асдаг харин боливол диод унтардаг болгох программ бичье:

#include "avr/io.h"

int main() {
// PB0 хөл дээр товчлуур залгагдсан -> оролт
DDRB &= ~(1 << PB0);
// PB1 хөл дээр гэрэлт диод залгагдсан -> гаралт
DDRB |= (1 << PB1);

while(1) {
if (PINB & (1 << PB0)) {
// товчлуур дарагдсан байна -> диод асаа
PORTB |= (1 << PB1);
} else {
// товчлуур дарагдаагүй байна -> диод унтраа
PORTB &= ~(1 << PB1);
}
}

return 0;
}

Дээрх программыг WinAVR ашиглаж хөрвүүлээд AVRStudio -оор микроконтроллер уруу хуулав. Үр дүн нь нэг иймэрхүү харагдаж байна. Товчлуур дараагүй байхад:


Товчлуур дарахад диод асаж байгаа байдал:

Thursday, December 17, 2009

AVR Tutorial 0: Үндсэн хэлхээ

AVR микроконтроллер ажиллуулах маш хялбар. Хамгийн энгийн аргаар залгая гэвэл ердөө нэг конденсатор болон нэг эсэргүүцэл нэмж залгаад л болоо.

Дээрх схем дээр Attiny2313 -ын үндсэн холболтыг үзүүлэв (бусад AVR -ууд яаг адилхан холбогдоно). 10KΩ -ын эсэргүүцэл R1 нь AVR -ыг reset хийхэд хэрэг болно (mncontroller яаж Sanguino хавтандаа товчлуур залгасантай харьцуулж үзээрэй). 100 нанофарадын конденсатор C1 нь гүйдлийн хүч тогтворжуулах үүрэгтэй. Дижитал техникт ийм конденсаторыг бүх чипний VCC болон GND хөлүүдийн хооронд тавьдаг. JP1 бол 2 эгнээтэй, эгнээ бүрдээ 3 хөлтэй залгуур. ISP дэмждэг AVR программчлагч төхөөрөмжөө энэ залгууртай холбоно. Өөр юу ч залгах хэрэггүй (Мэдээж та яаг юу хийхээсээ хамаарч өөр эд анги залгах хэрэгтэй).

Доорх зураг схем дээр зурж үзүүлсэн үндсэн хэлхээг breadboard дээр зоож байрлуулсныг харуулж байна. Зүүн талд байгаа төхөөрөмж нь Atmel -ийн STK500 гэдэг программатор.

Tuesday, December 8, 2009

AVR Микроконтроллер: mini FAQ

AVR гэж ямар микроконтроллер байдаг юм бэ?
Atmel компани 8051, ARM гэх мэт микроконтроллер лицензээр үйлдвэрлэхээс гадна өөрийн AVR хэмээх 8 битийн микроконтроллер үйлдвэрлэж зардаг. Европ тивд өргөн дэлгэрсэн, хямд үнэтэй микроконтроллер. Хүчин чадлаас нь хамаараад аttiny (tiny = бичил), аtmega (mega = том), аtxmega (xmega = маш том) гэж ерөнхийд нь гурав хуваана. (Мөн AT90USB, AT90CAN гэх мэт ховор хэрэглэгддэг тусгай төрлүүд байдаг)

Ямаршуухан техникийн үзүүлэлттэй юм бэ?
  • 32 Mhz хүртэл хурдан
  • 0.5 -аас 384 килобайт хүртэл ROM
  • 0 -оос 16 килобайт хүртэл RAM
  • 0 -оос 4 килобайт хүртэл EEPROM
  • 6 -аас 100 хүртэл хөлтэй
  • ADC, PWM, SPI, I2C, UART, Watchdog
  • 1,7 -оос 5V -ын хүчдэлээр ажиллана.
Хамгийн өргөн хэрэглэгддэг Atmega8 гэдэг хувилбар нь 8 килобайт flash ROM, 1 килобайт RAM, 512 килобайт EEPROM, 28 ширхэг хөл, 20 Mhz -ийн хурдтай.

Ямар программын хэл ашиглах ёстой вэ?
Та ассемблер, C, Pascal, Basic гэх мэт дуртай хэлээ ашиглаж программ бичиж болно.

Ямар программын хэл ашиглавал зүгээр вэ?
Atmel жишээ программуудаа C хэл дээр хөгжүүлдэг учир энэ программын хэлийг ашиглавал амар байдаг. Үнэгүй open source GNU C compiler -ын портууд ашиглаж болно. Та Windows үйлдлийн системийн хэрэглэгч бол WinAVR toolchain ашиглаарай.

Ямар IDE ашиглаж программ бичих вэ?
Atmel ын AVR Studio -г ашиглаж болно. Мөн Eclipse CDT IDE г AVR-Eclipse plugin -тай хамт ашиглах боломжтой.

Хөгжүүлсэн программаа микроконтроллеруугаа яаж хуулах вэ?
In-System-Programming (ISP), High-Voltage-Programming (HVI) эсвэл JTAG дэмждэг STK500, AVR dragon гэх мэт төхөөрөмж ашиглан хуулна.

Тийм төхөөрөмжгүй бол яах вэ?
Хэрвээ таны AVR bootloader -тай бол компьютерын USB болон COM порт ашиглан шууд хуулж бас болдог.

AVR микроконтроллероо ажиллуулахын тулд юу нэмж залгах ёстой вэ?
Хамгийн энгийнээр залгая гэвэл нэг батарей нэмж залгаад л болоо.

Thursday, December 3, 2009

Work No.1-1 Button нэмж залгах

Товчлуур залгаж зөвхөн дарсан тохиолдолд диодоо анивчуулдаг болгон тохируулъя.

Товчлуурыг микроконтроллерд хоёр янзаар залгаж болно.

Товчлуур дарагдсан тохиолдолд микроконтроллерын хөл дээр тог очиж байвал тухайн холболтыг active high гэж нэрлэнэ. Доорх схемийг хараарай. Гүйдлийн хүч хязгаарлах эсэргүүцлээр ихэвчлэн 10 KΩ ын эсэргүүцэл ашигладаг.


Доорх схем дээр товчлуур дараагүй тохиолдолд 5V, харин дарсан тохиолдолд 0V очно. Ийм учир энэ холболтыг active low гэж нэрлэдэг.


Товчлуур дарсан эсэхийг AVR микроконтроллер дээр тун амархан шалгаж болно. Эхлээд DDR хэмээх регистр ашиглан товчлуур залгасан хөлөө оролтын хөл гэж зарлаж өгөх хэрэгтэй. Товчлуур PB1 хөл дээр залгагдсан тул

DDRB &= ~(1 << PB1); // 8 бит DDRB регистрийн баруунаас 2 дахь битийг 0 болгоно, үлдсэн долоон битний утга өөрлөгдөхгүй

гэхэд хангалттай.
Active High аар товчлуураа залгасан бол доорх байдлаар PIN регистр ашиглан товчлуур дарсан үгүйг мэдэрнэ:

if (PINB & (1 << PB1)) {
// товчлуур дарагдсан байна
} else {
// товчлуур дарагдаагүй байна
}

PS: edited by Ajaxmaa 2009/12/07

Monday, November 16, 2009

Work No.1 Гүйдэг гэрлэн диод

Үүнийг хийх болсон шалтгаан нь яваандаа гүйдэг гэрлэн диодоос бүтсэн самбар хийх зорилготой юм. Эхний удаад 4 диод залгаад туршиж үзье гэж боджийн Юуны түрүүнд микроконтроллер уруугаа гэрлэн диодоо яаж холбох талаар үзье.

Манай AVR ийн хөлөөс +5V хүчдэл гардаг. Гэрлэн диодоор гүйх гүйдэл өнгөнөөсөө хамаараад хоорондоо адилгүй. Дээд тал нь +4V байна. Тэхээр +5V залгавал гэрлэн диод шатах учир шатаахгүйн тулд эсэргүүцэл залгаж хүчдэлийг хуваана. Эсэргүүцлийг бодож олохдоо энэ сайтыг ашиглаарай.
Диодын дамжуулах гүйдэл (diode forward current) дээр нь 20 гэж бичиж өгөөрэй. Гэрлэн диодуудаа цуваа залгаж болохгүй учир бүгдийг нь зэрэгцээ залгана. яагаад цуваа залгаж болохгүй байгаа вэ гэвэл нэг нэгээр нь удирдах учраас. За тээд цааш нь диодынхоо анод хөлд нь тэжээл (эсэргүүцэл холбосон тэжээл) катод хөлд нь газар холбоно. Эсэргүүцэлд чиглэл гэж байхгүй тул хаашаа ч харуулж холбосон болно.

Миний угсарсан хавтан иймэрхүү янзтай болж байна.


За тэгээд энэ дээрээ Sanguino хавтангаа зоогоод ажиллуулах юм байгаа юм.

Програмын хувьд бол С хэл дээр бичсэн. AVR өөрөө оролт гаралтын 32 хөлтэй гэж доор дурьдсан. 32 хөлөө 8 8 аар нь салгаад
  1. PORTA
  2. PORTB
  3. PORTC
  4. PORTD гээд хуваачихсан байгаа.
Жишээ нь b0 хөлийг удирдъя гэвэл


DDRB = 0xFF ; //DDR регистерээр тухайн портын гаралт оролтыг нь заана. 0x00 гэвэл оролт болно
PORTB |= (1 << PB0) ;// PB0 хөлөнд 5V тэжээл очиж байна
PORTB &= ~(1 << PB0) ; // PB0 хөлөнд GND очиж байна

Хэрэв оролт гэж заасан бол хөлийн PIN регистерээр удирдана. С хэлний биттэй харьцдаг командуудын талаар илүү ихйиг эндээс мэдэж болно.

Sunday, November 15, 2009

Sanguino хавтан

Юуны түрүүнд энэ блогт нэгдэн орж байгаадаа их баяртай байгаагаа уламжилъя. Би эхлэн суралцагч болохоор энгийн амархан зүйлсийг хийж сурснаа энэ блогоор дамжуулан та бүхэнд хийх аргачлалыг нь хүргэх болно. Би цаашдаа ер нь Sanguino хавтан ашиглах учраас та бүхэнд эхний бичлэгээрээ хавтангаа танилцуулъя.



Техникийн үзүүлэлт
  • atmega644P контроллер суурилсан
  • 32 ширхэг оролт гаралтын хөл
  • 8 ширхэг аналог хөл
  • 6 хүчдэл, газардуулалтын хөл
  • 64K flash memory
  • 4K RAM
  • 2K EEPROM
  • breadboard дээр суурьлах боломжтой
  • Serial аар компьютертэй холбогдох боломжтой

Sanguino -д зориулж хэрхэн програм бичих вэ?

WinAVR болон AVR Studio гэх мэт toolchain ашиглаж C болон Assembler хэл дээр програмаа бичнэ.

Sunday, July 19, 2009

Гэрийн нөхцөлд PCB хийх

AT89C2051 блог гэсэн Монгол блог дээр Гэртээ PCB хийцгээх үү? гэсэн бичлэг олж үзэв. Би яаг энэ аргаар хэдэн жилийн өмнө хавтангуудаа хийдэг байлаа.


Дээрх дэлгэцийн агшин дээр байгаа 2 шар хавтанг өөрөө хийгээд ажиллаж байсан тул нөгөө ногоо хавтангуудыг нь үйлдвэрт захиалуулж хийлгэсэн. Амьхандаа CAN bus туршиж үзэх гээд Atmega644 болон MCP2515 ашиглан 10 аад ийм хавтан хийсэнсэн. Одоо бүгдээрээ хог болоод гэрт хэвтэж байх шивдээ.

Thursday, May 7, 2009

Тайлбар

@ embedded system сонирхогчдод:

Гэртээ нэтгүй болоод удаж байгаа тул блогдоо бичлэг оруулж чадахгүй байгаа билээ. Дараа сараас нэг ADSL -ын бараа харахаараа сонирхолтой бичлэг оруулах болно.

Хүндэтгэсэн Ажаксмаа

Thursday, March 5, 2009

JTAG & OpenOCD

SAM7-EX256 боард маань ARM-USB-OCD гэсэн JTAG адаптертай дагалдаж ирсэн тул өнөөдөр сууж энэ адаптерыг дэмждэг OpenOCD програм суулгаж тохиргоог нь хийв. Энэ адаптер, програм хоёрын тусламжтайгаар ARM7 -нд зориулж бичсэн программаа microcontroller -луу хуулж болохоос гадна программаа GDB ашиглан шууд microcontroller дээрээ ажиллуулж, debug хийж болох ажээ.

OpenOCD -г хаанаас татаж авч суулгах вэ?
http://openocd.berlios.de/web/ гэсэн цахим хуудаснаас татаж авч суулгана.

OpenOCD -г хэрхэн тохируулах вэ?
Тохиргоо нь ямар JTAG адаптер болон ARM7 ашиглаж байгаагаас шалтгаална. AT91SAM7X256, ARM-USB-OCD хоёрын хувьд хоёулаа OpenOCD -оор шууд дэмжигдэж байсан тул тус тусых нь тохиргоо болох interface/arm-usb-ocd.cfg, target/sam7x256.cfg файлуудыг хооронд нь нийлүүлж sam7-ex256.cfg гэж файл үүсгээд болоо аж.

OpenOCD -г хэрхэн ашиглан microcontroller -луугаа бичсэн программаа хуулах вэ?
Эхлээд OpenOCD -г тохиргооных нь файлтай хамт асаах хэрэгтэй:

openocd-ftd2xx.exe -f sam7-ex256.cfg

Одоо telnet ашиглаж OpenOCD той холбогдоно:

telnet localhost 4444

Программаа хуулахын тулд telnet дээрээ доорх командыг бичихэд хангалттай:

flash write_bank 0 minii_bichsen_programm.bin 0x00

Tuesday, March 3, 2009

Embedded Linux Tutorial

Эмбэддэд Линукс эхлэн суралцагчдад хэрэгтэй хичээл, материалыг Big Blue буюу IBM сайт дээр байсныг олж үзэв. 

Дараах линкээр ороод уншаад, туршиж үзээрэй.

Anatomy of the Linux Kernel

Embedded Linux applications: An overview

Explore Ubuntu Mobile and Embedded

Build an Embedded Linux distro from scratch

ARM7 & Toolchain

Хүнээс авсан SAM7-EX256 боард маань AT91SAM7X256 гэдэг ARM7 microcontroller агуулахаас гадна Ethernet, USB, SD/MMC, speaker, joystick болон Nokia 6610 гар утасны LCD дэлгэцтэй ажээ.

AT91SAM7X256 microcontroller -ын техникийн үзүүлэлтүүд:
  • 32 бит ARM7TDMI
  • 64 килобайт RAM
  • 256 килобайт ROM (компьютерын хатуу дисктэй ижилхэн үүрэгтэй)
  • 55Mhz хурдтай
  • Ethernet/USB/2x UART/2x SPI/etc.
Ингэхэд microcontroller гэж юу вэ? Бидний мэдэх AMD болон Intel -ын CPU -аас ямар ялгаатай вэ?
RAM, ROM болон янз бүрийн hardware interface өөртөө агуулсан CPU -г microcontroller гэж нэрлэдэг. Хамгийн өргөн хэрэглэгддэг microcontroller -ын төрлүүд:
ARM7 гэж ямар microcontroller байдаг вэ?
АRM компани ARM7TDMI гэж CPU core бүтээсэн бөгөөд үүнийг нь NXP (LPC2000), ATMEL (AT91), Samsung гэх мэт компаниуд ашиглан тус тусын онцлогтой microcontroller лицензээр хийж үйлдвэрлэдэг.

ARM7 microcontroller -ыг юунд ашигладаг вэ?
Та бид бүхний сайн мэдэх IPod, Nintendo DS болон төрөл бүрийн гар утаснууд ARM7 microcontroller ашигладаг.

ARM7 microcontroller -д зориулж хэрхэн програм бичих вэ?
GnuARM, WinARM гэх мэт toolchain ашиглаж C болон Assembler хэл дээр програмаа бичнэ. ARM7 microcontroller хэдхэн зуун килобайт флэйштэй тул Linux, Windows гэх мэт бэлэн үйлдлийн систем ашиглаж болохгүй. Хэрэгтэй бүх функцаа хөгжүүлэгч өөрөө бичнэ.

Бичсэн програмаа хэрхэн microcontroller -луу хуулж ажиллуулах вэ?
Bootloader эсвэл JTAG ашиглаж компьютер дээр бичсэн кодоо microcontroller -луу хуулж ажиллуулна.

Тавтай морилно уу

Өнгөрсөн бямба гаригт таньдаг айл хальт нүүлгэлцэж өгөөд шагналд нь SAM7-EX256 гэж нэг эмбэддэд боард авсан тул өнөөдрөөс эхэлж Эмбэддэдмаатай хамтарч шинэ блог нээв. Энэ шинэ блогтоо SAM7-EX256 боард хэрхэн ашиглаж Монголд зарагдаад байгаа бяцхан тархи шиг цахим толь бичиг програмчлах тухай бичихээр шийдлээ.

Эхлэл

Эмбэддэд Систем буюу Тусгай систем сонирхогч, суралцагч, хөгжүүлэгч та бүхэндээ уг блогийг өргөн барьж байна.
Манайд энэ чиглэлийн мэргэжилтэн, сонирхогчид их ховор байдаг ч уг салбар нь уул нь ихээхэн том зах зээлийг эзлэдэг ирээдүйтэй салбар юм л даа.

Одоогоор манайд эмбэддэд системийн хэрэглээ нь хэдэн банкуудад байгаа дугаар олгогч windows (нарийн ярьвал эмдэддэд биш л байна лээ), Netsoft -ын хийсэн Smartbox, тэгээд хэдэн бяцхан, супер тархи энэ тэрээс цаашгүй. Миний л мэдэхээр... Ихэнхи нь импортоор оруулж ирсэн гадны баахан бүтээгдэхүүнүүд.

Уул нь бид өдөр тутмынхаа амьдралдаа байнга л уг систем бүхий төхөөрөмж, хэрэгсэлтэй таарч байгаа. Жишээ нь л гэхэд та бидний барьж, халаасалж яваа гар утас, халаасны компьютер гэх мэт.

Гэхдээ юм үргэлж нэгээрээ байхгүй жамтай. Цаашид энэ чиглэлээр дагнаж ажилладаг мэргэжилтэнүүд төрөн гарч өөрсдийн эх орны эмбэддэд бүтээгдэхүүнийг гаргах бизээ.

Энэ чиглэлийг сонирхдог хэн бүхнийг уг блогоор дамжуулан мэдлэг, туршлага, үзэл бодолоо чөлөөтэй илэрхийлэхэд таатай байх болноо гээд эхний бичлэгийг өндөрлөе.