{"id":571,"date":"2015-01-26T22:28:52","date_gmt":"2015-01-26T19:28:52","guid":{"rendered":"http:\/\/www.dinux.lt\/blog\/?p=571"},"modified":"2015-01-26T22:29:38","modified_gmt":"2015-01-26T19:29:38","slug":"atmega16-jungimas-su-kompiueriu","status":"publish","type":"post","link":"http:\/\/www.dinux.lt\/blog\/?p=571","title":{"rendered":"ATmega16 jungimas su kompiuteriu (USB)"},"content":{"rendered":"<p>Pirmiausia pramokus \u0161iek tiek kaip elgtis su LED&#8217;ais, mygtukais prijungtais prie ATmegos, greitai atsiranda noras surinkta informacij\u0105 atiduoti kompiuteriui arba i\u0161 kompiuterio pasi\u0173sti tam tikras komandas, kad kontroleris gal\u0117tu jas vykdyti.<\/p>\n<p>Taigi pirmasis bandymas buvo pasinaudojus MAX232 ir COM <-> USB per\u0117jimu perduoti\/priimti informacij\u0105 su kontroleriu. Ne\u017einau tai buvo litavimo klaida, o gal sugeb\u0117jau ka\u017ekaip sugadinti MAX232, bet niekaip nepavyko priimti duomen\u0173 i\u0161 ATmegos. I\u0161si\u0173sti sek\u0117si puikiai, kontroleris jungin\u0117jo LED&#8217;us pagal kompiuterio siun\u010diamas komandas.<\/p>\n<p>Pasibaigus kantrybei buvo nuspr\u0119sta atsisi\u0173sti jau pagaminta UART&#8217;\u0105. <a href=\"http:\/\/www.dx.com\/p\/cp2102-usb-to-ttl-usb-uart-module-serial-converter-red-silver-black-277100\" target=\"_blank\">DealExtreme e parduotuv\u0117<\/a> \u010dia puikiai pasitarnavo. Pajungus viskas i\u0161karto veik\u0117. Duomenys <em>vaik\u0161\u010diojo<\/em> \u012f abi puses.<\/p>\n<p>Linux&#8217;as \u012frengin\u012f atpa\u017eysta taip:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n[ 7884.863380] usbserial: USB Serial support registered for generic\r\n[ 7884.864737] usbcore: registered new interface driver cp210x\r\n[ 7884.864756] usbserial: USB Serial support registered for cp210x\r\n[ 7884.864798] cp210x 2-5:1.0: cp210x converter detected\r\n[ 7884.864951] usb 2-5: cp210x converter now attached to ttyUSB0\r\n<\/pre>\n<p>Pirma klaida d\u0117l kurios galima ilgam strigti tai RX sujungimas su RX, o TX su TX. Teisingas jungimas b\u016bt\u0173 ATmegos16A RXD (14&#8217;ta koja) reikia jungti su UART&#8217;o TX&#8217;u, o ATmega16A TXD (15&#8217;ta koja) reikia jungti su UART&#8217;o RX&#8217;u. Reiktu neu\u017emir\u0161ti sujungti ir tre\u010diojo laido tai GND.<\/p>\n<p>Kad b\u016bt\u0173 patogiau, panaudojau laidus i\u0161 kompiuterinio korpuso.<\/p>\n<p><a href=\"http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/IMGP9853.PEF_MLSZSX.jpg\" rel=\"lightbox[571]\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/IMGP9853.PEF_MLSZSX-300x199.jpg\" alt=\"IMGP9853.PEF_MLSZSX\" width=\"300\" height=\"199\" class=\"alignnone size-medium wp-image-574\" srcset=\"http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/IMGP9853.PEF_MLSZSX-300x199.jpg 300w, http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/IMGP9853.PEF_MLSZSX.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Testavimui susikompiliuoju tok\u012f kod\u0105:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ Kvarco taktinis da\u017enis\r\n#define F_CPU 4000000UL\r\n#include &lt;inttypes.h&gt;\r\n#include &lt;avr\/io.h&gt;\r\n#include &lt;util\/delay.h&gt;\r\n\r\n\/\/ Susijungimo greitis\r\n#define USART_BAUDRATE 9600UL\r\n#define BAUD_PRESCALE (((F_CPU \/ (USART_BAUDRATE * 16UL))) - 1)\r\n\r\n\r\nvoid USARTInit(uint16_t ubrr_value)\r\n{\r\n   \/\/Set Baud rate\r\n\r\n   UBRRL = ubrr_value;\r\n   UBRRH = (ubrr_value&gt;&gt;8);\r\n\r\n   \/*\r\n   &gt;&gt; Asynchronous mode\r\n   &gt;&gt; No Parity\r\n   &gt;&gt; 1 StopBit\r\n   &gt;&gt; char size 8\r\n   *\/\r\n\r\n   UCSRC=(1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ0);\r\n\r\n   \/\/\u012ejungiam gavima ir siuntim\u0105\r\n   UCSRB=(1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);\r\n\r\n\r\n}\r\n\r\n\r\n\r\n\/\/Funkcija naudojama duomenims nuskaityti\r\n\/\/\u0160i funkcija lauks tol kol atsiras ka\u017ekokie duomenys\r\nchar USARTReadChar()\r\n{\r\n   while(!(UCSRA &amp; (1&lt;&lt;RXC)))\r\n   {\r\n      \/\/Nieko nedarom\r\n   }\r\n   return UDR;\r\n}\r\n\r\n\/\/Ra\u0161om duomenys \u012f UART'\u0105\r\nvoid USARTWriteChar(char data)\r\n{\r\n   while(!(UCSRA &amp; (1&lt;&lt;UDRE)))\r\n   {\r\n      \/\/Nieko nedarom\r\n   }\r\n   UDR=data;\r\n}\r\n\r\n\r\nvoid main()\r\n{\r\n   \/\/ Kintamasis\r\n   char data;\r\n\r\n   \/\/ Susijungiam\r\n   USARTInit(BAUD_PRESCALE);\r\n\r\n   \/\/ Am\u017einas ciklas\r\n   while(1)\r\n   {\r\n      \/\/ Nuskaitom simbol\u012f\r\n      data=USARTReadChar();\r\n\r\n      \/\/ Nuskaityt\u0105 simbol\u012f gra\u017einam atgal tik\r\n      \/\/ j\u012f apskliaud\u017eiam lau\u017etiniais skliaustais    \r\n\r\n      USARTWriteChar('[');\r\n      USARTWriteChar(data);\r\n      USARTWriteChar(']');\r\n\r\n   }\r\n}\r\n<\/pre>\n<p>Rezultatas:<br \/>\n<a href=\"http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/Ekranvaizdis-2015.01.26-204941.jpg\" rel=\"lightbox[571]\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/Ekranvaizdis-2015.01.26-204941.jpg\" alt=\"Ekranvaizdis - 2015.01.26 - 20:49:41\" width=\"539\" height=\"368\" class=\"alignnone size-full wp-image-579\" srcset=\"http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/Ekranvaizdis-2015.01.26-204941.jpg 539w, http:\/\/www.dinux.lt\/blog\/wp-content\/uploads\/2015\/01\/Ekranvaizdis-2015.01.26-204941-300x205.jpg 300w\" sizes=\"(max-width: 539px) 100vw, 539px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pirmiausia pramokus \u0161iek tiek kaip elgtis su LED&#8217;ais, mygtukais prijungtais prie ATmegos, greitai atsiranda noras surinkta informacij\u0105 atiduoti kompiuteriui arba i\u0161 kompiuterio pasi\u0173sti tam tikras komandas, kad kontroleris gal\u0117tu jas vykdyti. Taigi pirmasis bandymas buvo pasinaudojus MAX232 ir COM USB per\u0117jimu perduoti\/priimti informacij\u0105 su kontroleriu. Ne\u017einau tai buvo litavimo klaida, o gal sugeb\u0117jau ka\u017ekaip sugadinti &#8230; <a title=\"ATmega16 jungimas su kompiuteriu (USB)\" class=\"read-more\" href=\"http:\/\/www.dinux.lt\/blog\/?p=571\" aria-label=\"More on ATmega16 jungimas su kompiuteriu (USB)\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[11],"tags":[],"_links":{"self":[{"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=\/wp\/v2\/posts\/571"}],"collection":[{"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=571"}],"version-history":[{"count":13,"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=\/wp\/v2\/posts\/571\/revisions"}],"predecessor-version":[{"id":586,"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=\/wp\/v2\/posts\/571\/revisions\/586"}],"wp:attachment":[{"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=571"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.dinux.lt\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}