tag:blogger.com,1999:blog-24277231738898165232024-03-06T08:35:43.497+08:00Embedded Systemsajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-2427723173889816523.post-21020415181949260482011-10-04T07:12:00.000+08:002011-10-04T07:12:57.960+08:00Фриц хайрцагФриц хайрцгийн талаар Галзуу хүмүүсийн өдрийн тэмдэглэл дээр бичив:<br />
<ul><li><a href="http://mongolian-it.blogspot.com/2011/10/blog-post_04.html">Фриц хайрцаг </a></li>
</ul>Фриц хайрцагтай холбоотой бусад бичлэг:<br />
<ul><li><a href="http://mongolian-it.blogspot.com/2010/05/blog-post_26.html">"Фриц хайрцаг"-тай танилцсан минь</a></li>
<li><a href="http://hasherdene.blogspot.com/2010/09/blog-post.html">Фриц хайрцгийг дэлгэрүүлэн судалсан нь</a></li>
</ul>tugstugihttp://www.blogger.com/profile/13268966078615844676noreply@blogger.com1tag:blogger.com,1999:blog-2427723173889816523.post-34972515056450755362010-06-29T01:56:00.008+08:002010-06-29T02:02:49.130+08:00Суурилсан системийн хямдхан хавтан<span style="font-weight:bold;">Crosspost:</span> <a href="http://mongolian-it.blogspot.com/2010/06/blog-post_26.html">http://mongolian-it.blogspot.com/2010/06/blog-post_26.html</a><br /><br />Оюутан байхдаа Үйлдлийн системийн практик хэмээх нэгэн хичээл дээр сууж <a href="http://en.wikipedia.org/wiki/Motorola_68000">Motorola 68000</a> процессортой суурилсан систем (embedded system) програмчлах болов оо. Process scheduler өөрөө зохиох, GPIO (процессорын оролт гаралт) програмчлах гэх мэт зүйл хийх ёстой байлаа. Эхний өдөр яаж том төмөр дээр бичсэн код маань сериал портоор дамжиж суурилсан систем дээр хуулагдаж ажиллаад байгааг ойлгодоггүй, тэгээд суурилсан систем тун сонирхолтой санагдсан тул орой нь гэртээ очоод нэг гэрэлтдэг диод олж аваад сериал портын үзүүр дээр залгаж үзэв. RS232 сериал портын үзүүр -12 болон +12<br />вольтын хооронд хэлбэлзэж мэдээлэл дамжуулдаг тул юу гэж гэрэлтэх вэ дээ. (Уг нь параллель порт дээр залгасан бол асах байсан хэхэ) Үүнээс хойш суурилсан систем, тэр тусмаа микроконтроллер програмчлал сонирхох болсон билээ. Тухайн үед микроконтроллер програмчлалын/туршилтын хавтан их үнэтэй, над шиг шалдан оюутан худалдан авч чадахааргүй байв. 2005 онд сургуулиа төгсөөд эрдэм шинжилгээний ажилтан болсны дараа анхны цалингаараа Atmel STK500 гэдэг AVR микроконтроллер програмчлагч хавтан 100 еврогоор авч байж билээ. Тэр үеийг бодвол одоо микроконтроллер програмчлая гэвэл хямдхан хавтан байдаг болжээ. Хэрвээ суурилсан систем сонирхдог боловч их хэмжээний мөнгө зарах сонирхолгүй/чадалгүй хүмүүс байвал хэрэг болох болов уу гээд зарим нэгийг нь сонирхуулахаар шийдлээ:<br /><br /><span style="font-weight: bold;">MSP430 LaunchPad</span><br /><a href="http://www.ti.com/">Texas Instruments</a> компани <a href="http://en.wikipedia.org/wiki/TI_MSP430">MSP430</a> хэмээх 16 битийн микроконтроллероо рекламдаж <a href="http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_%28MSP-EXP430G2%29?DCMP=launchpad&HQS=Other+PR+launchpadwiki-prde">MSP430 LaunchPad</a> гэж туршилтын хавтан хийжээ. 4.30$ -ын үнэтэй (2 пивоны үнэ гэсэн үг). 2 ширхэг микроконтроллер дагалдаж ирнэ. Shipping cost нь буюу тээвэрлэх хөлс нь үнэгүй гэж байгаа.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://processors.wiki.ti.com/images/thumb/a/ad/LaunchPad_wireframe.PNG/300px-LaunchPad_wireframe.PNG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 300px; height: 351px;" src="http://processors.wiki.ti.com/images/thumb/a/ad/LaunchPad_wireframe.PNG/300px-LaunchPad_wireframe.PNG" alt="" border="0" /></a><br /><span style="font-weight: bold;">STM8S Discovery</span><br /><a href="http://www.st.com/">STMicroelectronics</a> компани STM8S хэмээх 8 битийн микроконтроллероо рекламдаж 10$ -ын үнэтэй <a href="http://www.st.com/mcu/contentid-130-113-STM8S_DISCOVERY.html">STM8S Discovery</a> гэдэг програмчлалын туршилтын хавтан хийжээ.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://hackadaycom.files.wordpress.com/2009/11/stm8s.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 150px;" src="http://hackadaycom.files.wordpress.com/2009/11/stm8s.jpg" border="0" alt="" /></a><br /><span style="font-weight: bold;">AVR Butterfly</span><br /><a href="http://www.atmel.com/">Atmel</a> компани <a href="http://en.wikipedia.org/wiki/Atmel_AVR">AVR</a> хэмээх 8 битийн микроконтроллероо рекламдаж <a href="http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3146">AVR Butterfly</a> хэмээх 20$ -ын үнэтэй туршилтын хавтан хийжээ. Эхний хоёр хавтантай харьцуулбал төрөл бүрийн мэдрэгч, LC дэлгэц болон speaker агуулсан учир юм гагнах дургүй хүмүүст хамгийн тохиромжтой. AVR микроконтроллер нь сонирхогчдын дунд хамгийн их тархсан микроконтроллеруудын нэг тул жишээ программ элбэг олддог.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.atmel.com/dyn/resources/prod_images/Butterfly.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 200px; height: 184px;" src="http://www.atmel.com/dyn/resources/prod_images/Butterfly.jpg" alt="" border="0" /></a>tugstugihttp://www.blogger.com/profile/13268966078615844676noreply@blogger.com7tag:blogger.com,1999:blog-2427723173889816523.post-10393161101200126442010-06-10T19:07:00.002+08:002010-06-23T21:37:24.796+08:00Сериал портоор файл солилцох<span style="font-weight: bold;">Crosspost:</span> <a href="http://mongolian-it.blogspot.com/2010/06/blog-post_782.html">http://mongolian-it.blogspot.com/2010/06/blog-post_782.html</a><br /><br />Сүүлийн хэдэн хоног хамаг цагаа оцон шувуу үйлдлийн системтэй <a href="http://www.artila.com/p_ipac.html#ipac_5010">Artila PAC-5010</a> хэмээх ARM9 эмбэддэд хавтантай ноцолдож өнгөрөөв. Сэриал портоор (монголчууд COM порт гэж яриад заншсан болохоос биш жинхэнэ нэр нь <a href="http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter">UART</a>/<a href="http://en.wikipedia.org/wiki/RS-232">RS232</a> юм) холбогдоод шууд бүрхүүл рүү нь хандаж болдог аж. Ингэж холбогдон хавтангаа тохируулах явцад өөрийн төмрөөс хэдэн ширхэг файл хавтан уруугаа хуулах хэрэгтэй болов. Энэ тохиолдолд хамгийн амархан арга нь хавтангаа сүлжээнд холбоод FTP/SSH ашиглан хуулах юм. Харамсалтай нь ойр хавьд илүү switch байгаагүй тул сэриал портоор файлаа зөөхөөс өөр аргагүйд хүрэв. Ингээд Гүүгл ахаас асуугаад <span style="font-weight: bold;">kermit</span> гэж програм байдгийг мэдэж авлаа. Энэ програмыг 80 аад оны дундуур хоорондоо хол орших төмрүүдийг утасны сүлжээ ашиглан модемоор холбож хоорондоо файл солилцоход ашигладаг байжээ. Одоо бол эмбэддэд систэм уруу сэриал портоор файл солилцоход л ашигладаг юм байна. За ингээд kermit ашиглан хэрхэн файл хуулах талаар бичье:<br />Эхлээд хэрэглэгчийн үндсэн хавтас дотор (эмбэддэд хавтан болон өөрийн төмөр дээр тус тус) <span style="font-weight: bold;">.kermrc</span> файл үүсгээд доорх текстийг хуулаад хадгалаарай.<br /><pre><br /><br />set line /dev/ttyS0<br />set speed 115200<br />set carrier-watch off<br />set handshake none<br />set flow-control none<br />robust<br />set file type bin<br />set file name lit<br />set rec pack 1000<br />set send pack 1000<br />set window 5<br /></pre><br />Эхний мөр нь ямар сэриал порт ашиглан холбогдох вэ гэдгийг заана. Би эмбэддэд хавтан дээрээ <span style="font-weight: bold;">/dev/ttyS0</span> ыг харин төмөр дээрээ USB2Serial хувиргагч ашигласан тул <span style="font-weight: bold;">/dev/ttyUSB0</span> гэж тус тус бичсэн. Бусад мөрүүдийг өөрчлөх хэрэггүй. Эмбэддэд хавтангийн бүрхүүл дээр <span style="font-weight: bold;">kermit -r</span> гэж бичсэний дараа <span style="font-weight: bold;">KERMIT READY TO RECEIVE..</span>. гэж гарч ирэнгүүт тэрминал программаа хаагаарай (тэрминал программаа хаахгүй бол сэриал порт чинь чөлөөлөгдөхгүй). Одоо төмөр дээрээ <span style="font-weight: bold;">kermit -s filename</span> гэж бичвэл файл тань хавтан руу хуулагдаж эхэлнэ.tugstugihttp://www.blogger.com/profile/13268966078615844676noreply@blogger.com1tag:blogger.com,1999:blog-2427723173889816523.post-59224346448552295942009-12-21T06:07:00.048+08:002009-12-22T09:03:25.332+08:00AVR Tutorial 2: ТоолуурЗарим тохиолдолд микроконтроллер дээр тодорхой хугацааны дараа юм уу эсвэл тодорхой давталтаар ямар нэгэн үйлдэл хийх хэрэгтэй болдог. Үүнд <span style="font-weight: bold;">timer/counter</span> буюу тоолуур ашиглана. AVR микроконтроллер төрлөөсөө хамаараад 8 болон 16 битийн хэд хэдэн тоолууртай байдаг. Энэ хичээлд ашиглаж буй Attiny2313 маань 8 битийн нэг (<span style="font-weight: bold;">timer/counter</span> дугаар: 0), 16 битийн нэг (<span style="font-weight: bold;">timer/counter</span> дугаар: 1), нийтдээ 2 тоолууртай.<br /><br /><a href="http://embeddedsystem-mn.blogspot.com/2009/12/avr-tutorial-1.html">Өмнөх хичээлийн оролт гаралт</a> шиг тоолууруудыг мөн регистрүүдээр тохируулдаг. Энэ удаа 0 дугаарын 8 битийн <span style="font-weight: bold;">timer/counter</span> -ыг хэрхэн тохируулахыг тайлбарлая.<br /><br />Тоолуур хэр хурдан тоолохыг<span style="font-weight: bold;"> timer/counter control register</span> буюу <span style="font-weight: bold;">TCCR0B</span> регистрийн баруун захын <span style="font-weight: bold;">CS02</span>, <span style="font-weight: bold;">CS01</span>, <span style="font-weight: bold;">CS00</span> (<span style="font-weight: bold;">CS</span> нь <span style="font-weight: bold;">chip select</span> -ийн товчлол) гэсэн гурван битээр тохируулна.<br /><ul><li>CS02=0, CS01=0, CS00=0 бол тоолуур ажиллахгүй байх болно.</li><li>CS02=0, CS01=0, CS00=1 бол тоолуур микроконтроллерын хурдаар тоолно.</li><li>CS02=0, CS01=1, CS00=0 бол тоолуур микроконтроллерын хурднаас 8 дахин удаан тоолно.</li><li>CS02=0, CS01=1, CS00=1 бол тоолуур микроконтроллерын хурднаас 64 дахин удаан тоолно.</li><li>CS02=1, CS01=0, CS00=0 бол тоолуур микроконтроллерын хурднаас 256 дахин удаан тоолно.</li><li>CS02=1, CS01=0, CS00=1 бол тоолуур микроконтроллерын хурднаас 1024 дахин удаан тоолно.</li><li>CS02=1, CS01=1, CS00=0 бол микроконтроллерын <span style="font-weight: bold;">T0</span> хөлийн утга 1 -ээс 0 -руу шилжих мөчид тоолуурын утга нэгээр нэмэгдэнэ. Attiny2313 -ын хувьд <span style="font-weight: bold;">T0</span> хөл бол <span style="font-weight: bold;">PD4</span> хөл юм. Жишээ нь энэ хөлийг ашиглаж товчлуур хэд дахиж дарагдсаныг тоолж болно гэсэн үг.<br /></li><li>CS02=1, CS01=1, CS00=1 бол микроконтроллерын <span style="font-weight: bold;">T0</span> хөлийн утга 0 -ээс 1 -руу шилжих мөчид тоолуурын утга нэгээр нэмэгдэнэ.<br /></li></ul>Хэрвээ таны микроконтроллер 1 Mhz -ын хурдтай байвал доорх код 1 миллисекунд (1/(1000000/1024) = 0.001024 секунд) тутамд тоолуурын утгыг нэгээр ихэсгэнэ:<br /><pre name="code" class="c"><br /> // CS02=1, CS01=0, CS00=1 -> 1/(1000000/1024) = 0.001024 секунд<br /> TCCR0B = (1 << CS02) | (1 << CS00);<br /></pre><br />0 дугаар тоолуурын утга <span style="font-weight: bold;">TCNT0</span> регистр дээр хадгалагдана.<br /><br />Одоо энэ хоёр регистрийг ашиглаад <span style="font-weight: bold;">PB1</span> хөл дээр залгасан LED диодоо секунд болгонд асааж унтраадаг болгоё:<br /><pre name="code" class="c"><br />#include "avr/io.h"<br /><br />// 200 миллисекунд хүлээ<br />void wait_200_milliseconds() {<br /> // Тоолуурыг тэглэнэ<br /> TCNT0 = 0;<br /> // Микроконтроллер 1000000 hertz ийн хурдтай ажиллаж байгаа<br /> // 1/(1000000/1024) = 0,001024 секунд<br /> // Тоолуурын утга 1,024 миллисекунд болгонд нэгээр ихсэнэ<br /> TCCR0B = (1 << CS02) | (1 << CS00);<br /> // Тоолуурын утга 200 болтол хүлээ<br /> while (TCNT0 < 200);<br /> // Тоолуур ажиллуулахын болиул<br /> TCCR0B = 0;<br />}<br /><br />int main() {<br /> uint8_t i;<br /><br /> // PB1 хөл дээр LED залгасан<br /> DDRB |= (1 << PB1);<br /> // LED асаа<br /> PORTB |= (1 << PB1);<br /><br /> while(1) {<br /> // 5 удаа 200 миллисекунд хүлээх = нийтдээ нэг секунд<br /> for (i = 0; i < 5; i++) {<br /> wait_200_milliseconds();<br /> }<br /> // LED унтраастай бол асаа, асаалттай бол унтраа<br /> PORTB ^= (1 << PB1);<br /> }<br /> return 0;<br />}<br /></pre><br />Дээрх кодын сул тал нь тоолуур ажиллаж байх үед микроконтроллер өөр юу ч хийх боломжгүй. Энэ асуудлыг хоёр янзын тасалдал (англиар <a href="http://en.wikipedia.org/wiki/Interrupt"><span style="font-weight: bold;">interrupt</span></a>) ашиглаж арилгаж болно. <span style="font-weight: bold;">TCNT0</span> регистрийн утга 255 -аас 0 -руу шилжих мөчид <span style="font-weight: bold;">timer/counter overflow interrupt</span> эсвэл <span style="font-weight: bold;">TCNT0</span> -ын утга <span style="font-weight: bold;">OCR0A</span> регистрийн утгаас илүү гарсан тохиолдолд <span style="font-weight: bold;">timer/counter compare match interrupt</span> тус тус үүсгэн ашиглаж болдог.<br /><span style="font-weight: bold;">Timer/counter overflow</span> тасалдал үүсгэхийн тулд <span style="font-weight: bold;">TIMS</span> (<span style="font-weight: bold;">timer/counter interrupt mask</span>) регистрийн <span style="font-weight: bold;">TOIE0</span> битэд 1 гэсэн утга олгох хэрэгтэй. Харин <span style="font-weight: bold;">timer/counter compare match</span> тасалдал үүсгэе гэвэл <span style="font-weight: bold;">TIMS</span> регистрийн <span style="font-weight: bold;">OCIE0A</span> битийг 1 болгох ёстой бөгөөд тухайн тасалдлын үед тоолуурын утгыг тэглэе гэвэл <span style="font-weight: bold;">TCCR0A</span> регистрийн <span style="font-weight: bold;">WGM01</span> битийг 1 болгоод бусад <span style="font-weight: bold;">WGM</span> битүүдийг тэглэнэ.<br /><br />Дээр бичсэн кодыг одоо <span style="font-weight: bold;">timer/counter compare match</span> тасалдал ашигладаг болгож өөрчилье:<br /><pre name="code" class="c"><br />#include "avr/io.h"<br />#include "avr/interrupt.h"<br /><br />volatile uint8_t i = 0;<br /><br />ISR (TIMER0_COMPA_vect)<br />{<br /> i++;<br /> // 5 udaa 200 millisekunden = 1 sekund<br /> if (i == 5) {<br /> // LED g untraastai bol asaa, asaalttai bol untraa<br /> PORTB ^= (1 << PB1);<br /> i = 0;<br /> } <br />}<br /><br />int main() {<br /> // PB1 hol deer LED zalgagdsan<br /> DDRB |= (1 << PB1);<br /> // LED g asaa<br /> PORTB |= (1 << PB1);<br /><br /> // Tooluuriin utgiig 0 bolgo<br /> TCNT0 = 0;<br /> // tooluuriin utga OCR0A tai tentsvel tooluuriig tegle<br /> TCCR0A |= (1 << WGM01);<br /> // mikrocontroller 1000000 herz iin hurdtai ajillaj baigaa<br /> // 1/(1000000/1024) = 0,001024 sekund<br /> // tooluuriin utga 1,024 millisekund bolgond 1 eer nemegdene<br /> TCCR0B |= (1 << CS02) | (1 << CS00);<br /> // 200 millisekund tutamt compare match interrupt uusne<br /> OCR0A = 199;<br /> // compare match interrupt iig uusehiig zovshooroh<br /> TIMSK |= (1 << OCIE0A);<br /> // global interrupt zovshooroh<br /> sei();<br /> while(1) {<br /> // end oor uildel hiij bolno<br /> }<br /> return 0;<br />}<br /></pre><br />0 дугаар тоолуур <span style="font-weight: bold;">OCR0A</span> -аас гадна <span style="font-weight: bold;">OCR0B</span> гэж бас нэгэн регистртэй.ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com3tag:blogger.com,1999:blog-2427723173889816523.post-39941832544910543252009-12-20T04:55:00.042+08:002009-12-21T06:08:45.711+08:00AVR Tutorial 1: Оролт гаралтЭнэ бичлэгтээ микроконтроллерийн оролт гаралтыг яаж ашигладаг болохыг товч тайлбарлая. AVR маань 8 битийн архитектуртай тул оролт гаралт болон бусад бүх тохиргоонуудыг 8 битийн регистрүүдээр хийдэг. Иймд микроконтроллерийн хөлийг найм наймаар нь <span style="font-weight: bold;">A</span>, <span style="font-weight: bold;">B</span>, <span style="font-weight: bold;">C</span> гэх мэтээр хувааж тус тусых нь <span style="font-weight: bold;">DDR</span>, <span style="font-weight: bold;">PIN</span>, <span style="font-weight: bold;">PORT</span> регистрүүдээр удирдана. Жишээ нь <span style="font-weight: bold;">B</span> -гийн найман хөлийг удирдъя гэвэл <span style="font-weight: bold;">DDRB</span>, <span style="font-weight: bold;">PINB</span>, <span style="font-weight: bold;">PORTB</span> регистрүүдийг ашиглана.<br /><br /><span style="font-weight: bold;">DDR</span> регистрээр микроконтроллерийн хөлийг оролт уу гаралт уу гэдгийг зарладаг. Регистрийн <span style="font-weight: bold;">X</span> дэх бит 0 байвал <span style="font-weight: bold;">X</span> дүгээр хөл оролт, харин 1 байвал гаралт болно. Жишээ нь доорх код <span style="font-weight: bold;">B</span> -ийн 0 дугаар (<span style="font-weight: bold;">PB0</span>) хөлийг оролт харин 1 дүгээр (<span style="font-weight: bold;">PB1</span>) хөлийг гаралт болгоно.<br /><pre name="code" class="c"><br /> // PB0 хөл оролт<br /> DDRB &= ~(1 << PB0);<br /> // PB1 хөл гаралт<br /> DDRB |= (1 << PB1);<br /></pre><br />Хэрвээ хөлөө гаралт гэж тохируулсан бол <span style="font-weight: bold;">PORT</span> регистрээр тэр хөлөөрөө тог гаргах уу (битийн утга 1) үгүй юу (битийн утга 0) гэдгээ тохируулдаг. Доорх жишээ код <span style="font-weight: bold;">B</span> -ийн 1 дэх (<span style="font-weight: bold;">PB1</span>) хөлөөр эхэлж тэжээл гаргаад дараа нь унтрааж байна.<br /><pre name="code" class="c"><br /> // PB1 хөлөөр тэжээл тараана<br /> PORTB |= (1 << PB1);<br /> // PB1 хөлөөр тог гарахгүй<br /> PORTB &= ~(1 << PB1);<br /></pre><br />Хэрвээ та хөлөө оролтын хөл гэж зарласан бол <span style="font-weight: bold;">PIN</span> регистрээр тухайн хөл дээр тэжээл очсон эсэхийг шалгаж болдог. <span style="font-weight: bold;">PIN</span> регистрийн X дэх битийн утга 1 байвал тухайн хөл дээр тог очсон байна харин 0 байвал үгүй гэсэн үг. Доорх код <span style="font-weight: bold;">PB0</span> хөл дээр тэжээл байгаа үгүйг шалгана.<br /><pre name="code" class="c"><br /> if(PINB & (1 << PB0)) {<br /> // PB0 хөл дээр тог очиж байна<br /> } else {<br /> // PB0 хөл дээр тог очихгүй байна<br /> }<br /></pre><br />За ингээд <a href="http://embeddedsystem-mn.blogspot.com/2009/12/avr-tutorial-0.html">өмнөх бичлэгийнхээ</a> үндсэн хэлхээ дээр диод болон товчлуур нэмье. Товчлуур болон гэрэлт диод яаж залгадаг болохыг<span style="font-weight: bold;"> mncontroller</span> -ын бичлэгүүдээс хараарай. Attiny2313 -ын <span style="font-weight: bold;">PB0</span> хөл дээр товчлуур (энэ хөл оролт) харин <span style="font-weight: bold;">PB1</span> дээр диод (гаралт) залгав.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF_WCDHTRhaV_7DeIdVB-7bgepdL3XNpesEpuOs2vCxLzxp2wwYVP9P_BUDwi2xYEf1vPmgu4IiCxzzYKns-ovufRCrRwQQ1QOLvJCBMe-8zWtPhExASbQypDSknVEnnj_qJR1hVaaua9r/s1600-h/avr_tutorial_1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 274px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF_WCDHTRhaV_7DeIdVB-7bgepdL3XNpesEpuOs2vCxLzxp2wwYVP9P_BUDwi2xYEf1vPmgu4IiCxzzYKns-ovufRCrRwQQ1QOLvJCBMe-8zWtPhExASbQypDSknVEnnj_qJR1hVaaua9r/s400/avr_tutorial_1.png" alt="" id="BLOGGER_PHOTO_ID_5417054201344616962" border="0" /></a><br />Одоо товчлуур дээр дарвал диод асдаг харин боливол диод унтардаг болгох программ бичье:<br /><pre name="code" class="c"><br />#include "avr/io.h"<br /><br />int main() {<br /> // PB0 хөл дээр товчлуур залгагдсан -> оролт<br /> DDRB &= ~(1 << PB0);<br /> // PB1 хөл дээр гэрэлт диод залгагдсан -> гаралт<br /> DDRB |= (1 << PB1);<br /><br /> while(1) { <br /> if (PINB & (1 << PB0)) {<br /> // товчлуур дарагдсан байна -> диод асаа<br /> PORTB |= (1 << PB1);<br /> } else {<br /> // товчлуур дарагдаагүй байна -> диод унтраа<br /> PORTB &= ~(1 << PB1);<br /> }<br /> }<br /><br /> return 0;<br />}<br /></pre><br />Дээрх программыг WinAVR ашиглаж хөрвүүлээд AVRStudio -оор микроконтроллер уруу хуулав. Үр дүн нь нэг иймэрхүү харагдаж байна. Товчлуур дараагүй байхад:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLptFKYQ7xB2lWD_azWaM2HQtBv1ROXYI8xQVePahGf4gJERUF_GhMlRzkUtJ-r3QRpyhrcd1kh24knwyZLkh-OWbMwV_j5y7k0VcqS_fSSh-4DjAuj_7TzM096bMNDmr554C5IQhx_URa/s1600-h/avr_tutorial1-notpushed.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLptFKYQ7xB2lWD_azWaM2HQtBv1ROXYI8xQVePahGf4gJERUF_GhMlRzkUtJ-r3QRpyhrcd1kh24knwyZLkh-OWbMwV_j5y7k0VcqS_fSSh-4DjAuj_7TzM096bMNDmr554C5IQhx_URa/s400/avr_tutorial1-notpushed.jpg" alt="" id="BLOGGER_PHOTO_ID_5417054622056936738" border="0" /></a><br />Товчлуур дарахад диод асаж байгаа байдал:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwqlYgTv3AcZSoyW3vNwGKCENClanYM61ZlWsf6x_6J-5FN50Md5m0tVWdm3sHlC5LeOqr1bZSatAbT6b1zOzZhvlNpy8G-v3gYpwY-SiEnE2HbHbQV8fzgLIARV6441Dpj8ARuzT174XN/s1600-h/avr_tutorial1-pushed.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwqlYgTv3AcZSoyW3vNwGKCENClanYM61ZlWsf6x_6J-5FN50Md5m0tVWdm3sHlC5LeOqr1bZSatAbT6b1zOzZhvlNpy8G-v3gYpwY-SiEnE2HbHbQV8fzgLIARV6441Dpj8ARuzT174XN/s400/avr_tutorial1-pushed.jpg" alt="" id="BLOGGER_PHOTO_ID_5417054342213654338" border="0" /></a>ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com2tag:blogger.com,1999:blog-2427723173889816523.post-73850622797174496592009-12-17T07:25:00.014+08:002009-12-20T02:48:18.212+08:00AVR Tutorial 0: Үндсэн хэлхээAVR микроконтроллер ажиллуулах маш хялбар. Хамгийн энгийн аргаар залгая гэвэл ердөө нэг конденсатор болон нэг эсэргүүцэл нэмж залгаад л болоо.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_qgbRtBXZI-ch74Z49bb2f0lFymm7JpI3zn5wftlPvR_ga0wUgNTYXVn-GnhcpY8jpGYZp1iX4ABDccAnLErrwcsTmMfey0Pd_0o8K2bU1ABHTZe7tTzQt29OF28GRrtFXO0EnqBdRLP/s1600-h/avr_tutorial_0.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 274px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_qgbRtBXZI-ch74Z49bb2f0lFymm7JpI3zn5wftlPvR_ga0wUgNTYXVn-GnhcpY8jpGYZp1iX4ABDccAnLErrwcsTmMfey0Pd_0o8K2bU1ABHTZe7tTzQt29OF28GRrtFXO0EnqBdRLP/s400/avr_tutorial_0.png" alt="" id="BLOGGER_PHOTO_ID_5415979682023450418" border="0" /></a>Дээрх схем дээр <a href="http://www.atmel.com/dyn/Products/Product_card.asp?part_id=3229"><span style="font-weight: bold;">Attiny2313</span></a> -ын үндсэн холболтыг үзүүлэв (бусад AVR -ууд яаг адилхан холбогдоно). 10KΩ -ын эсэргүүцэл <span style="font-weight: bold;">R1</span> нь AVR -ыг <span style="font-weight: bold;">reset</span> хийхэд хэрэг болно (mncontroller яаж Sanguino хавтандаа товчлуур залгасантай харьцуулж үзээрэй). 100 нанофарадын конденсатор <span style="font-weight: bold;">C1</span> нь гүйдлийн хүч тогтворжуулах үүрэгтэй. Дижитал техникт ийм конденсаторыг бүх чипний <span style="font-weight: bold;">VCC</span> болон <span style="font-weight: bold;">GND</span> хөлүүдийн хооронд тавьдаг. <span style="font-weight: bold;">JP1</span> бол 2 эгнээтэй, эгнээ бүрдээ 3 хөлтэй залгуур. <span style="font-weight: bold;">ISP</span> дэмждэг AVR программчлагч төхөөрөмжөө энэ залгууртай холбоно. Өөр юу ч залгах хэрэггүй (Мэдээж та яаг юу хийхээсээ хамаарч өөр эд анги залгах хэрэгтэй).<br /><br />Доорх зураг схем дээр зурж үзүүлсэн үндсэн хэлхээг <a href="http://en.wikipedia.org/wiki/Breadboard">breadboard</a> дээр зоож байрлуулсныг харуулж байна. Зүүн талд байгаа төхөөрөмж нь Atmel -ийн <a href="http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2735">STK500</a> гэдэг программатор.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0NOzB-0DMuTLd6S-Qq9kiefzHQfgF5nEyCWn-YPgUs5_kYuOJvXO8rZWZ8y6EYvk8pDYL58MCnh68Ni_7G8exMkojPQxPQ9ILO8YYVpA-yP6haEDO8Iw0aVpRK5SMzk7-xeTOhtn6phj/s1600-h/avr_tutorial0-breadboard.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0NOzB-0DMuTLd6S-Qq9kiefzHQfgF5nEyCWn-YPgUs5_kYuOJvXO8rZWZ8y6EYvk8pDYL58MCnh68Ni_7G8exMkojPQxPQ9ILO8YYVpA-yP6haEDO8Iw0aVpRK5SMzk7-xeTOhtn6phj/s400/avr_tutorial0-breadboard.jpg" alt="" id="BLOGGER_PHOTO_ID_5417018996989803890" border="0" /></a>ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com4tag:blogger.com,1999:blog-2427723173889816523.post-86344475281596437682009-12-08T05:34:00.033+08:002009-12-17T05:45:47.525+08:00AVR Микроконтроллер: mini FAQ<span style="font-weight: bold;">AVR гэж ямар микроконтроллер байдаг юм бэ?</span><br /><a href="http://www.atmel.com/"><span style="font-weight: bold;">Atmel</span></a> компани <span style="font-weight: bold;">8051</span>, <span style="font-weight: bold;">ARM</span> гэх мэт микроконтроллер лицензээр үйлдвэрлэхээс гадна өөрийн <a href="http://www.atmel.com/products/avr/default.asp"><span style="font-weight: bold;">AVR</span></a> хэмээх 8 битийн микроконтроллер үйлдвэрлэж зардаг. Европ тивд өргөн дэлгэрсэн, хямд үнэтэй микроконтроллер. Хүчин чадлаас нь хамаараад <span style="font-weight: bold;">аttiny</span> (tiny = бичил), <span style="font-weight: bold;">аtmega</span> (mega = том), <span style="font-weight: bold;">аtxmega</span> (xmega = маш том) гэж ерөнхийд нь гурав хуваана. (Мөн AT90USB, AT90CAN гэх мэт ховор хэрэглэгддэг тусгай төрлүүд байдаг)<br /><br /><span style="font-weight: bold;">Ямаршуухан техникийн үзүүлэлттэй юм бэ?</span><br /><ul><li>32 Mhz хүртэл хурдан</li><li>0.5 -аас 384 килобайт хүртэл <a href="http://en.wikipedia.org/wiki/Read-only_memory"><span style="font-weight: bold;">ROM</span></a></li><li>0 -оос 16 килобайт хүртэл <a href="http://en.wikipedia.org/wiki/Random-access_memory"><span style="font-weight: bold;">RAM</span></a></li><li>0 -оос 4 килобайт хүртэл <span style="font-weight: bold;"><a href="http://en.wikipedia.org/wiki/EEPROM">EEPROM</a><br /></span></li><li>6 -аас 100 хүртэл хөлтэй</li><li><a href="http://en.wikipedia.org/wiki/Analog-to-digital_converter"><span style="font-weight: bold;">ADC</span></a>, <a href="http://en.wikipedia.org/wiki/Pulse-width_modulation"><span style="font-weight: bold;">PWM</span></a>, <a href="http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus"><span style="font-weight: bold;">SPI</span></a>, <a href="http://en.wikipedia.org/wiki/I%C2%B2C"><span style="font-weight: bold;">I2C</span></a>, <a href="http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter"><span style="font-weight: bold;">UART</span></a>, <a href="http://en.wikipedia.org/wiki/Watchdog_timer"><span style="font-weight: bold;">Watchdog</span></a></li><li><span>1,7 -оос 5V -ын хүчдэлээр ажиллана.<br /></span></li></ul>Хамгийн өргөн хэрэглэгддэг <a href="http://www.atmel.com/dyn/products/product_card.asp?PN=ATmega8A">Atmega8</a> гэдэг хувилбар нь 8 килобайт flash ROM, 1 килобайт RAM, 512 килобайт EEPROM, 28 ширхэг хөл, 20 Mhz -ийн хурдтай.<br /><br /><span style="font-weight: bold;">Ямар программын хэл ашиглах ёстой вэ?</span><br />Та ассемблер, C, Pascal, Basic гэх мэт дуртай хэлээ ашиглаж программ бичиж болно.<br /><br /><span style="font-weight: bold;">Ямар программын хэл ашиглавал зүгээр вэ?</span><br />Atmel жишээ программуудаа C хэл дээр хөгжүүлдэг учир энэ программын хэлийг ашиглавал амар байдаг. Үнэгүй open source GNU C compiler -ын портууд ашиглаж болно. Та Windows үйлдлийн системийн хэрэглэгч бол <a href="http://winavr.sourceforge.net/">WinAVR toolchain</a> ашиглаарай.<br /><br /><span style="font-weight: bold;">Ямар <a href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> ашиглаж программ бичих вэ?</span><br />Atmel ын <a href="http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725">AVR Studio</a> -г ашиглаж болно. Мөн <a href="http://www.eclipse.org/">Eclipse CDT IDE</a> г <a href="http://sourceforge.net/projects/avr-eclipse/">AVR-Eclipse plugin</a> -тай хамт ашиглах боломжтой.<br /><br /><span style="font-weight: bold;">Хөгжүүлсэн программаа микроконтроллеруугаа яаж хуулах вэ?</span><br /><a href="http://en.wikipedia.org/wiki/In-System_Programming">In-System-Programming</a> (ISP), High-Voltage-Programming (HVI) эсвэл JTAG дэмждэг <a href="http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2735">STK500</a>, <a href="http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=3891">AVR dragon</a> гэх мэт төхөөрөмж ашиглан хуулна.<br /><br /><span style="font-weight: bold;">Тийм төхөөрөмжгүй бол яах вэ?</span><br />Хэрвээ таны AVR <a href="http://en.wikipedia.org/wiki/Booting#Boot_loader">bootloader</a> -тай бол компьютерын USB болон COM порт ашиглан шууд хуулж бас болдог.<br /><br /><span style="font-weight: bold;">AVR микроконтроллероо ажиллуулахын тулд юу нэмж залгах ёстой вэ?</span><br />Хамгийн энгийнээр залгая гэвэл нэг батарей нэмж залгаад л болоо.ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com0tag:blogger.com,1999:blog-2427723173889816523.post-85028812942441274442009-12-03T20:12:00.012+08:002009-12-08T05:29:53.932+08:00Work No.1-1 Button нэмж залгахТовчлуур залгаж зөвхөн дарсан тохиолдолд диодоо анивчуулдаг болгон тохируулъя.<br /><br />Товчлуурыг микроконтроллерд хоёр янзаар залгаж болно.<br /><br />Товчлуур дарагдсан тохиолдолд микроконтроллерын хөл дээр тог очиж байвал тухайн холболтыг <span style="font-weight: bold;">active high</span> гэж нэрлэнэ. Доорх схемийг хараарай. Гүйдлийн хүч хязгаарлах эсэргүүцлээр ихэвчлэн 10 KΩ ын эсэргүүцэл ашигладаг.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGejFm2-6GL_e5HCIRvZ2XUPAaq04kDvD15oVOfMEKUBfWsgzq0wB3PUq7jxOxa6F_2D4DQXf0HyToR1WM9Ixz0Nss0fnUmWEhCcT19_zLXcHvlavTW3JV2wpryhE1poyA9HgR-zWxd8g/s1600-h/active+high.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 217px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGejFm2-6GL_e5HCIRvZ2XUPAaq04kDvD15oVOfMEKUBfWsgzq0wB3PUq7jxOxa6F_2D4DQXf0HyToR1WM9Ixz0Nss0fnUmWEhCcT19_zLXcHvlavTW3JV2wpryhE1poyA9HgR-zWxd8g/s400/active+high.png" alt="" id="BLOGGER_PHOTO_ID_5412207283698404002" border="0" /></a><br />Доорх схем дээр товчлуур дараагүй тохиолдолд 5V, харин дарсан тохиолдолд 0V очно. Ийм учир энэ холболтыг <span style="font-weight: bold;">active low</span> гэж нэрлэдэг.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAvP02nguK1XBrWLarxdUwb4ADDHX5Ebh-2_EbYzbtBbOJkK8FVIYsdTKA2Im47JB0TRFtFH3r2KKC3X7ADAqTlg1K0D-_BLtLYApFaYPgAVk9CKp_mqQNQVEFpB2yyAdmlR2WVKIZTH4/s1600-h/active+low.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 217px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAvP02nguK1XBrWLarxdUwb4ADDHX5Ebh-2_EbYzbtBbOJkK8FVIYsdTKA2Im47JB0TRFtFH3r2KKC3X7ADAqTlg1K0D-_BLtLYApFaYPgAVk9CKp_mqQNQVEFpB2yyAdmlR2WVKIZTH4/s400/active+low.png" alt="" id="BLOGGER_PHOTO_ID_5412207977938245778" border="0" /></a><br />Товчлуур дарсан эсэхийг <span style="font-weight: bold;">AVR</span> микроконтроллер дээр тун амархан шалгаж болно. Эхлээд <span style="font-weight: bold;">DDR</span> хэмээх регистр ашиглан товчлуур залгасан хөлөө оролтын хөл гэж зарлаж өгөх хэрэгтэй. Товчлуур <span style="font-weight: bold;">PB1</span> хөл дээр залгагдсан тул<br /><pre name="code" class="c"><br /> DDRB &= ~(1 << PB1); // 8 бит DDRB регистрийн баруунаас 2 дахь битийг 0 болгоно, үлдсэн долоон битний утга өөрлөгдөхгүй<br /></pre><br />гэхэд хангалттай.<br /><span style="font-weight: bold;">Active High</span> аар товчлуураа залгасан бол доорх байдлаар <span style="font-weight: bold;">PIN</span> регистр ашиглан товчлуур дарсан үгүйг мэдэрнэ:<br /><pre name="code" class="c"><br /> if (PINB & (1 << PB1)) {<br /> // товчлуур дарагдсан байна<br /> } else {<br /> // товчлуур дарагдаагүй байна<br /> }<br /></pre><br /><span style="font-weight: bold;">PS: edited by Ajaxmaa 2009/12/07</span>mncontrollerhttp://www.blogger.com/profile/07937407618956786357noreply@blogger.com0tag:blogger.com,1999:blog-2427723173889816523.post-33052693948972288122009-11-16T01:04:00.034+08:002009-12-08T05:30:11.820+08:00Work No.1 Гүйдэг гэрлэн диод<div style="text-align: justify;">Үүнийг хийх болсон шалтгаан нь яваандаа гүйдэг гэрлэн диодоос бүтсэн самбар хийх зорилготой юм. Эхний удаад 4 диод залгаад туршиж үзье гэж боджийн Юуны түрүүнд микроконтроллер уруугаа гэрлэн диодоо яаж холбох талаар үзье.<br /><br />Манай AVR ийн хөлөөс +5V хүчдэл гардаг. Гэрлэн диодоор гүйх гүйдэл өнгөнөөсөө хамаараад хоорондоо адилгүй. Дээд тал нь +4V байна. Тэхээр +5V залгавал гэрлэн диод шатах учир шатаахгүйн тулд эсэргүүцэл залгаж хүчдэлийг хуваана. Эсэргүүцлийг бодож олохдоо <a href="http://led.linear1.org/1led.wiz">энэ сайтыг</a> ашиглаарай.<br />Диодын дамжуулах гүйдэл (diode forward current) дээр нь 20 гэж бичиж өгөөрэй. Гэрлэн диодуудаа цуваа залгаж болохгүй учир бүгдийг нь зэрэгцээ залгана. яагаад цуваа залгаж болохгүй байгаа вэ гэвэл нэг нэгээр нь удирдах учраас. За тээд цааш нь диодынхоо анод хөлд нь тэжээл (эсэргүүцэл холбосон тэжээл) катод хөлд нь газар холбоно. Эсэргүүцэлд чиглэл гэж байхгүй тул хаашаа ч харуулж холбосон болно.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGWdUKr33iIQsDYZIgJpkXXFfZtpbEFdk_SiBlFLzgeoyYpdLqc6zl1NddVjXH_eve1jSsYwzA9DB5D4md3rQoSTewBu3L2lki73eDrBx0UAUI9TIlB8ISFcvXGgd3d7Ehz-YH6LTmX_A/s1600-h/Led_rv.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 242px; height: 72px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGWdUKr33iIQsDYZIgJpkXXFfZtpbEFdk_SiBlFLzgeoyYpdLqc6zl1NddVjXH_eve1jSsYwzA9DB5D4md3rQoSTewBu3L2lki73eDrBx0UAUI9TIlB8ISFcvXGgd3d7Ehz-YH6LTmX_A/s320/Led_rv.png" alt="" id="BLOGGER_PHOTO_ID_5404395812507251458" border="0" /></a>Миний угсарсан хавтан иймэрхүү янзтай болж байна.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcTgMO1UM3KQcX53VLrd_nhZ7k1dFtIGBuIlORqmmsjFMMPUxLx51Bl8voXN0_znv-sqgpMMIvOoQukrQaJFnl5P-igy5moFBco4N9Uh_TstAqksGZiosdUxXOtXK1A4zM0oXA3UoHK6c/s1600-h/led.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 174px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcTgMO1UM3KQcX53VLrd_nhZ7k1dFtIGBuIlORqmmsjFMMPUxLx51Bl8voXN0_znv-sqgpMMIvOoQukrQaJFnl5P-igy5moFBco4N9Uh_TstAqksGZiosdUxXOtXK1A4zM0oXA3UoHK6c/s320/led.png" alt="" id="BLOGGER_PHOTO_ID_5410980162361168178" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvaKf524YKoVkcoVhPlbZ28ehdNF21t9MBCXdE40Y37HkKipGbMENkocUQvECOKB9WEpfo0JQuRNydW4oI_-wjPUKQ5w5TwDirr7Hj4p6pQXgtz2d5m_u5Wrl0tW1PdGNHbMUdTyu2QHU/s1600/DSC02626.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 206px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvaKf524YKoVkcoVhPlbZ28ehdNF21t9MBCXdE40Y37HkKipGbMENkocUQvECOKB9WEpfo0JQuRNydW4oI_-wjPUKQ5w5TwDirr7Hj4p6pQXgtz2d5m_u5Wrl0tW1PdGNHbMUdTyu2QHU/s320/DSC02626.JPG" alt="" id="BLOGGER_PHOTO_ID_5404598911771711810" border="0" /></a><br />За тэгээд энэ дээрээ Sanguino хавтангаа зоогоод ажиллуулах юм байгаа юм.<br /><br />Програмын хувьд бол С хэл дээр бичсэн. AVR өөрөө оролт гаралтын 32 хөлтэй гэж доор дурьдсан. 32 хөлөө 8 8 аар нь салгаад<br /></div><ol style="text-align: justify;"><li>PORTA<br /></li><li>PORTB<br /></li><li>PORTC<br /></li><li>PORTD гээд хуваачихсан байгаа.<br /></li></ol><div style="text-align: justify;">Жишээ нь b0 хөлийг удирдъя гэвэл<br /><br /><pre name="code" class="c"><br /> DDRB = 0xFF ; //DDR регистерээр тухайн портын гаралт оролтыг нь заана. 0x00 гэвэл оролт болно <br /> PORTB |= (1 << PB0) ;// PB0 хөлөнд 5V тэжээл очиж байна <br /> PORTB &= ~(1 << PB0) ; // PB0 хөлөнд GND очиж байна <br /></pre><br />Хэрэв оролт гэж заасан бол хөлийн PIN регистерээр удирдана. С хэлний биттэй харьцдаг командуудын талаар илүү ихйиг <a href="http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=37871&sid=4ecee0cc2d4719d13f8bddc5231b72e6">эндээс</a> мэдэж болно.<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/pQ7xSeoH9Sw&hl=en_US&fs=1&"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/pQ7xSeoH9Sw&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>mncontrollerhttp://www.blogger.com/profile/07937407618956786357noreply@blogger.com9tag:blogger.com,1999:blog-2427723173889816523.post-68355831991337265032009-11-15T23:25:00.009+08:002009-11-18T00:03:50.189+08:00Sanguino хавтанЮуны түрүүнд энэ блогт нэгдэн орж байгаадаа их баяртай байгаагаа уламжилъя. Би эхлэн суралцагч болохоор энгийн амархан зүйлсийг хийж сурснаа энэ блогоор дамжуулан та бүхэнд хийх аргачлалыг нь хүргэх болно. Би цаашдаа ер нь <a href="http://www.sanguino.cc/">Sanguino</a> хавтан ашиглах учраас та бүхэнд эхний бичлэгээрээ хавтангаа танилцуулъя.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0qGu1kWBLtW_e9dpMOPdYp3x5IvS8aFq2orPVcrqXXhavi_bOMvcerptp9l31kgFQTU1KL-CNeuImciSePJsOqS5F95s4MrOX_8ZxPUXcDZAXcWRWlnL31IPlxnEiZDzJFKWLDWW-Ew4/s1600-h/2692042043_374ffe1d70.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0qGu1kWBLtW_e9dpMOPdYp3x5IvS8aFq2orPVcrqXXhavi_bOMvcerptp9l31kgFQTU1KL-CNeuImciSePJsOqS5F95s4MrOX_8ZxPUXcDZAXcWRWlnL31IPlxnEiZDzJFKWLDWW-Ew4/s320/2692042043_374ffe1d70.jpg" alt="" id="BLOGGER_PHOTO_ID_5404361732820586114" border="0" /></a><br /><span style="font-weight: bold;">Техникийн үзүүлэлт</span><br /><ul><li><a href="http://www.atmel.com/dyn/Products/Product_card.asp?part_id=3896">atmega644P</a> контроллер суурилсан<br /></li><li>32 ширхэг оролт гаралтын хөл<br /></li><li>8 ширхэг аналог хөл<br /></li><li>6 хүчдэл, газардуулалтын хөл<br /></li><li>64K flash memory</li><li>4K RAM</li><li>2K EEPROM</li><li><a href="http://en.wikipedia.org/wiki/Breadboard">breadboard</a> дээр суурьлах боломжтой</li><li>Serial аар компьютертэй холбогдох боломжтой</li></ul><span style="font-weight: bold;"></span><br /><span style="font-weight: bold;">Sanguino -д зориулж хэрхэн програм бичих вэ?</span><br /><br /><a href="http://sourceforge.net/projects/winavr/files/">WinAVR</a> болон <a href="http://www.atmel.com/dyn/resources/prod_documents/AVRStudio4.16SP1.exe">AVR Studio</a> гэх мэт toolchain ашиглаж C болон Assembler хэл дээр програмаа бичнэ.mncontrollerhttp://www.blogger.com/profile/07937407618956786357noreply@blogger.com0tag:blogger.com,1999:blog-2427723173889816523.post-78799528425429583672009-07-19T20:09:00.008+08:002009-10-23T05:03:35.120+08:00Гэрийн нөхцөлд PCB хийх<a href="http://mc2051.blogspot.com/">AT89C2051 блог</a> гэсэн Монгол блог дээр <a href="http://mc2051.blogspot.com/2009/06/blog-post.html">Гэртээ PCB хийцгээх үү?</a> гэсэн бичлэг олж үзэв. Би яаг энэ аргаар хэдэн жилийн өмнө хавтангуудаа хийдэг байлаа.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEecRc3JiW_9r3sI-XZVo0hZ4B4-AshB56b1kWT9nh3aE0RUf12p8ARy9jp1Pt_C09fNI0qdaLAmXcbiuF3tOJkBrL8z8vDLNz7s02YoYMKJkJs2K67hFZTccNhTAxjvu06wdt-KapvzzX/s1600-h/pcb.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEecRc3JiW_9r3sI-XZVo0hZ4B4-AshB56b1kWT9nh3aE0RUf12p8ARy9jp1Pt_C09fNI0qdaLAmXcbiuF3tOJkBrL8z8vDLNz7s02YoYMKJkJs2K67hFZTccNhTAxjvu06wdt-KapvzzX/s400/pcb.jpg" alt="" id="BLOGGER_PHOTO_ID_5360143448268028450" border="0" /></a><br />Дээрх дэлгэцийн агшин дээр байгаа 2 шар хавтанг өөрөө хийгээд ажиллаж байсан тул нөгөө ногоо хавтангуудыг нь үйлдвэрт захиалуулж хийлгэсэн. Амьхандаа <a href="http://en.wikipedia.org/wiki/Controller%E2%80%93area_network">CAN bus</a> туршиж үзэх гээд <a href="http://ccrma.stanford.edu/courses/250a/docs/avr/ATMega644_Datasheet.pdf">Atmega644</a> болон <a href="http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010406">MCP2515</a> ашиглан 10 аад ийм хавтан хийсэнсэн. Одоо бүгдээрээ хог болоод гэрт хэвтэж байх шивдээ.ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com8tag:blogger.com,1999:blog-2427723173889816523.post-41600358121575128872009-05-07T19:17:00.002+08:002009-05-07T19:22:01.060+08:00Тайлбар@ embedded system сонирхогчдод:<br /><br />Гэртээ нэтгүй болоод удаж байгаа тул блогдоо бичлэг оруулж чадахгүй байгаа билээ. Дараа сараас нэг ADSL -ын бараа харахаараа сонирхолтой бичлэг оруулах болно.<br /><br />Хүндэтгэсэн Ажаксмааajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com2tag:blogger.com,1999:blog-2427723173889816523.post-22848948798975660182009-03-05T08:27:00.016+08:002009-11-17T05:13:37.900+08:00JTAG & OpenOCD<a href="http://www.olimex.com/dev/sam7-ex256.html">SAM7-EX256</a> боард маань <a href="http://www.olimex.com/dev/arm-usb-ocd.html">ARM-USB-OCD</a> гэсэн <a href="http://en.wikipedia.org/wiki/Joint_Test_Action_Group">JTAG</a> адаптертай дагалдаж ирсэн тул өнөөдөр сууж энэ адаптерыг дэмждэг <a href="http://openocd.berlios.de/">OpenOCD</a> програм суулгаж тохиргоог нь хийв. Энэ адаптер, програм хоёрын тусламжтайгаар ARM7 -нд зориулж бичсэн программаа microcontroller -луу хуулж болохоос гадна программаа GDB ашиглан шууд microcontroller дээрээ ажиллуулж, debug хийж болох ажээ.<br /><br /><span style="font-weight: bold;">OpenOCD -г хаанаас татаж авч суулгах вэ?</span><br /><a href="http://openocd.berlios.de/web/">http://openocd.berlios.de/web/</a> гэсэн цахим хуудаснаас татаж авч суулгана.<br /><br /><span style="font-weight: bold;">OpenOCD -г хэрхэн тохируулах вэ?</span><br />Тохиргоо нь ямар JTAG адаптер болон ARM7 ашиглаж байгаагаас шалтгаална. AT91SAM7X256, ARM-USB-OCD хоёрын хувьд хоёулаа OpenOCD -оор шууд дэмжигдэж байсан тул тус тусых нь тохиргоо болох <span style="font-weight: bold;">interface/arm-usb-ocd.cfg</span>, <span style="font-weight: bold;">target/sam7x256.cfg</span> файлуудыг хооронд нь нийлүүлж <span style="font-weight: bold;">sam7-ex256.cfg</span> гэж файл үүсгээд болоо аж.<br /><br /><span style="font-weight: bold;"></span><span style="font-weight: bold;">OpenOCD -г хэрхэн ашиглан microcontroller -луугаа бичсэн программаа хуулах вэ?</span><br />Эхлээд OpenOCD -г тохиргооных нь файлтай хамт асаах хэрэгтэй:<br /><code><br />openocd-ftd2xx.exe -f sam7-ex256.cfg<br /></code><br />Одоо telnet ашиглаж OpenOCD той холбогдоно:<br /><code><br />telnet localhost 4444<br /></code><br />Программаа хуулахын тулд telnet дээрээ доорх командыг бичихэд хангалттай:<br /><code><br />flash write_bank 0 minii_bichsen_programm.bin 0x00<br /></code>ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com3tag:blogger.com,1999:blog-2427723173889816523.post-75419869456886798652009-03-03T01:53:00.004+08:002009-03-03T02:51:15.414+08:00Embedded Linux Tutorial<p>Эмбэддэд Линукс эхлэн суралцагчдад хэрэгтэй хичээл, материалыг Big Blue буюу IBM сайт дээр байсныг олж үзэв. </p><p>Дараах линкээр ороод уншаад, туршиж үзээрэй.</p><p><a href="http://www.ibm.com/developerworks/linux/library/l-linux-kernel/">Anatomy of the Linux Kernel</a></p><p><a href="http://www.ibm.com/developerworks/linux/library/l-embl.html">Embedded Linux applications: An overview</a></p><p><a href="https://www6.software.ibm.com/developerworks/education/l-ubuntu/index.html">Explore Ubuntu Mobile and Embedded</a></p><p><a href="https://www6.software.ibm.com/developerworks/education/l-embedded-distro/index.html">Build an Embedded Linux distro from scratch</a></p>Embeddedmaahttp://www.blogger.com/profile/12783117561566725610noreply@blogger.com1tag:blogger.com,1999:blog-2427723173889816523.post-37343987469072855262009-03-03T01:24:00.024+08:002009-11-17T05:13:12.734+08:00ARM7 & ToolchainХүнээс авсан <a href="http://www.olimex.com/dev/sam7-ex256.html">SAM7-EX256</a> боард маань <a href="http://www.atmel.com/dyn/products/Product_card.asp?part_id=3755">AT91SAM7X256</a> гэдэг ARM7 microcontroller агуулахаас гадна Ethernet, USB, SD/MMC, speaker, joystick болон Nokia 6610 гар утасны LCD дэлгэцтэй ажээ.<br /><br />AT91SAM7X256 microcontroller -ын техникийн үзүүлэлтүүд:<br /><ul><li>32 бит <a href="http://www.arm.com/products/CPUs/ARM7TDMI.html">ARM7TDMI</a><br /></li><li>64 килобайт RAM</li><li>256 килобайт ROM (компьютерын хатуу дисктэй ижилхэн үүрэгтэй)</li><li>55Mhz хурдтай</li><li>Ethernet/USB/2x <a href="http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter">UART</a>/2x <a href="http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus">SPI</a>/etc.<br /></li></ul><div style="text-align: justify;"><span style="font-weight: bold;">Ингэхэд microcontroller гэж юу вэ? Бидний мэдэх AMD болон Intel -ын CPU -аас ямар ялгаатай вэ?</span><br />RAM, ROM болон янз бүрийн hardware interface өөртөө агуулсан CPU -г microcontroller гэж нэрлэдэг. Хамгийн өргөн хэрэглэгддэг microcontroller -ын төрлүүд:<br /><ul><li>8 бит: <a href="http://en.wikipedia.org/wiki/Atmel_AVR">AVR</a>, <a href="http://en.wikipedia.org/wiki/PIC_microcontroller">PIC</a>, <a href="http://en.wikipedia.org/wiki/Intel_8051">8051</a><br /></li><li>16 бит: <a href="http://en.wikipedia.org/wiki/TI_MSP430">MSP430</a><br /></li><li>32 бит: <a href="http://en.wikipedia.org/wiki/ARM_architecture">ARM</a>, <a href="http://en.wikipedia.org/wiki/MIPS_architecture">MIPS</a></li></ul><span style="font-weight: bold;">ARM7 гэж ямар microcontroller байдаг вэ?</span><br /><a href="http://www.arm.com/">АRM</a> компани <a href="http://www.arm.com/products/CPUs/ARM7TDMI.html">ARM7TDMI</a> гэж CPU core бүтээсэн бөгөөд үүнийг нь NXP (<a href="http://www.standardics.nxp.com/products/lpc2000/">LPC2000</a>), ATMEL (<a href="http://www.atmel.com/products/at91/">AT91</a>), Samsung гэх мэт компаниуд ашиглан тус тусын онцлогтой microcontroller лицензээр хийж үйлдвэрлэдэг.<br /><br /><span style="font-weight: bold;">ARM7 microcontroller -ыг юунд ашигладаг вэ?</span><br />Та бид бүхний сайн мэдэх IPod, Nintendo DS болон төрөл бүрийн гар утаснууд ARM7 microcontroller ашигладаг.<br /><br /><span style="font-weight: bold;">ARM7 microcontroller -д зориулж хэрхэн програм бичих вэ?</span><br /><a href="http://www.gnuarm.org/">GnuARM</a>, <a href="http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm">WinARM</a> гэх мэт toolchain ашиглаж C болон Assembler хэл дээр програмаа бичнэ. ARM7 microcontroller хэдхэн зуун килобайт флэйштэй тул Linux, Windows гэх мэт бэлэн үйлдлийн систем ашиглаж болохгүй. Хэрэгтэй бүх функцаа хөгжүүлэгч өөрөө бичнэ.<br /><br /><span style="font-weight: bold;">Бичсэн програмаа хэрхэн microcontroller -луу хуулж ажиллуулах вэ?</span><br /><a href="http://en.wikipedia.org/wiki/Booting#Boot_loader">Bootloader</a> эсвэл <a href="http://en.wikipedia.org/wiki/Joint_Test_Action_Group">JTAG</a> ашиглаж компьютер дээр бичсэн кодоо microcontroller -луу хуулж ажиллуулна.<br /></div>ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com7tag:blogger.com,1999:blog-2427723173889816523.post-64782023670203078382009-03-03T01:09:00.001+08:002009-03-03T01:10:37.695+08:00Тавтай морилно ууӨнгөрсөн бямба гаригт таньдаг айл хальт нүүлгэлцэж өгөөд шагналд нь <a href="http://www.olimex.com/dev/sam7-ex256.html">SAM7-EX256</a> гэж нэг эмбэддэд боард авсан тул өнөөдрөөс эхэлж Эмбэддэдмаатай хамтарч шинэ блог нээв. Энэ шинэ блогтоо SAM7-EX256 боард хэрхэн ашиглаж Монголд зарагдаад байгаа бяцхан тархи шиг цахим толь бичиг програмчлах тухай бичихээр шийдлээ.ajaxmaahttp://www.blogger.com/profile/09187071136594960942noreply@blogger.com7tag:blogger.com,1999:blog-2427723173889816523.post-28622456756381736032009-03-03T00:13:00.004+08:002009-03-03T00:26:17.377+08:00Эхлэл<div style="text-align: justify;">Эмбэддэд Систем буюу Тусгай систем сонирхогч, суралцагч, хөгжүүлэгч та бүхэндээ уг блогийг өргөн барьж байна.<br />Манайд энэ чиглэлийн мэргэжилтэн, сонирхогчид их ховор байдаг ч уг салбар нь уул нь ихээхэн том зах зээлийг эзлэдэг ирээдүйтэй салбар юм л даа.<br /><br />Одоогоор манайд эмбэддэд системийн хэрэглээ нь хэдэн банкуудад байгаа дугаар олгогч windows (нарийн ярьвал эмдэддэд биш л байна лээ), Netsoft -ын хийсэн Smartbox, тэгээд хэдэн бяцхан, супер тархи энэ тэрээс цаашгүй. Миний л мэдэхээр... Ихэнхи нь импортоор оруулж ирсэн гадны баахан бүтээгдэхүүнүүд.<br /><br />Уул нь бид өдөр тутмынхаа амьдралдаа байнга л уг систем бүхий төхөөрөмж, хэрэгсэлтэй таарч байгаа. Жишээ нь л гэхэд та бидний барьж, халаасалж яваа гар утас, халаасны компьютер гэх мэт.<br /><br />Гэхдээ юм үргэлж нэгээрээ байхгүй жамтай. Цаашид энэ чиглэлээр дагнаж ажилладаг мэргэжилтэнүүд төрөн гарч өөрсдийн эх орны эмбэддэд бүтээгдэхүүнийг гаргах бизээ.<br /><br />Энэ чиглэлийг сонирхдог хэн бүхнийг уг блогоор дамжуулан мэдлэг, туршлага, үзэл бодолоо чөлөөтэй илэрхийлэхэд таатай байх болноо гээд эхний бичлэгийг өндөрлөе.</div>Embeddedmaahttp://www.blogger.com/profile/12783117561566725610noreply@blogger.com7