<?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>TRANSFORMATORS.lv</title>
	<atom:link href="http://transformators.lv/feed/" rel="self" type="application/rss+xml" />
	<link>http://transformators.lv</link>
	<description>Argus DIY portāls elektronikas entuziastiem</description>
	<lastBuildDate>Fri, 20 Apr 2012 08:02:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Piedalies lielākajās Baltijas robotikas sacensībās „Baltic Robot Sumo 2012”!</title>
		<link>http://transformators.lv/2012/piedalies-lielakajas-baltijas-robotikas-sacensibas-%e2%80%9ebaltic-robot-sumo-2012%e2%80%9d/</link>
		<comments>http://transformators.lv/2012/piedalies-lielakajas-baltijas-robotikas-sacensibas-%e2%80%9ebaltic-robot-sumo-2012%e2%80%9d/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 08:02:32 +0000</pubDate>
		<dc:creator>Edgars</dc:creator>
				<category><![CDATA[Pasākumi]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2636</guid>
		<description><![CDATA[[ 12.05.2012; ] 

Robotika ir viena no visstraujāk augošajām nozarēm. Roboti tiek konstruēti industriāliem mērķiem, sadzīves atvieglošanai, kā arī priekam un sacensībām. Ja aizraujies ar robotiem un tev piemīt sacensību gars, tad tev jābūt lielākajā robotikas pasākumā Baltijā – Baltic Robot Sumo 2012. Piedalies sacensībās ar savu robotu un izcīni uzvaras! Baltijas robotikas sacensības „Baltic Robot Sumo” norisināsies [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: medium;"><a href="http://transformators.lv/wp-content/uploads/2012/04/brs_uzsaukums-small.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2637" title="brs_uzsaukums - small" src="http://transformators.lv/wp-content/uploads/2012/04/brs_uzsaukums-small-150x150.jpg" alt="" width="150" height="150" /></a></span></p>
<p><a name="_GoBack"></a>Robotika ir viena no visstraujāk augošajām nozarēm. Roboti tiek konstruēti industriāliem mērķiem, sadzīves atvieglošanai, kā arī priekam un sacensībām. Ja aizraujies ar robotiem un tev piemīt sacensību gars, tad tev jābūt lielākajā robotikas pasākumā Baltijā – <strong>Baltic Robot Sumo 2012</strong>. Piedalies sacensībās ar savu robotu un izcīni uzvaras! Baltijas robotikas sacensības „Baltic Robot Sumo” norisināsies <strong>12. maijā Starptautiskajā izstāžu centrā Ķīpsalā, Ķīpsalas 8, Rīgā. <span id="more-2636"></span></strong></p>
<p>Pasākuma mērķis ir sekmēt robotikas nozares attīstību un sadarbību Latvijā un Baltijā, ar robotikas sacensību palīdzību, kā arī veicināt jauniešu, it īpaši skolēnu, interesi par inženierzinātnēm un paaugstināt inženierzinātņu prestižu sabiedrībā. Šogad ikvienam robotikas entuziastam ir iespēja piedalīties vairākās disciplīnās gan iesācēju, gan arī profesionāļu klasēs. Iesācēju klasē var piedalīties skolēni un jebkurš, kas sacensībās piedalās pirmo reizi. Visu disciplīnu uzvarētājus sagaida balvas, savukārt prestižās 3 kg Sumo disciplīnas uzvarētāji iegūs ielūgumu piedalīties All Japan Robot Sumo Tournament’s Grand Final, kas norisināsies šī gada nogalē Tokijā.</p>
<p>Šogad visas dienas garumā norisināsies cīņas šādās disciplīnās :</p>
<ul>
<li>3kg Sumo</li>
<li>Mini Sumo 	(iesācēju un profesionāļu klase)</li>
<li>Roomba Sumo</li>
<li>Līnijas 	sekotāji (iesācēju un profesionāļu klase)</li>
<li>Latvijas Lego 	čempionāts (tikai skolēnu klase)</li>
<li>Taxi Driver 	(tikai skolēnu klase)</li>
<li>Freestyle</li>
</ul>
<p lang="lv-LV">
<p>Nenokavē un piesaki savu robotu lielākajām sacensībām Baltijā līdz 7. maijam portālā <a href="http://www.balticrobotsumo.org/">www.balticrobotsumo.org</a>! Piedalīšanās ir bez maksas, kā arī nav ierobežojumu reģistrēto robotu skaitam vai komandas dalībnieku skaitam, taču katrs dalībnieks drīkst būt tikai viena robota operators<a name="sdfootnote1anc" href="#sdfootnote1sym"><sup>*</sup></a>. Pirms sacensībām dalībniekiem būs iespēja uzlabot savus robotus, taču katra komanda drīkstēs izmantot tikai 1 lodāmuru, rokas instrumentus, kā arī portatīvos datorus un akumulatoru lādētājus. Sīkāk ar sacensību nolikumu izmaiņām vari iepazīties <a href="http://www.balticrobotsumo.org/">www.balticrobotsumo.org</a>.</p>
<p><span style="font-size: small;">Baltijas robotikas sacensības „Baltic Robot Sumo” rīko RTU Robotikas klubs ciešā sadarbībā ar Bērnu zinātnes centru „Z(in)oo”, RTU Studentu parlamentu un Rīgas Tehnisko universitāti. </span></p>
<p lang="lv-LV">
<p><span style="font-size: small;">Vairāk informācijas : <a href="http://www.balticrobotsumo.org/">www.balticrobotsumo.org</a> un <a href="http://www.robotika.lv/">www.robotika.lv</a> </span></p>
<p><span style="font-size: small;">Jautājumiem, komentāriem, neskaidrībām : <a href="mailto:robootika@robotika.lv">robootika@robotika.lv</a> </span></p>
<div id="sdfootnote1">
<p><span style="font-size: x-small;"><a name="sdfootnote1sym" href="#sdfootnote1anc">*</a><sup>*</sup> Operators – dalībnieks, kurš startē robotu </span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/piedalies-lielakajas-baltijas-robotikas-sacensibas-%e2%80%9ebaltic-robot-sumo-2012%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://transformators.lv/2012/2628/</link>
		<comments>http://transformators.lv/2012/2628/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 07:14:02 +0000</pubDate>
		<dc:creator>Edgars</dc:creator>
				<category><![CDATA[Pasākumi]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2628</guid>
		<description><![CDATA[[ 01.05.2012; 07:00; ] Šoreiz gan februāra, gan marta labākā raksta autors ir   KasparsL  ar rakstiem: Li-Ion akumulatoru “gudrs” lādētājs ar MCP73843 un  Atmega8 gaismas diožu vadība 2. daļa – nobīdes reģistri balvā iegūstot  dāvanu karti 40 Ls vērtībā no SIA Argus Radiodetaļu Tirdzniecība. Arī nākamā mēneša labākā raksta autoram ir iespēja tikt pie dāvanu kartes! 
Atceramies, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2011/11/gift.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2416" title="gift" src="http://transformators.lv/wp-content/uploads/2011/11/gift-150x150.gif" alt="" width="106" height="106" /></a>Šoreiz gan februāra, gan marta labākā raksta autors ir <span> <strong> KasparsL </strong> </span>ar rakstiem:<a href="http://transformators.lv/2012/li-ion-akumulatoru-gudrs-ladetajs-ar-mcp73843/"> Li-Ion akumulatoru “gudrs” lādētājs ar MCP73843</a> un  <a href="http://transformators.lv/2012/atmega8-gaismas-diozu-vadiba-2-dala-nobides-registri/">Atmega8 gaismas diožu vadība 2. daļa – nobīdes reģistri</a> balvā iegūstot  <strong>dāvanu karti 40 Ls vērtībā </strong>no SIA Argus Radiodetaļu Tirdzniecība. Arī nākamā mēneša labākā raksta autoram ir iespēja tikt pie dāvanu kartes!<strong></strong><span style="color: #000000;"><a href="http://web.argus.lv/shop/productinfo/AVTMSP430/hwindex.htm"><strong> </strong></a></span></p>
<p style="text-align: left;">Atceramies, ka tikai Jūsu balsojums noteiks laimētāju!</p>
<p style="text-align: left;">
<p style="text-align: left;"><span id="more-2628"></span></p>
<p style="text-align: left;">Pamācība raksta veidošanā atrodama <a href="http://transformators.lv/pamaciba/">šeit</a>, un informācija par balsošanu &#8211; <a href="http://transformators.lv/2010/balsojam-par-labakajiem/">šeit</a>.</p>
<p style="text-align: left;">
<p style="text-align: left;">P.S atgādinu ka vērtēšanas sistēma nav pakļauta kalendārajam mēnesim bet gan 40 dienām, lai gan balvas tiek izdalītas katra mēneša sākumā, līdz ar to jebkuram daudz maz vienlīdzīgas iespējas tikt pie balvas neatkarīgi no ievietošanas datuma.</p>
<p style="text-align: left;">Un vēl joprojām rakstu autoriem tiek piešķirta 15% atlaide vienam pirkumam no <a href="http://www.argus.lv/">argus.lv</a></p>
<p style="text-align: left;">Informācija par balvu un atlaižu saņemšanu tiek sūtīta uz jūsu e-pastu, kas norādīts Jūsu transformators.lv profilā. Ja gadījumā kāds šo informāciju nav saņēmis &#8211; dodiet ziņu.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<h2 class="title">DIY Tranzistoru/Integrēto shēmu zemfrekvences  jaudas pastiprinātāja būve : vispārīgi norādījumi.</h2>
</div>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/2628/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stereo audio līmeņa PPM/VU indikators ar Atmega8</title>
		<link>http://transformators.lv/2012/stereo-audio-limena-ppmvu-indikators-ar-atmega8/</link>
		<comments>http://transformators.lv/2012/stereo-audio-limena-ppmvu-indikators-ar-atmega8/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 06:18:44 +0000</pubDate>
		<dc:creator>KasparsL</dc:creator>
				<category><![CDATA[AVR Atmel]]></category>
		<category><![CDATA[Audio / Video]]></category>
		<category><![CDATA[DIY Raksti]]></category>
		<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2599</guid>
		<description><![CDATA[&#8220;Sērfojot&#8221; internetā, skatoties visādus pašu darinājumus, uzdūros uz audio līmeņa indikātoriem ar mikrokontroliera vadību un radās vēlme arī  tādu uztaisīt (no nulles protams!). Ķēros pie lietas. Neko ļoti sarežģītu un ar analogajiem filtriem nevēlējos taisīt, nolēmu, ka izmanošu to pašu nedaudz novecojušo mikrokontrolieri ATMEGA8. Lai atēlotās informācijas izšķirtspēja būtu acij daudz maz tīkama, izdomāju, ka [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6395.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="size-thumbnail wp-image-2615 alignleft" title="IMG_6395" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6395-150x150.jpg" alt="" width="150" height="150" /></a>&#8220;Sērfojot&#8221; internetā, skatoties visādus pašu darinājumus, uzdūros uz audio līmeņa indikātoriem ar mikrokontroliera vadību un radās vēlme arī  tādu uztaisīt (no nulles protams!). Ķēros pie lietas. Neko ļoti sarežģītu un ar analogajiem filtriem nevēlējos taisīt, nolēmu, ka izmanošu to pašu nedaudz novecojušo mikrokontrolieri <a title="datasheet" href="http://www.atmel.com/Images/doc2486.pdf" target="_blank">ATMEGA8</a>. Lai atēlotās informācijas izšķirtspēja būtu acij daudz maz tīkama, izdomāju, ka katram kanālam (labajam un kreisajam) būs 24 gaismas diodes &#8211; kopā 48. Bet izvēlētajam mikrokontrolierim (Atmega8) nav tik daudz izvadu, lai pieslēgtu tādu skaitu gaismas diožu, bija jāizvēlas pārbīdes reģistri ,vai &#8220;multiplexing&#8221; &#8211; saukšu miltipleksēšana, gaismas diožu vadīšanai. <span id="more-2599"></span>Tā kā nevēlejos neko sarežģīt, un šim aparātam maksimāls spilgtums nav nepieciešams, izvēlējos otro &#8211; multipleksēšanu. Neieslīgstot multipleksēšanas sīkumos (jau iepriekš šeit pieminēts vairākas reizes) īsumā &#8211; informācija uz gaismas diodēm tiek attēlota pa daļām, manā gadījumā 6 grupas pa 8 gaismas diodēm. vienlaicīgi spīd tikai viena grupa, tad nākamā, nākamā utt. Tas notiek tik ātri, ka cilvēka acīm škiet, ka visas grupas spīd vienlaicīgi (&#8220;POV&#8221; &#8211; &#8220;Persistance Of Vision&#8221; effekts).</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/intro.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2616" title="intro" src="http://transformators.lv/wp-content/uploads/2012/03/intro-570x106.jpg" alt="" width="570" height="106" /></a></p>
<p>Tālāk, bija jāizlemj, kādā veidā audio signālu padarīt mikrokontrolierim saprotamu. Audio signāls no sadzīves iekārtām nāk laukā divpolārs, bet mūsu &#8220;atmegai&#8221; ir vienpolāra barošana. Tātad nepieciešams audio signāla <a title="slēguma iedvesmas avots" href="http://www.eleccircuit.com/full-wave-rectifier-with-an-op-amp-ic/" target="_blank">taisngriezis</a>! Internets ir pilns ar dažādiem <a title="audio taisngriežu varianti" href="http://sound.westhost.com/appnotes/an001.htm" target="_blank">variantiem</a> un izpildījumiem, es izvēlējos shēmu, kas ir kompromiss manam audio līmeņa indikatoram starp sarežģītību un precizitāti (pilnībā pietiekama!).</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/full-wave-rectifier.png" class="highslide-image" onclick="return hs.expand(this);"><img class="size-medium wp-image-2602  aligncenter" title="full-wave-rectifier" src="http://transformators.lv/wp-content/uploads/2012/03/full-wave-rectifier-253x300.png" alt="" width="253" height="300" /></a></p>
<p style="text-align: center;">
<p style="text-align: left;"><a href="http://transformators.lv/wp-content/uploads/2012/03/full-wave-rectifier.png" class="highslide-image" onclick="return hs.expand(this);"></a><br />
Šis audio pilna perioda (&#8220;fullwave&#8221;) taisngriezis darbojas tāpat kā diožu tiltiņš maiņstrāvai, tikai šis to dara audio signālam un bez sprieguma kritumiem. Lai ši shēma &#8211; taisngriezis darbotos, nepieciešams operāciju pastiprinātājs ar vienpolāru barošanu, ar &#8220;rail to rail input and output&#8221;, un, kura ieejas signāls drīkst būt nedaudz negatīvs (svarīgi!). <a title="datsheet" href="http://ww1.microchip.com/downloads/en/devicedoc/21685d.pdf">MCP6022</a> atbilst. Rezistoriem jābūt pēc iespējas precīziem &#8211; pielasiet  ommetru (arī 1% klases rezistori derēs). tas vajadzīgs, lai abi pusperiodi tiktu pastiprināti vienādi. Dotā taisngrieža pastiprinājuma koeficients ir 0,5.<br />
Vēl &#8220;priekšpusē&#8221; ievietoju parastu priekšpastiprinātāju, lai kompensētu taisngrieža vājinājumu divas reizes.</p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;"><strong> </strong><a href="http://transformators.lv/wp-content/uploads/2012/03/preamp.png" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-medium wp-image-2604" title="preamp" src="http://transformators.lv/wp-content/uploads/2012/03/preamp-242x300.png" alt="" width="242" height="300" /></a></p>
<p style="text-align: center;">
<p style="text-align: left;">Priekšpastiprinātājam izvēlaties operāciju pastiprinātāju ar pēc iespējas mazāku izajas &#8220;offset&#8221; spriegumu, jo audio taisngriezis tiks pieslēgts pa tiešo pie izejas. Man bija pa rokai <a title="datasheet" href="http://www.google.lv/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCUQFjAA&amp;url=http%3A%2F%2Fwww.ti.com%2Flit%2Fds%2Fsymlink%2Fopa4340.pdf&amp;ei=dlV1T5TcKIeDhQed7LyrDQ&amp;usg=AFQjCNH6ONv3lqy3Pfd8w5ojfXkdUhrLYA" target="_blank">OPA2340</a>. Šis priekšpastiprinātājs barojas no divpolāra barošanas avota, tādēļ nepieciešams izveidot negatīvu spriegumu no jau esošā +5V (Atmega8 barošana). Te mums palīdz vienkārša, šim nolūkam paredzēta mikroshēma <a title="datasheet" href="http://pptea.altervista.org/pdf/icl7660.pdf" target="_blank">ICL7660</a>. Tai nepieciešami tikai divi ārēji elementi &#8211; divi kondensatori, lai pārveidotu +5V uz -5V. Izejā izmantoju lielākas kapacitātes kondensātoru, lai mazinātu pulsācijas no pārveidošanas.</p>
<p style="text-align: center;">
<p style="text-align: center;"><strong> </strong><a href="http://transformators.lv/wp-content/uploads/2012/03/voltage-inverter.png" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-medium wp-image-2605" title="voltage-inverter" src="http://transformators.lv/wp-content/uploads/2012/03/voltage-inverter-300x214.png" alt="" width="300" height="214" /></a></p>
<p style="text-align: left;"><a href="http://transformators.lv/wp-content/uploads/2012/03/voltage-inverter.png" class="highslide-image" onclick="return hs.expand(this);"></a><br />
Vēl viena lieta &#8211; tā kā izmantošu  multipleksēšanu, 48 gaismas diožu vadībai būs nepieciešami tikai 14 izvadi. No šiem izvadiem 6 ir jāiztur 8 gaismas diožu strāva, kas sliktākajā gadījumā, kad visām gaismas diodēm ir jāspīd, pārsniedz atļautos 20-25mA uz mikrokontroliera izvadu. Tādēļ izveidoju vienkāršus strāvas pastiprinātājus (buferus) ar <a title="datasheet" href="http://www.fairchildsemi.com/ds/BC/BC337.pdf" target="_blank">BC337</a> tranzistoriem.</p>
<p style="text-align: center;"><strong> </strong><a href="http://transformators.lv/wp-content/uploads/2012/03/multiplexing.png" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2603" title="multiplexing" src="http://transformators.lv/wp-content/uploads/2012/03/multiplexing-570x253.png" alt="" width="570" height="253" /></a></p>
<p style="text-align: left;"><a href="http://transformators.lv/wp-content/uploads/2012/03/multiplexing.png" class="highslide-image" onclick="return hs.expand(this);"></a><br />
Pietiks &#8220;niekoties&#8221;, liekam visu minēto kopā. Man sanāca sekojoša shēma.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/vu-meter-atmega8-schematic.png" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2601" title="vu-meter-atmega8-schematic" src="http://transformators.lv/wp-content/uploads/2012/03/vu-meter-atmega8-schematic-570x343.png" alt="" width="570" height="343" /></a></p>
<p style="text-align: left;"><a href="http://transformators.lv/wp-content/uploads/2012/03/vu-meter-atmega8-schematic.png" class="highslide-image" onclick="return hs.expand(this);"></a><br />
Izmantoju ārējo 16Mhz kvarca rezonatoru, lai pēc iespējas biežāk varētu nolasīt signāla līmeni ieejās &#8211; uz ADC izvadiem.<br />
Sākumā es &#8220;saspraudu&#8221; audio līmeņa indikatoru uz maketplates (bez priekšpastiprinātāja).</p>
<p style="text-align: center;"><strong> </strong><a href="http://transformators.lv/wp-content/uploads/2012/03/MVI_6339.AVI_snapshot_01.30_2012.03.30_07.55.35.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="size-large wp-image-2621  aligncenter" title="uz maketplates" src="http://transformators.lv/wp-content/uploads/2012/03/MVI_6339.AVI_snapshot_01.30_2012.03.30_07.55.35-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p style="text-align: left;"><a href="http://transformators.lv/wp-content/uploads/2012/03/MVI_6339.AVI_snapshot_01.30_2012.03.30_07.55.35.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><br />
Kad tas bija izdarīts, vēru vaļā AVRStudio un sāku rakstīt programmu šim brīnumam ;)<br />
Pirmais, ko izdarīju bija tiku skaidrībā ar multipleksēšanu, uzrakstīju funkcijas, kas mainīgo (0-24) spēj pārveidot un attēlot. Otrais &#8211; sāku spēlēties ar ADC. Izvēlējos to darbināt gandrīz nepārtrauktā režīmā un ar pārtaukumu, kad pārveidošana pabeigta (gandrīz nepārtrauktā &#8211; palaižam pārveidojumu un ieslēdzam pārtraukumu, kad notiek pārtraukums, apstrādājam un palaižam nākošo pārveidojumu). Tālāk savienoju to visu kopā un ieguvu parastu &#8220;PPM&#8221; (&#8220;Peak Program Meter&#8221;) audio signāla mērītāju. Tālāk papildināju programmu ar papildus apstrādes un attēlošanas režīmiem &#8211; ieguvu &#8220;VU&#8221; (precīzs gan tikai sinusoidāliem signāliem), &#8220;Peak hold&#8221; &#8211; maksimālā vērtība tiek kādurīdi &#8220;pieturēta&#8221;, &#8220;Peak rain&#8221; &#8211; max vētība tiek pieturēta un tad &#8220;krīt&#8221; lejā, &#8220;Dot mode&#8221; &#8211; tiek attēlots nevis stabiņš, bet viena gaismas diode un kombinācijas no tiem &#8211; &#8220;VU&#8221; + &#8220;PPM dot mode&#8221; + &#8220;Peak hold&#8221; utt. Visam tam klāt ir regulējami augšanas un krišanas ātrumi.<br />
Pati <strong>programma</strong> (lejupielādēt varat raksta beigās):</p>
<pre class="brush: c">//==================================================================================
//==== ATMEGA8 STEREO PPM/VU METER 2X 24LED ===

// Bibliotekas ---------------------------------------------------------------------
#include &lt;avr/io.h&gt;      // ieejas-izejas biblioteka
#include &lt;avr/interrupt.h&gt;      // partraukumu biblioteka
#include &lt;util/delay.h&gt;     // aiztures biblioteka

// Definicijas ---------------------------------------------------------------------
#define analog_reference 3 // iebuvetais etalonavots 2,56V
#define LEFTCH 0  // kreisa kanala ieeja ADC0
#define RIGHTCH 1 // labaa kanala ieeja ADC1

// rezimi
#define CLIMBING_BARS 0 // leni kritoss peak stabins
#define PEAK_HOLD 1 // atri kritos peak stabins ar max vertibas ilgu aizturi
#define PEAK_RAIN 2 // atri kritos peak stabins ar max vertibas aizturi un tas krissanu
#define CLIMBING_DOTS 3 // leni kritos peak punkt
#define VU_PEAK_RAIN 4 // VU stabins un peak max vertibas ar krissanu
#define VU_AND_PEAK 5 // VU stabins ar peak punktu un peak aizturi uz pedejam 3 diodem
#define INTRO 6

#define SAMPLE_COUNT 160 // no cik vertibam tiek rekinats VU limenis
#define CORRECTION 112/100 // VU limena kalibracija

// ADC limenu slieksni
#define TRESHOLD01 4 //  -36db
#define TRESHOLD02 5 //  -34db
#define TRESHOLD03 6 //  -32db
#define TRESHOLD04 8 //  -30db
#define TRESHOLD05 10 // -28db
#define TRESHOLD06 13 // -26db
#define TRESHOLD07 16 // -24db
#define TRESHOLD08 20 // -22db
#define TRESHOLD09 25 // -20db
#define TRESHOLD10 31 // -18db
#define TRESHOLD11 40 // -16db
#define TRESHOLD12 50 // -14db
#define TRESHOLD13 63 // -12db
#define TRESHOLD14 79 // -10db
#define TRESHOLD15 100 // -8db
#define TRESHOLD16 125 // -6db
#define TRESHOLD17 158 // -4db
#define TRESHOLD18 177 // -3db
#define TRESHOLD19 199 // -2db
#define TRESHOLD20 223 // -1db
#define TRESHOLD21 250 //  0db // noregulee ieejas limeni, lai atbilst,
#define TRESHOLD22 281 // +1db //     tad visi pareejie arii sakritiis
#define TRESHOLD23 353 // +3db
#define TRESHOLD24 445 // +5db

// laiki
#define COUNTERGHOSTING_DELAY 1 // uSec anti-spokosanas aizture
#define PEAK_HOLD_TIMEOUT 2000 // peak max vertibas turesanas laiks cikli
#define PEAK_RAIN_HOLD 1000 // peak max vertibas turesana, ja ar krissanu
#define PEAK_RAIN_TIMEOUT 100 // peak max krissanas aatrums
#define BAR_FAST_TIMEOUT 10 // aatraa stabina krissanas aatrums
#define BAR_SLOW_TIMEOUT 55 // leenaa stabina krissanas aatrums

// Mainigie ------------------------------------------------------------------------

static uint8_t blockOut[6] = { // LED grupas izvads
 0b01000000,
 0b00000001,
 0b00010000,
 0b00100000,
 0b10000000,
 0b00000010 };

static uint8_t CRYSTALMASK = 0b00111111; // maska, lai nerakstitu uz kvarca izvadiem
static uint8_t ADCMASK = 0b00110000; // maska, lai nerakstitu uz adc ieejaam
static uint8_t BUTTONMASK = 0b00000100; // maska, lai nerakstitu uz pogas izvadu

volatile uint8_t mode = INTRO; // iesledzot, saakam ar so rezimu

volatile uint8_t blockIndex = 0; // diozu bloka indeks (0-5)
volatile uint8_t adcPin = LEFTCH; // ieeja (saksim ar kreiso kanalu)
volatile uint16_t leftBar=0; // kreisa stabina vertiba 0-24
volatile uint16_t rightBar=0; // labaa stabina vertiba 0-24
volatile uint32_t leftBarAvg=0; // kreisa stab. videja vertiba starp cikliem
volatile uint32_t rightBarAvg=0; // labaa stab. videja vertiba starp cikliem
volatile uint32_t leftBarSlow=0; // kreisa stab. vertiba, piemerojot krissanas atrumu
volatile uint32_t rightBarSlow=0; // labaa stab. vertiba, piemerojot krissanas atrumu
volatile uint32_t leftBarVU=0; // kreisa vu stabina vertiba
volatile uint32_t rightBarVU=0; // labaa vu stabina vertiba
volatile uint8_t leftBarDataVU[SAMPLE_COUNT]; // kreisais vu datu akumulators
volatile uint8_t rightBarDataVU[SAMPLE_COUNT]; // labais vu datu akumulators
volatile uint16_t samplePointerVU=0; // vu akumulatoru raadiitaajs
volatile uint16_t leftSamplesCount=1; // kreiso adc lasijumu skaits starp cikliem
volatile uint16_t rightSamplesCount=1; // labo adc lasijumu skaits starp cikliem
volatile uint32_t leftLEDs=0; // kreisīe gala dati, kas japaraada uz diodem
volatile uint32_t rightLEDs=0; // labie gala datim kas japaraada uz diodem
volatile uint8_t leftPeak=0; // peak max kreisa vertiba
volatile uint8_t rightPeak=0; // peak max laba vertiba

volatile uint32_t leftCounter1=0; // skaitiitaaji reziimu aiztureem
volatile uint32_t rightCounter1=0;
volatile uint32_t leftCounter2=0;
volatile uint32_t rightCounter2=0;
volatile uint32_t leftCounter3=0;
volatile uint32_t rightCounter3=0;
volatile uint32_t leftCounter4=0;
volatile uint32_t rightCounter4=0;

volatile uint8_t skipReading = 50; // iesledzot, izlaizam pirmos 50 adc lasijumus

//===============================================================================
// funkcijas ====================================================================
//===============================================================================

// izpildam ADC parveidojumu ====================================================
void sampleADC(){
 ADMUX = (analog_reference &lt;&lt; 6)|((adcPin) &amp; 0x07); // izvelamies salidzinamo avotu un ADC ieeju
 ADCSRA |= _BV(ADIE); // iesledzam ADC rezultata gatavibas partraukumu
 ADCSRA |= _BV(ADSC); // saakam parveidojumu
}

//parveidojam ADC uz BAR vertibu ================================================
//---------------------------------------------------------------------
uint32_t adcToBar(uint32_t adcData){
 uint32_t barData = 0;
 if(adcData &gt; TRESHOLD24){barData = 24;}
 else if(adcData &gt; TRESHOLD23){barData = 23;}
 else if(adcData &gt; TRESHOLD22){barData = 22;}
 else if(adcData &gt; TRESHOLD21){barData = 21;}
 else if(adcData &gt; TRESHOLD20){barData = 20;}
 else if(adcData &gt; TRESHOLD19){barData = 19;}
 else if(adcData &gt; TRESHOLD18){barData = 18;}
 else if(adcData &gt; TRESHOLD17){barData = 17;}
 else if(adcData &gt; TRESHOLD16){barData = 16;}
 else if(adcData &gt; TRESHOLD15){barData = 15;}
 else if(adcData &gt; TRESHOLD14){barData = 14;}
 else if(adcData &gt; TRESHOLD13){barData = 13;}
 else if(adcData &gt; TRESHOLD12){barData = 12;}
 else if(adcData &gt; TRESHOLD11){barData = 11;}
 else if(adcData &gt; TRESHOLD10){barData = 10;}
 else if(adcData &gt; TRESHOLD09){barData = 9;}
 else if(adcData &gt; TRESHOLD08){barData = 8;}
 else if(adcData &gt; TRESHOLD07){barData = 7;}
 else if(adcData &gt; TRESHOLD06){barData = 6;}
 else if(adcData &gt; TRESHOLD05){barData = 5;}
 else if(adcData &gt; TRESHOLD04){barData = 4;}
 else if(adcData &gt; TRESHOLD03){barData = 3;}
 else if(adcData &gt; TRESHOLD02){barData = 2;}
 else if(adcData &gt; TRESHOLD01){barData = 1;}
 else{barData = 0;}
 return barData;
}

// parveidojam BAR uz LED stabinu ===============================================
uint32_t barToLeds(uint32_t barData){
 uint32_t ledData = 0;
 if(barData == 0){
  ledData = 0;
 }else if(barData &lt; 32){
  ledData = (1UL &lt;&lt; barData)-1;
 }else{
  ledData = 0xFFFFFFFF;
 }
 return ledData;
}

// parveidojam BAR uz PEAK LED stabinu ==========================================
uint32_t peakToLeds(uint32_t peakData){
 uint32_t ledData = 0;
 if(peakData == 0){ledData = 0;}
 else if(peakData &lt; 32){ledData = 1UL &lt;&lt; (peakData-1);}
 else if(peakData == 32){ledData = 0b10000000000000000000000000000000;}
 return ledData;
}

//piemerojam stabinam augsanas un krissanas aiztures ============================
void findBarSlow(uint32_t timeOut, uint8_t riseTime){
 if(leftBar &gt; leftBarSlow){
  if(riseTime == 0){
   leftBarSlow = leftBar;
  }else if(leftCounter4 &gt; riseTime){
   leftBarSlow++;
   leftCounter4 = 0;
  }
  leftCounter2 = 0;
 }
 if(leftCounter2 &gt; timeOut){
  if(leftBarSlow &gt; 0){leftBarSlow -= 1;}
  leftCounter2 = 0;
 }
 if(rightBar &gt; rightBarSlow){
  if(riseTime == 0){
   rightBarSlow = rightBar;
  }
  else if(rightCounter4 &gt; riseTime){
   rightBarSlow++;
   rightCounter4 = 0;
  }
  rightCounter2 = 0;
 }
 if(rightCounter2 &gt; timeOut){
  if(rightBarSlow){rightBarSlow -= 1;}
  rightCounter2 = 0;
 }
}
//piemerojam peak max aizturi vai aizturi un krissanu ========================
void findPeaks(uint8_t peakMode){
 if(leftBar &gt; leftPeak){
  leftPeak = leftBar;
  leftCounter1 = 0;
  leftCounter3 = 0;
 }
 if(rightBar &gt; rightPeak){
  rightPeak = rightBar;
  rightCounter1 = 0;
  rightCounter3 = 0;
 }

 if(peakMode == PEAK_HOLD){ // PEAK_HOLD
  if(leftCounter1 &gt; PEAK_HOLD_TIMEOUT){
   leftPeak = leftBar;
   leftCounter1 = 0;
  }
  if(rightCounter1 &gt; PEAK_HOLD_TIMEOUT){
   rightPeak = rightBar;
   rightCounter1 = 0;
  }
 }else{ // PEAK_RAIN
  if(leftCounter3 &gt; PEAK_RAIN_HOLD){
   if(leftCounter1 &gt; PEAK_RAIN_TIMEOUT){
    if(leftPeak &gt; 0){leftPeak -= 1;}
    leftCounter1 = 0;
   }
  }
  if(rightCounter3 &gt; PEAK_RAIN_HOLD){
   if(rightCounter1 &gt; PEAK_RAIN_TIMEOUT){
    if(rightPeak &gt; 0){rightPeak -= 1;}
    rightCounter1 = 0;
   }
  }
 }
}

// aprekinam VU stabinus =====================================================
void calcVU(){
 volatile uint32_t left2=0, right2=0;
 for(uint16_t a=0; a&lt;SAMPLE_COUNT; a++){ // saskaitam kopaa visus datus
  left2 += leftBarDataVU[a];
  right2 += rightBarDataVU[a];
 }
 leftBarVU = left2/SAMPLE_COUNT; // izdalam summu ar ierakstu skaitu
 rightBarVU = right2/SAMPLE_COUNT;
}

// peak stabins ar peak max krissanu --------------------------------------------
void showPeakRain(){
 findBarSlow(BAR_FAST_TIMEOUT,1);
 findPeaks(PEAK_RAIN);
 leftLEDs = peakToLeds(leftPeak)|barToLeds(leftBarSlow);
 rightLEDs = peakToLeds(rightPeak)|barToLeds(rightBarSlow);
 leftCounter1++;
 rightCounter1++;
 leftCounter2++;
 rightCounter2++;
 leftCounter3++;
 rightCounter3++;
 leftCounter4++;
 rightCounter4++;
}

// peak stabins ar leenu krissanu -----------------------------------------------
void showClimbingBars(){
 findBarSlow(BAR_SLOW_TIMEOUT,2);
 //findPeaks(PEAK_HOLD);
 leftLEDs = barToLeds(leftBarSlow);
 rightLEDs = barToLeds(rightBarSlow);
 leftCounter1++;
 rightCounter1++;
 leftCounter2++;
 rightCounter2++;
 leftCounter3++;
 rightCounter3++;
 leftCounter4++;
 rightCounter4++;
}

// peak stabins ar peak max aizturi --------------------------------------------
void showPeakHold(){
 findBarSlow(BAR_FAST_TIMEOUT,1);
 findPeaks(PEAK_HOLD);
 leftLEDs = peakToLeds(leftPeak)|barToLeds(leftBarSlow);
 rightLEDs = peakToLeds(rightPeak)|barToLeds(rightBarSlow);
 leftCounter1++;
 rightCounter1++;
 leftCounter2++;
 rightCounter2++;
 leftCounter3++;
 rightCounter3++;
 leftCounter4++;
 rightCounter4++;
}

// peak punkts ar leenu krissanu -----------------------------------------------
void showClimbingDots(){
 findBarSlow(BAR_SLOW_TIMEOUT,2);
 leftLEDs = peakToLeds(leftBarSlow);
 rightLEDs = peakToLeds(rightBarSlow);
 leftCounter1++;
 rightCounter1++;
 leftCounter2++;
 rightCounter2++;
 leftCounter3++;
 rightCounter3++;
 leftCounter4++;
 rightCounter4++;
}

// vu stabins ar peak max aizturi ---------------------------------------------
void showVuPeakRain(){
 calcVU();
 findPeaks(PEAK_RAIN);
 leftLEDs = peakToLeds(leftPeak)|barToLeds(leftBarVU);
 rightLEDs = peakToLeds(rightPeak)|barToLeds(rightBarVU);
 leftCounter1++;
 rightCounter1++;
 leftCounter2++;
 rightCounter2++;
 leftCounter3++;
 rightCounter3++;
 leftCounter4++;
 rightCounter4++;
}

// vu stabins ar peak punktu un peak max aizturi uz pedeejam 3 diodem ---------
void showVuAndPeak(){
 calcVU();
 findBarSlow(BAR_SLOW_TIMEOUT,0);
 findPeaks(PEAK_HOLD);
 if(leftPeak&lt;22){leftPeak = 0;}
 if(rightPeak&lt;22){rightPeak = 0;}
 leftLEDs = peakToLeds(leftPeak)|peakToLeds(leftBarSlow)|barToLeds(leftBarVU);
 rightLEDs = peakToLeds(rightPeak)|peakToLeds(rightBarSlow)|barToLeds(rightBarVU);
 leftCounter1++;
 rightCounter1++;
 leftCounter2++;
 rightCounter2++;
 leftCounter3++;
 rightCounter3++;
 leftCounter4++;
 rightCounter4++;
}

// Intro animaacija -------------------------------------------------------------
void showIntro(){
 uint32_t leds=0;
 if(leftCounter1 &lt; 40){
  leftCounter1++;
 }else{
  leftCounter1 = 0;
  if(leftCounter2 &lt; 12){
   leds = (1UL &lt;&lt; leftCounter2) - 1;
   leftLEDs = leds &lt;&lt; (12 - leftCounter2);
   leftLEDs |= leds &lt;&lt; 12;
   rightLEDs = leftLEDs;
   leftCounter2++;
  }else{
   if(rightCounter2 &lt; 12){
    leds = (1UL &lt;&lt; (12 - rightCounter2)) - 1;
    leftLEDs = leds &lt;&lt; rightCounter2;
    leftLEDs |= leds &lt;&lt; 12;
    rightLEDs = leftLEDs;
    rightCounter2++;
   }else{
    mode = VU_AND_PEAK;
   }
  }
 }
}

//===============================================================================
// Partraukumu vektori un to funkcijas
//===============================================================================

// ADC rezultats gatavs =========================================================
ISR( ADC_vect ){ // ADC parveidojums pabeigts
 if(skipReading == 0){ // ja nevajag izlaist ADC rezultatu
  if(adcPin == LEFTCH){
   leftBar = adcToBar(ADCW);
   adcPin = RIGHTCH; // nakosreiz lasam labo kanalu
   leftBarAvg +=leftBar;
   leftSamplesCount++;
  }else{
   rightBar = adcToBar(ADCW);
   adcPin = LEFTCH; // nakosreiz lasam kreiso kanalu
   rightSamplesCount++;
   rightBarAvg += rightBar;
  }
 }else{
  skipReading--;
 }
 sampleADC(); // sagatavojamies nākamajam lasiijumam
}

//===============================================================================
// Timer2 sakrit ar OCR2 (laiks paraadiit datus uz diodeem)
ISR(TIMER2_COMP_vect){
 cli(); // izsleedzam paartraukumus
 PORTD = 0b00000100;
 PORTC = 0;
 PORTB = 0;
 _delay_us(COUNTERGHOSTING_DELAY); // pauze, kas var paliidzeet "spoku" likvideesanai
 switch(blockIndex){ // izvadam tagadejaas diozu bloka datus
  case 0:   PORTC = ((leftLEDs &gt;&gt; 2) &amp; ADCMASK); PORTB = (leftLEDs &amp; CRYSTALMASK); break;
  case 1:   PORTC = ((leftLEDs &gt;&gt; 10) &amp; ADCMASK); PORTB = ((leftLEDs &gt;&gt; 8) &amp; CRYSTALMASK);  break;
  case 2:   PORTC = ((leftLEDs &gt;&gt; 18) &amp; ADCMASK); PORTB = ((leftLEDs &gt;&gt; 16) &amp; CRYSTALMASK); break;
  case 3:   PORTC = ((rightLEDs &gt;&gt; 2) &amp; ADCMASK); PORTB = (rightLEDs &amp; CRYSTALMASK); break;
  case 4:   PORTC = ((rightLEDs &gt;&gt; 10) &amp; ADCMASK); PORTB = ((rightLEDs &gt;&gt; 8) &amp; CRYSTALMASK); break;
  case 5:   PORTC = ((rightLEDs &gt;&gt; 18) &amp; ADCMASK); PORTB = ((rightLEDs &gt;&gt; 16) &amp; CRYSTALMASK); break;
  default:    break;
 }
 PORTD = (blockOut[blockIndex] | BUTTONMASK); // iesledzam tagadejo diozu bloku

 blockIndex++; // nakamreiz radisim nakoso bloku
 if(blockIndex&gt;5){ // ja visi bloki paraditi
  blockIndex = 0; // nakamreiz radisim pirmo bloku
 }

// izrekinam un pielabojam VU BAR stabunu vertibask
 leftBarDataVU[samplePointerVU] = leftBarAvg*CORRECTION/leftSamplesCount;
 rightBarDataVU[samplePointerVU++] = rightBarAvg*CORRECTION/rightSamplesCount;
 if(samplePointerVU &gt; SAMPLE_COUNT){samplePointerVU = 0;}

 switch(mode){ // reekinam un raadam izveeleetaa reziima datus
  default:
  case CLIMBING_BARS:
   showClimbingBars();
   break;

  case PEAK_HOLD:
   showPeakHold();
   break;

  case PEAK_RAIN:
   showPeakRain();
   break;

  case CLIMBING_DOTS:
   showClimbingDots();
   break;

  case VU_PEAK_RAIN:
   showVuPeakRain();
   break;

  case VU_AND_PEAK:
   showVuAndPeak();
   break;

  case INTRO:
   showIntro();
   break;
 }

 leftBarAvg = 0; // dzesam videjo vertibu akumulatorus un raadiitaajus
 rightBarAvg = 0;
 leftSamplesCount = 0;
 rightSamplesCount = 0;

 sei(); // iesleedzam partraukumus
}

//------------------------------------------------------------------------
//partraukums uz PD2 (INT0) - nospiesta poga
ISR(INT0_vect) {
 cli();    // izsledzam partraukumus, lai seit mus neviens nepartrauktu
 PORTB = 0b00000000;   // nodzesam visas diodes, pogas spiediena laika
 PORTC = 0b00000000;
 while(!(PIND &amp; _BV(PD2))){    // gaidam, kamer poga tiks atlaista
  _delay_ms(30);   // 'debounce' pauzite
 }
 mode++;        //palielinam mainigo par 1
 if(mode &gt; 5){
  mode = 0;    // ja mainigais lielaks par 5 pieskiram tam veribu 0
 }    // mainiga veriba pec partraukumiem 0-1-2-3-4-5-0-1-2-utt.
 sei();    // iesledam partraukumus atpakal
} // pec izpildisanas lecam atpakal, kur partraucamies

//=== sagatavojam mikrokontrolieri ==============================================
void ioinit(){
 DDRB = 0b11111111;     // PORTB visas izejas
 DDRD = 0b11111011;    // PD2 ieeja (pogai), parejas izejas
 DDRC = 0b11111100;  // acd0 un adc1 ieejas
 PORTD |= _BV(PD2);  // iesledzam "pullup" PD2 ieejai

//----- INT0 partraukuma sagatavosana -----
 MCUCR = 0;    // partraukums uz INT0 un INT1 kajam pie nulles limena, un mes negulam
 GICR |= _BV(INT0);    // aktivizejam INT0 partraukumu

 // Sagatavojam ADC
 //ADCSRA = _BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0); // fosc/128
 //ADCSRA = _BV(ADPS2)|_BV(ADPS1); // fosc/64
 ADCSRA = _BV(ADPS2)|_BV(ADPS0); // fosc/32
 //ADCSRA = _BV(ADPS2); // fosc/16
 //ADCSRA = _BV(ADPS1); // fosc/8 prescaller
 ADCSRA |= _BV(ADEN); // iesledzam ADC moduli

 // TIMER2 sagatavosana
 //TCCR2 = _BV(CS21); // fosc/8
 //TCCR2 = _BV(CS21)|_BV(CS20); // fosc/32
 //TCCR2 = _BV(CS22); // fosc/64
 TCCR2 = _BV(CS22)|_BV(CS20); // fosc/128
 TCCR2 |= _BV(WGM21); // CTC rezims
 OCR2 = 150; // vertiba, liidz kurai taimeris skaitiis
 TIMSK |= _BV(OCIE2); // iesledzam sakrisanas partraugumu ar OCR2

 sei(); // iesledzam (atlaujam) partraukumus
}

//=== galvena funkcija ==========================================================
int main(void){
 ioinit(); // sagatavojam mikrokontrolieri
 sampleADC(); // saakam pirmo ADC parveidosaanu

 while(1){ // bezgaliga cilpa
 // te neko nedaram, viss notiek paartraukumu cilpaas
 }
 return 0;
}</pre>
<p>Sīkāk neiedziļināšos, bet, ja rodas jautājumi, droši rakstiet komentāros!<br />
Attēlošans režīmi:<br />
1. &#8220;Climbing Bars&#8221; &#8211; PPM lēni krītoši stabiņi<br />
2. &#8220;Peak Hold&#8221; &#8211; PPM ātri krītoši stabiņi ar PPM max vērtības aizturi (&#8220;Peak hold&#8221;)<br />
3. &#8220;Peak Rain&#8221; &#8211; PPM ātri krītoši stabiņi ar PPM max vērtības īsu aizturi un krišanu (&#8220;Peak rain&#8221;)<br />
4. &#8220;Climbing Dots&#8221; &#8211; PPM lēni krītoši punkti<br />
5. &#8220;VU Peak Rain&#8221; &#8211; VU stabiņi ar PPM max vērības aizturi<br />
6. &#8220;VU and Peak Rain&#8221; -  VU stabiņi ar PPM punktu + PPM max aizturi uz pēdējām 3 gaismas diodēm (pie pārslodzes)<br />
Protams, varēju nosaukt saprotamāk, ja nepatīk, varat droši pārsaukt programmā =]</p>
<p>Katrai gasmas diodei atbilst konkrēts audio signālā līmenis decibellos. Ja gribas izmainīt manis definētos līmeņus, starp lejupielādes dokumentiem esmu ielicis arī Exel dokumentu, ar kura palīdzību var aprēķināt ADC sliekšņu vērtības. Kā tas izskatās:</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/db-calc.png" class="highslide-image" onclick="return hs.expand(this);"><img class="size-large wp-image-2606  aligncenter" title="db-calc" src="http://transformators.lv/wp-content/uploads/2012/03/db-calc-570x318.png" alt="" width="570" height="318" /></a></p>
<p><strong> </strong></p>
<p>Video, kā tas izskatījās uz maketplates darbībā:</p>
<p style="text-align: center;"><iframe src="http://player.vimeo.com/video/39463126" frameborder="0" height="315" width="420"></iframe></p>
<p>Tā kā uz maketplates &#8220;nav interesanti&#8221;, uzzīmēju platīti.  Izdomāju taisīt tā, ka gaismas diodes ir uz atsevišķas plates, kas tieši pielodēta pie galvenās plates. Nepieciešamības gadījumā šis audio līmeņa indikators ielien arī 1U biezuma korpusā.<br />
Bildes no izgatavošanas:</p>
<table style="width: 100%;" border="0" cellspacing="10" cellpadding="0" align="center">
<tbody>
<tr>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"> </a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignright size-medium wp-image-2609" title="IMG_6367" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6367.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></td>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"> </a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-medium wp-image-2610" title="IMG_6369" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6369.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></td>
</tr>
<tr>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6373.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6373.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignright size-medium wp-image-2611" title="IMG_6373" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6373-300x225.jpg" alt="" width="300" height="225" /></a></td>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6384.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6384.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-medium wp-image-2612" title="IMG_6384" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6384-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6384.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6384.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6384.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></td>
</tr>
<tr>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6389.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6389.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignright size-medium wp-image-2613" title="IMG_6389" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6389-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6389.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6389.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6389.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></td>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6391.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6391.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-medium wp-image-2614" title="IMG_6391" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6391-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6391.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6391.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6391.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></td>
</tr>
<tr>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6403.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6395.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignright size-medium wp-image-2615" title="IMG_6395" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6395-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6403.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6403.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6403.jpg" class="highslide-image" onclick="return hs.expand(this);"></a></td>
<td><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6395.jpg" class="highslide-image" onclick="return hs.expand(this);"></a><a href="http://transformators.lv/wp-content/uploads/2012/03/IMG_6403.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-medium wp-image-2608" title="IMG_6403" src="http://transformators.lv/wp-content/uploads/2012/03/IMG_6403-300x225.jpg" alt="" width="300" height="225" /></a></td>
</tr>
</tbody>
</table>
<p>Ka vairumā gadījumu, steidzoties var kaut kur nokļūdīties. Šoreiz tā gadījās arī man. Tā kā uz maketplates taisīju bez priekšpastiprinātāja, &#8220;aizmirsu&#8221;, ka tam nepieciešama divpolāra barošana! Smieklīgi vai ne? Lai izietu no situācijas un netaisītu jaunu plati, nācās uztaisīt mazu platīti (ar ICL7660) un pielodēt to kā papildus moduli galvenajai. PROTAMS publicētajās datnēs raksta beigās tas vis ir IZLABOTS un modificēts. Ja kāds izdomās atkārtot manu &#8220;projektu&#8221; nevajadzētu būt problēmām.</p>
<p>Video darbībā:</p>
<p style="text-align: center;"><iframe src="http://www.youtube.com/embed/6hLIQ5mr76Q" frameborder="0" height="315" width="420"></iframe></p>
<p><span style="color: #ff0000;"><strong><span style="font-size: medium;">Lejupielādēt</span></strong></span> VU/PPM stereo audio signāla indikatora shēmu, plates zīmējumu un programmu var<a title="VU/PPM meter Atmega8 HW + FW + Calc" href="http://transformators.lv/wp-content/uploads/2012/03/atmega8_ppm_vu_meter_stereo.zip" target="_blank"> <span style="color: #ff0000;"><span style="text-decoration: underline;"><strong>ŠEIT</strong></span></span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/stereo-audio-limena-ppmvu-indikators-ar-atmega8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Kā izgatavot radio vadāmu iekštelpu lidmodeli?</title>
		<link>http://transformators.lv/2012/ka-izgatavot-radio-vadamu-iekstelpu-lidmodeli/</link>
		<comments>http://transformators.lv/2012/ka-izgatavot-radio-vadamu-iekstelpu-lidmodeli/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 06:13:26 +0000</pubDate>
		<dc:creator>Pilots</dc:creator>
				<category><![CDATA[DIY Raksti]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2584</guid>
		<description><![CDATA[Tātad es šeit aprakstīšu ceļu, kā es no lētiem materiāliem izgatavoju radiovadāmu lidmašīnu, ar kuru var piedalīties gan Latvijas, gan Baltijas čempionātos.
Visas nepieciešamās detaļas tika sūtītas no www.hobbyking.com , kas ir viens no populārākajiem RC interneta veikaliem pasaulē.
Pielikumā varēsiet atrast visu, kas ir nepieciešams, lai pats varētu uzbūvēt tādu lidmodeli. F3P
Man personīgi bija interesanti pašam [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2012/03/sPICT3279.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="size-thumbnail wp-image-2591 alignleft" title="sPICT3279" src="http://transformators.lv/wp-content/uploads/2012/03/sPICT3279-150x150.jpg" alt="" width="150" height="150" /></a>Tātad es šeit aprakstīšu ceļu, kā es no lētiem materiāliem izgatavoju radiovadāmu lidmašīnu, ar kuru var piedalīties gan Latvijas, gan Baltijas čempionātos.</p>
<p>Visas nepieciešamās detaļas tika sūtītas no www.hobbyking.com , kas ir viens no populārākajiem RC interneta veikaliem pasaulē.</p>
<p>Pielikumā varēsiet atrast visu, kas ir nepieciešams, lai pats varētu uzbūvēt tādu lidmodeli. <a rel="attachment wp-att-2598" href="http://transformators.lv/2012/ka-izgatavot-radio-vadamu-iekstelpu-lidmodeli/f3p/">F3P</a></p>
<p>Man personīgi bija interesanti pašam uzbūvēt lidmašīnu. Tas man aizņēma aptuveni 4 darba dienas, kuru laikā es pilnveidoju savas zināšanas tehniskajā izpildījumā.<span id="more-2584"></span></p>
<p>Zemāk ir redzamas pāris bildes, no mana modeļa tapšanas un beigās ir vizuāls piemērs, kādu var nokrāsot savu lidmdoelis. Piebildst varu to ka krāsot tika ar parasto flakona krāsu.</p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/bialy.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-thumbnail wp-image-2586" title="bialy" src="http://transformators.lv/wp-content/uploads/2012/03/bialy-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://transformators.lv/wp-content/uploads/2012/03/DSC01223.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-thumbnail wp-image-2587" title="DSC01223" src="http://transformators.lv/wp-content/uploads/2012/03/DSC01223-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://transformators.lv/wp-content/uploads/2012/03/DSC01225.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-thumbnail wp-image-2588" title="DSC01225" src="http://transformators.lv/wp-content/uploads/2012/03/DSC01225-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://transformators.lv/wp-content/uploads/2012/03/DSC01226.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-thumbnail wp-image-2589" title="DSC01226" src="http://transformators.lv/wp-content/uploads/2012/03/DSC01226-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://transformators.lv/wp-content/uploads/2012/03/sPICT3264.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignnone size-thumbnail wp-image-2590" title="sPICT3264" src="http://transformators.lv/wp-content/uploads/2012/03/sPICT3264-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Darbība ir vienkārša:</p>
<p>1. Izgriež no deprona lidmašīnas formu, skatīt pielikumā.<a href="http://transformators.lv/wp-content/uploads/2012/03/EPPYak55_tiled_chg_d.pdf">EPPYak55_tiled_chg_d</a><a href="http://transformators.lv/wp-content/uploads/2012/03/EPPYak55_full_chg_d.pdf">EPPYak55_full_chg_d</a><a href="http://transformators.lv/wp-content/uploads/2012/03/EPPYak55_EZ_tiled_fuselage_chg_d.pdf">EPPYak55_EZ_tiled_fuselage_chg_d</a><a href="http://transformators.lv/wp-content/uploads/2012/03/EPPYak55_EZ_tiled_A4_wing_chg_d.pdf">EPPYak55_EZ_tiled_A4_wing_chg_d</a></p>
<p>2.Visu salīmē kopā un ievēro ka līmēšana notiek ar UHUpor 90 grādu leņķī</p>
<p>3. Iestrādā ogļšķiedras stieņus</p>
<p>4. Uzstāda elektroniku</p>
<p>Mans mīļākais video:</p>
<p><a href="http://www.youtube.com/watch?v=voS6XgPvN-E">F3P</a></p>
<p>Ja ir kādas neskaidrības saistībā ar jebko, par šo lidmodeli, droši rakstiet bmx58@inbox.lv</p>
<p>Papildus varu minēt ka šī modeļa klases oficiālais nosaukums ir F3P.</p>
<p>!Cenšamies modeli taisīt pēc iespējas vieglāku!</p>
<p>Noderīgi faili:<a rel="attachment wp-att-2596" href="http://transformators.lv/2012/ka-izgatavot-radio-vadamu-iekstelpu-lidmodeli/yak-build-guide-002/">Yak Build Guide 002</a></p>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/ka-izgatavot-radio-vadamu-iekstelpu-lidmodeli/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ģitāras effekta pedāļa Fulltone OCD klons</title>
		<link>http://transformators.lv/2012/gitaras-effekta-pedala-fulltone-ocd-klons/</link>
		<comments>http://transformators.lv/2012/gitaras-effekta-pedala-fulltone-ocd-klons/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 08:05:30 +0000</pubDate>
		<dc:creator>ibot</dc:creator>
				<category><![CDATA[Audio / Video]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2563</guid>
		<description><![CDATA[Sveicināti visi elektronikas entuziasti, kas interesējas arī par ģitārspēli. Šodien vēlējos Jums izrādīt kādu no saviem nesenajiem veikumiem – paštaisītu ģitāras efekta pedāli (overdrive).Tiem kas nezin, kas ir overdrive, tad tā ir tā signāla kropļošana, kas var būt gan kā kaucoša motorzāģa skaņa, kas liek asinīm vārīties,gan viegla nots sīkstēšana, kas varētu būt laba priekš [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2012/03/jimi_hendrix_372x495-11.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2580" title="jimi_hendrix_372x495-1" src="http://transformators.lv/wp-content/uploads/2012/03/jimi_hendrix_372x495-11-150x150.jpg" alt="" width="150" height="150" /></a>Sveicināti visi elektronikas entuziasti, kas interesējas arī par ģitārspēli. Šodien vēlējos Jums izrādīt kādu no saviem nesenajiem veikumiem – paštaisītu ģitāras efekta pedāli (overdrive).Tiem kas nezin, kas ir overdrive, tad tā ir tā signāla kropļošana, kas var būt gan kā kaucoša motorzāģa skaņa, kas liek asinīm vārīties,gan viegla nots sīkstēšana, kas varētu būt laba priekš blūza. Vēsturiski ir sanācis tā, ka overdrive ir radies pilnīgi nejauši, laikā kad visi lietoja lampu pastiprinātājus (ak šie vecie labie laiki) un daži cilvēki pamanīja, ka šat tad pastūžiem pastiprinātais izejas signāls, pie lieliem līmeņiem, bija mazliet kropļots. Par laimi rokmūzikas cienītājiem, šādu defektu ātri lika lietā un radās pirmie rokenrola gabali, kas pakāpeniski pārauga rokā. Kā pirmo ģitāras efektu pedāli izlaida Fuzz Face, ko pirmo reizi pielietoja Roling Stones dziesmā Satisfaction un tieši tas aizsāka lielo rokmūzikas bumu, kā arī to vēlāk pārņēma lietošanā lielākais rokmūzikas virtuozs Jimmy Hendrix.</p>
<p><span id="more-2563"></span></p>
<p>Kā jau visiem ģitāristiem ir zināms, tad normāla „draiva” iegūšanai nepieciešams izmest bezjēgā diezgan palielu naudas summu uz efektu pedāli, kaut gan tajā pašā laikā  iekšā esošās detaļas maksā ļoti maz. Pētot internetā pedāļus nejauši uzdūros kādam video, kur čaļi izrādīja paštaisītu pedāli un tad man beidzot radās ideja, ka vajag izveidot ko tamlīdzīgu. Uzreiz sapratu,ka klonēt kaut kādu Boss Metal Zone2 (MT-2) nav jēgas,jo tas ir reāls ****, bet jāpiemeklē kaut kas dižciltīgs un ķēpāšanās vērts.Par cik tajā laikā biju metis aci uz Xotic  BBpreamp, tad izvēlējos klonēt tieši šo. Bet par nelaimi internetā šim brīnumam nebija shēmas.Kādu laiku skatoties gearmanndude kanālu (kas starp citu ir Jack Black kanāls), kur salīdzina visādus ar ģitāru saistītus aprīkojumus sapratu,ka vajag taisīt Fulltone OCD pedāli ,kas pieder pie tubescreamer tipa overdrive efektiem.</p>
<p><a href="http://www.youtube.com/watch?v=TaeI-9rcB9c">http://www.youtube.com/watch?v=TaeI-9rcB9c</a></p>
<p>Attēlā zemāk oriģinālais OCD un mans klons:</p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/Fulltone_OCD.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-large wp-image-2565" title="Fulltone_OCD" src="http://transformators.lv/wp-content/uploads/2012/03/Fulltone_OCD-570x570.jpg" alt="" width="336" height="336" /></a></p>
<p><a href="http://transformators.lv/wp-content/uploads/2012/03/100_1944.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignright size-large wp-image-2566" title="100_1944" src="http://transformators.lv/wp-content/uploads/2012/03/100_1944-570x427.jpg" alt="" width="383" height="286" /></a></p>
<p>Atrast shēmu bija diezgan ķēpīgi, jo piemēram šī ir OCD v4 shēma, taču internetā klīst visas iepriekšējās + dažās ir ieviestas izmaiņas. Kā es to varēju noteikt: elementāra statistika- ja viena un tā pati shēma dažādos noformējumos(nav identisks fails) klīst pa internetu, tasd droši vien tā ir īstā + arī atsauksmes forumos, kā piemēram:  <a href="http://www.diystompboxes.com/smfforum/">http://www.diystompboxes.com/smfforum/</a></p>
<p>Tad nu es ķēros pie darba un meklēju rokā detaļas. Apakšā ir shēm</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/OCD-Scheme.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2567" title="OCD-Scheme" src="http://transformators.lv/wp-content/uploads/2012/03/OCD-Scheme.jpg" alt="" width="800" height="461" /></a></p>
<p>Kā jau iepriekš minēju, tad shēmas izmaksas ir šausmīgi mazas: manējā shēma iekļāvās ap 5Ls, bet kopīgās projekta izmaksas ir ap 15Ls, kas pret aptuveno 180Ls vērto oriģinālu liekas ļoti labi. Tas nu viss vajadzīgais ir dabūjams veikalā Argus.</p>
<p>Shēma tika salodzēta šādi uz maketplates un iebāzta korpusā:</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/100_1946.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2568" title="100_1946" src="http://transformators.lv/wp-content/uploads/2012/03/100_1946-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p>Labākai aizsardzībai es ievietoju shēmu un barošanu maisiņos, lai shēmā nesanāk īssavienojums:</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/100_1945.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2569" title="100_1945" src="http://transformators.lv/wp-content/uploads/2012/03/100_1945-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p>Korpusam es izvēlējos šādu alumīnija kasti: <a href="http://web.argus.lv/shop/productinfo/ZA.G106/hwindex.htm">http://web.argus.lv/shop/productinfo/ZA.G106/hwindex.htm</a></p>
<p>Jāsaka, ka diezgan grūti bija sabāzt visu šajā mazajā kastītē, tapēc ir jārēķinās, ka normālu 3pdt vai dpdt footswitch’u  (ar kāju spiežamu spiedpogu) ieliekot potentiometri ir jāizkārto ļoti apdomīgi.</p>
<p>Veicot šo projektu es atradu un uzzināju daudz dažādu knifiņu. Piemēram 3pdt vai dpdt spiedpogu var dabūt tikai ebay,jo latvijā neesmu nekur manījis (ja kāds atrod,tad droši ierakstat komentāros kur var nopirkt tās), toties ebay piedāvā veselu lērumu no ķīnas par labām cenām. Vispār ja kāds sāk nodarboties ar šo lietu nopietnāk, tad daudzas lietas būs jāmeklē ebay,jo piemēram ģermānija tranzistorus un diodes ir ļoti grūti atrast veikalos.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/3pdt_lg.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2570" title="3pdt_lg" src="http://transformators.lv/wp-content/uploads/2012/03/3pdt_lg.jpg" alt="" width="400" height="366" /></a></p>
<p style="text-align: center;">Savā „pedālī” es lietoju dpdt tumbler slēdžus, kas būtībā ir pats lētākais analogs, ko var pielietot shēmas pieslēgšanai.<a href="http://transformators.lv/wp-content/uploads/2012/03/Dpdt-Toggle.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2571" title="Dpdt-Toggle" src="http://transformators.lv/wp-content/uploads/2012/03/Dpdt-Toggle.jpg" alt="" width="351" height="486" /></a></p>
<p>Galvenais mērķis ir nodrošināt tā saucamo <strong>true bypass</strong> ,kas ļauj ģitāras signāla palikt nemainīgam,kad pedālis ir izslēgts. Priekš sīkākas informācijas meklējiet googlā „true bypass dpdt wiring”. Var arī pielietot šādu slēgumu,kā paraugu(skatīt sarkanos vadus):</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/circuitwiringdpdt.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2572" title="circuitwiringdpdt" src="http://transformators.lv/wp-content/uploads/2012/03/circuitwiringdpdt.gif" alt="" width="332" height="298" /></a></p>
<p>Tā nu beigās kad korpuss tika samontēts es izdomāju to nokrāsot oriģinālā baltā krāsā un uzpūst ar stencil trafaretu mākslinieka Banksy žurkas- šveicarus, kas uzņem viesus pie žurku alas.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/03/100_19411.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2574" title="100_1941" src="http://transformators.lv/wp-content/uploads/2012/03/100_19411-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p>Kopumā es esmu ļoti apmierināts ar rezultātu, šis pedālis skan godam un ir jau saņēmis labas atsauksmes no citiem. Iesaku katram ģitāristam izveidot savu pedāli,jo pēc tam ir neaprakstāms gandarījums par paveiktu un apziņa,ka esi radījis kaut ko īpašu tikai sev -  savu īpašo pedāli. Domāju daudzi citi ģitāristi to novērtētu.</p>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/gitaras-effekta-pedala-fulltone-ocd-klons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Atmega8 gaismas diožu vadība 2. daļa &#8211; nobīdes reģistri</title>
		<link>http://transformators.lv/2012/atmega8-gaismas-diozu-vadiba-2-dala-nobides-registri/</link>
		<comments>http://transformators.lv/2012/atmega8-gaismas-diozu-vadiba-2-dala-nobides-registri/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 07:52:50 +0000</pubDate>
		<dc:creator>KasparsL</dc:creator>
				<category><![CDATA[AVR Atmel]]></category>
		<category><![CDATA[Ar Mikrokontrolieru Vadību]]></category>
		<category><![CDATA[DIY Raksti]]></category>
		<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[Iesācējiem - ar ko sākt]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2510</guid>
		<description><![CDATA[Tā kā bija interesenti, nolēmu paturpināt iepriekšējo rakstu Atmega8 gaismas diožu vadība + pārtraukumi. Turpināšu &#8220;C&#8221; valodā ar AVRStudio4 un ATMEGA8 (var arī 48/88/168/328 ar nelielām koda izmaiņām), (neaizmirstam projekta iestatījumos izvēlēties pareizo MCU un tā takts frekvenci!).
Ne vienmēr, mikro kontrolierim ir pietiekami daudz izvadu, lai pieslēgtu visas ierīces, kurām nepieciešams salīdzinoši daudz izvadu, piemēram, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2012/02/3x74HC595_setup1.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2577" title="3x74HC595_setup" src="http://transformators.lv/wp-content/uploads/2012/02/3x74HC595_setup1-150x150.jpg" alt="" width="150" height="150" /></a>Tā kā bija interesenti, nolēmu paturpināt iepriekšējo rakstu <a title="atmega8-gaismasdiozu-vadiba-partraukumi" href="http://transformators.lv/2011/atmega8-gaismasdiozu-vadiba-partraukumi/" target="_blank">Atmega8 gaismas diožu vadība + pārtraukumi</a>. Turpināšu &#8220;C&#8221; valodā ar AVRStudio4 un ATMEGA8 (var arī 48/88/168/328 ar nelielām koda izmaiņām), (neaizmirstam projekta iestatījumos izvēlēties pareizo MCU un tā takts frekvenci!).</p>
<p>Ne vienmēr, mikro kontrolierim ir pietiekami daudz izvadu, lai pieslēgtu visas ierīces, kurām nepieciešams salīdzinoši daudz izvadu, piemēram, vizuālas informācijas attēlošanai &#8211; gaismas diodes. Ne vienmēr ir iespējams, vai izdevīgi, izvēlēties mikro kontrolieri ar lielāku izvadu skaitu. Šādā situācijā palīdz datu sūtīšanas nevis paralēli (visus vienlaicīgi), bet seriāli (pēc kārtas). Šos seriāli sūtītos datus spēj &#8220;atkodēt&#8221; atpakaļ uz paralēlajiem datiem, speciāli šim nolūkam paredzētas mikroshēmas. Tādas ir ļoti daudz un dažādas (visas tās strādā līdzīgi), bet mēs apskatīsim vienkāršu, lētu un ātru mikroshēmu &#8211; <a title="74HC595 datasheet" href="http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf" target="_blank">74HC595</a>.<span id="more-2510"></span></p>
<p>Šī mikroshēmai (<a title="74HC595 datasheet" href="http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf" target="_blank">74HC595</a>) ir 8 paralēlo datu izvadi. Tā saprot seriālos datus, kas sūtīti ar SPI (<a title="SPI on Wikipedia" href="http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus" target="_blank">Serial Peripheral Interface</a>) interfeisa palīdzību. Šis interfeis izmantos tikai 3 mikro kontroliera izvadus, neatkarīgi no paralēlo datu izvadu skaita (piem: vajag ārā dabūt 8, iekšā 3. vajag dabūt ārā 512, iekšā 3). Daudzi mikro kontrolieri ir aprīkoti ar &#8220;hardware&#8221; (jeb iebūvētu agregāta) SPI interfeisu &#8211; ATMEGA8/48/88/168/328 arī. Mēs apkskatīsim gan hardware SPI, gan software SPI (softiski rakstīto). Atšķirība starp tiem abiem ir ātrdarbībā &#8211; softiskais ir lēnāks, bet, toties, to var izveidot pat uz <a title="datasheet" href="http://www.atmel.com/dyn/resources/prod_documents/doc1006.pdf" target="_blank">ATTINY11</a> vai <a title="datasheet" href="http://morrow.ece.wisc.edu/IEEE/2009/Datasheets/Microchip/41239D_PIC10F2XX.pdf" target="_blank">PIC10F200</a>.</p>
<p><strong>Kas šoreiz būs nepieciešams:</strong><br />
- <a href="http://web.argus.lv/shop/productinfo/ATMEGA8-16PU/hwindex.htm" target="_blank">ATMEGA8</a>/<a href="http://web.argus.lv/shop/productinfo/ATMEGA8A-PU/hwindex.htm" target="_blank">8A</a> mikro kontrolieris (ar nelielām programmas izmaiņām Atmega48/88/<a href="http://web.argus.lv/shop/productinfo/ATMEGA168-20PU/hwindex.htm" target="_blank">168</a>/<a href="http://web.argus.lv/shop/productinfo/ATMEGA328P-PU/hwindex.htm" target="_blank">328</a>)<br />
- 3x <a title="74HC595" href="http://web.argus.lv/shop/productinfo/SN74HC595/hwindex.htm" target="_blank">74HC595</a> seriālie nobīdes reģistri<br />
- 24x <a href="http://web.argus.lv/products/hwindex.htm?cat=W8050" target="_blank">gaismas diodes</a><br />
- 24x <a href="http://web.argus.lv/products/hwindex.htm?cat=W8153" target="_blank">rezistori</a> (gaismas diožu strāvas ierobežošanai)<br />
- <a href="http://web.argus.lv/products/hwindex.htm?cat=W811" target="_blank">kondensators</a> 100n jebkāds<br />
- <a href="http://web.argus.lv/products/hwindex.htm?cat=W634" target="_blank">barošanas bloks</a> vai <a href="http://web.argus.lv/products/hwindex.htm?cat=W61" target="_blank">baterijas</a>, vai cits barošanas avots 3-5V<br />
- <a href="http://web.argus.lv/products/hwindex.htm?cat=W8345" target="_blank">spiedpoga</a> (“tact switch”)<br />
- <a href="http://web.argus.lv/shop/productinfo/WB-104/hwindex.htm" target="_blank">maketplate</a> (nelodējamā, bet protams, var arī uztaisīt iespiedplati)<br />
- <a href="http://web.argus.lv/shop/productinfo/WJW70/hwindex.htm" target="_blank">savienotājvadiņi</a><br />
- AVR <a href="http://web.argus.lv/shop/productinfo/USBASP.LATMATIC/hwindex.htm" target="_blank">programmators</a> (piem. AVRISP vai cits, vai paštaisīts)<br />
- un atkal nedaudz brīva laika ;)</p>
<p><span style="color: #000000;">Tad, tāpat kā iepriekš &#8211; <strong>Pārliecinieties, ka protat programmu kompilēt un ielādēt mikro kontrolierī!</strong></span></p>
<p style="text-align: center;"><strong>Principiālā shēma</strong> (lejupielādēt varat <a href="http://transformators.lv/wp-content/uploads/2012/02/Atmega8_2dala_shema.zip" target="_blank"><span style="text-decoration: underline;"><strong>šeit</strong></span></a><a href="http://transformators.lv/wp-content/uploads/2012/02/schematic.png" class="highslide-image" onclick="return hs.expand(this);" target="_blank"><span style="text-decoration: underline;"><strong></strong></span></a>):<br />
<a href="http://transformators.lv/wp-content/uploads/2012/02/schematic_large.png" class="highslide-image" onclick="return hs.expand(this);"><img class="size-large wp-image-2545  aligncenter" title="slēguma shēma" src="http://transformators.lv/wp-content/uploads/2012/02/schematic_large-570x220.png" alt="" width="570" height="220" /></a></p>
<p>Kā redzat, shēma ir nosacīti sadalīta blokos: uC &#8211; mikro kontroliera daļa un &#8217;1&#8242;, &#8217;2&#8242;, &#8217;3&#8242; &#8211; seriāli/ paralēlo datu pārveidotāju moduļi, pa 8 izejām katram. &#8216;n&#8217; &#8211; nozīmē, ka iespējams galā pievienot vēl papildus (20 gab. droši) moduļus.</p>
<p style="text-align: center;"><strong>Sākumā &#8220;saspraudīsim&#8221; (izveidosim) tikai daļu no shēmas.</strong> Saliksim tikai daļas &#8220;<strong>uC</strong>&#8221; un &#8220;<strong>1</strong>&#8220;. Mans &#8220;veidojums&#8221; uz maketplates izskatās šādi.<br />
<a href="http://transformators.lv/wp-content/uploads/2012/02/1x74HC595_setup.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="size-large wp-image-2539  aligncenter" title="Atmega8 ar 1x 74HC595" src="http://transformators.lv/wp-content/uploads/2012/02/1x74HC595_setup-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p>SPI interfeis tiek nodrošināts ar 3 datu izvadiem. Šie izvadi ir <strong>DATA</strong> (seriālie dati), <strong>CLOCK</strong> (strobēšana, takts impulsi jeb &#8220;pulkstenis&#8221;) un <strong>LATCH</strong> (aizture, dati tiek aizturēti 74HC595 aiztures reģistrā &#8211; tiek parādīti).</p>
<p><strong>Sāksim ar &#8220;softisko SPI&#8221;</strong><br />
Sākumā, lai būtu ērtāk, definējam (pārsaucam) mūsu izvadus saprotamāk:</p>
<pre class="brush: c">//definējam (aizstājam) mainīgos saprotamāk
#define SPIPORT PORTB
#define DATA   3
#define CLOCK  5
#define LATCH  2</pre>
<p>Tagad &#8220;PORTB&#8221; vietā varam rakstīt &#8220;SPIPORT&#8221;, &#8220;3&#8243; vietā &#8211; &#8220;DATA&#8221; utt. Vēl mikro kontrolierim jāpasaka, ka šie izvadi būs izejas nevis ieejas. Es pasaku vienkārši &#8211; visi PORTB izvadi būs izejas.</p>
<pre class="brush: c">DDRB = 0b11111111;     // PORTB visas izejas</pre>
<p>Vēl mums vajadzēs interesantu funkciju, kas &#8220;neko nedara&#8221; vienu mikro kontroliera takti. Aizstājam, lai būtu ērtāk un saprotamāk:</p>
<pre class="brush: c">#define NOP asm("nop"); // definējam īsāk 1 takti "nekā nedarīšanas" funkciju</pre>
<p>Sakam &#8220;NOP&#8221; &#8211; mikrokontrolieris neko nedara, sakam 100 reizes &#8220;NOP&#8221; &#8211; mikro kontrolieris neko nedara (&#8220;strādā pa tukšo&#8221;) 100 cpu taktis.</p>
<p>Un beidzot, datu izvades funkcija, nosaucu to &#8216;softSpiTransfer(uint8_t spiData);&#8217; :</p>
<pre class="brush: c">void softSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
  for(uint8_t bitNumber=0; bitNumber&lt;8; bitNumber++){
    SPIPORT &amp;= ~_BV(DATA);  // datu izvads '0'
    if(((spi_data &gt;&gt; bitNumber) &amp; 1) == 1){
      SPIPORT |= _BV(DATA);  // datu izvads '1'
    }
    SPIPORT |= _BV(CLOCK);  // clock izvads '1'
    NOP;  //nedaram neko 1 takti
    SPIPORT &amp;= ~_BV(CLOCK);  // clock izvads '0'
  }
}</pre>
<p>Pēc šīs funkcijas izpildes, dati tiek &#8220;nobīdīti&#8221; par 8 bitiem ārā uz mūsu 74HC595 mikroshēmu. Bet <strong><em>pagaidiet</em></strong>! Mūsu dati tur ir (iekš 74HC595 mikroshēmas), bet nav redzami uz gaismas diodēm! Kad visi dati &#8220;nobīdīti kā vajag&#8221;, tos vajag ierakstīt 74HC595 nobīdes reģistra aiztures buferī. To var izdarīt, padodod īsu pozitīvu impulsu uz &#8220;LATCH&#8221; izvadu. Daram to šādi:</p>
<pre class="brush: c"> //...
  SPIPORT |= _BV(LATCH);  // latch izvads '1'
  NOP;
  SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
 //...</pre>
<p>Nu tad saliekam visu kopā, tādā pašā &#8220;stilā&#8221; kā <a title="atmega8-gaismasdiozu-vadiba-partraukumi" href="http://transformators.lv/2011/atmega8-gaismasdiozu-vadiba-partraukumi/" target="_blank"><em>iepriekšējajā rakstā</em></a> (piemērā &#8220;1&#8243;), sanāk šis -<strong> &#8220;piemērs1&#8243; ar softisko SPI</strong>:</p>
<pre class="brush: c">// Piemers 1 software SPI - 1x 74HC595 - 8x LEDs

#include &lt;avr/io.h&gt;  // ieejas-izejas biblioteka
#include &lt;util/delay.h&gt; // aiztures biblioteka

// definejam (nosaucam) izvadu numurus saprotamak
#define SPIPORT PORTB
#define DATA   3
#define CLOCK  5
#define LATCH  2

// definejam "neko nedarishanas instrukciju" (neko nedara vienu uC takti), lai nebutu gari jaraksta
#define NOP asm("nop");

void softSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
  for(uint8_t bitNumber=0; bitNumber&lt;8; bitNumber++){
    SPIPORT &amp;= ~_BV(DATA);  // datu izvads '0'
    if(((spi_data &gt;&gt; bitNumber) &amp; 1) == 1){
      PORTB |= _BV(DATA);  // datu izvads '1'
    }
    SPIPORT |= _BV(CLOCK);  // clock izvads '1'
    NOP;  //nedaram neko 1 takti
    SPIPORT &amp;= ~_BV(CLOCK);  // clock izvads '0'
  }
}

void showSpiData(){  // paradam aizsutito informaciju
  SPIPORT |= _BV(LATCH);  // latch izvads '1'
  NOP;
  SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
}

void ioinit(){
  DDRB = 0b11111111; // PORTB visas izejas
}

void showSequence1(){ // paradam pirmo sablonu un atgriezamies atpakal
  softSpiTransfer(0b00000001);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b00000011);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b00000111);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b00001111);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b00011111);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b00111111);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b01111111);
  showSpiData();
  _delay_ms(300);
  softSpiTransfer(0b11111111);
  showSpiData();
  _delay_ms(300);
}

int main(void){
  ioinit(); // sagatavojam mikroprocesoru
  while(1){ // izpildit vienmer (bezgaliga cilpa)
    showSequence1();
  }
  return 0;
}</pre>
<p><strong>&#8220;Hardware SPI&#8221;</strong></p>
<p>Kā jau sapratāt, Atmega8 (u.c.) satur iebūvētu SPI moduli. Ja Jūsu programmā tas jau nav aizņemts ar citu darbu, labāk izmatot to, nevis &#8220;softisko&#8221; SPI. Atšķirībā no &#8220;softiskā&#8221; risinājuma, kuram var tikt izmatotas jebkuras digitālās izejas pieslēgvietas, &#8220;dzelziskajam&#8221; jāizmanto konkrētas &#8220;DATA&#8221; un &#8220;CLOCK&#8221; pieslēgvietas (&#8220;LATCH&#8221; var būt jebkura). &#8220;DATA&#8221; izvadam jābūt &#8220;PB3&#8243; jeb &#8220;MOSI&#8221; (master out slave in), &#8220;CLOCK&#8221; izvadam jābūt &#8220;PB5&#8243; jeb &#8220;SCK&#8221;. Tā pat kā softiskajam, dzelziskajam SPI, izvadi jādefine kā &#8220;izejas&#8221;. Es pasaku vienkārši &#8211; visi PORTB izvadi būs izejas.</p>
<pre class="brush: c">DDRB = 0b11111111;     // PORTB visas izejas</pre>
<p>Lai iebūvēto SPI moduli izmantotu, tas sākumā ir jāieslēdz.</p>
<pre class="brush: c">// Iesledzam iebuveto SPI, Master rezima, jaunakais bits pirmais, ar atrumu taktsFrekvence/2 (lielako)
SPCR = (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;DORD);
SPSR = (1&lt;&lt;SPI2X);</pre>
<p>Palasīt smalkāk par iebūvēto SPI moduli, varam mikrokontroliera <a title="Atmega8 datasheet" href="http://www.datasheetcatalog.org/datasheet/atmel/2486S.pdf" target="_blank"><em>dokumentācijā</em></a>.<br />
Ieslēdzot, pasakam mikro kontrolierim arī cik ātri un ar kādiem parametriem SPI modulim jāstrādā. Pēc tam tas ir gatavs lietošanai.<br />
Lai nosūtītu 8 bitus datu, dati jāiekopē &#8216;SPDR&#8217; reģistrā (ar to automātiski sākas sūtīšana), pēc tam jāsagaida tās beigas, pārbaudot &#8216;SPIF&#8217; bitu &#8216;SPSR&#8217; reģistrā.</p>
<pre class="brush: c"> SPDR = spi_data; // sakam sutishanu
 while(!(SPSR &amp; (1&lt;&lt;SPIF))); // gaidam (griezamies uz vietas), lidz sutisana pabeigta</pre>
<p>Datu izsūtīšanai uzrakstīju funkciju &#8220;hardSpiTransfer(uint8_t spiData);, kas ietver sevī iepriekšējās rindiņas&#8221; .<br />
Pēc šīm rindiņām, dati tiek &#8220;nobīdīti&#8221; par 8 bitiem ārā uz mūsu 74HC595 mikroshēmu. Tā pat kā ar softisko SPI, dati tur ir, bet nav redzami uz gaismas diodēm, tos vajag ierakstīt 74HC595 nobīdes reģistra aiztures buferī. To var izdarīt, padodod īsu pozitīvu impulsu uz &#8220;LATCH&#8221; izvadu.</p>
<pre class="brush: c"> //...
  LATCHPORT |= _BV(LATCH);  // latch izvads '1'
  NOP;
  LATCHPORT = ~_BV(LATCH);  // latch izvads '0'
 //...</pre>
<p>Tad nu <strong>&#8220;piemērs1&#8243; ar iebūvēto SPI</strong> :</p>
<pre class="brush: c">// Piemers 1 hardware SPI - 1x 74HC595 - 8x LEDs

#include &lt;avr/io.h&gt;  // ieejas-izejas biblioteka
#include &lt;util/delay.h&gt; // aiztures biblioteka

// definejam (nosaucam) izvadu numurus saprotamak
#define SPIPORT PORTB
#define LATCH  2

// definejam "neko nedarishanas instrukciju" (neko nedara vienu uC takti), lai nebutu gari jaraksta
#define NOP asm("nop");

void hardSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
  SPDR = spi_data; // sakam sutishanu
  while(!(SPSR &amp; (1&lt;&lt;SPIF))); // gaidam (griezamies uz vietas), lidz sutisana pabeigta
}

void showSpiData(){  // paradam aizsutito informaciju
  SPIPORT |= _BV(LATCH);  // latch izvads '1'
  NOP;
  SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
}

void ioinit(){
  DDRB = 0b11111111; // PORTB visas izejas
// Iesledzam iebuveto SPI, Master rezima, jaunakais bits pirmais, ar atrumu taktsFrekvence/2 (lielako)
  SPCR = (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;DORD);
  SPSR = (1&lt;&lt;SPI2X);
}

void showSequence1(){ // paradam pirmo sablonu un atgriezamies atpakal
  hardSpiTransfer(0b00000001);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b00000011);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b00000111);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b00001111);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b00011111);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b00111111);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b01111111);
  showSpiData();
  _delay_ms(300);
  hardSpiTransfer(0b11111111);
  showSpiData();
  _delay_ms(300);
}

int main(void){
  ioinit(); // sagatavojam mikroprocesoru
  while(1){ // izpildit vienmer (bezgaliga cilpa)
    showSequence1();
  }
  return 0;
}</pre>
<p>Tā, ka tagad protam izvadīt datus uz nobīdes reģistru, varam eskperimentēt tālāk. Piemēram, paņemam kodu (<strong>piemērs5</strong>) no<em> iepriekšējā raksta</em>, un pārveidojam priekš mūsu shēmas (&#8220;dzelžiem&#8221;) software SPI režīmā:</p>
<pre class="brush: c">// piemers5 software SPI 1x 74HC595, 8x LEDs

#include &lt;avr/io.h&gt;      // ieejas-izejas biblioteka
#include &lt;avr/interrupt.h&gt;      // partraukumu biblioteka
#include &lt;util/delay.h&gt;     // aiztures biblioteka
#include &lt;avr/pgmspace.h&gt;  // biblioteka tiesai datu piekluve "program memory"

volatile uint8_t  flag = 0;
volatile uint8_t  buttonInterruptFlag = 0;
volatile uint8_t  _index = 0;

// definejam (nosaucam) izvadu numurus saprotamak
#define SPIPORT PORTB
#define DATA   3
#define CLOCK  5
#define LATCH  2

#define BUTTONPIN PIND
#define BUTTON 2

// definejam "neko nedarishanas instrukciju" (neko nedara vienu uC takti), lai nebutu gari jaraksta
#define NOP asm("nop");

void softSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
 for(uint8_t bitNumber=0; bitNumber&lt;8; bitNumber++){
 SPIPORT &amp;= ~_BV(DATA);  // datu izvads '0'
 if(((spi_data &gt;&gt; bitNumber) &amp; 1) == 1){
  PORTB |= _BV(DATA);  // datu izvads '1'
 }
 SPIPORT |= _BV(CLOCK);  // clock izvads '1'
 NOP;  //nedaram neko 1 takti
 SPIPORT &amp;= ~_BV(CLOCK);  // clock izvads '0'
 }
}

void showSpiData(){  // paradam aizsutito informaciju
 SPIPORT |= _BV(LATCH);  // latch izvads '1'
 NOP;
 SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
}

uint8_t sequence1data[8] PROGMEM = {
 0b10000000,      //pirma sablona datu kopa PROGMEM atmina
 0b01000000,
 0b00100000,
 0b00010000,
 0b00001000,
 0b00000100,
 0b00000010,
 0b00000001    };

uint8_t sequence2data[2] PROGMEM = {
 0b11110000,      //otra sablona datu kopa PROGMEM atmina
 0b00001111    };

uint8_t sequence3data[16] PROGMEM = {
 0b00000001,      //tresa sablona datu kopa PROGMEM atmina
 0b00000011,
 0b00000111,
 0b00001111,
 0b00011111,
 0b00111111,
 0b01111111,
 0b11111111,
 0b11111110,
 0b11111100,
 0b11111000,
 0b11110000,
 0b11100000,
 0b11000000,
 0b10000000,
 0b00000000    };

uint8_t sequence4data[8] PROGMEM = {
 0b00011000,      //ceturta sablona datu kopa PROGMEM atmina
 0b00111100,
 0b01111110,
 0b11111111,
 0b11100111,
 0b11000011,
 0b10000001,
 0b00000000    };

ISR(INT0_vect) {  //leksim seit, ja konstatets partraukums uz PD2 (INT0)
 cli();    // izsledzam partraukumus, lai seit mus neviens nepartrauktu
 PORTB = 0b00000000;   // nodzesam visas diodes, pogas spiediena laika
 while(!(BUTTONPIN &amp; _BV(BUTTON))){    // gaidam, kamer poga tiks atlaista
  _delay_ms(30);   // 'debounce' pauzite
 }
 buttonInterruptFlag = 1;  // atzimejam, ka ir noticis partraukums, un ir japarsledz rezims
 flag++;        //palielinam mainigo par 1
 if(flag &gt; 3){
  flag = 0;    // ja mainigais lielaks par 3 pieskiram tam veribu 0
 }    // mainiga veriba pec partraukumiem 1-0-1-0-utt.
 sei();    // iesledam partraukumus atpakal
} // pec izpildisanas lecam atpakal, kur partraucamies

void special_delay(uint16_t time_ms){// speciala pauze, kura tiek partraukta, ja noticis partraukums
 while((time_ms &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){  // kamer nav noticis partraukums un nav veikts 'time_ms'
  _delay_ms(1);                                    // rezes partraukums, turpinam 'cilpot' !
  time_ms--;   // pec katras cilpas samazinam cilpu skaititaju par 1
 }
}

void showSequence1(){
 _index = 8;  // cik efektam ir ierakstu
 while((_index &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence1data + (8-_index)));    // nolsam datus, kura adrese ir datuKopa + ierakstaNumurs
  showSpiData();
  special_delay(200);  // speciala pauze, kura tiek partraukta, ja mainiga noticis partraukums
  _index--;
 }
}

void showSequence2(){
 _index = 2;  // cik efektam ir ierakstu
 while((_index &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence2data + (2-_index)));    // nolsam datus, kura adrese ir datuKopa + ierakstaNumurs
  showSpiData();
  special_delay(700);  // speciala pauze, kura tiek partraukta, ja mainiga noticis partraukums
  _index--;
 }
}

void showSequence3(){
 _index = 16;  // cik efektam ir ierakstu
 while((_index &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence3data + (16-_index)));    // nolsam datus, kura adrese ir datuKopa + ierakstaNumurs
  showSpiData();
  special_delay(100);  // speciala pauze, kura tiek partraukta, ja mainiga noticis partraukums
  _index--;
 }
}

