<?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>vmario techblog &#187; Elektronika</title>
	<atom:link href="http://blog.vmario.org/category/elektronika/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.vmario.org</link>
	<description>zapiski przyszłego inżyniera</description>
	<lastBuildDate>Thu, 11 Mar 2010 22:14:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Edytor heksadecymalny na Linuksa</title>
		<link>http://blog.vmario.org/2010/03/10/edytor-heksadecymalny-na-linuksa/</link>
		<comments>http://blog.vmario.org/2010/03/10/edytor-heksadecymalny-na-linuksa/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 21:17:53 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=705</guid>
		<description><![CDATA[Nie tylko crackerzy i miłośnicy inżynierii wstecznej potrzebują czasem zajrzeć do jakiejś binarki. Niejeden elektronik potwierdzi, że dobrze jest mieć możliwość odczytu czy nawet edycji tzw. &#8222;wsadów&#8221;, a sam nieraz podglądałem pliki wykonywalne, by sprawdzić, z jakich bibliotek korzystają, w szczególności, gdy programu nie dawało się uruchomić i nie było mowy o skorzystaniu z lsof.
Na [...]]]></description>
			<content:encoded><![CDATA[<p>Nie tylko crackerzy i miłośnicy inżynierii wstecznej potrzebują czasem zajrzeć do jakiejś binarki. Niejeden elektronik potwierdzi, że dobrze jest mieć możliwość odczytu czy nawet edycji tzw. &bdquo;wsadów&rdquo;, a sam nieraz podglądałem pliki wykonywalne, by sprawdzić, z jakich bibliotek korzystają, w szczególności, gdy programu nie dawało się uruchomić i nie było mowy o skorzystaniu z <code>lsof</code>.</p>
<p>Na ogół używałem do tego po prostu mojego ulubionego Vima i to w zwykłym trybie tekstowym. Uruchomienie trybu heksadecymalnego, zwłaszcza z możliwością edycji wymaga zaklęć tak długich i bezecnych, że do dziś boję się je wpisywać.</p>
<p>Zmuszony jednak przez los postanowiłem wyposażyć się w jakiś porządny edytor heksadecymalny, najlepiej działający w X-ach, żeby mieć pełną wygodę użytkowania.</p>
<p><span id="more-705"></span></p>
<p>Na pierwszy ogień poszedł <a href="http://live.gnome.org/Ghex">GHex</a>, ale odpadł w przedbiegach ze względu na stabilność i małe możliwości. Następnie trafiłem na <a href="http://home.gna.org/bless/">Blessa</a>. Szczęśliwie nie zauważyłem, że został napisany w Mono/Gtk# (nie lubię Mono) i dałem mu szansę. Program ma możliwości chyba niewiele większe niż GHex, ale działa całkiem sprawnie.</p>
<p>Z ciekawości sprawdziłem jeszcze, co zaoferuje produkt ze stajni <abbr title="K Desktop Environment">KDE</abbr> &mdash; <a href="http://utils.kde.org/projects/okteta/">Okteta</a>. Pierwsze wrażenie było negatywne &mdash; ot, kobylasta aplikacja o przeładowanym interfejsie, która długo się uruchamia, a na dodatek zdarzyło się jej nawet wyłożyć.</p>
<p>Warto jednak dać temu programowi szansę, gdyż jest to prawdziwy kombajn. Nie nadaje się może do edycji dysków twardych, ale świetnie sprawdza się w pracy z plikami. Z ciekawszych opcji warto wymienić:</p>
<ul>
<li>przeglądanie wielu plików w kartach,</li>
<li>dzielenie okna w pionie i poziomie,</li>
<li>obliczanie wielu rodzajów sum kontrolnych dla wskazanego obszaru,</li>
<li>zapełnianie obszaru wzorcami,</li>
<li>wykonywanie operacji bitowych,</li>
<li>wyszukiwanie łańcuchów znaków (program &bdquo;wyłapuje&rdquo; wewnątrz pliku binarnego całe fragmenty tekstu, pasujące do podanej frazy).</li>
<p>Ponadto wystarczy poświęcić chwilę na zagospodarowanie przestrzeni roboczej, by praca z programem stała się przyjemna i intuicyjna. O ile nie pojawią się problemy ze stabilnością, Okteta stanie się zatem moim podstawowym narzędziem do hackowania plików binarnych. A może Czytelnicy znają jakieś inne dobre hex edytory?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2010/03/10/edytor-heksadecymalny-na-linuksa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Minicom jako terminal szeregowy</title>
		<link>http://blog.vmario.org/2010/03/05/minicom-jako-terminal-szeregowy/</link>
		<comments>http://blog.vmario.org/2010/03/05/minicom-jako-terminal-szeregowy/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 21:21:24 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=686</guid>
		<description><![CDATA[Ostatnio dużo pracuję na porcie szeregowym RS-232, przez który obsługuję także linuksową powłokę. Niezbędny jest do tego emulator terminala szeregowego. Dotychczas korzystałem przede wszystkim z programu GTKTerm, znacznie rzadziej z CuteCom. Na dłuższą metę w GTKTermie doskwierają dwie niedogodności. Po pierwsze na moim systemie lubi on wstawiać od czasu puste linie, jest to jednak tylko [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio dużo pracuję na porcie szeregowym RS-232, przez który obsługuję także linuksową powłokę. Niezbędny jest do tego emulator terminala szeregowego. Dotychczas korzystałem przede wszystkim z programu <a href="http://sourceforge.net/projects/gtkterm/">GTKTerm</a>, znacznie rzadziej z <a href="http://cutecom.sourceforge.net/">CuteCom</a>. Na dłuższą metę w GTKTermie doskwierają dwie niedogodności. Po pierwsze na moim systemie lubi on wstawiać od czasu puste linie, jest to jednak tylko pewien wizualny mankament. Po drugie GTKTerm nie radzi sobie z edycją już wydrukowanej linii tekstu, przez co przeglądanie historii poleceń powłoki owocuje ciągłym zadrukowywaniem ekranu, nie mówiąc już o różnej maści paskach postępu, które błyskawicznie zapełniają dostępną historię ekranu; w tych warunkach na vi w ogóle nie da się pracować. Po trzecie &mdash; aplikacja ma bardzo krótką historię ekranu, przez co zwykłego dmesg-a trudno obejrzeć w całości.</p>
<p>CuteCom w ogóle jest nieporozumieniem: nie obsługuje kolorów, wejście działa w trybie liniowym a nie znakowym, a jego log potrafi zapchać RAM, zwłaszcza jeżeli będzie monitorował port, na którym działa programator <abbr title="In-system programming">ISP</abbr> (co ma miejsce w ATmedze128). W pewnych zastosowaniach mógłby się sprawdzić, ale na pewno nie jest to wygodny emulator terminala.</p>
<p>Oczywiście, oprócz tych dwóch programów, znałem też <a href="http://alioth.debian.org/projects/minicom/">Minicoma</a>, ale zawsze miałem go za program bardzo nieprzyjazny użytkownikowi i nadający się tylko do współpracy z modemami. Okazuje się jednak, że bardzo prosto jest zmusić go do pracy w roli pełnoprawnego terminala szeregowego. To tylko kwestia dodania kilku opcji w wierszu poleceń:</p>
<pre><code>$ minicom -m -o -w -c on</code></pre>
<p>lub krócej:</p>
<pre><code>$ minicom -mowc on</code></pre>
<p><span id="more-686"></span></p>
<p>Znaczenie poszczególnych opcji:</p>
<ul>
<li><code>-m</code> umożliwia korzystanie ze skrótów klawiaturowych z wykorzystaniem Alta (np. <i>Alt+Q</i> w celu wyjścia z programu),</li>
<li><code>-o</code> wyłącza zupełnie w tym przypadku zbędną inicjalizację modemu,</li>
<li><code>-w</code> zawija wiersze,</li>
<li><code>-c on</code> włącza kolorki.</li>
</ul>
<p>Jeżeli nie chcemy za każdym razem wpisywać wszystkich przełączników, wystarczy dopisać do <code>~/.bashrc</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">MINICOM</span>=<span style="color: #ff0000;">&quot;-m -o -w -c on&quot;</span></pre></div></div>

<p>i uruchamiać <code>minicom</code> bez ręcznego dopisywania tych opcji.</p>
<div style="text-align: center"><a href="http://www.flickr.com/photos/vmario/4408844751/" title="Minicom by vmario, on Flickr"><img class="vmnormalny" src="http://farm5.static.flickr.com/4013/4408844751_003a8bed19_m.jpg" width="240" height="184" alt="Minicom" /></a></div>
<p>Po starcie pod <i>Alt+Z</i> zobaczymy wykaz komend, z których najbardziej będzie nas interesować <i>Alt+O</i>, czyli konfiguracja. Należy pamiętać, by w ustawieniach portu szeregowego wyłączyć kontrolę przepływu, a w ustawieniach ekranu dobrać odpowiedni dla nas schemat kolorów (czerwony pasek stanu to moim zdaniem przesada).</p>
<p>Zdaje mi się, że podczas zmiany konfiguracji portu program lubi zawiesić połączenie. Na szczęście rzadko muszę zmieniać parametry portu, zresztą wystarczy wtedy ponownie uruchomić Minicoma. Inny problem, który zauważyłem, to nieprawidłowe wyświetlanie polskich znaków. Znaki dwubajtowe wprawdzie wyświetlają się, ale są poprzedzone znakiem zapytania. Próbowałem korzystać z opcji <code>-L</code>, <code>-l</code>, <code>-8</code> i zmieniać tablicę znaków, ale nie udało mi się z tym uporać. Brakuje mi też trybu szesnastkowego, dlatego nie mogę całkowicie zrezygnować z GTKTerma.</p>
<p>Niemniej Minicom okazał się całkiem niezłą aplikacją, a jego zaletą jest popularność (nie powinno być problemów ze znalezieniem go w repozytorium) i możliwość pracy bez środowiska graficznego.</p>
<p>PS Miłośnikom programu PuTTY warto przypomnieć, że radzi on sobie całkiem nieźle także z RS-232!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2010/03/05/minicom-jako-terminal-szeregowy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Przywracanie SAM-B-y w MMnecie1002</title>
		<link>http://blog.vmario.org/2010/03/04/przywracanie-sam-b-y-w-mmnecie1002/</link>
		<comments>http://blog.vmario.org/2010/03/04/przywracanie-sam-b-y-w-mmnecie1002/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 15:04:48 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=671</guid>
		<description><![CDATA[Eksperymentując z bootloaderami i jądrami Linuksa na AT91SAM9260 zablokowałem sobie w pewnym momencie moduł MMnet1002. Mikrokontroler programowany jest przez atmelowski interfejs ISP o nazwie SAM-BA (SAM Boot Assistant), który jest bardzo wygodny, bo nie wymaga żadnego sprzętowego programatora &#8212; wystarczy podłączyć się przez USB do ARM-a i użyć oprogramowania dostarczonego przez Atmela.
Niestety, nie jest tak, [...]]]></description>
			<content:encoded><![CDATA[<p>Eksperymentując z bootloaderami i jądrami Linuksa na AT91SAM9260 zablokowałem sobie w pewnym momencie <a href="http://www.propox.com/products/t_232.html">moduł MMnet1002</a>. Mikrokontroler programowany jest przez atmelowski interfejs <abbr title="In-system Programmer">ISP</abbr> o nazwie SAM-BA (SAM Boot Assistant), który jest bardzo wygodny, bo nie wymaga żadnego sprzętowego programatora &mdash; wystarczy podłączyć się przez USB do ARM-a i użyć oprogramowania dostarczonego przez Atmela.</p>
<p>Niestety, nie jest tak, że tryb programowania włącza podanie odpowiedniego stanu na jakiś pin i restart mikrokontrolera. SAM-BA znajduje się na samym końcu sekwencji startowej i jest uruchamiana tylko wtedy, gdy nie uda się wczytać programu z pamięci DataFlash i NANDFlash. Wprawdzie na płytce MMnet1002 znajduje się zworka <i>SAMBA</i> podłączona do pinu PC15 (<i>NWAIT</i>), której założenie w połączeniu z dwukrotnym restartem wprowadza system w stan programowania, ale ta tajemnicza metoda nie zawsze skutkuje. W szczególności, gdy doprowadzimy system do takiego stanu, że będzie w stanie wczytać z pamięci wadliwy program, utkniemy w miejsu &mdash; algorytm startowy stwierdzi, że program wczytano i nie ma potrzeby uruchamiania SAM-B-y, nawet gdy program będzie błędny. W efekcie na konsoli <code>DBGU</code> zobaczymy tylko smutne:</p>
<pre><code>RomBOOT

></code></pre>
<p><span id="more-671"></span></p>
<p>Jak się ratować w takiej sytuacji? Szereg rozwiązań znajdziemy w nocie Atmela <a href="http://www.atmel.com/dyn/resources/prod_documents/doc6281.pdf">AT91SAM9260-EK SAM-BA Recovery</a>. Przede wszystkim bootloader AT91Bootstrap może być skompilowany tak, że podczas startu monitoruje stan wskazanego pinu i w razie żądania (zwarcia pinu do masy), czyści pierwszy blok pamięci NANDFlash, co uniemożliwia wczytanie z niej programu, a w konsekwencji wywołanie SAM-B-y. Nota mówi o pinie <del>PB4</del> <ins>PA31 (chodzi o przycisk BP4 na płytce ewaluacyjnej AT91SAM9260-EK, podłączony do pinu PA31)</ins>, ale dla MMneta1002 powinien to być PC15, podłączony do zworki <i>SAMBA</i>. Trick ten jednak nie pomoże nam, jeżeli majstrowaliśmy przy AT91Bootstrapie.</p>
<p>Podobne rozwiązanie stosuje aplikacja AT91bootstrap-recovery, którą można wgrać na kartę DataFlash, trzeba jednak najpierw mieć taką kartę i możliwość jej podłączenia do systemu. Zatem to rozwiązanie odpada, tak samo jak użycie programatora SAM-ICE, którego nie posiadam.</p>
<p>Na szczęście jest prosta metoda sprzętowa, odradzana przez Atmela, ale moim zdaniem najlepsza. Wystarczy odciąć pamięć nieulotną od mikrokontrolera, choćby na krótką chwilę podczas startu. Zostanie uruchomiona SAM-BA, a wtedy wystarczy z powrotem podłączyć pamięć i programować.</p>
<p>Moja płytka wyposażona jest w pamięć NANDFlash, którą można w prosty sposób odciąć, wylutowywując rezystor R48 (0&#x2126;) i zastępując go zworką w pozycji <i>NF</i> (możliwe, że niektóre płytki domyślnie są przygotowane właśnie w taki sposób &mdash; wtedy nie trzeba nawet wyciągać lutownicy i można od razu przejść do kolejnego kroku). Na poniższych zdjęciach zaznaczyłem, który rezystor należy usunąć i którą zworka nas interesuje.</p>
<div style="text-align: center">
<a href="http://www.flickr.com/photos/vmario/4406382170/" title="MMnet1002: usunięcie rezystora by vmario, on Flickr"><img class="vmnormalny" src="http://farm5.static.flickr.com/4032/4406382170_a6d341f198_t.jpg" width="100" height="75" alt="MMnet1002: usunięcie rezystora" /></a> <a href="http://www.flickr.com/photos/vmario/4405618383/" title="MMnet1002: opcjonalne zworki by vmario, on Flickr"><img class="vmnormalny" src="http://farm5.static.flickr.com/4014/4405618383_f5f6db4680_t.jpg" width="100" height="75" alt="MMnet1002: opcjonalne zworki" /></a>
</div>
<p>Teraz, aby zaprogramować mikrokontroler, wystarczy zdjąć zworkę <i>NF</i>, zrestartować system i założyć zworkę z powrotem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2010/03/04/przywracanie-sam-b-y-w-mmnecie1002/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JTAG do ATmegi w wersji USB</title>
		<link>http://blog.vmario.org/2010/01/20/jtag-do-atmegi-w-wersji-usb/</link>
		<comments>http://blog.vmario.org/2010/01/20/jtag-do-atmegi-w-wersji-usb/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 18:25:52 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=635</guid>
		<description><![CDATA[Jakiś czas temu przedstawiałem prosty układ elektroniczny pełniący rolę JTAG-a dla mikrokontrolerów ATmega. Był to znaleziony w Sieci klon firmowego JTAGICE, który to klon mimo prostej budowy znakomicie pełni swoją rolę. Jedyną istotną jego wadą jest sterowanie przez port szeregowy RS-232. Port ten jest już rzadkością w komputerach, co wymusza stosowanie przejściówek USB&#60;&#8211;&#62;RS-232. Z mojego [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/vmario/4290418383/" title="AVR JTAGICE USB clone by vmario, on Flickr"><img class="vmprawa" src="http://farm3.static.flickr.com/2793/4290418383_55e2a59554_t.jpg" width="100" height="75" alt="AVR JTAGICE USB clone" /></a>Jakiś czas temu przedstawiałem prosty układ elektroniczny pełniący rolę <a href="http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/"><abbr title="Joint Test Action Group">JTAG</abbr>-a dla mikrokontrolerów ATmega</a>. Był to znaleziony w Sieci klon firmowego JTAGICE, który to klon mimo prostej budowy znakomicie pełni swoją rolę. Jedyną istotną jego wadą jest sterowanie przez port szeregowy RS-232. Port ten jest już rzadkością w komputerach, co wymusza stosowanie przejściówek USB&lt;&ndash;&gt;RS-232. Z mojego doświadczenia wynika, że przejściówki takie często sprawiają wiele kłopotów, dlatego doszedłem do wniosku, że czas ulepszyć <abbr title="Joint Test Action Group">JTAG</abbr>-a, a przy okazji dorobić się wreszcie czegoś konkretnego w miejsce poprzedniej <a href="http://www.flickr.com/photos/vmario/3487121562/">prowizorki</a>.</p>
<p>Tak naprawdę nie czekało mnie wiele pracy &mdash; musiałem tylko dodać do układu jakąś przejściówkę USB&lt;&ndash;&gt;RS-232 i zaprojektować płytkę, najlepiej pod elementy SMD. W roli konwertera postanowiłem wykorzystać układ scalony firmy FTDI &mdash; <a href="http://www.ftdichip.com/Products/FT232R.htm">FT232RL</a>. Kosztuje on wprawdzie kilkanaście złotych, ale ma wbudowany zegar i do działania nie potrzebuje prawie żadnych elementów zewnętrznych.</p>
<p><span id="more-635"></span></p>
<h4>Opis układu</h4>
<p>Schemat ideowy można obejrzeć na poniższym rysunku.</p>
<div style="text-align:center"><a href="/wp-content/uploads/avr_jtagice_usb_clone.pdf"><img src="/wp-content/uploads/avr_jtagice_usb_clone.png" alt="Schemat ideowy" width="400" height="281" class="vmnormalny" /></a></div>
<p>Do ATmegi16 dodałem złącze J3, służące do wgrywania firmware’u, a MAX232 zastąpiłem wspomnianym FT232RL. Ponieważ chciałem wykorzystać możliwość zasilania <abbr title="Joint Test Action Group">JTAG</abbr>-a i debugowanego systemu z portu USB, musiałem również zastosować automatyczny przełącznik zasilania w postaci tranzystora T1 z obwodem <i>soft start</i> (R1, C5). Specyfikacja USB uwzględnia różne tryby zasilania i korzystające z tej magistrali urządzenia powinny w odpowiedni sposób ograniczać swój prąd. Oczywiście FT232RL potrafi przejść w odpowiedni tryb, powiadamiając przy tym zewnętrzne urządzenia, np. po skonfigurowaniu wyjścia SLEEP#, ale takie rozwiązanie nie sprawdziłoby się we współpracy z dołączonym urządzeniem debugowanym. Dlatego zastosowałem polecany przez notę aplikacyjną tranzystor sterowany sygnałem PWREN# (tu: nóżka CBUS3). W razie potrzeby tranzystor odcina zasilanie i całość przechodzi w stan uśpienia.</p>
<p>Diody D1, D2 i D3 mogą być pomocne w diagnozowaniu problemów z <abbr title="Joint Test Action Group">JTAG</abbr>-iem. D2 informuje o tym, iż port USB przyznał nam zasilanie, D1, iż zachodzi komunikacja z komputerem, zaś D3 mówi o pracy samego interfejsu <abbr title="Joint Test Action Group">JTAG</abbr>.</p>
<h4>Montaż i uruchomienie</h4>
<p>Płytkę drukowaną zaprojektowałem z myślą o jej wykonaniu w warunkach domowych, stąd dość duże przelotki i brak ścieżek prowadzonych do złącz po stronie elementów.</p>
<p>Podczas montażu musimy zwrócić szczególną uwagę na układ FT232RL. Jest on wykonany w stosunkowo drobnym rastrze i przy jego lutowaniu warto wspomóc się topnikiem. Ja używałem RF800.</p>
<p>Jeżeli sami wykonywaliśmy płytkę i musimy lutować przelotki, należy pamiętać, iż kilka z nich znajduje się pod złączem J2. Nie jest to zbyt eleganckie rozwiązanie, ale nie chciało mi się poprawiać tego fragmentu PCB.</p>
<p>Po sprawdzeniu poprawności montażu możemy podłączyć urządzenie do portu USB (stan zworek J4 i J5 jest na razie nieistotny). Teraz należy uruchomić program <a href="http://www.ftdichip.com/Resources/Utilities.htm#FT_Prog">FT_PROG</a> i skonfigurować układ FT232RL. W zakładce <i>USB_Config_Descriptor</i> zaznaczamy opcje <i>Bus Powered</i>, <i>USB Remote Wakeup</i> i <i>Pull Down IO Pins in USB Suspend</i> zaś wartość <i>Max Bus Power</i> ustawiamy na 500mA. Nazwę urządzenia w <i>USB_String_Descriptors</i> ustawiamy wedle własnego widzimisię. W zakładce <i>Hardware_Specific</i> &ndash;&gt; IO_Controls ustawiamy funkcje pinów IO:</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>C0</td>
<td>TX &amp; RXLED#</td>
</tr>
<tr>
<td>C3</td>
<td>PWRON#</td>
</tr>
</tbody>
</table>
<p>Następnie programujemy wprowadzone zmiany. Po zamknięciu FT_PROG-a i ponownym podłączeniu urządzenia powinniśmy zobaczyć dodatkowy port COM w systemie (lub prośbę o doinstalowanie sterowników).</p>
<p>Teraz ustawiamy zworkę J5 w pozycji <i>PROG</i>, programujemy ATmegę i wgrywamy firmware zgodnie z opisem pierwotnej wersji urządzenia (linki we wspomnianym wcześniej <a href="http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/">wpisie</a>).</p>
<p>Po wgraniu firmware’u zworkę J5 ustawiamy w pozycję <i>WORK</i>, zaś J4 wedle potrzeby &mdash; <i>USB PWR</i>, jeżeli debugowany układ ma być zasilany z portu USB lub <i>DEVICE PWR</i>, jeżeli dysponuje on własnym zasilaniem. Teraz <abbr title="Joint Test Action Group">JTAG</abbr> jest gotowy do pracy.</p>
<h4>Możliwości zmian</h4>
<p>Zgodnie z zaleceniem noty aplikacyjnej zastosowałem przeciwzakłóceniowy koralik ferrytowy FB1 na dodatniej linii zasilania USB. Nie jest on niezbędny &mdash; można go zastąpić jakimś dławikiem lub po prostu zworą. Jeżeli będziemy mieli wyjątkowego pecha może to jednak wiązać się z zakłóceniami pracy magistrali USB.</p>
<p>Podobnie bezpiecznik polimerowy F1 nie jest niezbędny, zwłaszcza, że porty USB są wyposażone we własne bezpieczniki. Taki bezpiecznik jednak kosztuje niewiele a zwiększa nieco bezpieczeństwo naszego komputera.</p>
<p>Mimo iż układ w całości został zaprojektowany na Linuksie, uruchomiłem go na Windowsie ze względu na aplikację FT_PROG. Za to próbowałem korzystać z <abbr title="Joint Test Action Group">JTAG</abbr>-a na Linuksie, posługując się programem AVaRICE. Niestety, mimo iż program zdawał się wgrywać kod na mikrokontroler, to debugowanie kończyło się niepowodzeniem. Na razie pozostałem więc przy AVR Studio w środowisku Windows. Zresztą AVR Studio ma tę przewagę nad wszystkimi innymi rozwiązaniami, iż udostępnia świetny graficzny monitor zasobów mikrokontrolera.</p>
<h4>Wykaz elementów</h4>
<p>Półprzewodniki:</p>
<ul>
<li>1 &times; FT232RL</li>
<li>1 &times; ATMEGA16-16AU</li>
<li>1 &times; IRLM6402 (użyłem IRLM6302)</li>
<li>1 &times; LED SMD 1206 zielona</li>
<li>1 &times; LED SMD 1206 zółta</li>
<li>1 &times; LED SMD 1206 czerwona</li>
</ul>
<p>Kondensatory SMD 0805:</p>
<ul>
<li>2 &times; 22pF</li>
</ul>
<p>Kondensatory SMD 1206:</p>
<ul>
<li>4 &times; 100nF</li>
<li>1 &times; 10nF</li>
<li>1 &times; 4,7&micro;F</li>
<li>1 &times; 10uF</li>
</ul>
<p>Rezystory SMD 1206:</p>
<ul>
<li>3 &times; 270&#x2126;</li>
<li>2 &times; 1k&#x2126;</li>
<li>1 &times; 4,7k&#x2126;</li>
<li>2 &times; 10k&#x2126;</li>
<li>1 &times; 36k&#x2126; (użyłem 33k&#x2126;)</li>
<li>1 &times; 150k&#x2126;</li>
</ul>
<p>Elementy stykowe:</p>
<ul>
<li>2 &times; jumperek</li>
<li>1 &times; gniazdo USB B kątowe do druku przewlekane</li>
<li>1 &times; gniazdo męskie proste IDC10 do druku przewlekane</li>
<li>1 &times; goldpin 2&#215;3</li>
<li>2 &times; goldpin 1&#215;3</li>
</ul>
<p>Pozostałe:</p>
<ul>
<li>1 &times; rezonator kwarcowy 7.3728MHz SMD (oznaczany czasem w katalogach jako 7.372MHz)</li>
<li>1 &times; LCBA-601 (koralik przeciwzakłóceniowy) &#8212; może być 1206, 0805 lub 0603</li>
<li>1 &times; bezpiecznik polimerowy 0,5A SMD 1812</li>
</ul>
<h4>Pliki</h4>
<p>W <a href="/wp-content/uploads/avr_jtagice_usb_clone.zip">spakowanym archiwum</a> dostępne są schematy w formacie programu KiCad oraz w formacie PostScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2010/01/20/jtag-do-atmegi-w-wersji-usb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sage policzy to za Ciebie</title>
		<link>http://blog.vmario.org/2009/05/21/sage-policzy-to-za-ciebie/</link>
		<comments>http://blog.vmario.org/2009/05/21/sage-policzy-to-za-ciebie/#comments</comments>
		<pubDate>Thu, 21 May 2009 18:07:57 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Komputer]]></category>
		<category><![CDATA[Recenzje]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=535</guid>
		<description><![CDATA[Z pewnym żalem obserwuję czasem wśród moich kolegów z uczelni prawie że kompletny brak umiejętności posługiwania się oprogramowaniem matematycznym. Rozumiem jednak niechęć do MATLAB-a, a nawet do samej matematyki; ze wstydem przyznaję też, że sam, po blisko czterech latach na politechnice, posiadam wciąż bardzo ubogi aparat matematyczny i z trudem udaje mi się zmusić komputer [...]]]></description>
			<content:encoded><![CDATA[<p>Z pewnym żalem obserwuję czasem wśród moich kolegów z uczelni prawie że kompletny brak umiejętności posługiwania się oprogramowaniem matematycznym. Rozumiem jednak niechęć do <abbr title="MATrix LABoratory">MATLAB</abbr>-a, a nawet do samej matematyki; ze wstydem przyznaję też, że sam, po blisko czterech latach na politechnice, posiadam wciąż bardzo ubogi aparat matematyczny i z trudem udaje mi się zmusić komputer do tego, do czego został stworzony, czyli do&hellip; liczenia.</p>
<p>Chcąc nie chcąc, uczyłem się w ramach zajęć na <abbr title="Elektronika, Telekomunikacji i Informatyka">ETI</abbr> wykorzystywać <abbr title="MATrix LABoratory">MATLAB</abbr>-a, a więc przy okazji i Octave&#8217;a, do podstawowych obliczeń, szybko jednak zapominałem pokręconą składnię tego środowiska. Brakowało mi też wsparcia dla obliczeń analitycznych i możliwości pisania programów z użyciem wygodnej składni. Potrzebowałem czegoś, co pozwoli mi zarówno policzyć analitycznie całkę, z którą nie poradzi sobie mój kalkulator (Casio Algebra FX 2.0 Plus), wykreślić przebieg dowolnej funkcji, wyznaczyć <abbr title="Discrete Fourier Transform">DFT</abbr> sygnału, jak i szybko zaimplementować jakiś własny algorytm.</p>
<p>Cóż więc mi pozostawało? SciPy, Maxima, Scilab? A może coś jeszcze innego? W końcu trafiłem na środowisko <a href="http://www.sagemath.org/">Sage</a>.</p>
<p><span id="more-535"></span></p>
<p>Powiedzieć, że Sage jest programem matematycznym, to nieścisłość. Określić go jako zgrabne środowisko do wszelkiego rodzaju obliczeń to nadużycie, przynajmniej jeżeli chodzi o mój pogląd na piękno. Uważam, że tutaj najbardziej pasuje określenie &bdquo;<a href="http://pl.wikipedia.org/wiki/Srebrna_ta%C5%9Bma_klej%C4%85ca">duct tape</a>&rdquo;. Jeżeli jesteś matematykiem lub cenisz eleganckie rozwiązania programistyczne (albo miejsce na twardym dysku&hellip;), Sage może nie wzbudzić Twojego zachwytu. Jeżeli jednak masz w sobie ducha MacGyveryzmu, Sage może okazać się świetnym rozwiązaniem wielu problemów.</p>
<p>Sage jest zbiorem programów i bibliotek matematycznych, takich jak Maxima, SciPy czy <abbr title="GNU Scientific Library">GSL</abbr>, powiązanych Pythonem i okraszonych interfejsem <abbr title="Command-line interface">CLI</abbr> i dziwacznym <abbr title="Graphical user interface">GUI</abbr> w postaci&hellip; strony WWW. Jego niewątpliwą zaletą jest darmowość i otwartość (możemy więc poznać sposób, w jaki przeprowadzane są obliczenia).</p>
<p>Korzystam z Arch Linuksa, gdzie Sage dostępny jest w repozytorium <abbr title="ArchLinux User-community Repository">AUR</abbr> jako <code>sage-mathematics</code> i <code>sage-mathematics-bin</code>. Pierwszy pakiet chyba nie chciał mi się kompilować, a w każdym razie miałem z nim jakiś problem, ściągnąłem więc źródła bezpośrednio ze strony programu i próbowałem sam go zbudować. Niestety, udało mi się rozwiązać tylko część problemów i w końcu zakończyłem na błędzie po dwóch czy trzech godzinach kompilacji. Zrezygnowany sięgnąłem po binarkę. Pomijając fakt, że pobrałem bodaj 400MB, instalacja przebiegła bezboleśnie. Co prawda z dysku zniknęło mi 1,2GB, ale nie byłem zdziwiony &mdash; o ile dobrze zauważyłem, Sage zawiera w sobie wszystkie niezbędne biblioteki i programy, więc mam teraz zdublowanego Pythona, Maximę, SciPy i pewnie sporo innych rzeczy&hellip;</p>
<p>Przejdźmy jednak do meritum. Po uruchomieniu program może krzyczeć o odpowiednie uprawnienia do katalogu konfiguracyjnego. Poniższa komenda powinna rozwiązać problem:</p>
<pre><code># chmod +x ~/.sage/ipython</code></pre>
<p>Teraz odpalamy powłokę Sage&#8217;a i możemy przystępować do liczenia. Jednak od interfejsu linii poleceń znacznie wygodniejszy jest interfejs webowy, uruchamiany poleceniem <code>notebook()</code>. Jego działanie polega na wystartowaniu serwera WWW i przeglądarki z aplikacją webową. Jest to rozwiązanie w takim samym stopniu dziwne, co wygodne. Zgodnie z nazwą, serwuje nam ono coś w rodzaju notesów, w których możemy zapisywać obliczenia i ich wyniki. Przyznaję, że jest to bardzo intuicyjne rozwiązanie. Niestety, jesteśmy pozbawieni jakiegoś zgrabnego <abbr title="Integrated Development Environment">IDE</abbr>, pozwalającego wykorzystać możliwości Sage&#8217;a do pisania dłuższych skryptów czy programów. Może to i lepiej&hellip;</p>
<p>Odłóżmy jednak na bok ironiczne uwagi i przyjrzyjmy się bliżej <i>notebookowi</i>. <a href="http://www.sagemath.org/help-video.html">Screencasty</a> pokazują bogate możliwości tego interfejsu. W szczególności należy zwrócić uwagę na <a href="http://wiki.sagemath.org/interact">tryb interaktywny</a> &mdash; możliwość szybkiego napisania skryptu, który na bieżąco wizualizuje parametry ustawiane suwakiem, zrobiła na mnie wrażenie. To aż się prosi o wykorzystanie w szkołach czy na uczelniach!</p>
<p>Wykresy są całkiem estetyczne, do wypisywania wzorów można wykorzystać składnię LaTeX-a, a możliwość zapisania stanu pracy i powrotu w każdej chwili do obliczeń jest bardzo wygodna. Brakuje mi tylko skrótu klawiaturowego, który obliczałby wyrażenie bez przenoszenia do kolejnego wiersza (a tak działa <i>Shift + Enter</i>). Może jednak to tylko mój brak znajomości klawiszologii.</p>
<p>Jako podsumowanie cisną mi się na usta słowa: &bdquo;To jest naprawdę świetne narzędzie, <strong>ale&hellip;</strong>&rdquo;. Owych &bdquo;ale&rdquo; jest, niestety, sporo: od samej idei zlepienia różnych programów matematycznych, przez duże rozmiary aplikacji po dziwny interfejs. W zamian jednak otrzymujemy ogromne możliwości, pomysłowy tryb interaktywny i w sumie niegłupią ideę <i>notebooków</i>. Warto zatem instalować? Szczerze mówiąc, gdyby projekt <a href="http://www.wolframalpha.com/">Wolfram|Alpha</a> wystartował trochę wcześniej, to pewnie nie sięgnąłbym po Sega&#8217;a, w każdym razie nie po to, by policzyć analitycznie kilka całek czy wykreślić przebieg funkcji. Myślę jednak, że warto spróbować przygody z tą aplikacją czy to przez LiveCD, czy przez instalację binarki. W mojej krótkiej recenzji nie zabrakło złośliwości, ale nie mam zamiaru usuwać w najbliższym czasie programu z dysku &mdash; czas pokaże, czy to narzędzie rzeczywiście okaże się niezastąpione.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/05/21/sage-policzy-to-za-ciebie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nut/OS na Linuksie i MMnet104</title>
		<link>http://blog.vmario.org/2009/05/06/nutos-na-linuksie-i-mmnet104/</link>
		<comments>http://blog.vmario.org/2009/05/06/nutos-na-linuksie-i-mmnet104/#comments</comments>
		<pubDate>Wed, 06 May 2009 19:29:57 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=479</guid>
		<description><![CDATA[Tydzień temu pisałem o przywróceniu do życia modułu MMnet104. Dziś opiszę krótko instalację i uruchomienie środowiska, które pozwoli oprogramować ten moduł pod Linuksem z użyciem systemu operacyjnego Nut/OS.
Nut/OS jest modularnym systemem operacyjnym czasu rzeczywistego (RTOS) opracowanym w ramach projektu Ethernut. Ethernut jest projektem typu &#8222;open source hardware&#8221;, mającym na celu udostępnienie systemów wbudowanych obsługujących Ethernet.

Nas [...]]]></description>
			<content:encoded><![CDATA[<p>Tydzień temu pisałem o <a href="http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/">przywróceniu do życia</a> modułu <a href="http://www.propox.com/products/t_130.html">MMnet104</a>. Dziś opiszę krótko instalację i uruchomienie środowiska, które pozwoli oprogramować ten moduł pod Linuksem z użyciem systemu operacyjnego Nut/OS.</p>
<p><a href="http://www.ethernut.de/en/firmware/nutos.html">Nut/OS</a> jest modularnym systemem operacyjnym czasu rzeczywistego (<abbr title="Real-Time Operating System">RTOS</abbr>) opracowanym w ramach projektu <a href="http://www.ethernut.de/index.html">Ethernut</a>. Ethernut jest projektem typu &bdquo;open source hardware&rdquo;, mającym na celu udostępnienie systemów wbudowanych obsługujących Ethernet.</p>
<p><span id="more-479"></span></p>
<p>Nas w tej chwili interesuje jednak tylko część software&#8217;owa tego projektu, czyli Nut/OS, udostępniający gotowy stos <abbr title="Transmission Control Protocol/Internet Protocol">TCP/IP</abbr> i obsługę protokołów takich jak <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr>, <abbr title="Domain Name System">DNS</abbr>, <abbr title="Simple Mail Transfer Protocol">SMTP</abbr>, a nawet <abbr title="Hypertext Transfer Protocol">HTTP</abbr> czy <abbr title="File Transfer Protocol">FTP</abbr>. Nut/OS bardzo dobrze wspiera kompilator AVR-GCC, a poza tym autorzy projektu przewidzieli możliwość pracy na Linuksie, więc czas przystąpić do dzieła.</p>
<p>Zaczynamy od ściągnięcia źródeł, rozpakowania i uruchomienia konfiguracji:</p>
<pre><code>$ tar jxvf ethernut-4.8.2.tar.bz2
$ cd ethernut-4.8.2
$ ./configure</code></pre>
<p>Powinniśmy zobaczyć m.in.:</p>
<pre><code>configure: nutconfgui is enabled</code></pre>
<p>co oznacza, że będziemy mogli skorzystać z konfiguratora graficznego. W innym wypadku zapewne będziemy musieli doinstalować <a href="http://www.wxwidgets.org/">wxWidgets</a> lub inną bibliotekę, której brak wskaże nam konfigurator.</p>
<p>Ja napotkałem inny problem, związany ze specjalną biblioteką <a href="http://wxpropgrid.sourceforge.net/cgi-bin/index">wxPropertyGrid</a>, wymaganą przez narzędzie <code>nutdisc</code>, czyli Discoverera:</p>
<pre><code>configure: WARNING: wxpropgrid not found
[&hellip;]
configure: nutdisc requires propgrid</code></pre>
<p>Discoverer nie jest na szczęście niezbędny, jest to dodatkowy program, umożliwiający odnalezienie w sieci Ethernet nie do końca skonfigurowanych hostów, pracujących pod kontrolą Nut/OS-a.</p>
<p>Niestety, u mnie Ethernut najpierw nie widział skompilowanej biblioteki, a po wprowadzeniu zmian w <code>configure</code> i tak kończył kompilację z błędem. Koniec końców zignorowałem więc brak Discoverera i odpaliłem:</p>
<pre><code>$ make
$ make check
$ su -c "make install"</code></pre>
<p>Podczas kompilacji może nas jednak spotkać kolejna przykra niespodzianka: proces przerwie się niespodziewanie, sypiąc błędami, zapoczątkowanymi przez komunikat</p>
<pre><code>error: wx/setup.h: Nie ma takiego pliku ani katalogu</code></pre>
<p>Na szczęście i na to jest prosta rada:</p>
<pre><code># ln -s /usr/lib/wx/include/gtk2-unicode-release-2.8/wx/setup.h /usr/include/wx-2.8/wx/setup.h</code></pre>
<p>Teraz <code>make clean</code> i jazda od nowa z kompilacją!</p>
<p>Po zainstalowaniu nie zmieniamy katalogu, tylko uruchamiamy <code>nutconf</code> i wybieramy plik konfiguracyjny <code>MMnet104.conf</code>.</p>
<p>Następnie klikamy <i>Edit -&gt; Settings</i>. W zakładce <i>Build</i> <i>Source Directory</i> powinien wskazywać na katalog, do którego rozpakowaliśmy źródła, zaś <i>Platform</i> powinien mieć wartość <code>avr-gcc</code>. Jako <i>Build Directory</i> podałem katalog <code>~/test/build</code>, zaś jako <i>Install Directory</i> &mdash; <code>~/test/build/lib</code>. W zakładce <i>Samples</i> wskazałem <code>~/test/samples</code>.</p>
<p>Teraz klikamy <i>Build -&gt; Build Nut/OS</i> i <i>Build -&gt; Create Sample Directory</i>. W efekcie uzyskujemy gotowe środowisko pracy: jądro <abbr title="Real-Time Operating System">RTOS</abbr>, liczne biblioteki i przykładowe aplikacje. Możemy zacząć np. od serwera <abbr title="Hypertext Transfer Protocol">HTTP</abbr> &mdash; po wydaniu komendy <code>make</code> w katalogu <code>samples/httpd</code> powinniśmy otrzymać HEX-a gotowego do wgrania do naszego mikrokontrolera.</p>
<p>Przy okazji wspomnę, iż warto skorzystać z debugowania za pomocą interfejsu RS232. Interfejs ten coraz rzadziej spotyka się w komputerach, jeżeli jednak korzystamy z płytki wyposażonej w konwerter RS232&lt;-&gt;USB na bazie układu scalonego <a href="http://www.ftdichip.com/">FTDI</a>, Linux powinien nam automatycznie wykryć port i przypisać go do urządzenia <code>/dev/ttyUSB0</code>. Na PC-cie wystarczy uruchomić terminal RS232, np. <a href="http://sourceforge.net/projects/gtkterm/">GTKTerm</a> czy <a href="http://cutecom.sourceforge.net/">CuteCom</a> (baudrate odczytamy z kodu źródłowego; w moim przypadku parametry transmisji wynosiły <code>115200, 8N1</code>), a w kodzie programu mikrokontrolera umieścić wywołania <code>printf()</code> czy <code>puts()</code>, raportujące stan urządzenia.</p>
<p>Jedyną niedogodnością jest fakt, iż po odłączeniu kabla lub zasilania płytki oba terminale zawieszają się, zajmując przy okazji całą moc CPU PC-ta. Dlatego w takich sytuacjach warto pamiętać o wcześniejszym rozłączeniu połączenia w terminalu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/05/06/nutos-na-linuksie-i-mmnet104/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JTAG vs. fuse bity ATmegi128</title>
		<link>http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/</link>
		<comments>http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 20:38:59 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=498</guid>
		<description><![CDATA[W naszym projekcie grupowym na ETI korzystamy z modułu MMnet104 z mikrokontrolerem ATmega128. W wyniku bliżej nieokreślonych manipulacji procesor przestał odpowiadać na próby komunikacji po SPI za pomocą programatorów ISP.
Po konsultacjach uzgodniliśmy, że przed dramatyczną próbą wybebeszenia ATmegi i potraktowania ją programatorem równoległym spróbujemy użyć JTAG-a. Szczęśliwie okazało się, że da się w miarę prosto [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/vmario/3487121562/" title="AVR JTAG by vmario, on Flickr"><img class="vmlewa" src="http://farm4.static.flickr.com/3414/3487121562_5deb72b0e9_t.jpg" width="75" height="100" alt="AVR JTAG" /></a>W naszym projekcie grupowym na <abbr title="Elektronika, Telekomunikacja i Informatyka">ETI</abbr> korzystamy z modułu <a href="http://www.propox.com/products/t_130.html">MMnet104</a> z mikrokontrolerem ATmega128. W wyniku bliżej nieokreślonych manipulacji procesor przestał odpowiadać na próby komunikacji po <abbr title="Serial Peripheral Interface">SPI</abbr> za pomocą programatorów <abbr title="In-System Programming">ISP</abbr>.</p>
<p>Po konsultacjach uzgodniliśmy, że przed dramatyczną próbą wybebeszenia ATmegi i potraktowania ją programatorem równoległym spróbujemy użyć <abbr title="Joint Test Action Group">JTAG</abbr>-a. Szczęśliwie okazało się, że da się w miarę prosto zbudować taki programator w warunkach domowych.</p>
<p><span id="more-498"></span></p>
<p>W Internecie nietrudno natrafić na <a href="http://www.scienceprog.com/build-your-own-avr-jtagice-clone/">opisy</a> wykonania <abbr title="Joint Test Action Group">JTAG</abbr>-a, także <a href="http://liku.sdfpau.org/artykuly.php?a=avrjtag">w języku polskim</a>. Jak widać, schemat ideowy jest całkiem prosty, a elementy dosyć popularne i łatwe do zdobycia. Wyjątkiem jest oscylator kwarcowy o częstotliwości 7,3728MHz. Ja znalazłem go dopiero w czwartym sklepie (jeżeli ktoś mieszka w trójmieście, radzę od razu odwiedzić sklep Jacktronic). Warto też pamiętać, by kupić dwie ATmegi16, dzięki czemu będziemy mieli jeden czysty mikrokontroler, który posłuży do sprawdzenia poprawności działania <abbr title="Joint Test Action Group">JTAG</abbr>-a.</p>
<p>Postępując zgodnie z opisem powinniśmy uruchomić całość w miarę szybko i sprawnie. Ja napotkałem tylko na problem z wgraniem bootloadera za pomocą programatora AVR USBasp, który <a href="http://blog.vmario.org/2008/10/22/programator-avr-usbasp-na-linuksie/">opisywałem</a> kilka miesięcy temu. Programator ciągle przerywał pracę, strasząc jakimś &bdquo;broken pipe&rdquo;. Nie udało mi się znaleźć wytłumaczenia tego problemu &mdash; być może jest to kwestia zakłóceń, powstających na skutek montażu na płytce stykowej. W każdym razie wystarczy odrobina cierpliwości i wgrywanie wsadu aż do skutku (w trybie spowolnionego programowania, które wlecze się niemiłosiernie, ale w końcu odnosi skutek). Co do samego wsadu, to radzę zastosować <a href="http://liku.sdfpau.org/files/avrboot.hex">gotowy</a> (u mnie samodzielna kompilacja nie zaowocowała działającą binarką).</p>
<p>Jeżeli komuś nie chce się przeliczać fuse bitów dla ATmegi16 w <abbr title="Joint Test Action Group">JTAG</abbr>-u, poniżej podaję gotową komendę dla <code>avrdude</code> (<i>Fuse Low Byte</i> równy <code>0xFF</code> i <i>Fuse High Byte</i> równy <code>0xD8</code>).</p>
<pre><code>$ avrdude -p m16 -c usbasp -v -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m</code></pre>
<p>Przypominam, że należy starannie zaciskać złącza IDC10 na taśmie programującej, a w przypadku użycia scrossowanego kabla RS232 należy zamienić odpowiednie końcówki w gnieździe.</p>
<p>Jeżeli ktoś chciałby uruchomić cały programator pod Linuksem, to, niestety, nie jestem w stanie służyć pomocą. Pod Linuksem wgrałem tylko bootloader, a resztę załatwiło AVR Studio pod Windowsem.</p>
<p>Co do naszej nieszczęsnej ATmegi128 &mdash; za pomocą JTAG-a odblokowałem lock bity, ustawiłem poprawną konfigurację oscylatora i wyłączyłem flagę <i>WDTON</i>, która niepotrzebnie włączała watchdoga, dzięki czemu moduł w końcu ruszył.</p>
<p><ins>PS Zapraszam do zapoznania się z nowszym rozwiązaniem &mdash; tym samym <abbr title="Joint Test Action Group">JTAG</abbr>-iem <a href="/2010/01/20/jtag-do-atmegi-w-wersji-usb/">w wersji USB</a>.</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rzecz o efkach</title>
		<link>http://blog.vmario.org/2009/01/21/rzecz-o-efkach/</link>
		<comments>http://blog.vmario.org/2009/01/21/rzecz-o-efkach/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 17:22:45 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=413</guid>
		<description><![CDATA[Stanąłem przed zadaniem rozdzielenia sygnału telewizyjnego na dwa telewizory. Zdawało mi się, że zakup rozgałęźnika rozwiąże cały problem. Okazało się jednak, że nie wziąłem pod uwagę jednego &#8212; w powszechnym użyciu są dwa standardy złącz: złącze F, w które był wyposażony rozgałęźnik, oraz zwykłe złącze antenowe (Belling-Lee connector, IEC 169-2 connector, TV aerial plug), w [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/vmario/3215067067/" title="Rozgałęźnik + przejściówki by vmario, on Flickr"><img class="vmprawa" src="http://farm4.static.flickr.com/3510/3215067067_93b5d76088_t.jpg" width="100" height="75" alt="Rozgałęźnik + przejściówki" /></a>Stanąłem przed zadaniem rozdzielenia sygnału telewizyjnego na dwa telewizory. Zdawało mi się, że zakup rozgałęźnika rozwiąże cały problem. Okazało się jednak, że nie wziąłem pod uwagę jednego &mdash; w powszechnym użyciu są dwa standardy złącz: <a href="http://pl.wikipedia.org/wiki/Z%C5%82%C4%85cze_F">złącze F</a>, w które był wyposażony rozgałęźnik, oraz zwykłe <a href="http://en.wikipedia.org/wiki/TV_aerial_plug#">złącze antenowe</a> (<i>Belling-Lee connector</i>, <i>IEC 169-2 connector</i>, <i>TV aerial plug</i>), w które wyposażone są odbiorniki i gniazdo z sygnałem. Byłem tą niespodzianką lekko skonfundowany, w końcu student elektroniki powinien sobie z tak podstawowych rzeczy zdawać sprawę.</p>
<p><span id="more-413"></span></p>
<p>Na szczęście kilka przejściówek pozwoliło to wszystko ze sobą sprawnie połączyć:</p>
<div style="text-align:center"><a href="http://www.flickr.com/photos/vmario/3215067871/" title="Przygotowany rozgałęźnik by vmario, on Flickr"><img class="vmnormalny" src="http://farm4.static.flickr.com/3407/3215067871_ecf88e977f_m.jpg" width="240" height="180" alt="Przygotowany rozgałęźnik" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/01/21/rzecz-o-efkach/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programator AVR USBasp na Linuksie</title>
		<link>http://blog.vmario.org/2008/10/22/programator-avr-usbasp-na-linuksie/</link>
		<comments>http://blog.vmario.org/2008/10/22/programator-avr-usbasp-na-linuksie/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 15:28:59 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=272</guid>
		<description><![CDATA[Z braku portu LPT w nowym komputerze zaopatrzyłem się w programator USB, żeby móc czymś męczyć AVR-y. Padło na urządzenie na bazie USBasp, konkretnie model firmy Protech Micro (można ich znaleźć także na Allegro). Zakup był trochę ryzykowny, gdyż producent nie gwarantował, że programator będzie obsługiwany pod Linuksem, choć fakt, iż układ jest wspierany przez [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/vmario/2964667500/" title="Programator AVR na bazie USBasp by vmario, on Flickr"><img class="vmlewa" src="http://farm4.static.flickr.com/3011/2964667500_d5090ba6f5_t.jpg" width="100" height="75" alt="Programator AVR na bazie USBasp" /></a>Z braku portu LPT w nowym komputerze zaopatrzyłem się w programator USB, żeby móc czymś męczyć AVR-y. Padło na urządzenie na bazie USBasp, konkretnie model firmy <a href="http://www.protech-micro.pl/">Protech Micro</a> (można ich znaleźć także na Allegro). Zakup był trochę ryzykowny, gdyż producent nie gwarantował, że programator będzie obsługiwany pod Linuksem, choć fakt, iż układ jest wspierany przez AVRDUDE dobrze rokował. I rzeczywiście, pod rootem programator śmigał od ręki. Gorzej było z uruchomieniem go z konta zwykłego użytkownika. Drogą eksperymentów z udev udało mi się w końcu nadać odpowiednie uprawnienia i mogę spokojnie zająć się programowaniem. Oto droga do celu pod Arch Linuksem.<br />
<span id="more-272"></span><br />
Instalujemy AVRDUDE:</p>
<pre><code># pacman -S avrdude</code></pre>
<p>Sprawdzamy, czy programator jest poprawnie podłączony. Komenda</p>
<pre><code># avrdude -p t13 -c usbasp -v</code></pre>
<p>(obecnie używam ATtiny13) powinna m.in. odczytać fuse bity z naszego uC. Nie dajmy się tu zwieść informacji o używanym porcie</p>
<pre><code>Using Port            : /dev/parport0</code></pre>
<p>gdyż, rzecz jasna, nie korzystamy wcale z LPT, lecz z USB.</p>
<p>Spróbujmy jednak szczęścia z poziomu użytkownika:</p>
<pre><code>$ avrdude -p t13 -c usbasp -v</code></pre>
<p>Jeżeli znów się nam udało, możemy spokojnie zająć się pracą, jednak komunikat</p>
<pre><code>avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc</code></pre>
<p>wróży nam odrobinę walki o uprawnienia.</p>
<p>Zacznijmy od tego, że AVRDUDE podaje nam identyfikator urządzenia, co pomaga szybko sprawdzić, jak wygląda dostęp do niego. Poleceniem</p>
<pre><code># lsusb -v|grep -i 16c0:05dc</code></pre>
<p>odnajdujemy ścieżkę do naszego programatora. Przykładowo może to wyglądać tak:</p>
<pre><code>Bus 006 Device 006: ID 16c0:05dc</code></pre>
<p>Nie jest trudno rozszyfrować tę informację i wyświetlić uprawnienia urządzenia:</p>
<pre><code># ls -l /dev/bus/usb/006/006</code></pre>
<p>Zapewne zobaczymy, że do naszego programatora może pisać tylko root. Tu z pomocą przychodzi nam udev, który ochoczo przystanie na zmianę uprawnień, jeżeli ładnie go o to poprosimy. Tworzymy plik <code>/etc/udev/rules.d/95-myrules.rules</code>, który zawiera tę prośbę:</p>
<pre><code># Programator AVR USBasp
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", ATTRS{product}=="USBasp", GROUP="usb", MODE="0664"</code></pre>
<p>Tu należy zauważyć, że nazwa pliku zaczyna się od <code>95</code>, aby nasze reguły zostały przetworzone pod koniec przeglądania urządzeń. Dzięki temu domyślne ustawienia nie nadpiszą naszych. W razie problemów możemy użyć opcji <code>MODE:="0664"</code>, która zablokuje przetwarzanie uprawnień przez inne reguły.</p>
<p>Oczywiście, dla bezpieczeństwa, a raczej dla elegancji, nie zastosowaliśmy uprawnień <code>0666</code>, lecz utworzyliśmy grupę <code>usb</code> z możliwością zapisu. Grupę tę dodajemy chyżo do systemu, po czym się do niej dopisujemy:</p>
<pre><code># groupadd usb
# gpasswd -a <i>użytkownik</i> usb</code></pre>
<p>Odłączamy i podłączamy programator, po czym sprawdzamy, czy możemy już zaprogramować uC z poziomu użytkownika. Jeżeli nie, problemu należy szukać przede wszystkim w uprawnieniach. Przypominam, że po ponownym podłączeniu programator będzie dostępny pod innym adresem &mdash; zapewne o numer większym, a więc w tym przypadku: <code>/dev/bus/usb/006/007</code>, zresztą w każdej chwili możemy to sprawdzić za pomocą <code>lsusb</code>.</p>
<p>W przypadku kłopotów można też spróbować polecenia</p>
<pre><code># udevadm control --reload-rules</code></pre>
<p>lub po prostu restartu komputera.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2008/10/22/programator-avr-usbasp-na-linuksie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Nie umiem wróżyć z fusów</title>
		<link>http://blog.vmario.org/2008/01/31/nie-umiem-wrozyc-z-fusow/</link>
		<comments>http://blog.vmario.org/2008/01/31/nie-umiem-wrozyc-z-fusow/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 11:49:26 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
				<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/2008/01/31/nie-umiem-wrozyc-z-fusow/</guid>
		<description><![CDATA[Próbowałem wczoraj ugryźć wreszcie dekodowanie RC5 z użyciem timera w ATtiny2313. Miałem jednak spore problemy z wyliczeniem czasów, przede wszystkim dlatego, że wcześniej pracowałem na AT90S2313, który przyzwyczaił mnie do tego, że domyślnie taktowany jest przez zewnętrzny oscylator. Z nowymi AVR-ami rzecz ma się nieco inaczej, bowiem chociażby w takim ATtiny2313 mamy do wyboru całkiem [...]]]></description>
			<content:encoded><![CDATA[<p>Próbowałem wczoraj ugryźć wreszcie dekodowanie RC5 z użyciem timera w ATtiny2313. Miałem jednak spore problemy z wyliczeniem czasów, przede wszystkim dlatego, że wcześniej pracowałem na AT90S2313, który przyzwyczaił mnie do tego, że domyślnie taktowany jest przez zewnętrzny oscylator. Z nowymi AVR-ami rzecz ma się nieco inaczej, bowiem chociażby w takim ATtiny2313 mamy do wyboru całkiem sporo wewnętrznych oscylatorów RC. Wyboru dokonuje się przez młodsze fuse bity (<i>Fuse Low Byte</i>). W szczególności interesują nas bity <i>CKSEL3..0</i> (<i>Select Clock source</i>) i bit <i>CKDIV8</i> (<i>Divide clock by 8</i>). W dokumentacji jasno stoi, iż domyślnie bity <i>CKSEL3..0</i> ustawione są na <i>0100</i> tak, że pracuje wewnętrzny oscylator 8MHz. <i>CKDIV8</i> jest zaś ustawiony na <i>0</i>, byłem więc przekonany, że dzielnik zegara systemowego jest wyłączony.</p>
<p><span id="more-223"></span></p>
<p>Niestety, ciągle coś mi nie grało &#8212; wartości w rejestrze timera znacząco odbiegały od moich przewidywań. W końcu postanowiłem uruchomić USART, żeby móc na bieżąco wysyłać mierzone czasy (dotąd kilka diod informowało mnie, czy czasy mieszczą się w zadanych granicach). Po uruchomieniu GtkTerma, okazało się, że transmisja przebiega poprawnie ale nie przy 9600bps, jak ustawiłem, lecz przy 1200bps. Odczytałem więc fusy</p>
<pre><code>$ uisp -dprog=stk200 -dlpt=/dev/parport0 --rd_fuses</code></pre>
<p>otrzymując</p>
<pre><code>Fuse Low Byte      = 0x64</code></pre>
<p>Wyglądało na to, że najstarszy bit (<i>CKDIV8</i>) jest wyzerowany. Więc skąd ośmiokrotnie niższe taktowanie? Po głębszej analizie dokumentacji i chwili googlowania w końcu zrozumiałem &#8212; wartość <i>0</i> oznacza <i>programmed</i>, czyli ustawienie fuse bita.</p>
<p>Poprawiłem więc <code>F_CPU</code> w <code>Makefile</code> z <code>8000000</code> na <code>1000000</code> i&hellip; transmisja oszalała. Rzut oka na tabelę błędów USART (jakiś dobry człowiek zamieścił ją w dokumentacji) &#8212; aha, przy takim taktowaniu dla 9600bps mamy błąd zegara -7,0%. Zmieniłem więc bitrate na 4800bps i teraz wszystko zdaje się być w porządku.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2008/01/31/nie-umiem-wrozyc-z-fusow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
