<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ayarafun &#187; isp</title>
	<atom:link href="http://www.ayarafun.com/tag/isp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ayarafun.com</link>
	<description>Electronic, Arduino ,Python ,Robotic</description>
	<lastBuildDate>Thu, 09 Sep 2010 16:24:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>รู้จัก In System Programming (ISP) เบิร์นไอชีได้อย่างไง</title>
		<link>http://www.ayarafun.com/2009/09/basic-isp-programming-for-av/</link>
		<comments>http://www.ayarafun.com/2009/09/basic-isp-programming-for-av/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 13:30:42 +0000</pubDate>
		<dc:creator>chang</dc:creator>
				<category><![CDATA[Embeded sys.]]></category>
		<category><![CDATA[Tutorial/Hacking]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[bootloader]]></category>
		<category><![CDATA[isp]]></category>

		<guid isPermaLink="false">http://www.ayarafun.com/?p=1150</guid>
		<description><![CDATA[กลับมาแล้วครับ รอบนี้ผมก้อมีบทความ ละเอียดอีกแล้ว บทความนี้เป็นของพี่ samira ผมยืมมาช่วยเผยแพร่ทางเวปนี้อีกช่องทางครับ หวังว่าคนเพิ่งมาจะได้ประโยชน์นะครับ (ท่าน CEO ไอยาราฟันส์ขี้เกียจขึ้นเรื่อยๆ) ส่วนมากคนที่เพิ่งเข้ามาจับ จะเจอคำศัพท์ใหม่ๆเยอะเลย ซึ่งมันต้องใช้เวลานะครับ วันนี้ผมมาแนะนำเรื่องพื้นฐานก่อน เรื่อนการเบิร์นครับ กว่าจะเป็น เบิร์นโปรแกรมได้แบบ ทุกวันนี้ เมื่อก่อน เวลาเราพัฒนาคอนโทรลเลอร์ การเขียนข้อมูล ( data หรือ program ) ลงใน EEPROM (erasable rom) นั้น เขาจะต้องถอดเอา chip ไปล้างข้อมูลด้วยแสง ultraviolet ถึงจะเขียนโปรแกรมเข้าไปในใหม่ได้ ( ไม่รู้ว่าเกิดกันทัน ผมมาก้อไม่เห็นแล้วนะครับ ) และอายุการใช้งานจำกัด ดังนั้นจะเห็นว่า เวลาจะพัฒนาโปรแกรมอะไรใหม่ จะมีกระบวนการที่วุ่นวายมากๆเลย PROM ตัวแรกๆ ของโลก รูปจาก http://en.wikipedia.org/wiki/Read-only_memory ต่อมาความก้าวหน้าทาง Technology ทาง flash memory พัฒนามากขึ้น


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">กลับมาแล้วครับ รอบนี้ผมก้อมีบทความ ละเอียดอีกแล้ว บทความนี้เป็นของพี่ samira ผมยืมมาช่วยเผยแพร่ทางเวปนี้อีกช่องทางครับ หวังว่าคนเพิ่งมาจะได้ประโยชน์นะครับ (ท่าน CEO ไอยาราฟันส์ขี้เกียจขึ้นเรื่อยๆ) ส่วนมากคนที่เพิ่งเข้ามาจับ จะเจอคำศัพท์ใหม่ๆเยอะเลย ซึ่งมันต้องใช้เวลานะครับ วันนี้ผมมาแนะนำเรื่องพื้นฐานก่อน เรื่อนการเบิร์นครับ</p>
<p style="text-align: left;"><strong> </strong><strong>กว่าจะเป็น เบิร์นโปรแกรมได้แบบ ทุกวันนี้</strong><br />
เมื่อก่อน เวลาเราพัฒนาคอนโทรลเลอร์ การเขียนข้อมูล ( data หรือ  program ) ลงใน EEPROM (erasable rom) นั้น เขาจะต้องถอดเอา chip  ไปล้างข้อมูลด้วยแสง ultraviolet ถึงจะเขียนโปรแกรมเข้าไปในใหม่ได้ (  ไม่รู้ว่าเกิดกันทัน ผมมาก้อไม่เห็นแล้วนะครับ ) และอายุการใช้งานจำกัด  ดังนั้นจะเห็นว่า เวลาจะพัฒนาโปรแกรมอะไรใหม่ จะมีกระบวนการที่วุ่นวายมากๆเลย</p>
<p style="text-align: left;"><img class="aligncenter" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/16/Eprom.jpg/300px-Eprom.jpg" alt="" width="300" height="156" /></p>
<p style="text-align: left;">PROM ตัวแรกๆ ของโลก รูปจาก <a href="http://en.wikipedia.org/wiki/Read-only_memory" target="_blank">http://en.wikipedia.org/wiki/Read-only_memory</a></p>
<p style="text-align: left;">ต่อมาความก้าวหน้าทาง Technology ทาง flash memory พัฒนามากขึ้น  ได้บรรจุ flash memory ลงไปใน chip ด้วยทำให้การทำงานลบล้างข้อมูลบน chip ง่ายขึ้น  อาจจะไม่ต้องใช้แสง ultraviolet เพื่อลบข้อมูล ใช้ไฟ ปกติก้อสามารถ อ่านเขียน ลบ  โปรแกรมได้ แตก้อ่ยังต้องมีเครื่องมือ หรือ  วงจรที่ต้องออกแบบมาเพื่อใช้งานนี้อยู่ดี</p>
<p style="text-align: right;"><strong>(อ่านต่อ click เลย)</strong><span id="more-1150"></span></p>
<h3 style="text-align: left;"><strong>เครื่องเบิร์นโปรแกรม  (flash programmers)</strong></h3>
<p style="text-align: left;">การอัดโปรแกรมเข้าไปในชิป  หรือเรียกภาษาเราบ่อยๆว่า &#8220;เบิร์นโปรแกรม&#8221; จะต้องใช้ไฟสูง หรือ  สัญญาณระดับไฟมากกว่า 12 โวลต์ เข้าไป tick ขาสัญญาณ เพื่อให้<span onclick="tagshow(event)">ไมโคร</span>ฯ  รับรู้ว่าจะมีการเขียนโปรแกรม ซึ่งในอดีตต้องมีการถอดเข้า ถอดออก ชิปบ่อยๆ  เพื่อย้ายชิปจากบอร์ดที่เราใช้ ไปยังเครื่องโปรแกรม ซึ่งจะมีวงจรที่ทำไฟสูง  แต่ด้วยความต้องการปัจจุบัน ทางบริษัทผลิต chip ได้บรรจุวงจร เพิ่มแรงดันเข้าไปใน  chip ด้วยจึงทำให้สามาร flash โปรแกรม เข้าไปใน chip ได้ด้วย เรียกว่า??In Circuit  System Programming ( ICSP or ISP) พูดตามภาษาชาวบ้านก็คือ การเขียน การเบิร์น  (burn) อุปกรณ์วงจรต่าง จึงลดลงไป</p>
<p>ส่วนการเบิร์นโปรแกรม (flash  programmers) (ISP) จะสามารถเบิร์นโปรแกรมได้สองวิธี เรียกว่า แบบ Parallel  Programming Mode (Parallel Mode) และแบบ <span onclick="tagshow(event)">Serial</span> Downloading Mode (ISP  mode)<br />
ถ้าเป็นแบบ pararell คือการต่อตรงเข้าไป mcu  ไม่ได้ผ่านชุดคำสั่งพิเศษ แต่ถ้าเป็น spi จะใช้ชุดคำสั่งใช้ในการ flash โปรแกรม  เข้าไป ที่นี้ขอกล่าวเฉพาะเขียนโปรแกรมแบบ serial<em><strong> ผ่านโมดุลสื่อสาร  SPI</strong></em></p>
<h2 style="text-align: left;"><strong>การทำงานของ In System Programming (ISP) </strong></h2>
<p style="text-align: left;">อย่างที่บอกไว้ตอนแรก flash memory สามารถเขียนได้ต้องใช้ไฟสูง  ในการขับขา gate จึงได้มีการพัฒนาเพิ่มทวีแรงดัน เพื่อสร้างไฟสูงภายในวงจร  การเบิร์นจึงทำได้ง่ายขึ้น</p>
<p>ในโมดุล ISP จะประกอบด้วยส่้วนการเขียนโปรแกรม  ลบโปรแกรม โดยมีรูปแบบ การส่ง command และ data ตาม datasheet หน้า 299<br />
<a href="http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf" target="_blank">http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf</a></p>
<p>บทความนี้ไม่ได้  มาชวนเขียนวิธีการเขียนโปรแกรมเพื่อลง flash  เพียงต้องการให้เข้าใจพื้นฐาน</p>
<p><strong> </strong></p>
<h3 style="text-align: left;"><strong>ขา <span onclick="tagshow(event)">MCU</span> ที่ใช้ใน In System  Programming</strong></h3>
<p style="text-align: left;"><img class="aligncenter" src="http://docs.google.com/File?id=dk2qpvk_960cn58rndd_b" alt="" width="500" height="370" />(ภาพ : ด้วยความเอื้อเฟื้อ จากเว็ปท่าน elmchan.org )</p>
<p style="text-align: left;">หากเข้าไปดูใน Atmel Chip จะเห็นว่า ขาของ chip เหล่านั้น  มีคำอธิบายไว้แทบทุกขาว่ามันทำอะไรบ้าง แต่เราจะสนใจแต่ ขาที่ใช้สำหรับ ISP<br />
<a href="http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf" target="_blank">http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf</a><br />
หน้า  2 ของเอกสารนี้ ท่านจะเห็น pin out ของ chip Atmega 44/88/168</p>
<p><strong>MOSI </strong>==  Master Out Slave In: data input<br />
<strong>MISO </strong>== Master In Slave out : data  output<br />
<strong>SCK</strong> == Serial ClocK : clock input<br />
<strong>RST</strong> == RESET: used to activate  the serial Programming</p>
<p>จากข้างบนจะเห็นว่า ขาที่บ่งว่า MOSI นั้น  จะเป็นขาส่งข้อมูลออก( Output ) ของตัวแม่ ( master )<br />
MISO นั้น  เป็นขาที่รับข้อมูล (input ) ที่ส่งมาจากลูก ( slave )<br />
SCK นั้น  เป็นตัวนาฬิกาคอยให้จังหวะการส่งข้อมูล<br />
ขาสุดท้ายก็คือ RST นั้น  คือตัวที่เริ่มให้มีการเขียนโปรแกรมลง chip</p>
<h3 style="text-align: left;"><strong>ขั้นตอนการทำงาน In  System Programming ผ่าน SPI ( จาก datasheet ของ Atmel )</strong></h3>
<p style="text-align: left;">ขั้นตอนการเขียนโปรแกรม ( code ) ลงบน chip นั้นจะส่งข้อมูลเป็นแบบ serial หรือ  ISP จะเริ่มต้นทำงานด้วยขณะที่ขา RST ถูกปรับให้มีค่า Logic high ( ระดับสัญญาณ  เท่ากับ Vcc )</p>
<p>สำหรับขา RST นั้น ปกติ ใช้สำหรับ reset โปรแกรม  กล่าวคือสัญญาณ Reset จะหยุดโปรแกรมและเริ่มต้นการทำงานใหม่ โดยเราทำให้ขา RST  มีระดับสัญญาณต่ำ ( logic ต่ำ )<br />
เมื่อขา RST ถูกตั้งให้เป็น High  คำสั่งพิเศษที่เรียกว่า Programming Enable instruction จะทำงานก่อน</p>
<p>สำหรับการรับส่งข้อมูลแบบ Serial คือการส่งข้อมูลจาก  ด้วยช่องสัญญาณเพียงช่องเดียว หรืือ ขาสัญญาณขาเดียว ในที่นี้คือขาสัญญาณ MISO และ  MOSI<br />
โดยข้อมูลจะส่งผ่าน MOSI ทีละ bit โดยแต่ละ bit สัญญาณจาก SCK  จะเป็นตัวควบคุมจังหวะของการรับส่ง และทางขา MISO  ใช้สำหรับรับข้อมูลจากลูกส่งกลับไปยังต้วแม่</p>
<p>โดยเริ่มจากข้อมูลใน chip  จะถูกลบหมด (chip erase) การลบข้อมูลใน flash memory และจะตามด้วยการเขียนค่า &#8220;FF&#8221;  (hexadecimal number) ลงไปในแต่ละตำแหน่งใน flash or ram memory ของ chip</p>
<p>ความเร็วของสัญญาณนาฬิกา ของ ISP จะถูกกำหนดโดยสัญญาณนาฬิกาอ้างอิงจาก  external clock ทีต่อที่ขา Xtal1 หรือ crystal ที่ต่อกับขา Xtal1&amp;Xtal2  โดยมีข้อกำหนดว่า ความเร็วของขา SCK นั้นจะเร็วไม่เกิน 1/16 ของ ความเร็วของ  crystal ไม่ได้</p>
<p>ฉะนั้น หากระบบของเรา ใช้ Crystal 16 MHz ความเร็วสูงสุดของ  SCK ก็จะได้แค่ 1 MHz แค่นั้น</p>
<h3 style="text-align: left;"><strong>โปรแกรมเบิร์นทำงานได้อย่างไง</strong></h3>
<p style="text-align: left;">โปรแกรมเบิร์น (Software  programmer) สำหรับ <span onclick="tagshow(event)">AVR</span> ที่นิยม ได้แก่ BASCOM ( basic ), avrstudio,  ponyprog , AVR Prog ซึ่ง โปรแกรมบางตัวสื่อสารตรง กับ mcu เลย อย่างเช่น ponyprog  ใช้สาย pararell สื่อสารแบบ SPI ตรงเข้า mcu เลย หรือบางตัวต้องผ่าน usb ติดต่อกับ  บอร์ดของเรา ซึ่ง hardware เหล่านี้จะสื่อสารข้อมูลโดยอาศัย protocol แบบ spi  ติดต่อกับ mcu อยู่ดี</p>
<p>ฉะนั้นโปรแกรมเบิร์นจึงเป็นการเขียนข้อมูล firmware  (hex code) เข้าไปในตัวชิปบนบอร์ดเรา<br />
software เช่น AVR studio, averdude หรือ  BASCOM ที่เราจะใช้เขียนโปรแกรมลง chip นั้น โปรแกรมเหล่านี้ จะมี Option  ให้เราเลือกใช้สายต่อ( hardware programmer ) ระหว่าง PC กับ  บอร์ดที่เราพัฒนา</p>
<p>สาเหตุที่เราต้องเลือกว่าจะใช้ programmer ตัวไหนนั้น  เพราะผู้สร้าง programmer แต่ละอัน ใช้ขาที่ใช้ทางฝั่ง PC สำหรับติดต่อกับ ขา MOSI,  MISO, SCK และ RST นั้น ไม่เหมือนกัน</p>
<p>ตัว hardware programmer  ซึ่งมีหลายรูปแบบ ไม่ว่าจะเป็น แบบต่อผ่าน สาย<strong> parallel สาย serial หรือ สาย <span onclick="tagshow(event)">USB</span></strong> ให้เราเลือกใช้ เช่น จาก <a href="http://www.captain.at/electronics/atmel-programmer/" target="_blank">http://www.captain.at/electronics/atmel-programmer/</a><br />
<img class="aligncenter" src="http://www.captain.at/electronics/atmel-programmer/th_atmega16-programmer.png" alt="" width="529" height="476" /></p>
<p>ต้วอย่าง<strong> serial programmer</strong> จาก <a href="http://www.serasidis.gr/circuits/avr_isp/avr_isp.htm" target="_blank">http://www.serasidis.gr/circuits/avr_isp/avr_isp.htm</a></p>
<p style="text-align: center;"><img style="cursor: pointer;" src="http://www.serasidis.gr/circuits/avr_isp/images/avr_isp_sch.jpg" alt="" width="600" height="306" /></p>
<p style="text-align: left;">จากข้างบน จะเห็นว่าสายต่อไปยัง MOSI ของparallel programmer  สองแบบนี้ มาจากคนละแหล่ง ของ parallel pin</p>
<p>อย่างไรก็ดี  ไม่ว่าสายที่ออกมาจาก ขาใหนก็ตามของ parallel or serial  port??ตัวรับที่อยู่บนบอร์ดของเรา จะมีมาตรฐานเดียวกันหมด กล่าวคือ??10 pin ICSP  header จะมีมาตรฐานเดียวกัน</p>
<p><a href="http://www.olimex.com/dev/pdf/avr-pg2b.pdf" target="_blank">http://www.olimex.com/dev/pdf/avr-pg2b.pdf</a><br />
<strong><br />
ขา 1 ==  MOSI<br />
ขา 2??== Vcc<br />
ขา 1??== LED หรือ เว้นว่าง<br />
ขา 4??== GND<br />
ขา 5??==  RST<br />
ขา 6??== GND<br />
ขา 7??== SCK<br />
ขา 8??== GND<br />
ขา 9??== MISO<br />
ขา  10??==GND</strong></p>
<p style="text-align: left;">เอาล่ะครับ จบสักที่นะครับ อาจจะเข้าใจยากสักนิดนะครับ บทความนี้ เป็นบทความเขียนร่วมกัน ผู้เขียนทั้งสอง คุณพี่ @samira จาก? St. Louis,  MO กับผม <a href="http://www.twitter.com/ayarafun">@ayarafun</a> ช่วยแต่งเติม? หวังว่าบทความคงจะมีประโยชน์บ้าง</p>
<p>บทความเขียนเรียบเรียงโดย samira ,St. Louis,  MO<br />
แนะนำ ตรวจ เพิ่มเติม แก้ใข โดย ChANg,??BKK, Thailand</p>
<h3>เอกสารอ้างอิง</h3>
<p style="text-align: left;"><a href="http://www.ikalogic.com/isp.php" target="_blank">http://www.ikalogic.com/isp.php</a><br />
<a href="http://www.olimex.com/dev/pdf/avr-pg2b.pdf" target="_blank">http://www.olimex.com/dev/pdf/avr-pg2b.pdf</a><br />
<a href="http://www.captain.at/electronics/atmel-programmer/" target="_blank">http://www.captain.at/electronics/atmel-programmer/</a></p>
<p style="text-align: left;"><strong>ข้อมูลเพิ่มเติมเกี่ยวกับ  Memory </strong><br />
<a href="http://en.wikipedia.org/wiki/Read-only_memory" target="_blank">http://en.wikipedia.org/wiki/Read-only_memory</a><br />
<a href="http://en.wikipedia.org/wiki/Flash_memory" target="_blank">http://en.wikipedia.org/wiki/Flash_memory</a></p>
<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://www.ayarafun.com/2009/09/basic-isp-programming-for-av/&amp;layout=standard&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p>

<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.ayarafun.com/2009/09/basic-isp-programming-for-av/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