void showSequence4(){
 _index = 8;  // cik efektam ir ierakstu
 while((_index &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence4data + (8-_index)));    // nolsam datus, kura adrese ir datuKopa + ierakstaNumurs
  showSpiData();
  special_delay(500);  // speciala pauze, kura tiek partraukta, ja mainiga noticis partraukums
  _index--;
 }
}

void ioinit(){
 DDRB = 0b11111111;     // PORTB visas izejas
 DDRD = 0b11111011;    // PD2 ieeja (pogai)
 PORTD |= _BV(BUTTON);  // iesledzam "pullup" pogai

 //  Ja lietojat Atmega8, tad INT0 partraukumu konfigurejam sadi
 MCUCR = 0;    // partraukums uz INT0 un INT1 kajam pie nulles limena, un mes negulam
 GICR |= _BV(INT0);    // aktivizejam INT0 partraukumu

 //  Ja lietojat Atmega48/88/168/328, tad INT0 partraukumu konfigurejam sadi
//     EICRA = 0;    // partraukums uz INT0 un INT1 kajam pie nulles limena
//     EIMSK |= _BV(INT0);    // aktivizejam INT0 partraukumu
 sei();    // iesledzam partraukumus
}

int main(void){
 ioinit();     // sagatavojam mikroprocesoru
 while(1){     // izpildit vienmer (bezgaliga cilpa)
  buttonInterruptFlag = 0;  // atzimejam, ka esam jau 'izlekusi' ara noefekta, lai tagad tur paliktu
  switch(flag){
   case 0: showSequence1(); break;
   case 1: showSequence2(); break;
   case 2: showSequence3(); break;
   case 3: showSequence4(); break;
   default: break;
  }
 }
 return 0;
}</pre>
<p>.</p>
<p><strong>Paskatīsimies video</strong>, kā rezultāts izskatās dzīvē:</p>
<table class="aligncenter" style="width: 90%;" border="0" cellspacing="10" cellpadding="10" align="center">
<tbody>
<tr>
<td style="text-align: center;">Piemērs1 &#8211; ATMEGA8, 1x74HC595, 8xLED<br />
<iframe src="http://www.youtube.com/embed/BbYvJJZ2g8I" frameborder="0" height="315" width="420"></iframe></td>
<td style="text-align: center;">Piemērs5 &#8211; ATMEGA8, 1x74HC595, 8xLED<br />
<iframe src="http://www.youtube.com/embed/8OrQPTuunSU" frameborder="0" height="315" width="420"></iframe></td>
</tr>
</tbody>
</table>
<p>.</p>
<p style="text-align: center;">Ar vienu nobīdes reģistru esam tikuši skaidrībā! <strong>Kabinam (pievienojam) vēl divus moduļus &#8211; &#8217;2&#8242; un &#8217;3&#8242;</strong>.<br />
Manis &#8216;saspraustais&#8217; uz maketplates izskatās šādi:<br />
<a href="http://transformators.lv/wp-content/uploads/2012/02/3x74HC595_setup.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="size-large wp-image-2540  aligncenter" title="Atmega8 ar 3x 74HC595" src="http://transformators.lv/wp-content/uploads/2012/02/3x74HC595_setup-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p>Tātad: ar funkcijas &#8220;<strong>softSpiTransfer(uint8_t spiData)</strong>;&#8221; un &#8220;<strong>hardSpiTransfer(uint8_t spiData)</strong>;&#8221; mēs datus &#8216;izbīdam&#8217; (pārvietojam) par astoņiem bitiem (8bit) uz tuvāko nobīdes reģistru (74HC595 modulī &#8217;1&#8242;). Tātad, lai nosūtītu (nobīdītu) datus priekš visiem trīs moduļiem, tas jādara 3 reizes. Sākumā &#8216;bīdam&#8217; datus tālākajam modulim &#8217;3&#8242;, tad modulim &#8217;2&#8242;, un beigās tuvākajam modulim &#8217;1&#8242;. Pēc tam kad dati &#8216;sabīdīti&#8217; kā vajag, tā pat kā iepriekš, lai parādītu, tos vajag ierakstīt nobīdes reģistru buferī.</p>
<p>Kā tas izskatās, izmantojot softisko SPI:</p>
<pre class="brush: c">//izmantojam iepriekš uzrakstīto funkciju
softSpiTransfer(0b00000001); // dati modulim '3'
softSpiTransfer(0b01111111); // dati modulim '2'
softSpiTransfer(0b10000000); // dati modulim '1'
showSpiData(); // parādam datus</pre>
<p><strong>Piemērs</strong> 1, izmantojot softisko SPI, ar 3 nobīdes reģistriem un 24 gaismas diodēm:</p>
<pre class="brush: c">// Piemers 1 software SPI - 3x 74HC595 - 24x LEDs

