You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1046 lines
214 KiB

4 years ago
  1. <!DOCTYPE html>
  2. <html class='v2' dir='ltr' lang='en'>
  3. <head>
  4. <link href='https://www.blogger.com/static/v1/widgets/1171200566-widget_css_mobile_2_bundle.css' rel='stylesheet' type='text/css'/>
  5. <meta content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0' name='viewport'/>
  6. <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
  7. <meta content='blogger' name='generator'/>
  8. <link href='http://junkplusarduino.blogspot.com/favicon.ico' rel='icon' type='image/x-icon'/>
  9. <link href='http://junkplusarduino.blogspot.com/p/attiny10-resources.html' rel='canonical'/>
  10. <link rel="alternate" type="application/atom+xml" title="Junk + Arduino = - Atom" href="http://junkplusarduino.blogspot.com/feeds/posts/default" />
  11. <link rel="alternate" type="application/rss+xml" title="Junk + Arduino = - RSS" href="http://junkplusarduino.blogspot.com/feeds/posts/default?alt=rss" />
  12. <link rel="service.post" type="application/atom+xml" title="Junk + Arduino = - Atom" href="https://www.blogger.com/feeds/770269670506803247/posts/default" />
  13. <!--[if IE]><script type="text/javascript" src="https://www.blogger.com/static/v1/jsbin/3095134620-ieretrofit.js"></script>
  14. <![endif]-->
  15. <meta content='http://junkplusarduino.blogspot.com/p/attiny10-resources.html' property='og:url'/>
  16. <meta content='ATtiny10 resources' property='og:title'/>
  17. <meta content='UPDATE:  A huge thanks to Keri DuPrey, Nat Blundell and others who have been continually improving the code. The latest version is here: ...' property='og:description'/>
  18. <meta content='http://1.bp.blogspot.com/-tCpXY9M75sU/T8s0rEAQRHI/AAAAAAAAAD0/exMvDDFA8-M/w1200-h630-p-k-no-nu/programmernew.jpg' property='og:image'/>
  19. <!--[if IE]> <script> (function() { var html5 = ("abbr,article,aside,audio,canvas,datalist,details," + "figure,footer,header,hgroup,mark,menu,meter,nav,output," + "progress,section,time,video").split(','); for (var i = 0; i < html5.length; i++) { document.createElement(html5[i]); } try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {} })(); </script> <![endif]-->
  20. <title>Junk + Arduino =: ATtiny10 resources</title>
  21. <style id='page-skin-1' type='text/css'><!--
  22. /*
  23. -----------------------------------------------
  24. Blogger Template Style
  25. Name: Simple
  26. Designer: Blogger
  27. URL: www.blogger.com
  28. ----------------------------------------------- */
  29. /* Content
  30. ----------------------------------------------- */
  31. body {
  32. font: normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
  33. color: #dddddd;
  34. background: #000000 none repeat scroll top left;
  35. padding: 0 10px 10px 10px;
  36. }
  37. html body .region-inner {
  38. min-width: 0;
  39. max-width: 100%;
  40. width: auto;
  41. }
  42. h2 {
  43. font-size: 22px;
  44. }
  45. a:link {
  46. text-decoration:none;
  47. color: #00dd07;
  48. }
  49. a:visited {
  50. text-decoration:none;
  51. color: #85ff87;
  52. }
  53. a:hover {
  54. text-decoration:underline;
  55. color: #6bf86e;
  56. }
  57. .body-fauxcolumn-outer .fauxcolumn-inner {
  58. background: transparent none repeat scroll top left;
  59. _background-image: none;
  60. }
  61. .body-fauxcolumn-outer .cap-top {
  62. position: absolute;
  63. z-index: 1;
  64. height: 400px;
  65. width: 100%;
  66. }
  67. .body-fauxcolumn-outer .cap-top .cap-left {
  68. width: 100%;
  69. background: transparent none repeat-x scroll top left;
  70. _background-image: none;
  71. }
  72. .content-outer {
  73. -moz-box-shadow: 0 0 10px rgba(0, 0, 0, .15);
  74. -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .15);
  75. -goog-ms-box-shadow: 0 0 10px #333333;
  76. box-shadow: 0 0 10px rgba(0, 0, 0, .15);
  77. margin-bottom: 1px;
  78. }
  79. .content-inner {
  80. padding: 10px 10px;
  81. }
  82. .content-inner {
  83. background-color: #080808;
  84. }
  85. /* Header
  86. ----------------------------------------------- */
  87. .header-outer {
  88. background: #292929 none repeat-x scroll 0 -400px;
  89. _background-image: none;
  90. }
  91. .Header h1 {
  92. font: normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
  93. color: #ffffff;
  94. text-shadow: -1px -1px 1px rgba(0, 0, 0, .2);
  95. }
  96. .Header h1 a {
  97. color: #ffffff;
  98. }
  99. .Header .description {
  100. font-size: 140%;
  101. color: #dddddd;
  102. }
  103. .header-inner .Header .titlewrapper {
  104. padding: 22px 30px;
  105. }
  106. .header-inner .Header .descriptionwrapper {
  107. padding: 0 30px;
  108. }
  109. /* Tabs
  110. ----------------------------------------------- */
  111. .tabs-inner .section:first-child {
  112. border-top: 1px solid #333333;
  113. }
  114. .tabs-inner .section:first-child ul {
  115. margin-top: -1px;
  116. border-top: 1px solid #333333;
  117. border-left: 0 solid #333333;
  118. border-right: 0 solid #333333;
  119. }
  120. .tabs-inner .widget ul {
  121. background: #222222 none repeat-x scroll 0 -800px;
  122. _background-image: none;
  123. border-bottom: 1px solid #333333;
  124. margin-top: 0;
  125. margin-left: -30px;
  126. margin-right: -30px;
  127. }
  128. .tabs-inner .widget li a {
  129. display: inline-block;
  130. padding: .6em 1em;
  131. font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
  132. color: #999999;
  133. border-left: 1px solid #080808;
  134. border-right: 0 solid #333333;
  135. }
  136. .tabs-inner .widget li:first-child a {
  137. border-left: none;
  138. }
  139. .tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover {
  140. color: #ffffff;
  141. background-color: #000000;
  142. text-decoration: none;
  143. }
  144. /* Columns
  145. ----------------------------------------------- */
  146. .main-outer {
  147. border-top: 0 solid #404040;
  148. }
  149. .fauxcolumn-left-outer .fauxcolumn-inner {
  150. border-right: 1px solid #404040;
  151. }
  152. .fauxcolumn-right-outer .fauxcolumn-inner {
  153. border-left: 1px solid #404040;
  154. }
  155. /* Headings
  156. ----------------------------------------------- */
  157. div.widget > h2,
  158. div.widget h2.title {
  159. margin: 0 0 1em 0;
  160. font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
  161. color: #ffffff;
  162. }
  163. /* Widgets
  164. ----------------------------------------------- */
  165. .widget .zippy {
  166. color: #999999;
  167. text-shadow: 2px 2px 1px rgba(0, 0, 0, .1);
  168. }
  169. .widget .popular-posts ul {
  170. list-style: none;
  171. }
  172. /* Posts
  173. ----------------------------------------------- */
  174. h2.date-header {
  175. font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
  176. }
  177. .date-header span {
  178. background-color: transparent;
  179. color: #cccccc;
  180. padding: inherit;
  181. letter-spacing: inherit;
  182. margin: inherit;
  183. }
  184. .main-inner {
  185. padding-top: 30px;
  186. padding-bottom: 30px;
  187. }
  188. .main-inner .column-center-inner {
  189. padding: 0 15px;
  190. }
  191. .main-inner .column-center-inner .section {
  192. margin: 0 15px;
  193. }
  194. .post {
  195. margin: 0 0 25px 0;
  196. }
  197. h3.post-title, .comments h4 {
  198. font: normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
  199. margin: .75em 0 0;
  200. }
  201. .post-body {
  202. font-size: 110%;
  203. line-height: 1.4;
  204. position: relative;
  205. }
  206. .post-body img, .post-body .tr-caption-container, .Profile img, .Image img,
  207. .BlogList .item-thumbnail img {
  208. padding: 0;
  209. background: #111111;
  210. border: 1px solid #111111;
  211. -moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
  212. -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
  213. box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
  214. }
  215. .post-body img, .post-body .tr-caption-container {
  216. padding: 1px;
  217. }
  218. .post-body .tr-caption-container {
  219. color: #cccccc;
  220. }
  221. .post-body .tr-caption-container img {
  222. padding: 0;
  223. background: transparent;
  224. border: none;
  225. -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
  226. -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
  227. box-shadow: 0 0 0 rgba(0, 0, 0, .1);
  228. }
  229. .post-header {
  230. margin: 0 0 1.5em;
  231. line-height: 1.6;
  232. font-size: 90%;
  233. }
  234. .post-footer {
  235. margin: 20px -2px 0;
  236. padding: 5px 10px;
  237. color: #888888;
  238. background-color: #303030;
  239. border-bottom: 1px solid #444444;
  240. line-height: 1.6;
  241. font-size: 90%;
  242. }
  243. #comments .comment-author {
  244. padding-top: 1.5em;
  245. border-top: 1px solid #404040;
  246. background-position: 0 1.5em;
  247. }
  248. #comments .comment-author:first-child {
  249. padding-top: 0;
  250. border-top: none;
  251. }
  252. .avatar-image-container {
  253. margin: .2em 0 0;
  254. }
  255. #comments .avatar-image-container img {
  256. border: 1px solid #111111;
  257. }
  258. /* Comments
  259. ----------------------------------------------- */
  260. .comments .comments-content .icon.blog-author {
  261. background-repeat: no-repeat;
  262. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
  263. }
  264. .comments .comments-content .loadmore a {
  265. border-top: 1px solid #999999;
  266. border-bottom: 1px solid #999999;
  267. }
  268. .comments .comment-thread.inline-thread {
  269. background-color: #303030;
  270. }
  271. .comments .continue {
  272. border-top: 2px solid #999999;
  273. }
  274. /* Accents
  275. ---------------------------------------------- */
  276. .section-columns td.columns-cell {
  277. border-left: 1px solid #404040;
  278. }
  279. .blog-pager {
  280. background: transparent none no-repeat scroll top center;
  281. }
  282. .blog-pager-older-link, .home-link,
  283. .blog-pager-newer-link {
  284. background-color: #080808;
  285. padding: 5px;
  286. }
  287. .footer-outer {
  288. border-top: 0 dashed #bbbbbb;
  289. }
  290. /* Mobile
  291. ----------------------------------------------- */
  292. body.mobile {
  293. background-size: auto;
  294. }
  295. .mobile .body-fauxcolumn-outer {
  296. background: transparent none repeat scroll top left;
  297. }
  298. .mobile .body-fauxcolumn-outer .cap-top {
  299. background-size: 100% auto;
  300. }
  301. .mobile .content-outer {
  302. -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15);
  303. box-shadow: 0 0 3px rgba(0, 0, 0, .15);
  304. }
  305. .mobile .tabs-inner .widget ul {
  306. margin-left: 0;
  307. margin-right: 0;
  308. }
  309. .mobile .post {
  310. margin: 0;
  311. }
  312. .mobile .main-inner .column-center-inner .section {
  313. margin: 0;
  314. }
  315. .mobile .date-header span {
  316. padding: 0.1em 10px;
  317. margin: 0 -10px;
  318. }
  319. .mobile h3.post-title {
  320. margin: 0;
  321. }
  322. .mobile .blog-pager {
  323. background: transparent none no-repeat scroll top center;
  324. }
  325. .mobile .footer-outer {
  326. border-top: none;
  327. }
  328. .mobile .main-inner, .mobile .footer-inner {
  329. background-color: #080808;
  330. }
  331. .mobile-index-contents {
  332. color: #dddddd;
  333. }
  334. .mobile-link-button {
  335. background-color: #00dd07;
  336. }
  337. .mobile-link-button a:link, .mobile-link-button a:visited {
  338. color: #ffffff;
  339. }
  340. .mobile .tabs-inner .section:first-child {
  341. border-top: none;
  342. }
  343. .mobile .tabs-inner .PageList .widget-content {
  344. background-color: #000000;
  345. color: #ffffff;
  346. border-top: 1px solid #333333;
  347. border-bottom: 1px solid #333333;
  348. }
  349. .mobile .tabs-inner .PageList .widget-content .pagelist-arrow {
  350. border-left: 1px solid #333333;
  351. }
  352. --></style>
  353. <style id='template-skin-1' type='text/css'><!--
  354. body {
  355. min-width: 960px;
  356. }
  357. .content-outer, .content-fauxcolumn-outer, .region-inner {
  358. min-width: 960px;
  359. max-width: 960px;
  360. _width: 960px;
  361. }
  362. .main-inner .columns {
  363. padding-left: 0;
  364. padding-right: 0;
  365. }
  366. .main-inner .fauxcolumn-center-outer {
  367. left: 0;
  368. right: 0;
  369. /* IE6 does not respect left and right together */
  370. _width: expression(this.parentNode.offsetWidth -
  371. parseInt("0") -
  372. parseInt("0") + 'px');
  373. }
  374. .main-inner .fauxcolumn-left-outer {
  375. width: 0;
  376. }
  377. .main-inner .fauxcolumn-right-outer {
  378. width: 0;
  379. }
  380. .main-inner .column-left-outer {
  381. width: 0;
  382. right: 100%;
  383. margin-left: -0;
  384. }
  385. .main-inner .column-right-outer {
  386. width: 0;
  387. margin-right: -0;
  388. }
  389. #layout {
  390. min-width: 0;
  391. }
  392. #layout .content-outer {
  393. min-width: 0;
  394. width: 800px;
  395. }
  396. #layout .region-inner {
  397. min-width: 0;
  398. width: auto;
  399. }
  400. body#layout div.add_widget {
  401. padding: 8px;
  402. }
  403. body#layout div.add_widget a {
  404. margin-left: 32px;
  405. }
  406. --></style>
  407. <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=770269670506803247&amp;zx=50df704a-f4e3-40b4-bc91-4447fea8e86e' media='none' onload='if(media!=&#39;all&#39;)media=&#39;all&#39;' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=770269670506803247&amp;zx=50df704a-f4e3-40b4-bc91-4447fea8e86e' rel='stylesheet'/></noscript>
  408. <script type="text/javascript" language="javascript">
  409. // Supply ads personalization default for EEA readers
  410. // See https://www.blogger.com/go/adspersonalization
  411. adsbygoogle = window.adsbygoogle || [];
  412. if (typeof adsbygoogle.requestNonPersonalizedAds === 'undefined') {
  413. adsbygoogle.requestNonPersonalizedAds = 1;
  414. }
  415. </script>
  416. </head>
  417. <body class='loading mobile variant-dark'>
  418. <div class='navbar no-items section' id='navbar' name='Navbar'>
  419. </div>
  420. <div class='body-fauxcolumns'>
  421. <div class='fauxcolumn-outer body-fauxcolumn-outer'>
  422. <div class='cap-top'>
  423. <div class='cap-left'></div>
  424. <div class='cap-right'></div>
  425. </div>
  426. <div class='fauxborder-left'>
  427. <div class='fauxborder-right'></div>
  428. <div class='fauxcolumn-inner'>
  429. </div>
  430. </div>
  431. <div class='cap-bottom'>
  432. <div class='cap-left'></div>
  433. <div class='cap-right'></div>
  434. </div>
  435. </div>
  436. </div>
  437. <div class='content'>
  438. <div class='content-fauxcolumns'>
  439. <div class='fauxcolumn-outer content-fauxcolumn-outer'>
  440. <div class='cap-top'>
  441. <div class='cap-left'></div>
  442. <div class='cap-right'></div>
  443. </div>
  444. <div class='fauxborder-left'>
  445. <div class='fauxborder-right'></div>
  446. <div class='fauxcolumn-inner'>
  447. </div>
  448. </div>
  449. <div class='cap-bottom'>
  450. <div class='cap-left'></div>
  451. <div class='cap-right'></div>
  452. </div>
  453. </div>
  454. </div>
  455. <div class='content-outer'>
  456. <div class='content-cap-top cap-top'>
  457. <div class='cap-left'></div>
  458. <div class='cap-right'></div>
  459. </div>
  460. <div class='fauxborder-left content-fauxborder-left'>
  461. <div class='fauxborder-right content-fauxborder-right'></div>
  462. <div class='content-inner'>
  463. <header>
  464. <div class='header-outer'>
  465. <div class='header-cap-top cap-top'>
  466. <div class='cap-left'></div>
  467. <div class='cap-right'></div>
  468. </div>
  469. <div class='fauxborder-left header-fauxborder-left'>
  470. <div class='fauxborder-right header-fauxborder-right'></div>
  471. <div class='region-inner header-inner'>
  472. <div class='header section' id='header' name='Header'><div class='widget Header' data-version='1' id='Header1'>
  473. <div id='header-inner'>
  474. <div class='titlewrapper'>
  475. <h1 class='title'>
  476. <a href='http://junkplusarduino.blogspot.com/?m=1'>
  477. Junk + Arduino =
  478. </a>
  479. </h1>
  480. </div>
  481. <div class='descriptionwrapper'>
  482. <p class='description'><span>My adventures with garbage and electronics.</span></p>
  483. </div>
  484. </div>
  485. </div></div>
  486. </div>
  487. </div>
  488. <div class='header-cap-bottom cap-bottom'>
  489. <div class='cap-left'></div>
  490. <div class='cap-right'></div>
  491. </div>
  492. </div>
  493. </header>
  494. <div class='tabs-outer'>
  495. <div class='tabs-cap-top cap-top'>
  496. <div class='cap-left'></div>
  497. <div class='cap-right'></div>
  498. </div>
  499. <div class='fauxborder-left tabs-fauxborder-left'>
  500. <div class='fauxborder-right tabs-fauxborder-right'></div>
  501. <div class='region-inner tabs-inner'>
  502. <div class='tabs section' id='crosscol' name='Cross-Column'><div class='widget PageList' data-version='1' id='PageList1'>
  503. <h2>Projects</h2>
  504. <div class='widget-content'>
  505. <select id='PageList1_select'>
  506. <option value='http://junkplusarduino.blogspot.com/p/blog-page_16.html?m=1'>A free LCD display</option>
  507. <option value='http://junkplusarduino.blogspot.com/p/blog-page.html?m=1'>FAILURE: Glass kiln from scratch</option>
  508. <option value='http://junkplusarduino.blogspot.com/p/robot-2.html?m=1'>Robot 2 (under $10 version)</option>
  509. <option value='http://junkplusarduino.blogspot.com/p/robot-1.html?m=1'>Robot 1 (under $20 version)</option>
  510. <option value='http://junkplusarduino.blogspot.com/p/tiny10-mosquito.html?m=1'>tiny10 mosquito</option>
  511. <option selected='selected' value='http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m=1'>ATtiny10 resources</option>
  512. <option value='http://junkplusarduino.blogspot.com/p/diy-sanguino.html?m=1'>DIY Sanguino</option>
  513. <option value='http://junkplusarduino.blogspot.com/p/svg-image-plotter.html?m=1'>SVG image plotter</option>
  514. <option value='http://junkplusarduino.blogspot.com/?m=1'>Home</option>
  515. <option value='http://junkplusarduino.blogspot.com/p/educational-keyboard-toy-under.html?m=1'>Educational keyboard toy (UNDER CONSTRUCTION)</option>
  516. </select>
  517. <span class='pagelist-arrow'>&#9660;</span>
  518. <div class='clear'></div>
  519. <span class='widget-item-control'>
  520. <span class='item-control blog-admin'>
  521. <a class='quickedit' href='//www.blogger.com/rearrange?blogID=770269670506803247&widgetType=PageList&widgetId=PageList1&action=editWidget&sectionId=crosscol' onclick='return _WidgetManager._PopupConfig(document.getElementById("PageList1"));' rel='nofollow' target='configPageList1' title='Edit'>
  522. <img alt='' height='18' src='https://resources.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
  523. </a>
  524. </span>
  525. </span>
  526. <div class='clear'></div>
  527. </div>
  528. </div></div>
  529. <div class='tabs no-items section' id='crosscol-overflow' name='Cross-Column 2'></div>
  530. </div>
  531. </div>
  532. <div class='tabs-cap-bottom cap-bottom'>
  533. <div class='cap-left'></div>
  534. <div class='cap-right'></div>
  535. </div>
  536. </div>
  537. <div class='main-outer'>
  538. <div class='main-cap-top cap-top'>
  539. <div class='cap-left'></div>
  540. <div class='cap-right'></div>
  541. </div>
  542. <div class='fauxborder-left main-fauxborder-left'>
  543. <div class='fauxborder-right main-fauxborder-right'></div>
  544. <div class='region-inner main-inner'>
  545. <div class='columns fauxcolumns'>
  546. <div class='fauxcolumn-outer fauxcolumn-center-outer'>
  547. <div class='cap-top'>
  548. <div class='cap-left'></div>
  549. <div class='cap-right'></div>
  550. </div>
  551. <div class='fauxborder-left'>
  552. <div class='fauxborder-right'></div>
  553. <div class='fauxcolumn-inner'>
  554. </div>
  555. </div>
  556. <div class='cap-bottom'>
  557. <div class='cap-left'></div>
  558. <div class='cap-right'></div>
  559. </div>
  560. </div>
  561. <div class='fauxcolumn-outer fauxcolumn-left-outer'>
  562. <div class='cap-top'>
  563. <div class='cap-left'></div>
  564. <div class='cap-right'></div>
  565. </div>
  566. <div class='fauxborder-left'>
  567. <div class='fauxborder-right'></div>
  568. <div class='fauxcolumn-inner'>
  569. </div>
  570. </div>
  571. <div class='cap-bottom'>
  572. <div class='cap-left'></div>
  573. <div class='cap-right'></div>
  574. </div>
  575. </div>
  576. <div class='fauxcolumn-outer fauxcolumn-right-outer'>
  577. <div class='cap-top'>
  578. <div class='cap-left'></div>
  579. <div class='cap-right'></div>
  580. </div>
  581. <div class='fauxborder-left'>
  582. <div class='fauxborder-right'></div>
  583. <div class='fauxcolumn-inner'>
  584. </div>
  585. </div>
  586. <div class='cap-bottom'>
  587. <div class='cap-left'></div>
  588. <div class='cap-right'></div>
  589. </div>
  590. </div>
  591. <!-- corrects IE6 width calculation -->
  592. <div class='columns-inner'>
  593. <div class='column-center-outer'>
  594. <div class='column-center-inner'>
  595. <div class='main section' id='main' name='Main'><div class='widget Blog' data-version='1' id='Blog1'>
  596. <div class='blog-posts hfeed'>
  597. <div class='date-outer'>
  598. <div class='date-posts'>
  599. <div class='post-outer'>
  600. <div class='post hentry uncustomized-post-template' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
  601. <meta content='http://1.bp.blogspot.com/-tCpXY9M75sU/T8s0rEAQRHI/AAAAAAAAAD0/exMvDDFA8-M/s72-c/programmernew.jpg' itemprop='image_url'/>
  602. <meta content='770269670506803247' itemprop='blogId'/>
  603. <meta content='4877744942622505260' itemprop='postId'/>
  604. <a name='4877744942622505260'></a>
  605. <h3 class='post-title entry-title' itemprop='name'>
  606. ATtiny10 resources
  607. </h3>
  608. <div class='post-header'>
  609. <div class='post-header-line-1'></div>
  610. </div>
  611. <div class='post-body entry-content' id='post-body-4877744942622505260' itemprop='articleBody'>
  612. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;">UPDATE:&nbsp;</span></span></b></span></span><br />
  613. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"> <span style="font-size: large;">A huge thanks to Keri DuPrey, Nat Blundell and others who have been continually improving the code. The latest version is here: </span></span></span></span></b></span></span><br />
  614. <span style="font-size: large;"><a href="https://drive.google.com/file/d/0B--e8M84W8o8UjJsSnI0bkVFT0U/edit?usp=sharing" rel="nofollow">ATtiny4_5_9_10_20_40Programmer.ino</a></span><br />
  615. <b><span style="font-size: large;">And a useful GUI by Keri is here:</span></b><br />
  616. <span style="font-size: large;"><a href="https://drive.google.com/file/d/0B--e8M84W8o8QUJ1TXdpbnNVd2s/view?usp=sharing" rel="nofollow">GUI: ATTiny4_5_9_10_20_40_Programmer.jar</a>
  617. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-family: Arial, Helvetica, sans-serif;">&nbsp;</span></b></span></span></span><br />
  618. <br />
  619. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif; font-size: large;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-family: Arial, Helvetica, sans-serif;">Also, avr-libc 1.7 and newer support ATtiny10! I have not tried it, but I reckon you can now use avr-gcc for the tiny10. However, with only 1kB of program memory, assembly is still useful.</span></b></span></span> <br />
  620. <br />
  621. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">The ATtiny10 is an intriguing little thing. It's the size of a grain of rice and has just 6 little SOT23 pins, but inside lies all the capabilities of an 8-bit AVR microcontroller. Everything from 4 analog input channels to a 16-bit timer with 2 possible pwm outputs to all your basic digital functionality. And at 45 yen a piece, there's little reason not to pick one up to play with. Or two... or ten.</span><br />
  622. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-size: large;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;"></span></span></span><br /></span></span></span></span></span></b></span>
  623. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Then once you get home and sit down at your computer, you realize that you are in for a bit more homework than you expected. ICSP doesn't work, common C compilers don't work, hardly anyone online has done DIY stuff with them.&nbsp;</span><br />
  624. <br />
  625. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">But hark!</span><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"> Do not forsake hope. I am here to aid you on your journey. First, I will guide you to the references that aided me: (</span><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">The most useful of these was the last one, but it is in Japanese.)</span><br />
  626. <ul>
  627. <li style="font-family: Times,&quot;Times New Roman&quot;,serif;"><a href="http://irq5.wordpress.com/2010/07/15/programming-the-attiny10/">http://irq5.wordpress.com/2010/07/15/programming-the-attiny10/</a>&nbsp; </li>
  628. </ul>
  629. <ul>
  630. <li style="font-family: Times,&quot;Times New Roman&quot;,serif;"><a href="http://minisystem.blogspot.jp/2012/01/programming-attiny10-with-avrisp-mkii.html">http://minisystem.blogspot.jp/2012/01/programming-attiny10-with-avrisp-mkii.html</a> </li>
  631. </ul>
  632. <ul>
  633. <li style="font-family: Times,&quot;Times New Roman&quot;,serif;"><a href="https://sites.google.com/site/wayneholder/attiny-4-5-9-10-assembly-ide-and-programmer">https://sites.google.com/site/wayneholder/attiny-4-5-9-10-assembly-ide-and-programmer</a> </li>
  634. </ul>
  635. <ul>
  636. <li><a href="http://d.hatena.ne.jp/pcm1723/20111208/1323351725" style="font-family: Times,&quot;Times New Roman&quot;,serif;">d.hatena.ne.jp/pcm1723/20111208/1323351725</a></li>
  637. </ul>
  638. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif; font-size: large;">Hardware</span></b> </span><br />
  639. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Now let's think about hardware. If you are willing to purchase an AVR programmer, go ahead. It's an easy solution that will definitely work. In that case, you can skip down to the assembly examples.</span><br />
  640. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">If you would rather do this the hard way(possibly more educational and satisfying), I'll show you how to program the ATtiny10 with only your Arduino, AVR Studio(or anything that will turn your assembly into a hex file) and a few resistors. Also, if you want to make use of all four I/O pins, you will need a 12V power supply for reprogramming.</span><br />
  641. <br />
  642. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Here is the basic hardware setup. <span style="font-size: large;"><b>Thanks to <a href="http://d.hatena.ne.jp/pcm1723/20111208/1323351725">pcm1723</a></b></span></span> <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">for this drawing and so much more.</span><br />
  643. <pre class="syntax-highlight"><span class="synComment"> * *</span>
  644. <span class="synComment"> * Arduino ATtiny10 *</span>
  645. <span class="synComment"> * ----------+ +---------------- *</span>
  646. <span class="synComment"> * (SS#) 10 |--[R]-----| 6 (RESET#/PB3) *</span>
  647. <span class="synComment"> * | | * </span>
  648. <span class="synComment"> * (MOSI) 11 |--[R]--+--| 1 (TPIDATA/PB0) *</span>
  649. <span class="synComment"> * | | | *</span>
  650. <span class="synComment"> * (MISO) 12 |--[R]--+ | *</span>
  651. <span class="synComment"> * | | * </span>
  652. <span class="synComment"> * (SCK) 13 |--[R]-----| 3 (TPICLK/PB1) *</span>
  653. <span class="synComment"> * ----------+ +---------------- *</span>
  654. <span class="synComment"> * *</span>
  655. <span class="synComment"> * -[R]- = a few killo-Ohm resistor *</span>
  656. <span class="synComment"> * *</span>
  657. <span class="synComment"> * 2011/12/08 by pcm1723 *</span></pre>
  658. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">&nbsp;Really, some of those resistors may be unnecessary, but they don't hurt. You can see that it is making use of the usual SPI pins, and indeed we are going to make use of the SPI library to handle the communication details. Anyway, I got tired of setting up wires on a breadboard, so I just made this little pcb with 2.2kohm resistors that plugs right into the Arduino.&nbsp; It also has a connector and jumper for applying 12V to the reset pin. This is only necessary if you disable the reset pin for I/O use.</span><br />
  659. <div class="separator" style="clear: both; text-align: center;">
  660. <a href="http://1.bp.blogspot.com/-tCpXY9M75sU/T8s0rEAQRHI/AAAAAAAAAD0/exMvDDFA8-M/s1600/programmernew.jpg" imageanchor="1" style=""><img border="0" height="210" src="http://1.bp.blogspot.com/-tCpXY9M75sU/T8s0rEAQRHI/AAAAAAAAAD0/exMvDDFA8-M/s280/programmernew.jpg" width="280" /></a></div>
  661. &nbsp;<span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">&nbsp;</span><br />
  662. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Note that pin 1 goes in the top right corner. It</span> <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">faces the same direction as the chip on the arduino. Also note that the ATtiny10 needs to be on an adapter to plug into the DIP socket. I would like the option of using the chips without an adapter, so I want to make something that clamps the chip onto a breakout board without solder. I'll post again if I make something like that.</span><br />
  663. <br />
  664. <b><span style="font-size: large;"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;">Software</span></span></b><br />
  665. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Well, that was simple enough. Now for the software.&nbsp;</span><br />
  666. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">First, you will need to generate a hex file for your program. One simple and guaranteed to work&nbsp; method is by using AVR Studio, which is free to download from the Atmel website(<a href="http://www.atmel.com/microsite/avr_studio_5/default.aspx">here</a>). Set your device to ATtiny10, make a new assembly file project thing, write your code, and click "build solution" in the build menu. Your hex file will be buried in a folder in the AVR Studio projects folder. Look for a folder with your project's name and somewhere inside will be a debug folder. hex is inside of that one.</span><br />
  667. <br />
  668. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Then we have to get the program onto the chip. </span><br />
  669. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">A big thanks again to pcm1723 for getting me started with the code for the arduino. They posted a simple sketch that uses the TPI interface to read all the memory on the chip and send it via serial to a computer. It was then up to me to extend this code to include all the necessary programming functions. You can find the original code on the fourth link up above. Most of it is included in the code below.</span><br />
  670. <br />
  671. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">*EDIT* - Thanks to Keri DuPrey for making some nice changes to the code. See the comments below to find a link to the updated code. Changes: supports tiny20 and 40, read,program and verify in one streamlined command, can handle programs larger than 1024 bytes.&nbsp;</span><br />
  672. <br />
  673. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">*UPDATE* - Thanks to a commenter for pointing out that the fuse setting and clearing didn't work. With their help I have updated the code and it should work now. </span><br />
  674. <br />
  675. <ul style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">
  676. <li><a href="https://docs.google.com/file/d/0B0-PE-lARnk1akRsMjZGVEdpUnc/edit?usp=sharing">ATtiny10Programmer.ino</a><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">(Better yet, use Keri DuPrey's code at the top of the page.)</span></li>
  677. </ul>
  678. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Upload this sketch to an arduino. </span><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">I ran into a very strange problem where </span><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">it just wouldn't work right if the sketch size was much larger than 7,000 bytes. It would just hang or reset while programming an ATtiny10. I cannot fathom why this is. There should be more than ample memory on the arduino. If anyone has an idea, please let me know(leave comment on home page). Anyway, this version compiled to 6,996 bytes and worked</span><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"> fine.&nbsp;</span><br />
  679. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Then power off(unplug) the arduino, connect the ATtiny10 as shown, and power up the arduino again. Open</span><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"> up the serial monitor in the tools menu. Set the serial speed to match the one used by the arduino. The default is 38400. If everything is working so far, you should see the message</span><br />
  680. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp; </span><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">NVM enabled</span></span></span><br />
  681. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp; ATtiny10 connected</span></span></span><br />
  682. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">If you don't see this, either you aren't using an ATtiny10 or there could be a hardware problem. After you get this far, you can start using the programming functions. To do this, input the one-character commands described below. Only send one command at a time because some of them require additional input.</span></span></span></span><br />
  683. <br />
  684. <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">Commands:</span></span></span></span><br />
  685. <ul>
  686. <li><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;"><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"></span></span></span></span><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">D = dump memory. Displays all current memory on the chip</span></span></li>
  687. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">E = erase chip. Erases all program memory</span></span></li>
  688. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">R = read program. Sends the program to the arduino. After sending this command&nbsp; you have 20 seconds to copy and paste the entire contents of a .hex file into the serial monitor and send. You can do the whole file at once. If it was successful, you should see "program received".</span></span></li>
  689. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">P = write program. After reading the program with the R command, use this to write the program to the ATtiny10.</span></span></li>
  690. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">V = verify. Verifies that the program was written correctly. If not, it will display the errors.</span></span></li>
  691. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">F = finish. Not necessary, but this disables further access until the arduino is reset.</span></span></li>
  692. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">S = set fuse. Follow the displayed instructions to program one of the three fuses.</span></span></li>
  693. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">C = clear fuse. Follow the displayed instructions to UNprogram one of the three fuses.</span></span></li>
  694. </ul>
  695. <span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">The 'D' command is quite a useful and harmless way to test your programmer and the chip. It simply reads all the memory on the ATtiny10 and displays it in the serial monitor in an easy to read way. You may want to avoid the 'S' and 'C' commands unless you are sure you want to mess with the fuses. There are only three fuses. One sends the clock signal to a pin, one enables the watchdog timer, and one disables the reset pin so you can use it for I/O. If you disable the reset pin, I hope you have a 12V power supply, because you will need it the next time you want to program the chip.</span></span><br />
  696. <br />
  697. <span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">A little caution: if you want to verify after programming, be sure to press shift+v and not ctrl+v as I have done many times. ctrl+v will probably paste your hex file to the monitor again. If you accidentally send it, you will see a lot of strange behavior as the programmer reads 'C', 'D', 'E', 'F' commands along with a bunch of ignored characters. Don't worry, the worst that could happen is that you will erase your chip and disable further programming until you reset the arduino. Just reset and try again.</span></span><br />
  698. <br />
  699. <span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><b><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: large;">Examples</span></span></b></span></span><br />
  700. <span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: large;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;">OK, now that you can program the chip the hard part begins. Actually making an interesting program. If you are like me and this is the first time you have used assembly for AVRs, just google "AVR assembly tutorial" and you will find everything you need. It takes a little more work than something like C, so I will give you some simple programs that make use of the various functionality of the chip. They are by no means perfect or interesting, but you can use them as building blocks.</span></span></span></span></span></span><br />
  701. <ul>
  702. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: large;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;"><a href="https://docs.google.com/open?id=0B0-PE-lARnk1Z3lnR3VrczZVczg">tinyblink.asm</a><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"> - blinking LED uses delay and digital output</span></span></span></span></span></span></span></li>
  703. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><a href="https://docs.google.com/open?id=0B0-PE-lARnk1aDAwZm5LT3lyR2M"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: large;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: small;">pwm.asm</span></span></span></span></a><span style="font-size: large;"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"> - </span></span><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">pulse width modulation uses timer</span></span></span></span></span></span></li>
  704. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: large;"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><a href="https://docs.google.com/open?id=0B0-PE-lARnk1UXh1TExnMlR1aEE">interrupts.asm</a> - uses three different types of interrupts</span></span></span></span></span></span></li>
  705. <li><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><span style="font-size: large;"><span style="font-family: &quot;Helvetica Neue&quot;,Arial,Helvetica,sans-serif;"><span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><a href="https://docs.google.com/open?id=0B0-PE-lARnk1bVBkM1FSTHl6amM">analog.asm</a> - uses the analog to digital converter &nbsp; </span></span><b><br /></b></span></span></span></span></li>
  706. </ul>
  707. <span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">&nbsp;Good luck.</span></span><br />
  708. <span style="font-size: small;"><span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;"><br /></span></span>
  709. <div style='clear: both;'></div>
  710. </div>
  711. <div class='post-footer'>
  712. <div class='post-footer-line post-footer-line-1'>
  713. <span class='post-author vcard'>
  714. </span>
  715. <span class='post-timestamp'>
  716. </span>
  717. <span class='post-comment-link'>
  718. </span>
  719. </div>
  720. <div class='post-footer-line post-footer-line-2'>
  721. </div>
  722. </div>
  723. </div>
  724. <div class='comments' id='comments'>
  725. <a name='comments'></a>
  726. <h4>87 comments:</h4>
  727. <div class='comments-content'>
  728. <script async='async' src='' type='text/javascript'></script>
  729. <script type='text/javascript'>
  730. (function() {
  731. var items = null;
  732. var msgs = null;
  733. var config = {};
  734. // <![CDATA[
  735. var cursor = null;
  736. if (items && items.length > 0) {
  737. cursor = parseInt(items[items.length - 1].timestamp) + 1;
  738. }
  739. var bodyFromEntry = function(entry) {
  740. var text = (entry &&
  741. ((entry.content && entry.content.$t) ||
  742. (entry.summary && entry.summary.$t))) ||
  743. '';
  744. if (entry && entry.gd$extendedProperty) {
  745. for (var k in entry.gd$extendedProperty) {
  746. if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
  747. return '<span class="deleted-comment">' + text + '</span>';
  748. }
  749. }
  750. }
  751. return text;
  752. }
  753. var parse = function(data) {
  754. cursor = null;
  755. var comments = [];
  756. if (data && data.feed && data.feed.entry) {
  757. for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
  758. var comment = {};
  759. // comment ID, parsed out of the original id format
  760. var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
  761. comment.id = id ? id[2] : null;
  762. comment.body = bodyFromEntry(entry);
  763. comment.timestamp = Date.parse(entry.published.$t) + '';
  764. if (entry.author && entry.author.constructor === Array) {
  765. var auth = entry.author[0];
  766. if (auth) {
  767. comment.author = {
  768. name: (auth.name ? auth.name.$t : undefined),
  769. profileUrl: (auth.uri ? auth.uri.$t : undefined),
  770. avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
  771. };
  772. }
  773. }
  774. if (entry.link) {
  775. if (entry.link[2]) {
  776. comment.link = comment.permalink = entry.link[2].href;
  777. }
  778. if (entry.link[3]) {
  779. var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
  780. if (pid && pid[1]) {
  781. comment.parentId = pid[1];
  782. }
  783. }
  784. }
  785. comment.deleteclass = 'item-control blog-admin';
  786. if (entry.gd$extendedProperty) {
  787. for (var k in entry.gd$extendedProperty) {
  788. if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
  789. comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
  790. } else if (entry.gd$extendedProperty[k].name == 'blogger.displayTime') {
  791. comment.displayTime = entry.gd$extendedProperty[k].value;
  792. }
  793. }
  794. }
  795. comments.push(comment);
  796. }
  797. }
  798. return comments;
  799. };
  800. var paginator = function(callback) {
  801. if (hasMore()) {
  802. var url = config.feed + '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
  803. if (cursor) {
  804. url += '&published-min=' + new Date(cursor).toISOString();
  805. }
  806. window.bloggercomments = function(data) {
  807. var parsed = parse(data);
  808. cursor = parsed.length < 50 ? null
  809. : parseInt(parsed[parsed.length - 1].timestamp) + 1
  810. callback(parsed);
  811. window.bloggercomments = null;
  812. }
  813. url += '&callback=bloggercomments';
  814. var script = document.createElement('script');
  815. script.type = 'text/javascript';
  816. script.src = url;
  817. document.getElementsByTagName('head')[0].appendChild(script);
  818. }
  819. };
  820. var hasMore = function() {
  821. return !!cursor;
  822. };
  823. var getMeta = function(key, comment) {
  824. if ('iswriter' == key) {
  825. var matches = !!comment.author
  826. && comment.author.name == config.authorName
  827. && comment.author.profileUrl == config.authorUrl;
  828. return matches ? 'true' : '';
  829. } else if ('deletelink' == key) {
  830. return config.baseUri + '/delete-comment.g?blogID='
  831. + config.blogId + '&postID=' + comment.id;
  832. } else if ('deleteclass' == key) {
  833. return comment.deleteclass;
  834. }
  835. return '';
  836. };
  837. var replybox = null;
  838. var replyUrlParts = null;
  839. var replyParent = undefined;
  840. var onReply = function(commentId, domId) {
  841. if (replybox == null) {
  842. // lazily cache replybox, and adjust to suit this style:
  843. replybox = document.getElementById('comment-editor');
  844. if (replybox != null) {
  845. replybox.height = '250px';
  846. replybox.style.display = 'block';
  847. replyUrlParts = replybox.src.split('#');
  848. }
  849. }
  850. if (replybox && (commentId !== replyParent)) {
  851. replybox.src = '';
  852. document.getElementById(domId).insertBefore(replybox, null);
  853. replybox.src = replyUrlParts[0]
  854. + (commentId ? '&parentID=' + commentId : '')
  855. + '#' + replyUrlParts[1];
  856. replyParent = commentId;
  857. }
  858. };
  859. var hash = (window.location.hash || '#').substring(1);
  860. var startThread, targetComment;
  861. if (/^comment-form_/.test(hash)) {
  862. startThread = hash.substring('comment-form_'.length);
  863. } else if (/^c[0-9]+$/.test(hash)) {
  864. targetComment = hash.substring(1);
  865. }
  866. // Configure commenting API:
  867. var configJso = {
  868. 'maxDepth': config.maxThreadDepth
  869. };
  870. var provider = {
  871. 'id': config.postId,
  872. 'data': items,
  873. 'loadNext': paginator,
  874. 'hasMore': hasMore,
  875. 'getMeta': getMeta,
  876. 'onReply': onReply,
  877. 'rendered': true,
  878. 'initComment': targetComment,
  879. 'initReplyThread': startThread,
  880. 'config': configJso,
  881. 'messages': msgs
  882. };
  883. var render = function() {
  884. if (window.goog && window.goog.comments) {
  885. var holder = document.getElementById('comment-holder');
  886. window.goog.comments.render(holder, provider);
  887. }
  888. };
  889. // render now, or queue to render when library loads:
  890. if (window.goog && window.goog.comments) {
  891. render();
  892. } else {
  893. window.goog = window.goog || {};
  894. window.goog.comments = window.goog.comments || {};
  895. window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
  896. window.goog.comments.loadQueue.push(render);
  897. }
  898. })();
  899. // ]]>
  900. </script>
  901. <div id='comment-holder'>
  902. <div class="comment-thread toplevel-thread"><ol id="top-ra"><li class="comment" id="c7143511391757921255"><div class="avatar-image-container"><img src="//resources.blogblog.com/img/blank.gif" alt=""/></div><div class="comment-block"><div class="comment-header"><cite class="user">Anonymous</cite><span class="icon user "></span><span class="datetime secondary-text"><a rel="nofollow" href="http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m=1">August 25, 2012 at 10:16 AM</a></span></div><p class="comment-content">Great, thank you.</p><span class="comment-actions secondary-text"><a class="comment-reply" target="_self" data-comment-id="7143511391757921255">Reply</a><span class="item-control blog-admin blog-admin pid-649852759"><a target="_self" href="https://www.blogger.com/delete-comment.g?blogID=770269670506803247&amp;postID=7143511391757921255">Delete</a></span></span></div><div class="comment-replies"><div id="c7143511391757921255-rt" class="comment-thread inline-thread hidden"><span class="thread-toggle thread-expanded"><span class="thread-arrow"></span><span class="thread-count"><a target="_self">Replies</a></span></span><ol id="c7143511391757921255-ra" class="thread-chrome thread-expanded"><div></div><div id="c7143511391757921255-continue" class="continue"><a class="comment-reply" target="_self" data-comment-id="7143511391757921255">Reply</a></div></ol></div></div><div class="comment-replybox-single" id="c7143511391757921255-ce"></div></li><li class="comment" id="c1848628599495915692"><div class="avatar-image-container"><img src="//lh3.googleusercontent.com/zFdxGE77vvD2w5xHy6jkVuElKv-U9_9qLkRYK8OnbDeJPtjSZ82UPq5w6hJ-SA=s35" alt=""/></div><div class="comment-block"><div class="comment-header"><cite class="user"><a href="https://www.blogger.com/profile/10143822564642680848" rel="nofollow">Laura BeFajardo</a></cite><span class="icon user "></span><span class="datetime secondary-text"><a rel="nofollow" href="http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m=1">October 3, 2012 at 6:02 AM</a></span></div><p class="comment-content">Great! I started using Tiny10 in february 2012, and there was almost nothing about it. <br>There is information in avr freak too. <br>In addition, if someone hates assembler, another option is to write a C code in CodeVision and copy the asm code in AVRstudio. It is a simple way to avoid asm. </p><span class="comment-actions secondary-text"><a class="comment-reply" target="_self" data-comment-id="1848628599495915692">Reply</a><span class="item-control blog-admin blog-admin pid-1712938675"><a target="_self" href="https://www.blogger.com/delete-comment.g?blogID=770269670506803247&amp;postID=1848628599495915692">Delete</a></span></span></div><div class="comment-replies"><div id="c1848628599495915692-rt" class="comment-thread inline-thread hidden"><span class="thread-toggle thread-expanded"><span class="thread-arrow"></span><span class="thread-count"><a target="_self">Replies</a></span></span><ol id="c1848628599495915692-ra" class="thread-chrome thread-expanded"><div></div><div id="c1848628599495915692-continue" class="continue"><a class="comment-reply" target="_self" data-comment-id="1848628599495915692">Reply</a></div></ol></div></div><div class="comment-replybox-single" id="c1848628599495915692-ce"></div></li><li class="comment" id="c923462765286416515"><div class="avatar-image-container"><img src="//resources.blogblog.com/img/blank.gif" alt=""/></div><div class="comment-block"><div class="comment-header"><cite class="user">Anonymous</cite><span class="icon user "></span><span class="datetime secondary-text"><a rel="nofollow" href="http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m=1">October 3, 2012 at 8:00 PM</a></span></div><p class="comment-content">About the crash issue. After Taking a quick look at the source code, It looks like the problem may be all the strings that are being printed, each one takes space in ram. I had a similar problem with a project, kept resetting on me, once I moved all the strings to program space I had no more crashes.</p><span
  903. </div>
  904. </div>
  905. <p class='comment-footer'>
  906. <div class='comment-form'>
  907. <a name='comment-form'></a>
  908. <p>
  909. </p>
  910. <a href='https://www.blogger.com/comment-iframe.g?blogID=770269670506803247&pageID=4877744942622505260&m=1' id='comment-editor-src'></a>
  911. <iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410px' id='comment-editor' name='comment-editor' src='' style='display: none' width='100%'></iframe>
  912. <script src='https://www.blogger.com/static/v1/jsbin/530446030-comment_from_post_iframe.js' type='text/javascript'></script>
  913. <script type='text/javascript'>
  914. BLOG_CMT_createIframe('https://www.blogger.com/rpc_relay.html');
  915. </script>
  916. </div>
  917. </p>
  918. <div id='backlinks-container'>
  919. <div id='Blog1_backlinks-container'>
  920. </div>
  921. </div>
  922. </div>
  923. </div>
  924. </div>
  925. </div>
  926. </div>
  927. <div class='blog-pager' id='blog-pager'>
  928. <div class='mobile-link-button' id='blog-pager-home-link'>
  929. <a class='home-link' href='http://junkplusarduino.blogspot.com/?m=1'>Home</a>
  930. </div>
  931. <div class='mobile-desktop-link'>
  932. <a class='home-link' href='http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m=0'>View web version</a>
  933. </div>
  934. </div>
  935. <div class='clear'></div>
  936. </div></div>
  937. </div>
  938. </div>
  939. <div class='column-left-outer'>
  940. <div class='column-left-inner'>
  941. <aside>
  942. </aside>
  943. </div>
  944. </div>
  945. <div class='column-right-outer'>
  946. <div class='column-right-inner'>
  947. <aside>
  948. </aside>
  949. </div>
  950. </div>
  951. </div>
  952. <div style='clear: both'></div>
  953. <!-- columns -->
  954. </div>
  955. <!-- main -->
  956. </div>
  957. </div>
  958. <div class='main-cap-bottom cap-bottom'>
  959. <div class='cap-left'></div>
  960. <div class='cap-right'></div>
  961. </div>
  962. </div>
  963. <footer>
  964. <div class='footer-outer'>
  965. <div class='footer-cap-top cap-top'>
  966. <div class='cap-left'></div>
  967. <div class='cap-right'></div>
  968. </div>
  969. <div class='fauxborder-left footer-fauxborder-left'>
  970. <div class='fauxborder-right footer-fauxborder-right'></div>
  971. <div class='region-inner footer-inner'>
  972. <div class='foot no-items section' id='footer-1'></div>
  973. <!-- outside of the include in order to lock Attribution widget -->
  974. <div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' data-version='1' id='Attribution1'>
  975. <div class='widget-content' style='text-align: center;'>
  976. Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>.
  977. </div>
  978. <div class='clear'></div>
  979. <span class='widget-item-control'>
  980. <span class='item-control blog-admin'>
  981. <a class='quickedit' href='//www.blogger.com/rearrange?blogID=770269670506803247&widgetType=Attribution&widgetId=Attribution1&action=editWidget&sectionId=footer-3' onclick='return _WidgetManager._PopupConfig(document.getElementById("Attribution1"));' rel='nofollow' target='configAttribution1' title='Edit'>
  982. <img alt='' height='18' src='https://resources.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
  983. </a>
  984. </span>
  985. </span>
  986. <div class='clear'></div>
  987. </div></div>
  988. </div>
  989. </div>
  990. <div class='footer-cap-bottom cap-bottom'>
  991. <div class='cap-left'></div>
  992. <div class='cap-right'></div>
  993. </div>
  994. </div>
  995. </footer>
  996. <!-- content -->
  997. </div>
  998. </div>
  999. <div class='content-cap-bottom cap-bottom'>
  1000. <div class='cap-left'></div>
  1001. <div class='cap-right'></div>
  1002. </div>
  1003. </div>
  1004. </div>
  1005. <script type='text/javascript'>
  1006. window.setTimeout(function() {
  1007. document.body.className = document.body.className.replace('loading', '');
  1008. }, 10);
  1009. </script>
  1010. <!--J\u016bs esate atsakingi u\u017e lankytoj\u0173 informavim\u0105 apie tinklara\u0161tyje naudojamus slapukus ir renkamus duomenis. \u201eBlogger\u201c pateikia standartin\u012f prane\u0161im\u0105, kur\u012f galima naudoti tinklara\u0161tyje, o j\u016bs galite j\u012f tinkinti arba pakeisti savo prane\u0161imu. Jei reikia daugiau i\u0161samios informacijos, \u017er. adresu http://www.blogger.com/go/cookiechoices.-->
  1011. <script defer='' src='/js/cookienotice.js'></script>
  1012. <script>
  1013. document.addEventListener('DOMContentLoaded', function(event) {
  1014. window.cookieChoices && cookieChoices.showCookieConsentBar && cookieChoices.showCookieConsentBar(
  1015. (window.cookieOptions && cookieOptions.msg) || '\u0160ioje svetain\u0117je naudojami slapukai i\u0161 sistemos \u201eGoogle\u201c, kad b\u016bt\u0173 galima teikti paslaugas ir analizuoti sraut\u0105. J\u016bs\u0173 IP adresas ir naudotojo priemon\u0117 bendrinama su \u201eGoogle\u201c kartu su na\u0161umo ir saugos metrika, siekiant u\u017etikrinti paslaugos kokyb\u0119, generuoti naudojimo statistik\u0105 ir aptikti bei spr\u0119sti piktnaud\u017eiavimo problemas.',
  1016. (window.cookieOptions && cookieOptions.close) || 'Gerai',
  1017. (window.cookieOptions && cookieOptions.learn) || 'Su\u017einokite daugiau',
  1018. (window.cookieOptions && cookieOptions.link) || 'https://www.blogger.com/go/blogspot-cookies');
  1019. });
  1020. </script>
  1021. <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/1833189695-widgets.js"></script>
  1022. <script type='text/javascript'>
  1023. var BLOG_BASE_IMAGE_URL = 'https://resources.blogblog.com/img';var BLOG_LANG_DIR = 'ltr';window['__wavt'] = 'AOuZoY54dobDvP4aN3bK5rAPMPUaK27XMQ:1584939031513';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d770269670506803247','//junkplusarduino.blogspot.com/p/attiny10-resources.html?m\x3d1','770269670506803247');
  1024. _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '770269670506803247', 'title': 'Junk + Arduino \x3d', 'url': 'http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m\x3d1', 'canonicalUrl': 'http://junkplusarduino.blogspot.com/p/attiny10-resources.html', 'homepageUrl': 'http://junkplusarduino.blogspot.com/?m\x3d1', 'searchUrl': 'http://junkplusarduino.blogspot.com/search', 'canonicalHomepageUrl': 'http://junkplusarduino.blogspot.com/', 'blogspotFaviconUrl': 'http://junkplusarduino.blogspot.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': false, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': '', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': true, 'isMobileRequest': true, 'mobileClass': ' mobile', 'isPrivateBlog': false, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Junk + Arduino \x3d - Atom\x22 href\x3d\x22http://junkplusarduino.blogspot.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Junk + Arduino \x3d - RSS\x22 href\x3d\x22http://junkplusarduino.blogspot.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Junk + Arduino \x3d - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/770269670506803247/posts/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'ieCssRetrofitLinks': '\x3c!--[if IE]\x3e\x3cscript type\x3d\x22text/javascript\x22 src\x3d\x22https://www.blogger.com/static/v1/jsbin/3095134620-ieretrofit.js\x22\x3e\x3c/script\x3e\n\x3c![endif]--\x3e', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/a52a3d065dd1f10b', 'plusOneApiSrc': 'https://apis.google.com/js/plusone.js', 'disableGComments': true, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'Twitter', 'key': 'twitter', 'shareMessage': 'Share to Twitter', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 300, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'static_page', 'pageId': '4877744942622505260', 'pageName': 'ATtiny10 resources', 'pageTitle': 'Junk + Arduino \x3d: ATtiny10 resources'}}, {'name': 'features', 'data': {'sharing_get_link_dialog': 'true', 'sharing_native': 'false'}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'Simple', 'localizedName': 'Simple', 'isResponsive': false, 'isAlternateRendering': true, 'isCustom': false, 'variant': 'dark', 'variantId': 'dark'}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': true, 'title': 'ATtiny10 resources', 'description': 'UPDATE:&#160; A hug
  1025. _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull'));
  1026. _WidgetManager._RegisterWidget('_PageListView', new _WidgetInfo('PageList1', 'crosscol', document.getElementById('PageList1'), {'title': 'Projects', 'links': [{'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/blog-page_16.html?m\x3d1', 'id': '3367182098136133167', 'title': 'A free LCD display'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/blog-page.html?m\x3d1', 'id': '1007198645515456147', 'title': 'FAILURE: Glass kiln from scratch'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/robot-2.html?m\x3d1', 'id': '8354048070919738547', 'title': 'Robot 2 (under $10 version)'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/robot-1.html?m\x3d1', 'id': '866340638259871636', 'title': 'Robot 1 (under $20 version)'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/tiny10-mosquito.html?m\x3d1', 'id': '6287884674780986659', 'title': 'tiny10 mosquito'}, {'isCurrentPage': true, 'href': 'http://junkplusarduino.blogspot.com/p/attiny10-resources.html?m\x3d1', 'id': '4877744942622505260', 'title': 'ATtiny10 resources'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/diy-sanguino.html?m\x3d1', 'id': '8450873996011711180', 'title': 'DIY Sanguino'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/svg-image-plotter.html?m\x3d1', 'id': '4556968694781036507', 'title': 'SVG image plotter'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/?m\x3d1', 'title': 'Home'}, {'isCurrentPage': false, 'href': 'http://junkplusarduino.blogspot.com/p/educational-keyboard-toy-under.html?m\x3d1', 'id': '830827927473215846', 'title': 'Educational keyboard toy (UNDER CONSTRUCTION)'}], 'mobile': true}, 'displayModeFull'));
  1027. _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'mobile': true}, 'displayModeFull'));
  1028. _WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull'));
  1029. </script>
  1030. </body>
  1031. </html>