#include &lt;avr/io.h&gt;  // ieejas-izejas biblioteka
#include &lt;util/delay.h&gt; // aiztures biblioteka

// definejam (nosaucam) izvadu numurus saprotamak
#define SPIPORT PORTB
#define DATA   3
#define CLOCK  5
#define LATCH  2

// definejam "neko nedarishanas instrukciju" (neko nedara vienu uC takti), lai nebutu gari jaraksta
#define NOP asm("nop");

void softSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
 for(uint8_t bitNumber=0; bitNumber&lt;8; bitNumber++){
  SPIPORT &amp;= ~_BV(DATA);  // datu izvads '0'
  if(((spi_data &gt;&gt; bitNumber) &amp; 1) == 1){
   PORTB |= _BV(DATA);  // datu izvads '1'
  }
  SPIPORT |= _BV(CLOCK);  // clock izvads '1'
  NOP;  //nedaram neko 1 takti
  SPIPORT &amp;= ~_BV(CLOCK);  // clock izvads '0'
 }
}

void showSpiData(){  // paradam aizsutito informaciju
 SPIPORT |= _BV(LATCH);  // latch izvads '1'
 NOP;
 SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
}

void ioinit(){
 DDRB = 0b11111111; // PORTB visas izejas
}

void showSequence1(){ // paradam pirmo sablonu un atgriezamies atpakal
 softSpiTransfer(0b00000001);
 softSpiTransfer(0b01111111);
 softSpiTransfer(0b10000000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00000011);
 softSpiTransfer(0b01111110);
 softSpiTransfer(0b11000000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00000111);
 softSpiTransfer(0b00111110);
 softSpiTransfer(0b11100000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00001111);
 softSpiTransfer(0b00111100);
 softSpiTransfer(0b11110000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00011111);
 softSpiTransfer(0b00011100);
 softSpiTransfer(0b11111000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00111111);
 softSpiTransfer(0b00011000);
 softSpiTransfer(0b11111100);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b01111111);
 softSpiTransfer(0b00001000);
 softSpiTransfer(0b11111110);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b11111111);
 softSpiTransfer(0b00000000);
 softSpiTransfer(0b11111111);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b01111111);
 softSpiTransfer(0b00010000);
 softSpiTransfer(0b11111110);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00111111);
 softSpiTransfer(0b00011000);
 softSpiTransfer(0b11111100);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00011111);
 softSpiTransfer(0b00111000);
 softSpiTransfer(0b11111000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00001111);
 softSpiTransfer(0b00111100);
 softSpiTransfer(0b11110000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00000111);
 softSpiTransfer(0b01111100);
 softSpiTransfer(0b11100000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00000011);
 softSpiTransfer(0b01111110);
 softSpiTransfer(0b11000000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00000001);
 softSpiTransfer(0b11111110);
 softSpiTransfer(0b10000000);
 showSpiData();
 _delay_ms(150);
 softSpiTransfer(0b00000000);
 softSpiTransfer(0b11111111);
 softSpiTransfer(0b00000000);
 showSpiData();
 _delay_ms(150);
}

int main(void){
 ioinit(); // sagatavojam mikroprocesoru
 while(1){ // izpildit vienmer (bezgaliga cilpa)
  showSequence1();
 }
 return 0;
}</pre>
<p>Ne vienmēr parādāmie dati atrodas atsevišķos 8bit &#8216;gabalos&#8217;.  Gadījumā, ja dati atrodas 32bit mainīgajā? Viens no risinājumiem ir darīt šādi (sūtīt daļu bitu trīs reizes):</p>
<pre class="brush: c">softSpiTransfer(outputData &amp; 0xFF); // nosutam mainigaa "outputData" 1...8 bitus
softSpiTransfer((outputData &gt;&gt; 8) &amp; 0xFF); // nosutam mainigaa "outputData" 8...16 bitus
softSpiTransfer((outputData &gt;&gt; 16) &amp; 0xFF); // nosutam mainigaa "outputData" 16...24 bitus
showSpiData();</pre>
<p>Un <strong>piemērs</strong> 2 izmantojot šo &#8216;tehniku&#8217;:</p>
<pre class="brush: c">// Piemers 2 software SPI - 3x 74HC595 - 24x LEDs

#include &lt;avr/io.h&gt;  // ieejas-izejas biblioteka
#include &lt;util/delay.h&gt; // aiztures biblioteka

// definejam (nosaucam) izvadu numurus saprotamak
#define SPIPORT PORTB
#define DATA   3
#define CLOCK  5
#define LATCH  2

// definejam "neko nedarishanas instrukciju" (neko nedara vienu uC takti), lai nebutu gari jaraksta
#define NOP asm("nop");

void softSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
 for(uint8_t bitNumber=0; bitNumber&lt;8; bitNumber++){
  SPIPORT &amp;= ~_BV(DATA);  // datu izvads '0'
  if(((spi_data &gt;&gt; bitNumber) &amp; 1) == 1){
   PORTB |= _BV(DATA);  // datu izvads '1'
  }
  SPIPORT |= _BV(CLOCK);  // clock izvads '1'
  NOP;  //nedaram neko 1 takti
  SPIPORT &amp;= ~_BV(CLOCK);  // clock izvads '0'
 }
}

void showSpiData(){  // paradam aizsutito informaciju
 SPIPORT |= _BV(LATCH);  // latch izvads '1'
 NOP;
 SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
}

void ioinit(){
 DDRB = 0b11111111; // PORTB visas izejas
}

void showSequence1(){ // paradam pirmo sablonu un atgriezamies atpakal
 uint32_t outputData;
 for(uint8_t count=1; count&lt;25; count++){ // pirmaa efekta cilpa
  outputData = (1UL &lt;&lt; count) - 1; // izveidojam paradishanai vajadzigos datus
  softSpiTransfer(outputData &amp; 0xFF); // nosutam mainigaa "outputData" 1...8 bitus
  softSpiTransfer((outputData &gt;&gt; 8) &amp; 0xFF); // nosutam mainigaa "outputData" 8...16 bitus
  softSpiTransfer((outputData &gt;&gt; 16) &amp; 0xFF); // nosutam mainigaa "outputData" 16...24 bitus
  showSpiData();
  _delay_ms(150);
 }
 for(uint8_t count=1; count&lt;25; count++){ // otraa efekta cilpa
  outputData = ((1UL &lt;&lt; (25-count)) - 1) &lt;&lt; count; // izveidojam paradishanai vajadzigos datus
  softSpiTransfer(outputData &amp; 0xFF); // nosutam mainigaa "outputData" 1...8 bitus
  softSpiTransfer((outputData &gt;&gt; 8) &amp; 0xFF); // nosutam mainigaa "outputData" 8...16 bitus
  softSpiTransfer((outputData &gt;&gt; 16) &amp; 0xFF); // nosutam mainigaa "outputData" 16...24 bitus
  showSpiData();
  _delay_ms(150);
 }
}

int main(void){
 ioinit(); // sagatavojam mikroprocesoru
 while(1){ // izpildit vienmer (bezgaliga cilpa)
  showSequence1();
 }
 return 0;
}</pre>
<p>Un tad nobeigumam publicēšu vēl vienu piemēru iedvesmai,<strong> piemērs</strong> 3:</p>
<pre class="brush: c">// piemers3 hardware SPI 3x 74HC595, 24x LEDs

#include &lt;avr/io.h&gt;      // ieejas-izejas biblioteka
#include &lt;avr/interrupt.h&gt;      // partraukumu biblioteka
#include &lt;util/delay.h&gt;     // aiztures biblioteka
#include &lt;avr/pgmspace.h&gt;  // biblioteka tiesai datu piekluve "program memory"

volatile uint8_t  flag = 0;
volatile uint8_t  buttonInterruptFlag = 0;
volatile uint8_t  _index = 0;

// definejam (nosaucam) izvadu numurus saprotamak
#define SPIPORT PORTB
#define DATA   3
#define CLOCK  5
#define LATCH  2

#define BUTTONPIN PIND
#define BUTTON 2

// definejam "neko nedarishanas instrukciju" (neko nedara vienu uC takti), lai nebutu gari jaraksta
#define NOP asm("nop");

void softSpiTransfer(uint8_t spi_data){ // nosutam 8 bitus (spi_data) sakot ar jaunako bitu
 for(uint8_t bitNumber=0; bitNumber&lt;8; bitNumber++){
  SPIPORT &amp;= ~_BV(DATA);  // datu izvads '0'
  if(((spi_data &gt;&gt; bitNumber) &amp; 1) == 1){
   PORTB |= _BV(DATA);  // datu izvads '1'
  }
  SPIPORT |= _BV(CLOCK);  // clock izvads '1'
  NOP;  //nedaram neko 1 takti
  SPIPORT &amp;= ~_BV(CLOCK);  // clock izvads '0'
 }
}

void showSpiData(){  // paradam aizsutito informaciju
 SPIPORT |= _BV(LATCH);  // latch izvads '1'
 NOP;
 SPIPORT &amp;= ~_BV(LATCH);  // latch izvads '0'
}

uint8_t sequence1data[3*4] PROGMEM = {  // pirma sablona datu kopa PROGMEM atmina
 0b11111111, 0b00000000, 0b00000000,
 0b00000000, 0b11111111, 0b00000000,
 0b00000000, 0b00000000, 0b11111111,
 0b00000000, 0b11111111, 0b00000000 };

uint8_t sequence2data[3*27] PROGMEM = {  // otra sablona datu kopa PROGMEM atmina
 0b00000000, 0b00011000, 0b00000000,
 0b00000000, 0b00111100, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b11111111, 0b01111110, 0b11111111,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b11111111, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b11111111, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b11111111,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b11111111,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b01111110, 0b00000000,
 0b00000000, 0b00111100, 0b00000000,
 0b00000000, 0b00011000, 0b00000000,
 0b00000000, 0b00000000, 0b00000000,
 0b00000000, 0b00000000, 0b00000000,
 0b00000000, 0b00000000, 0b00000000 };

uint8_t sequence3data[16] PROGMEM = {  // tresa sablona datu kopa PROGMEM atmina
 0b00000001,
 0b00000011,
 0b00000111,
 0b00001111,
 0b00011111,
 0b00111111,
 0b01111111,
 0b11111111,
 0b11111110,
 0b11111100,
 0b11111000,
 0b11110000,
 0b11100000,
 0b11000000,
 0b10000000,
 0b00000000    };

ISR(INT0_vect) {  //leksim seit, ja konstatets partraukums uz PD2 (INT0)
 cli();    // izsledzam partraukumus, lai seit mus neviens nepartrauktu
 PORTB = 0b00000000;   // nodzesam visas diodes, pogas spiediena laika
 while(!(BUTTONPIN &amp; _BV(BUTTON))){    // gaidam, kamer poga tiks atlaista
  _delay_ms(30);   // 'debounce' pauzite
 }
 buttonInterruptFlag = 1;  // atzimejam, ka ir noticis partraukums, un ir japarsledz rezims
 flag++;        //palielinam mainigo par 1
 if(flag &gt; 3){
  flag = 0;    // ja mainigais lielaks par 3 pieskiram tam veribu 0
 }    // mainiga veriba pec partraukumiem 1-0-1-0-utt.
 sei();    // iesledam partraukumus atpakal
} // pec izpildisanas lecam atpakal, kur partraucamies

void special_delay(uint16_t time_ms){// speciala pauze, kura tiek partraukta, ja noticis partraukums
 while((time_ms &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){  // kamer nav noticis partraukums un nav veikts 'time_ms'
_delay_ms(1);                                    // rezes partraukums, turpinam 'cilpot' !
time_ms--;   // pec katras cilpas samazinam cilpu skaititaju par 1
}
}

void special_short_delay(uint16_t time_us){// speciala pauze, kura tiek partraukta, ja noticis partraukums
 while((time_us &gt; 0) &amp;&amp; (buttonInterruptFlag == 0)){  // kamer nav noticis partraukums un nav veikts 'time_ms'
  _delay_us(1);                                    // rezes partraukums, turpinam 'cilpot' !
  time_us--;   // pec katras cilpas samazinam cilpu skaititaju par 1
 }
}

void showSequence1(){ // paradam pirmo sablonu un atgriezamies atpakal
 uint8_t count = 0;
 while((count &lt; (3*4)) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence1data + count+2)); // sutam 3 registra datus ("3")
  softSpiTransfer(pgm_read_byte(sequence1data + count+1)); // sutam 2 registra datus ("2")
  softSpiTransfer(pgm_read_byte(sequence1data + count)); // sutam 1 registra datus ("1")
  count+=3;
  showSpiData();
  special_delay(250);
 }
}

void showSequence2(){ // paradam otro sablonu un atgriezamies atpakal
 uint8_t count2 = 0;
 while((count2 &lt; (3*27)) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence2data + count2+2)); // sutam 3 registra datus ("3")
  softSpiTransfer(pgm_read_byte(sequence2data + count2+1)); // sutam 2 registra datus ("2")
  softSpiTransfer(pgm_read_byte(sequence2data + count2)); // sutam 1 registra datus ("1")
  count2+=3;
  showSpiData();
  special_delay(70);
 }
}

void showSequence3(){ // paradam tresho sablonu un atgriezamies atpakal
 uint8_t count3 = 0;
 while((count3 &lt; 16) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  softSpiTransfer(pgm_read_byte(sequence3data + count3)); // sutam 3 registra datus ("3")
  softSpiTransfer(pgm_read_byte(sequence3data + count3)); // sutam 2 registra datus ("2")
  softSpiTransfer(pgm_read_byte(sequence3data + count3)); // sutam 1 registra datus ("1")
  count3++;
  showSpiData();
  special_delay(100);
 }
}

void showSequence4(){  // paradam ceturto sablonu un atgriezamies atpakal
 uint8_t count4 = 0, count4_1 = 0;
 while((count4 &lt; 150) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  count4_1 = 0;
  while((count4_1 &lt; 10) &amp;&amp; (buttonInterruptFlag == 0)){
   softSpiTransfer(0b11111111);
   softSpiTransfer(0b11111111);
   softSpiTransfer(0b11111111);
   showSpiData();
   special_short_delay(count4);  // speciala pauze, kura tiek partraukta, ja mainiga noticis partraukums
   softSpiTransfer(0b00000000);
   softSpiTransfer(0b00000000);
   softSpiTransfer(0b00000000);
   showSpiData();
   special_short_delay(150-count4);  // speciala pauze, kura tiek partraukta, ja mainiga noticis partraukums
   count4_1++;
  }
  count4++;
 }
 count4 = 0;
 while((count4 &lt; 150) &amp;&amp; (buttonInterruptFlag == 0)){ // ja nav paradits viss efekts un nav noticis partraukums, turpinam
  count4_1 = 0;
  while((count4_1 &lt; 10) &amp;&amp; (buttonInterruptFlag == 0)){
   softSpiTransfer(0b11111111);
   softSpiTransfer(0b11111111);
   softSpiTransfer(0b11111111);
   showSpiData();
   special_short_delay(150-count4);  // speciala iisa pauze, kura tiek partraukta, ja mainiga noticis partraukums
   softSpiTransfer(0b00000000);
   softSpiTransfer(0b00000000);
   softSpiTransfer(0b00000000);
   showSpiData();
   special_short_delay(count4);  // speciala iisa pauze, kura tiek partraukta, ja mainiga noticis partraukums
   count4_1++;
  }
  count4++;
 }
}

void ioinit(){
 DDRB = 0b11111111;     // PORTB visas izejas
 DDRD = 0b11111011;    // PD2 ieeja (pogai)
 PORTD |= _BV(BUTTON);  // iesledzam "pullup" pogai

//  Ja lietojat Atmega8, tad INT0 partraukumu konfigurejam sadi
 MCUCR = 0;    // partraukums uz INT0 un INT1 kajam pie nulles limena, un mes negulam
 GICR |= _BV(INT0);    // aktivizejam INT0 partraukumu

//  Ja lietojat Atmega48/88/168/328, tad INT0 partraukumu konfigurejam sadi
//  EICRA = 0;    // partraukums uz INT0 un INT1 kajam pie nulles limena
//  EIMSK |= _BV(INT0);    // aktivizejam INT0 partraukumu
 sei();    // iesledzam partraukumus
}

int main(void){
 ioinit();     // sagatavojam mikroprocesoru
 while(1){     // izpildit vienmer (bezgaliga cilpa)
  buttonInterruptFlag = 0;  // atzimejam, ka esam jau 'izlekusi' ara noefekta, lai tagad tur paliktu
  switch(flag){
   case 0: showSequence1(); break;
   case 1: showSequence2(); break;
   case 2: showSequence3(); break;
   case 3: showSequence4(); break;
   default: break;
  }
 }
 return 0;
}</pre>
<p>.</p>
<p><strong>Paskatamies video</strong>, kā izskatās šie 24 gaismas diožu piemēri dzīvē:</p>
<table class="aligncenter" style="width: 90%;" border="0" cellspacing="10" cellpadding="10" align="center">
<tbody>
<tr style="text-align: center;">
<td style="text-align: center;">Piemērs1 &#8211; ATMEGA8, 3x74HC595, 24xLED<br />
<iframe src="http://www.youtube.com/embed/SeF987DUOgo" frameborder="0" height="315" width="420"></iframe></td>
<td>Piemērs2 &#8211; ATMEGA8, 3x74HC595, 24xLED<br />
<iframe src="http://www.youtube.com/embed/K_y_V8AXvhs" frameborder="0" height="315" width="420"></iframe></td>
</tr>
<tr>
<td style="text-align: center;">Piemērs3 &#8211; ATMEGA8, 3x74HC595, 24xLED<br />
<iframe src="http://www.youtube.com/embed/F90-HICOor8" frameborder="0" height="315" width="420"></iframe></td>
<td></td>
</tr>
</tbody>
</table>
<p>.</p>
<p>Un šeit lejupielādei pieejami visu piemēru kodi un *.hex datnes mikro kontrolieriem ATMEGA8/8A un ATMEGA328: <a title="piemēru datnes" href="http://transformators.lv/wp-content/uploads/2012/02/atmega8_2dala_piemeri.zip" target="_blank"><span style="font-size: large;"><span style="color: #ff0000;"><strong><span style="text-decoration: underline;">PIEMĒRI</span></strong></span></span></a>. Bet te pieejama <a href="http://transformators.lv/wp-content/uploads/2012/02/Atmega8_2dala_shema.zip" target="_blank"><span style="color: #ff0000;"><span style="font-size: large;"><span style="text-decoration: underline;"><strong>SHĒMA</strong></span></span></span></a> atsevišķi.<br />
.</p>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/atmega8-gaismas-diozu-vadiba-2-dala-nobides-registri/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://transformators.lv/2012/2528/</link>
		<comments>http://transformators.lv/2012/2528/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 09:20:30 +0000</pubDate>
		<dc:creator>Edgars</dc:creator>
				<category><![CDATA[Pasākumi]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2528</guid>
		<description><![CDATA[[ 01.03.2012; 10:00; ] Janvāra labākā raksta autors ir ibot ar rakstu Quadropod, jeb četrkājainais robots, balvā saņemot dāvanu karti 20 Ls vērtībā no SIA Argus Radiodetaļu Tirdzniecība.

Arī Februāra labākā raksta autors savā īpašumā iegūs dāvanu karti 20 Ls vērtībā. 
Atceramies, ka tikai Jūsu balsojums noteiks laimētāju!


Pamācība raksta veidošanā atrodama šeit, un informācija par balsošanu - šeit.

P.S atgādinu ka [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2011/11/gift.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2416" title="gift" src="http://transformators.lv/wp-content/uploads/2011/11/gift-150x150.gif" alt="" width="106" height="106" /></a>Janvāra labākā raksta autors ir <span><strong>ibot </strong></span>ar rakstu <a href="http://transformators.lv/2012/quadropod-jeb-cetrkajainais-robots/">Quadropod, jeb četrkājainais robots</a>, balvā saņemot <strong>dāvanu karti 20 Ls vērtībā </strong>no SIA Argus Radiodetaļu Tirdzniecība.</p>
<p>Arī Februāra labākā raksta autors savā īpašumā iegūs <strong>dāvanu karti 20 Ls vērtībā.</strong><span style="color: #000000;"><a href="http://web.argus.lv/shop/productinfo/AVTMSP430/hwindex.htm"><strong> </strong></a></span></p>
<p style="text-align: left;">Atceramies, ka tikai Jūsu balsojums noteiks laimētāju!</p>
<p style="text-align: left;">
<p style="text-align: left;"><span id="more-2528"></span></p>
<p style="text-align: left;">Pamācība raksta veidošanā atrodama <a href="http://transformators.lv/pamaciba/">šeit</a>, un informācija par balsošanu &#8211; <a href="http://transformators.lv/2010/balsojam-par-labakajiem/">šeit</a>.</p>
<p style="text-align: left;">
<p style="text-align: left;">P.S atgādinu ka vērtēšanas sistēma nav pakļauta kalendārajam mēnesim bet gan 40 dienām, lai gan balvas tiek izdalītas katra mēneša sākumā, līdz ar to jebkuram daudz maz vienlīdzīgas iespējas tikt pie balvas neatkarīgi no ievietošanas datuma.</p>
<p style="text-align: left;">Un vēl joprojām rakstu autoriem tiek piešķirta 15% atlaide vienam pirkumam no <a href="http://www.argus.lv/">argus.lv</a></p>
<p style="text-align: left;">Informācija par balvu un atlaižu saņemšanu tiek sūtīta uz jūsu e-pastu, kas norādīts Jūsu transformators.lv profilā. Ja gadījumā kāds šo informāciju nav saņēmis &#8211; dodiet ziņu.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<h2 class="title">DIY Tranzistoru/Integrēto shēmu zemfrekvences  jaudas pastiprinātāja būve : vispārīgi norādījumi.</h2>
</div>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/2528/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quadropod, jeb četrkājainais robots</title>
		<link>http://transformators.lv/2012/quadropod-jeb-cetrkajainais-robots/</link>
		<comments>http://transformators.lv/2012/quadropod-jeb-cetrkajainais-robots/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 10:31:02 +0000</pubDate>
		<dc:creator>ibot</dc:creator>
				<category><![CDATA[Citi roboti]]></category>
		<category><![CDATA[DIY Raksti]]></category>
		<category><![CDATA[Roboti]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2493</guid>
		<description><![CDATA[Vēlējos pastāstīt par diezgan sen sākto projektu: uz četrām kājām staigājošo robotiņu. Protams šādam mošķim reālā dzīvē ir ļoti maz (gandrīz vispār nav) praktiska pielietojuma, tāpēc var teikt, ka šis robots ir domāts kā izklaides projekts. Robota izveide aizņēma vairāk laika, nekā bija plānots un turpinās jaunu ideju realizācija šajā robotā, jaunu programmu ieviešana, utt.
Galvenā [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2012/01/100_18232.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2496" title="100_1823" src="http://transformators.lv/wp-content/uploads/2012/01/100_18232-150x150.jpg" alt="" width="109" height="109" /></a>Vēlējos pastāstīt par diezgan sen sākto projektu: uz četrām kājām staigājošo robotiņu. Protams šādam mošķim reālā dzīvē ir ļoti maz (gandrīz vispār nav) praktiska pielietojuma, tāpēc var teikt, ka šis robots ir domāts kā izklaides projekts. Robota izveide aizņēma vairāk laika, nekā bija plānots un turpinās jaunu ideju realizācija šajā robotā, jaunu programmu ieviešana, utt.<span id="more-2493"></span></p>
<p>Galvenā sākuma doma bija radīt staigājošu robotu, kas varētu pārvietoties uz 4 kājām izmantojot tiešo kinemātisko uzdevumu (forward kinematics, sīkāk skatīt http://en.wikipedia.org/wiki/Forward_kinematics), jeb pārvietoties ,kustinot un pārvietojot servo iepriekš definētos stāvokļos, ko varētu izrēķināt ar elementāras ģeometrijas palīdzību un piekoriģēt uz aci. Robotiņam ir pielikti dažādi sensori (infrasarkanais SHARP attāluma mērītājs, fototranzistori, galaslēdži, trokšņa līmeņa indikators) lai tas spētu autonomi pārvietoties pa telpu un ,piemēram, apiet šķēršļus, un platīte attālinātai vadībai cauri infrasarkano TV pulti  (ar RC5 un SIRC protokoliem).Kādreiz arī fantazēju par iespēju pamēģināt realizēt gaitu ar  inverso kinemātiku (inverse kinematics), izmantojot PC, taču sapratu, ka līdz tam vēl tālu J . Robota mehānika un elektriskās shēmas ir pabeigtas un samontētas, priekšā palika pats laikietilpīgākais un interesantākais posms – programmēšana. Līdz šim esmu realizējis ļoti elementāru pārvietošanās kodiņu, bet laika trūkuma dēļ programmēšana ir ievilkusies.</p>
<p><strong>Tehniskais apraksts: Mehānika</strong></p>
<p>Patreiz neesmu sastādījis sīku tehnisko aprakstu un shēmas/ rasējumus, taču ir doma to darīt pēc programmēšanas darbu beigšanas (ja publikai būs interese). Tātat robotam ir 4 kājas ar 3 brīvības pakāpēm (degree of freedom) un kopā robotā ir izmantoti 13 servo , jeb 12 servo priekš kājām un 1 priekš SHARP infrasarkanā sensora. Servo motori tika pasūtīti no šīs mājaslapas:  <a href="http://www.mindsetsonline.co.uk/index.php?cPath=13_530">http://www.mindsetsonline.co.uk/index.php?cPath=13_530</a> , kurā starp citu ir daudz dažādu, interesantu sīkumu.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/servo_unit.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2497" title="servo_unit" src="http://transformators.lv/wp-content/uploads/2012/01/servo_unit.jpg" alt="" width="281" height="225" /></a></p>
<p>Dynam firmas servo motors ar parametriem:</p>
<p>Weight: 34g<br />
Torque: 56.9 oz-in (at 6V)   (aptuveni 4.8 kg/cm ja nemaldos)<br />
Speed: 0.16 sec/60 degrees (at 6V)<br />
Size: 55 x 20 x 45mm</p>
<p>Par šiem servo neko sliktu nevaru teikt, tiem ir labs griezes moments un pieņemama cena, vienīgais gabarītos šie ir par pārs milimetriem lielāki, nekā tie, kurus lietoju līdz šim.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/v2.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2498" title="v2" src="http://transformators.lv/wp-content/uploads/2012/01/v2-570x427.jpg" alt="" width="570" height="427" /></a></p>
<p>Attēlā augstāk var redzēt mana robota karkasu, kas ir diezgan masīvs salīdzinot ar tirgū pieejamajiem robotiem Phantom X. Kā redzams, es speciāli uztaisīju īsākus posmus kājām( spēka plecus), vai nezaudētu dārgo spēka momentu no motoriem, jo korpusu taisīju no PLEXIGLASS plāksnes un alumīnija . Kā arī tas palīdzēja samazināt strāvu, ko patērē servo.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/Finished-front-450.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2499" title="Finished-front-450" src="http://transformators.lv/wp-content/uploads/2012/01/Finished-front-450.jpg" alt="" width="367" height="276" /></a></p>
<p>*Phantom X quadropod robots</p>
<p>Visa šasija robotam tika izgriezta ar rokas instrumentu palidzību. Pašam man ir pieeja pie CNC darbagaldiem un CAD programmatūru arī pārzinu un lietoju, taču būvējot robotu idejas nāk galvā uz vietas un visa mehānika ir improvizēta, taču darbojas viss labi. Masa robotam bez baterijām sanāca liela, aptuveni 1,1 kg, bet pateicoties īsajiem spēka pleciem motori tiek galā ar šo smagumu. Šī mošķa barošanai pagaidām lietoju 2 atsevišķus akumulatoru blokus – logikas barošanai un motoriem. Iepriekš centos iztikt ar vienu bloku, taču vidējā strāva kas plūst caur servo parasti ir ap 1,1 A (daudz gan) un ar pīķiem  līdz 1.6 A pie slodzēm( ja piemēram uzspiež uz robota), kas nomet spriegumu tik zemu, ka elektronika izslēdzas ārā.</p>
<p><strong>Tehniskais apraksts: Elektronika</strong></p>
<p>Kā smadzenes robotrā kalpo Arduino Duemilonove mikrokontroliera platforma.</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/image005.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2500" title="image005" src="http://transformators.lv/wp-content/uploads/2012/01/image005.jpg" alt="" width="282" height="211" /></a></p>
<p>Kaut gan ir nācies darboties arī tīri ar Atmegām, man iepatikās Arduino vidē pieejamās bibliotēkas, kā arī manā skapī tāpat mētājās lieka platīte, ko iepriekš lietoju tikai izmēģinājumiem. Galvenais ir arī tas , ka “servo.h” bibliotēka ļauj reāli pie visām digitālajiem piniem pieslēgt servo. Interesanti ir tas, ka bibliotēka it kā oficiāli ļauj līdz 12 servo pieslēgšanu, taču es biju definējis joka pēc 14 servo (visus digitalos pinus lietoju priekš servo). Tad nu 13 servo motori tika pieslēgti pie arduino digitālajām kājiņām. Secību var apskatīt zemāk:</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/Scan1004422.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2501" title="Scan1004422" src="http://transformators.lv/wp-content/uploads/2012/01/Scan1004422-570x380.jpg" alt="" width="570" height="380" /></a></p>
<p>Klāt pie Arduino tika pieslēgts arī infrasarkanās vadības relejs, ko var slēgt iekšā/ ārā ar TV pultīm, kuras lieto RC5 un SIRC protokolus. Šāds 8 kanālu programmējamais relejs ir pieejams Argusā   <a href="http://web.argus.lv/shop/productinfo/AVT390B%2B/hwindex.htm">http://web.argus.lv/shop/productinfo/AVT390B%2B/hwindex.htm</a> un cenas ziņā ir ļoti labs.</p>
<p>Līdz šim es biju domājis izveidot šim robotam 3 vadības režīmus, kuros robots lietoju tikai daļu savu funkciju:</p>
<p>1.      vadības režīms – autonomais šķēršļu pārvarētājs. Šādā režīmā robots lietotu tikai SHARP attāluma sensoru, un galaslēdžus kāju galos, vai varētu mēģināt šķērsot istabu taisni, ja tam priekšā būtu dažāda augstuma šķēršļi.</p>
<p>2.      rotaļu dzīvnieciņa simulācija – bija doma robotu padarīt interaktīvu un izmantojot trokšņu līmeņa indikatoru un fototranzistorus, lai to varētu piemēram pastaigas vidū “nobiedēt”ar plaukšķi un tas mestos meklēt tumšāko stūri.</p>
<p>3.      tālvadības  režīms – vadīt ar pults palīdzību robotu, kurš sekotu uzdotajām komandām.</p>
<p>Attāluma sensors ir šāds <a href="http://web.argus.lv/shop/productinfo/GP2D120/hwindex.htm">http://web.argus.lv/shop/productinfo/GP2D120/hwindex.htm</a></p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/GP2D120.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-full wp-image-2502" title="GP2D120" src="http://transformators.lv/wp-content/uploads/2012/01/GP2D120.jpg" alt="" width="141" height="111" /></a></p>
<p>Un to pieslēdzu pie analogās ieejas.</p>
<p>Interesantāks ir manis paša veidots trokšņu līmeņa indikators, kas sastāv no elektret mikrofona pastiprinātāja, kas apvienots ar komparatoru un komporatora izeja pieslēgta pie kondensatora, kas savukārt paralēli pieslēgts analogajai kājai. Tas tika darīta ar mērķī, lai varētu noķert laikā īso signālu no komparatora.  Varbūt kādam tas šķitīts diezgan murgains risinājums, bet tas ir tāpēc, ka man bija doma ielikts RS trigeri pēc komparatora, taču, nejauši to sabeigdams es izvēlējos primītīvāku risinājumu – kondensatoru, kas neļauj spriegumam uzreiz pazust. Zemāk ir redzamas ne pārāk kvalitatīvi attēlota shēma:</p>
<p style="text-align: center;"><a href="http://transformators.lv/wp-content/uploads/2012/01/2012-01-21-16.24.23.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="aligncenter size-large wp-image-2503" title="2012-01-21 16.24.23" src="http://transformators.lv/wp-content/uploads/2012/01/2012-01-21-16.24.23-570x392.jpg" alt="" width="625" height="429" /></a></p>
<p><strong>Tehniskais apraksts: Programma</strong></p>
<p>Šajā sadaļā es neko vērtīgu nevaru vēl ievietot, taču pacentīšos to drīz labot.Vienīgais varu Jūsu uzmanībai piedāvāt video (sliktas kvalitātes) ar gaitas izmēģinājumu:</p>
<p><iframe width="570" height="428" src="http://www.youtube.com/embed/9XwozqhbyZo?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Ja kādam interesē šis ir kods elementārakajai gaitai.</p>
<pre class="brush: c">#include &lt;Servo.h&gt;

Servo myservo0; Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5;// create servo object to control a servo

Servo myservo6; Servo myservo7; Servo myservo8; Servo myservo9; Servo myservo10; Servo myservo11;

int lenkis1 = 55;

int lenkis2 = 135;

int lenkis3 = 50;

int lenkis4 = 130;

int lenkis5 = 22;

int lenkis6 = 158;

int lenkis7 = 60;

int lenkis8 = 140;

int lenkis71= 61; //korekcijas lenkis 7

int lenkis9 = 50;

int lenkis10 = 130;

void setup()

{

myservo0.attach(0);

myservo1.attach(1);

myservo2.attach(2);

myservo3.attach(3);

myservo4.attach(4);

myservo5.attach(5);

myservo6.attach(6);

myservo7.attach(7);

myservo8.attach(8);

myservo9.attach(9);

myservo10.attach(10);

myservo11.attach(11);

myservo0.write(lenkis1);  // nostadam robota kajas izejas pozicija

myservo1.write(lenkis2);

myservo2.write(lenkis1);

myservo3.write(lenkis2);

delay (1000); // pacelam robotu

myservo8.write(lenkis3);

myservo9.write(lenkis4);

myservo10.write(lenkis4);

myservo11.write(lenkis3);

delay (400);

myservo4.write(lenkis3);

myservo5.write(lenkis4);

myservo6.write(lenkis4);

myservo7.write(lenkis3);

delay (3000);

}

void loop() // trot gaita

{

myservo7.write(lenkis5);     // pacelt 4 kaju

myservo11.write(lenkis5);

myservo5.write(lenkis6);     // pacelt 2 kaju

myservo9.write(lenkis6);

delay (80);

myservo0.write(lenkis9);  // pagriezt  nolaisto 1 kaju

myservo2.write(lenkis71);  // pagriezt  nolaisto 3 kaju

myservo3.write(lenkis8);  // pagriezt pacelto 4 kaju

myservo1.write(lenkis10);  // pagriezt pacelto 2 kaju

delay (100);

myservo5.write(lenkis4); // nolaist 2 kaju

myservo9.write(lenkis4);

myservo7.write(lenkis3);    // nolaist 4 kaju

myservo11.write(lenkis3);

delay (180);

myservo6.write(lenkis6);   // pacelt 3 kaju

myservo10.write(lenkis6);

myservo4.write(lenkis5); // pacelt  1 kaju

myservo8.write(lenkis5);

delay (80);

myservo1.write(lenkis8);  // pagriezt  nolaisto 2 kaju

myservo3.write(lenkis10);  // pagriezt  nolaisto 4 kaju

myservo2.write(lenkis9);  // pagriezt pacelto 3 kaju

myservo0.write(lenkis7);  // pagriezt pacelto 1 kaju

delay (100);

myservo4.write(lenkis3); // nolaist 1 kaju

myservo8.write(lenkis3);

myservo6.write(lenkis4);    // nolaist 3 kaju

myservo10.write(lenkis4);

delay (180);

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/quadropod-jeb-cetrkajainais-robots/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Li-Ion akumulatoru &#8220;gudrs&#8221; lādētājs ar MCP73843</title>
		<link>http://transformators.lv/2012/li-ion-akumulatoru-gudrs-ladetajs-ar-mcp73843/</link>
		<comments>http://transformators.lv/2012/li-ion-akumulatoru-gudrs-ladetajs-ar-mcp73843/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 10:19:28 +0000</pubDate>
		<dc:creator>KasparsL</dc:creator>
				<category><![CDATA[DIY Raksti]]></category>
		<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[Enerģija]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2472</guid>
		<description><![CDATA[Es ļoti bieži savos projektos izmantoju Litija jonu akumulatorus (Li-Ion), kuru, ilga mūža saglabāšanai, lādēšanai jāizmanto &#8220;gudrs&#8221; lādētājs. Tam jābūt constantas strāvas un konstanta sprieguma, un ar lādēšanas pārtraukšanu cikla beigās.
Šiem kritērijiem atbilst arī rūpnieciski Li-Ion lādētāji, bet bieži vien tie maksā dārgi, vai lādēšanas strāva ir pārāk zema (1Amp, 500mA, 350mA, un mazāk).
Li-Ion akumulatoriem, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2012/01/brd-03.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2476" title="brd-03" src="http://transformators.lv/wp-content/uploads/2012/01/brd-03-150x150.jpg" alt="" width="100" height="100" /></a>Es ļoti bieži savos projektos izmantoju Litija jonu akumulatorus (Li-Ion), kuru, ilga mūža saglabāšanai, lādēšanai jāizmanto &#8220;gudrs&#8221; lādētājs. Tam jābūt constantas strāvas un konstanta sprieguma, un ar lādēšanas pārtraukšanu cikla beigās.<br />
Šiem kritērijiem atbilst arī rūpnieciski Li-Ion lādētāji, bet bieži vien tie maksā dārgi, vai lādēšanas strāva ir pārāk zema (1Amp, 500mA, 350mA, un mazāk).<span id="more-2472"></span><br />
Li-Ion akumulatoriem, maksimālā lādēšanas strāva ir 1C &#8211; tas nozīmē, cik ietilpīgs akumulātors, tik ātri var to lādēt (piem: 2400mAh akumulātoru var lādēt ar, maksimums, 2.4 Amp lielu strāvu). Pie 1C lādēšanas uzlādes laiks ir ~ 2 stundas (parasti mazāk).</p>
<p>Tad nolēmu uzbūvēt 2 Ampēru lādētāju priekš 4.2V Li-Ion akumulātoriem un pakām. Es izvēlējos Microchip lādēšanas kontrolieri &#8211; <strong><a title="datasheet" href="http://ww1.microchip.com/downloads/en/DeviceDoc/21823c.pdf" target="_blank">MCP73843</a></strong> . Lādētāja barošanai nepieciešams 5V barošanas avots.</p>
<p style="text-align: center;"><img class="aligncenter" title="MCP73843 2 Amp Lādētājs" src="http://transformators.lv/wp-content/uploads/2012/01/chg.jpg" alt="MCP73843 2 Amp Lādētājs" width="640" height="70" /></p>
<p style="text-align: center;">MCP73843 lādētāja shēma:</p>
<p style="text-align: center;"><img style="vertical-align: baseline;" title="lādētāja shēma" src="http://transformators.lv/wp-content/uploads/2012/01/charger_sch.png" alt="lādētāja shēma" width="640" height="405" /></p>
<p style="text-align: left;">MCP73843 uzlādes kontrolierim in nepieciešams ārējs lauku tranzistors (T1), manā gadījumā 2 ampēru uzlādes strāvai pietiek ar IRF7416 (smd SO8 korpusā). Uzlādes strāvu nosaka R4 rezistors (0.05R = 2A, 0.1R = 1A, 0.025R = 4A). D1 ir aizsardzības shotkija diode, tai ir jāiztur ilglaicīgi izvēlētā uzlādes strāva. Rezistoru dalītājs R1/R2 nosaka ieslēgšanās spriegumu, praktiski var R2 nelikt, jo pats kontrolieris ir pietiekami gudrs, lai pārtrauktu lādēšanas ciklu, ja ieejas spriegums ir mazāks par izejas spriegumu. C3 nosaka drošības taimera laikus (skatīt kontroliera datasheet).<br />
Kontrolierim ir statusa indikācijas izvads, kur pieslēdzot gaismas diodi, var redzēt, vai notiek uzlāde, vai bijusi uzlādes kļūda, piem taimera laiks beidzies.</p>
<p style="text-align: center;">Šeit varam aplūkot uzlādes grafiku.<br />
<img title="uzlādes grafiks" src="http://transformators.lv/wp-content/uploads/2012/01/charging-plot.png" alt="uzlādes grafiks" width="646" height="463" /></p>
<p style="text-align: left;">Tad uzzīmēju platīti. Lejuplādēt var <strong><a title="Eagle datnes" href="http://transformators.lv/wp-content/uploads/2012/01/MCP73843-charger.zip" target="_blank">šeit</a></strong> . Tā kā mikroshēma MCP73843 ir pieejama tikai MSOP-8 korpusā, iesaku plati veidot ar foto metodi. Viena lādētāja platītes izmērs ir 50mm x 19mm.</p>
<p style="text-align: center;">Pēc kodināšanas:<br />
<img title="plate pēc kodināšanas" src="http://transformators.lv/wp-content/uploads/2012/01/brd-01.jpg" alt="plate pēc kodināšanas" width="640" height="480" /></p>
<p style="text-align: center;">Lādētājs salodēts, noalvoju celiņu no T1 uz izeju labākai siltuma vadītspējai. Gaismas diode ir RGB, no kuras izmantotas tikai sarkanā un zaļā.<br />
<img title="lādētājs salodēts" src="http://transformators.lv/wp-content/uploads/2012/01/brd-03.jpg" alt="lādētājs salodēts" width="640" height="288" /></p>
<p style="text-align: center;">Visvairāk silstošās detaļas ir tranzistors T1 un diode D1. Lai T1 nepārkarstu, izveidoju garāku plati, kur celiņš izmantots kā radiators.</p>
<p style="text-align: center;">Visas detaļas salodētas (5 lādētāji)<br />
<img title="5 lādētāji salodēti" src="http://transformators.lv/wp-content/uploads/2012/01/brd-02.jpg" alt="5 lādētāji salodēti" width="640" height="293" /></p>
<p style="text-align: center;">Gatavs un &#8220;iepakots&#8221;<br />
<img title="gatavs un iepakots" src="http://transformators.lv/wp-content/uploads/2012/01/brd-04.jpg" alt="gatavs un iepakots" width="640" height="454" /></p>
<p style="text-align: center;">Zaļš &#8211; ja ieslēgts vai lādēšana pabeigta, oranžs &#8211; lādējas, zaļš/oranžs mirgo &#8211; kļūda (piem. taimera laiks iztecējis)</p>
<table style="height: 243px; width: 100%;" border="0" align="center">
<tbody>
<tr style="text-align: center;">
<td><img title="lādētājs" src="http://transformators.lv/wp-content/uploads/2012/01/charging-01.jpg" alt="lādētājs" width="310" height="204" /></td>
<td><img title="lādējas" src="http://transformators.lv/wp-content/uploads/2012/01/charging-02.jpg" alt="lādējas" width="310" height="233" /></td>
</tr>
</tbody>
</table>
<p style="text-align: center;">Šeit starp tukšu akumulatoru paku un lādētāju pieslēgts analizators, kurā redzams pašreizējais pakas spriegums, uzlādes strāva u.c.<br />
<img title="analizātors" src="http://transformators.lv/wp-content/uploads/2012/01/meter-01.jpg" alt="analizātors" width="510" height="383" /></p>
<p>Teorētiski, izmainot R4 pretestību un attiecīgi D1 un T1, var izveidot jebkādu vēlamo uzlādes strāvu. (strāvām, kas lielākas par 2 ampēriem, visticamāk, ka būs nepieciešams D1 un T1 izvietot uz neliela radiatora)</p>
<p>Ja gribēsiet izveidot tādu pašu lādētāju, vai pasmelties idejas šeit var lejupielādēt <strong><a title="Lādētāja shēma un plate EagleCad formātā" href="http://transformators.lv/wp-content/uploads/2012/01/MCP73843-charger.zip">EagleCad datnes</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/li-ion-akumulatoru-gudrs-ladetajs-ar-mcp73843/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://transformators.lv/2012/2489/</link>
		<comments>http://transformators.lv/2012/2489/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 08:14:22 +0000</pubDate>
		<dc:creator>Edgars</dc:creator>
				<category><![CDATA[Pasākumi]]></category>

		<guid isPermaLink="false">http://transformators.lv/?p=2489</guid>
		<description><![CDATA[[ 01.02.2012; 09:00; ] Sveiciens Jaunajā gadā!

Pagājušā gada decembra labākā raksta autors ir TomToms ar rakstu Barošanas bloks 13.8V 2.5A / 12V 1.5A, balvā saņemot dāvanu karti 20 Ls vērtībā no SIA Argus Radiodetaļu Tirdzniecība.

Novēlam šogad vēl sparīgāk dalīties ar idejām/pamācībām. Un kā vienmēr - labākajiem dāvanas no SIA Argus Radiodetaļu Tirdzniecība. Arī šoreiz, dāvanu karte 20 Ls vērtībā. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transformators.lv/wp-content/uploads/2011/11/gift.gif" class="highslide-image" onclick="return hs.expand(this);"><img class="alignleft size-thumbnail wp-image-2416" title="gift" src="http://transformators.lv/wp-content/uploads/2011/11/gift-150x150.gif" alt="" width="106" height="106" /></a>Sveiciens Jaunajā gadā!</p>
<p>Pagājušā gada decembra labākā raksta autors ir <span><strong>TomToms </strong></span>ar rakstu <a href="http://transformators.lv/2011/barosanas-bloks-13-8v-2-5a-12v-1-5a/">Barošanas bloks 13.8V 2.5A / 12V 1.5A</a>, balvā saņemot <strong>dāvanu karti 20 Ls vērtībā </strong>no SIA Argus Radiodetaļu Tirdzniecība.</p>
<p>Novēlam šogad vēl sparīgāk dalīties ar idejām/pamācībām. Un kā vienmēr &#8211; labākajiem dāvanas no SIA Argus Radiodetaļu Tirdzniecība. Arī šoreiz, <strong>dāvanu karte 20 Ls vērtībā.</strong><span style="color: #000000;"><a href="http://web.argus.lv/shop/productinfo/AVTMSP430/hwindex.htm"><strong> </strong></a></span></p>
<p style="text-align: left;">Atceramies, ka tikai Jūsu balsojums noteiks laimētāju!</p>
<p style="text-align: left;">
<p style="text-align: left;"><span id="more-2489"></span></p>
<p style="text-align: left;">Pamācība raksta veidošanā atrodama <a href="http://transformators.lv/pamaciba/">šeit</a>, un informācija par balsošanu &#8211; <a href="http://transformators.lv/2010/balsojam-par-labakajiem/">šeit</a>.</p>
<p style="text-align: left;">
<p style="text-align: left;">P.S atgādinu ka vērtēšanas sistēma nav pakļauta kalendārajam mēnesim bet gan 40 dienām, lai gan balvas tiek izdalītas katra mēneša sākumā, līdz ar to jebkuram daudz maz vienlīdzīgas iespējas tikt pie balvas neatkarīgi no ievietošanas datuma.</p>
<p style="text-align: left;">Un vēl joprojām rakstu autoriem tiek piešķirta 15% atlaide vienam pirkumam no <a href="http://www.argus.lv/">argus.lv</a></p>
<p style="text-align: left;">Informācija par balvu un atlaižu saņemšanu tiek sūtīta uz jūsu e-pastu, kas norādīts Jūsu transformators.lv profilā. Ja gadījumā kāds šo informāciju nav saņēmis &#8211; dodiet ziņu.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<h2 class="title">DIY Tranzistoru/Integrēto shēmu zemfrekvences  jaudas pastiprinātāja būve : vispārīgi norādījumi.</h2>
</div>
]]></content:encoded>
			<wfw:commentRss>http://transformators.lv/2012/2489/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

