<?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>FxDev &#124; ße Different Everytime! &#187; atmega</title>
	<atom:link href="http://www.fxdev.org/etiket/atmega/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fxdev.org</link>
	<description>FxDev &#124; This Evolution is Revolution</description>
	<lastBuildDate>Wed, 01 Feb 2012 22:16:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>3-Wire Keypad</title>
		<link>http://www.fxdev.org/3-wire-keypad/</link>
		<comments>http://www.fxdev.org/3-wire-keypad/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 22:09:02 +0000</pubDate>
		<dc:creator>FxDev</dc:creator>
				<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[3]]></category>
		<category><![CDATA[adc]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[atmega]]></category>
		<category><![CDATA[atmega16]]></category>
		<category><![CDATA[atmega8]]></category>
		<category><![CDATA[debounce]]></category>
		<category><![CDATA[kablo]]></category>
		<category><![CDATA[keypad]]></category>
		<category><![CDATA[lcd]]></category>
		<category><![CDATA[wire]]></category>

		<guid isPermaLink="false">http://www.fxdev.org/?p=813</guid>
		<description><![CDATA[Her gün kullandığımız, fakat hiç bir zaman önemsemediğimiz bir araç keypad. Özellikle telefonlarda ve şu ara moda olan otomatik yiyecek makinelerinde kullanılan bu aracı biz elektronikçiler de oldukça fazla kullanıyoruz, elbette teknik anlamda. Öncelikle 8051 derslerimde kullandığım keypad&#8217;i hep 7 ya da özel entegresiyle birlikte 4-5 kabloyla kullandım. Yaptığım son projede ise debounce ayarını yanlış [...]]]></description>
			<content:encoded><![CDATA[<p><a class="lightbox"  title ="3-Wire" href="http://www.fxdev.org/wp-content/uploads/2010/09/3-Wire.png"><img src="http://www.fxdev.org/wp-content/uploads/2010/09/3-Wire.png" alt="" title="3-Wire" width="200" height="207" class="alignright size-full wp-image-815" /></a>Her gün kullandığımız, fakat hiç bir zaman önemsemediğimiz bir araç keypad.<br />
Özellikle telefonlarda ve şu ara moda olan otomatik yiyecek makinelerinde kullanılan bu aracı biz elektronikçiler de oldukça fazla kullanıyoruz, elbette teknik anlamda.<br />
Öncelikle 8051 derslerimde kullandığım keypad&#8217;i hep 7 ya da özel entegresiyle birlikte 4-5 kabloyla kullandım. Yaptığım son projede ise debounce ayarını yanlış hesapladığım için işverenden oldukça fazla şikayet alıp, bir daha gerekmedikçe kullanmamaya dikkat ettim. Fakat bugün, hem de picbasic ile ilgili bir sitede, öyle bir şey gördüm ki bununla ilgili bir örnek yapmadan duramadım.<span id="more-813"></span><a class="lightbox"  title ="3-Wire Keypad" href="http://www.fxdev.org/wp-content/uploads/2010/09/3-Wire-Keypad.png"><img src="http://www.fxdev.org/wp-content/uploads/2010/09/3-Wire-Keypad.png" alt="" title="3-Wire Keypad" width="600" height="320" class="aligncenter size-full wp-image-814" /></a>Yukarıdaki şema incelendiğinde (üzerine basarsanız büyür) 5V&#8217;luk gerilim 1kΩ&#8217;luk dirençler sayesinde 1V aralıklarla bölünüp bunlar keypad&#8217;e girilmiş ve 100kΩ&#8217;lık dirençler üzerinden Atmega16&#8242;nın 3 ADC kanalına ulaşılmıştır. Butonlara basıldığında oluşacak gerilim değişimini minimum seviyede tutmak için çıkışlarda 100kΩ&#8217;luk direnç kullanılmıştır. 7 kablo kullanıldığında uyguladığımız tarama mantığının benzerini yazdığım kodlarda görebilirsiniz.</p>
<p><b>3-Wire Keypad Örneğii:</b></p>
<pre class="brush: c">/* **** www.FxDev.org ****
 * 3-Wire Keypad Demo Code
 */
#include "avr/io.h"
#include "lcd.h"
#include "avr/interrupt.h"

#define ADC_REF_AREF 0x00
#define ADC_REF_AVCC 0x40
#define ADC_REF_INT  0xC0

#define dEBOUNCE	50		// dEBOUNCE süresi kaç milisaniye olacak
#define BEKLEME		1200	// Bu sabit tuşlara basılı olduğunda kaç saniye sonra tuşun aktif olacağını belirtir

unsigned char 	ADC_REF_TYPE;
volatile int 	dbtmr=-1,
				menugecis=0;

ISR(TIMER1_OVF_vect)	// Timer1 taşma kesmesi
{
	TCNT1=0xFF83;	// TCNT1, 16 bitlik registerine 64286 yükleniyor

	if(dbtmr>=0) 		dbtmr++;
	if(menugecis>0) 	menugecis--;
}

void adc_init(unsigned char ADC_REF)
{
	ADCSRA = 0x87;
	ADC_REF_TYPE = ADC_REF;
}

unsigned int read_adc(unsigned char adc_channel)
{
	ADMUX = ADC_REF_TYPE | adc_channel;
	ADCSRA |= 0x40;
	while (ADCSRA &#038; 0x40);
	return ADC;
}

unsigned char keypad(void)
{
	unsigned int gerilim=0;
	unsigned char key='\n';

	gerilim=read_adc(0);
	if(gerilim>100 &#038;&#038; gerilim< =256) key= '*';
	if(gerilim>256 &#038;&#038; gerilim< =512) key= '7';
	if(gerilim>512 &#038;&#038; gerilim< =768) key= '4';
	if(gerilim>768) 		 key= '1';

	gerilim=read_adc(1);
	if(gerilim>100 &#038;&#038; gerilim< =256) key= '0';
	if(gerilim>256 &#038;&#038; gerilim< =512) key= '8';
	if(gerilim>512 &#038;&#038; gerilim< =768) key= '5';
	if(gerilim>768) 		 key= '2';

	gerilim=read_adc(2);
	if(gerilim>100 &#038;&#038; gerilim< =256) key= '#';
	if(gerilim>256 &#038;&#038; gerilim< =512) key= '9';
	if(gerilim>512 &#038;&#038; gerilim< =768) key= '6';
	if(gerilim>768) 		 key= '3';

	return key;
}

unsigned char readkeyboard(void)
{
	static char prev=0,prev1=0;
	char        curr=0,returnvalue=0;

	curr=keypad();

	if(curr!=prev1)
	{
	   dbtmr=0;
	   prev1=curr;
	   returnvalue=prev;
	}
	else
	{
		if(dbtmr>=dEBOUNCE)
		{
			prev=curr;
			prev1=curr;
			returnvalue=curr;
			dbtmr=-1;
		}
		else
		{
			returnvalue=prev;
		}
	}
	return returnvalue;
}

int main(void)
{
	PORTC=0x00;
	DDRC=0xFF;

	lcd_init();
	adc_init(ADC_REF_AVCC);

	TCNT1=0xFF83;		// TCNT1, 16 bitlik registerine 65411 yükleniyor
	TCCR1B=0x02;		// Prescaler değeri 1:8
	TIMSK|=0x04;		// Timer1 taşması kesmesi aktif

	sei();			// Genel kesmeler aktif ediliyor

	lcd_gotoxy(1,1);	// LCD'nin ilk karekterine gidiliyor
	menugecis=100;		// 100ms bekleniyor
	for(;;)
	{
		if((readkeyboard()!='\n')&#038;&#038; ( menugecis == 0))	// Tuşa basıldı mı
		{
			menugecis=BEKLEME;
			veri_yolla(readkeyboard());		// Basılan değer LCD'ye gönderiliyor
		}
	}
}</pre>
<p>Kodları, ilk defa debounce sorunu yaşayan kişileri düşünerek, bu sorunu giderip, gerçek hayatta uygulanabilecek yapıda yazdım. Böylece, en azından, bu sorunu yaşayan arkadaşlarımıza yardımcı olacağımı düşünüyorum.<br />
Herkese iyi çalışmalar.</p>
<p><strong>Dip not:</strong> <em><span style="text-decoration: underline;">Okul ve </span></em><em><span style="text-decoration: underline;"> ARM çalışmalarım nedeniyle bu sıralar yazılarım seyrekleşebilir.</span></em></p>
<p><em><strong>Teşekkür:</strong> Debounce konusundaki yardımları için ENKO Elektronik&#8217;ten Hüseyin TUNA&#8217;ya sonsuz teşekkürler</em>.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 290px;"><g:plusone size="standard" count="1" href="http://www.fxdev.org/3-wire-keypad/">{lang: 'tr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.fxdev.org/3-wire-keypad/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C#: Gauge</title>
		<link>http://www.fxdev.org/c-gauge/</link>
		<comments>http://www.fxdev.org/c-gauge/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 12:40:44 +0000</pubDate>
		<dc:creator>FxDev</dc:creator>
				<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[16]]></category>
		<category><![CDATA[atmega]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[ege]]></category>
		<category><![CDATA[fxdev]]></category>
		<category><![CDATA[gauge]]></category>
		<category><![CDATA[izmir]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[seri]]></category>
		<category><![CDATA[serial]]></category>
		<category><![CDATA[slider]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[üniversitesi]]></category>
		<category><![CDATA[voltage]]></category>

		<guid isPermaLink="false">http://www.fxdev.org/?p=801</guid>
		<description><![CDATA[Çocuklarla meşe oynayacağım, iş yerine gideceğim, raporları yazacağım derken uzun bir süredir siteyle ilgilenemedim. Fakat bu geri dönüşte herkesin oldukça fazla ilgisini çekeceğini düşündüğüm bir konuya el attım: Gauge. İnternette dolaşırken &#8216;gauge&#8217;nin oldukça fazla anlama sahip olduğunu gördüm; 1 milin 100&#8242;de biri, tüfek namlusu ölçü birimi, ölçü aygıtı.. Benim ise ilgilendiğim tanımı &#8216;gösterge&#8217; olanıydı. Daha [...]]]></description>
			<content:encoded><![CDATA[<p><a class="lightbox" title="Microsoft Visual C# 2010" href="http://www.fxdev.org/wp-content/uploads/2010/08/c.png"><img class="alignright size-full wp-image-789" title="Microsoft Visual C# 2010" src="http://www.fxdev.org/wp-content/uploads/2010/08/c.png" alt="" width="214" height="32" /></a>Çocuklarla meşe oynayacağım, iş yerine gideceğim, raporları yazacağım derken uzun bir süredir siteyle ilgilenemedim. Fakat bu geri dönüşte herkesin oldukça fazla ilgisini çekeceğini düşündüğüm bir konuya el attım: <strong>Gauge</strong>.<br />
İnternette dolaşırken &#8216;gauge&#8217;nin oldukça fazla anlama sahip olduğunu gördüm; 1 milin 100&#8242;de biri, tüfek namlusu ölçü birimi, ölçü aygıtı.. Benim ise ilgilendiğim tanımı &#8216;gösterge&#8217; olanıydı. Daha önce C#&#8217;ta chart işlemlerini <a href="http://www.fxdev.org/cosinus-sinus-array-creator/" target="_blank"><strong>burada</strong></a> paylaşmıştım, fakat &#8216;chart&#8217; yapmak istediklerimi tam olarak karşılamamaktaydı, bu yüzden C#&#8217;ın drawing yani çizim kısmına girmem gerekti.<br />
Öncelikle kendim bir seven-segment uygulaması yapmaya karar verdim. Seven segment&#8217;in o köşeli yapısını vermek için <strong>System.Drawing</strong> sınıfının <strong>Polygon</strong> metodunu kullandım. Biraz matematiksel hesaptan sonra yanda görülen sonucu elde ettim.<span id="more-801"></span><a class="lightbox" title="Seven Segment" href="http://www.fxdev.org/wp-content/uploads/2010/08/seven_segment.png"><img class="alignright size-full wp-image-802" title="Seven Segment" src="http://www.fxdev.org/wp-content/uploads/2010/08/seven_segment.png" alt="" width="181" height="350" /></a> Fakat yapmak istediğimi, aklımdakini bir türlü oluşturamadım.<br />
C#&#8217;ta şekil çizmenin nasıl olduğunu öğrendikten sonra ise Amerika&#8217;yı tekrar keşfetmemek amacıyla internette aramalara koyuldum ve sonunda aradığım gauge&#8217;leri buldum.</p>
<p><strong>1) Seven Segment</strong><br />
İlk gauge&#8217;miz biz elektronikçilerin asla vazgeçemeyeceği seven segmentle ilgili. Codeproject&#8217;te gördüğüm seven segment uygulaması <a href="http://dmitrybrant.com/2009/07/01/seven-segment-display-for-dot-net" target="_blank"><strong>Dmitry Brant</strong></a>&#8216;a ait ve oldukça başarılı bir tool. İster tek bir seven segment öğesini ister küme halinde bulunan seven segment öğelerini formunuza yerleştirip, renginden, yatıklığına, büyüklüğünden, şekline kadar her şeyle oynayabiliyorsunuz. Telif hakları konusunda Dmitry Brant sadece ticari uygulamalar için kendisi ile görüşülmesini istemiş fakat Türkiye gibi bir ülkede kim bunu dikkate alır orası muamma.</p>
<p><strong>2) Gauge</strong><br />
İkinci ve gördüğümde &#8216;işte bu&#8217; dediğim gauge toolumuzu ise <a href="http://www.ucancode.net/CSharp_Tutorial_GDI+_Gauge_Source_Code.htm" target="_blank"><strong></strong><strong>bu siteden</strong></a> buldum. İlk bakışta hiç bir şey anlaşılmasa da kaynak dosyayı indirip projenize dahil etmenizle gerçekten her anlamda kontrol edebildiğiniz bir göstergeniz oluyor. Büyüklüğünü, renklerini, açılarını, gösterge büyüklüklerini yani hemen hemen her şeyi kontrol edebiliyorsunuz. Tek yapmanız gereken class dosyasını projenize eklemek.</p>
<p><strong>3) Sliding Scale</strong><br />
Üçüncü gaugemiz ise <a href="http://www.codeproject.com/KB/miscctrl/SlidingScale.aspx" target="_blank"><strong>Tefik Becirovic</strong></a>&#8216;e ait. Özellikle eski tip elektrik panolarında gördüğüm bu gösterge yerine göre oldukça faydalı işlevlerde kullanılabilir.</p>
<p>Projelerinize ayrı bir renk katacak bu göstergeler ile bir uygulama yapmamak olmazdı elbette. Bu düşünce ile aklıma ilk gelen uygulama, mikrodenetleyiciye bağlı sensörlerden alınan bilgilerin bu gaugeler kullanılarak bilgisayarda gösterilmesiydi ve sonucunda aşağıda görülen yapı ortaya çıktı.<br />
<a class="lightbox"  title ="Atmega 16 Terminal" href="http://www.fxdev.org/wp-content/uploads/2010/08/atmega_16_terminal.png"><img src="http://www.fxdev.org/wp-content/uploads/2010/08/atmega_16_terminal.png" alt="" title="Atmega 16 Terminal" width="640" height="585" class="aligncenter size-full wp-image-803" /></a>Yukarıdaki resimden de görüleceği üzere seri porttan haberleşme için gerekli protokolleri ayarlayan kısım <a href="http://www.fxdev.org/serial-port-terminal/" target="_blank"><strong>daha önceki projemden</strong></a> bire bir alınma. Projenin nasıl bir işleve sahip olduğu ise aşağıdaki videodan görülebilir. Videoyu tam ekran seyretmenizi öneririm. (Eğer video açılmıyorsa youtube ile ilgili bir probleminiz var demektir.)</p>
<p><a href="http://www.fxdev.org/c-gauge/"><em>Click here to view the embedded video.</em></a></p>
<p>Videodan da görüleceği üzere Proteus ve yazdığım program arasındaki bağlantı, Proteus&#8217;un içerisinde bulunan COMPIM adlı araçla mümkün olmuştur. Projenin kaynak kodlarını paylaşmayacak olsamda seri porttan gönderdiğim seri bilgi şu şekilde.<br />
4 bit: İlk seven segment dizisinin değeri, 1234 şeklinde gitmeli,<br />
4 bit: İkinci seven segment dizisinin değeri, 1234 şeklinde gitmeli,<br />
4 bit: İlk gerilim kaydırıcısının değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli,<br />
4 bit: İkinci gerilim kaydırıcısının değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli,<br />
4 bit: Üçüncü gerilim kaydırıcısının değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli,<br />
4 bit: İlk sıcaklık göstergesinin değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli,<br />
4 bit: İkinci sıcaklık göstergesinin değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli,<br />
4 bit: İlk gerilim göstergesinin değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli,<br />
4 bit: İkinci gerilim göstergesinin değeri, 5V=1024 olarak düşünülmeli, maksimum 1024 gönderilmeli.</p>
<p>Toplamda 36 byte boyutundaki diziyi C# ile çekmek için ise aşağıdaki kod öbeğini kullanabilirsiniz.</p>
<pre class="brush: csharp">private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e )
        {
            text = serialPort1.ReadExisting();

            if (text_temp.Length == 36 &#038;&#038; flag == true)
            {
                flag = false;
            }
            else if(flag==true)
            {
                if (text_temp.Length < = 36)
                    text_temp += text;
                else
                    text_temp = "";
            }
        }</pre>
<p>Son olarak gauge denemesi yaparken kullandığım <strong>CoreAudioApi</strong> adlı API'ye değinelim. Windows seslerini kontrol etmek için tasarlanmış bu .dll, <a href="http://www.codeproject.com/KB/vista/CoreAudio.aspx" target="_blank"><strong>Ray M.</strong></a> tarafından yazılmış ve tamamen bedava. Api bilgisayarın master sesini kontrol ettiği gibi, o anki sağ, sol ve master ses seviyelerini de alabiliyor. Bu da bizlere ses düzeylerini öğrenmemiz konusunda yardımcı oluyor.</p>
<p>Denememin sonucunda bu API'yi ve gauge'leri kullanarak aşağıda görebileceğiniz VuMetre uygulamasını yaptım.<br />
<a class="lightbox"  title ="Computer VuMeter" href="http://www.fxdev.org/wp-content/uploads/2010/08/computer_vumeter.png"><img src="http://www.fxdev.org/wp-content/uploads/2010/08/computer_vumeter.png" alt="" title="Computer VuMeter" width="600" height="177" class="aligncenter size-full wp-image-805" /></a>Bu uygulamaya ait video görüntüsü ise aşağıdan görülebilir. (Bilgisayarın sesini açarak dinleyiniz.)</p>
<p><a href="http://www.fxdev.org/c-gauge/"><em>Click here to view the embedded video.</em></a></p>
<p>Sonuç olarak tüm bu değerleri bir label'a ya da textbox'a yazdırıp, değişen değerleri yine gözlemleyebilirdik fakat örneklerde görüldüğü üzere gauge'ler projeye hem görsel hem de okuma kolaylığı kazandırdığından, kullanıcılar tarafından her zaman tercih edilmektedir. Bu yüzden sonraki yazılarımda bulduğum yeni gauge'leri yine sizlerle buradan paylaşacağım.</p>
<p>Programların 32 ve 64 bitlik sürümlerini ve Atmega16 için Proteus ve .hex dosyalarını <a href="http://www.4shared.com/file/fm6faJZQ/Gauge.html" target="_blank"><b>buradan</b></a> indirebilir, yeni sürüm güncellemelerini <a href="http://www.fxdev.org/muhendislik/"><b>Mühendislik</b></a>/<a href="http://www.fxdev.org/muhendislik/c-sharp/"><b>C#</b></a> bölümünden takip edebilirsiniz. Programların çalışabilmesi için sisteminizde Microsoft .NET Framework kurulu olması gerekmektedir. Microsoft .NET Framework kurulum dosyasına <a href="http://www.microsoft.com/net/" target="_blank"><b>buradan</b></a> ulaşabilirsiniz. Ayrıca programları istediğiniz şekilde paylaşıp, kullanabilirsiniz.</pre>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 290px;"><g:plusone size="standard" count="1" href="http://www.fxdev.org/c-gauge/">{lang: 'tr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.fxdev.org/c-gauge/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Haftasonu Projesi</title>
		<link>http://www.fxdev.org/haftasonu-projesi/</link>
		<comments>http://www.fxdev.org/haftasonu-projesi/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 21:03:51 +0000</pubDate>
		<dc:creator>FxDev</dc:creator>
				<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[atmega]]></category>
		<category><![CDATA[atmega16]]></category>
		<category><![CDATA[atmel]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[lcd]]></category>
		<category><![CDATA[ntc]]></category>
		<category><![CDATA[proje]]></category>
		<category><![CDATA[sıcaklık]]></category>
		<category><![CDATA[timer]]></category>
		<category><![CDATA[watchdog]]></category>

		<guid isPermaLink="false">http://www.fxdev.org/?p=773</guid>
		<description><![CDATA[Gerek işlerimin yoğunluğundan gerekse üşengeçlikten uzun süredir siteme proje koyamıyordum. Bugün biraz bunu kırmak amaçlı ufak da olsa, pek çok amatör mikrodenetleyici kullanıcısının göz ardı ettiği ADC çoğullamaya değinmek istedim. Öncelikle mantık devreleri dersinde hepimizin kullandığı multiplexer ya da demultiplexer entegrelerine benzer bir entegre arayışına girdim. Fakat kullanacağım yapı TTL mantığında çalışmaması gerektiğinden (yani 1V&#8217;tu [...]]]></description>
			<content:encoded><![CDATA[<p><a class="lightbox"  title ="NTC" href="http://www.fxdev.org/wp-content/uploads/2010/07/NTC.jpg"><img src="http://www.fxdev.org/wp-content/uploads/2010/07/NTC.jpg" alt="" title="NTC" width="189" height="208" class="alignright size-full wp-image-775" /></a>Gerek işlerimin yoğunluğundan gerekse üşengeçlikten uzun süredir siteme proje koyamıyordum.<br />
Bugün biraz bunu kırmak amaçlı ufak da olsa, pek çok amatör mikrodenetleyici kullanıcısının göz ardı ettiği ADC çoğullamaya değinmek istedim.<br />
Öncelikle mantık devreleri dersinde hepimizin kullandığı multiplexer ya da demultiplexer entegrelerine benzer bir entegre arayışına girdim. Fakat kullanacağım yapı TTL mantığında çalışmaması gerektiğinden (yani 1V&#8217;tu sıfır algılamasını istemiyorum) multiplexer ve demultiplexer&#8217;ın bu iş için uygun olmayacağını biliyordum. Bir kaç yerde bu sorunumu dile getirdiğimde ise piyasada oldukça fazla kullanılan 74HC4051 ve 74HC4052 entegrelerini işittim.<span id="more-773"></span><br />
Bu entegrelerin kullanımı ise oldukça basit. Öncelikle entegreyi enable eden pini toprağa çekiyorsunuz, ardından okumak istediğiniz kanalı, A-B-C pinlerinden &#8216;binary&#8217; şeklinde girip, tek çıkışından, istediğini kanalı okuyorsunuz. Ben uygulamamda 74HC4051 kullandım. Entegrenin nasıl kullanıldığını datasheet&#8217;e bakmadan da görmeniz mümkün.<br />
Daha sonra düşündüğümde ise sadece bunu gösterip &#8216;alın işte size proje&#8217; demek içime sinmedi. Onun için stajda bolca uğraştığım NTC&#8217;leri projeye dahil ettim. Bir de merak ettiğimden Atmega16&#8242;ya 140ms&#8217;lik bir Watchdog kurdum. Anlayacağınız bir taşla 3 kuş vurmuş oldum. Bir de tüm sıcaklık değerlerini görmek için 4&#215;20 LCD ekledim. Açılış ve çalışma ekranını aşağıdan görebilirsiniz.<br />
<a class="lightbox" title="NTC, ATMEGA16, 4x16LCD, WATCHDOG" href="http://www.fxdev.org/wp-content/uploads/2010/07/ntc.png"><img class="aligncenter size-full wp-image-774" title="NTC, ATMEGA16, 4x16LCD, WATCHDOG" src="http://www.fxdev.org/wp-content/uploads/2010/07/ntc.png" alt="" width="622" height="384" /></a>NTC için ise aşağıdaki 8 bit çözünürlüklü tabloyu kullandım. Bu tablo genel bir tablo olmayıp, kullandığınız NTC&#8217;den NTC&#8217;ye değiştiği için, hazır buldum, kullanayım demeyin. Ben 40-50C civarlarının hassas olmasını istediğimden tabloyu buna göre düzenledim.</p>
<pre class="brush: c">const signed char ntc_table[256] ={
127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
127,127,127,127,127,127,127,127,126,124,122,121,119,118,117,115,
114,113,112,111,109,108,107,106,105,104,103,102,101,100,100,99,
98,97,96,95,94,94,93,92,91,91,90,89,88,88,87,86,
86,85,84,84,83,82,82,81,80,80,79,78,78,77,77,76,
76,75,74,74,73,73,72,72,71,70,70,69,69,68,68,67,
67,66,66,65,65,64,64,63,63,62,62,61,61,60,60,59,
59,58,58,57,57,56,56,55,55,54,54,53,53,52,52,51,
51,50,50,50,49,49,48,48,47,47,46,46,45,45,44,44,
43,43,42,42,41,41,41,40,40,39,39,38,38,37,37,36,
36,35,35,34,34,33,33,32,32,31,31,30,30,29,29,28,
28,27,27,26,26,25,25,24,23,23,22,22,21,21,20,20,
19,18,18,17,17,16,15,15,14,13,13,12,12,11,10,10,
9,8,7,7,6,5,4,4,3,2,1,0,0,-1,-2,-3,-4,-5,-6,-7,
-8,-9,-10,-11,-12,-13,-15,-16,-17,-19,-20,-22,
-23,-25,-27,-29,-31,-33,-35,-38,-40,-44,-47,
-51,-56,-63,-71,-85};</pre>
<p>Proje ile ilgili simülasyon, c kodu ve .hex dosyasına <a href="http://www.4shared.com/file/QmwPDM4H/NTC.html" target="_blank"><b>buradan</b></a> veya <a href="http://www.fxdev.org/muhendislik/" target="_blank"><b>Mühendislik</b></a>/<a href="http://www.fxdev.org/muhendislik/atmel_avr/" target="_blank"><b>Atmel AVR</b></a> bölümünden ulaşabilirsiniz.<br />
Herkese iyi çalışmalar.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 290px;"><g:plusone size="standard" count="1" href="http://www.fxdev.org/haftasonu-projesi/">{lang: 'tr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.fxdev.org/haftasonu-projesi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AVR&#8217;ye Merhaba</title>
		<link>http://www.fxdev.org/avrye-merhaba/</link>
		<comments>http://www.fxdev.org/avrye-merhaba/#comments</comments>
		<pubDate>Thu, 27 May 2010 22:47:37 +0000</pubDate>
		<dc:creator>FxDev</dc:creator>
				<category><![CDATA[İnceleme]]></category>
		<category><![CDATA[Mühendislik]]></category>
		<category><![CDATA[16]]></category>
		<category><![CDATA[adc]]></category>
		<category><![CDATA[ansi c]]></category>
		<category><![CDATA[atmega]]></category>
		<category><![CDATA[atmel]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[lm35]]></category>
		<category><![CDATA[sıcaklık]]></category>
		<category><![CDATA[voltage]]></category>
		<category><![CDATA[voltaj]]></category>

		<guid isPermaLink="false">http://www.fxdev.org/?p=722</guid>
		<description><![CDATA[Final sınavları başlayınca insana nereden geldiğini bilmediğim bir sıkıntı basıyor. Geçen senelerde bu sıkıntı anlarında sitemi düzenler ya da photoshop ile header tasarladım fakat bu dönem bir değişiklik yapıp, başka tür bir mikrodenetleyiciye giriş yapmak istedim. 8051 ile başlayan mikrodenetleyici maceram, PIC ile ilerlemiş fakat nedense hiç bir zaman Atmel&#8217;in ürettiği AVR&#8217;ye bulaşmamıştım. Hemen bu [...]]]></description>
			<content:encoded><![CDATA[<p><a class="lightbox"  title ="Atmel" href="http://www.fxdev.org/wp-content/uploads/2010/05/Atmel.jpg"><img src="http://www.fxdev.org/wp-content/uploads/2010/05/Atmel.jpg" alt="" title="Atmel" width="248" height="179" class="alignright size-full wp-image-724" /></a>Final sınavları başlayınca insana nereden geldiğini bilmediğim bir sıkıntı basıyor.<br />
Geçen senelerde bu sıkıntı anlarında sitemi düzenler ya da photoshop ile header tasarladım fakat bu dönem bir değişiklik yapıp, başka tür bir mikrodenetleyiciye giriş yapmak istedim.<br />
8051 ile başlayan mikrodenetleyici maceram, PIC ile ilerlemiş fakat nedense hiç bir zaman Atmel&#8217;in ürettiği AVR&#8217;ye bulaşmamıştım. Hemen bu eksiğimi gidermek, en azından ben buna el attım demek için kolları sıvadım.<br />
Öncelikle PIC&#8217;ten AVR&#8217;ye geçiş yapacaklar için söylemem gereken birinci şey şu: AVR için gerekli derleyiciler <b>bedava</b>!<span id="more-722"></span><br />
Evet yanlış duymadınız, PIC mikrodenetleyicilerde olduğu gibi yok deneme süresiymiş, yok başka bir şeymiş uğraşmıyorsunuz. Bu, eğer bir firma iseniz, çok büyük bir avantaj demek.<br />
Ayrıca belirtmem gerekiyor, Atmega16&#8242;nın datasheet&#8217;i bugüne kadar gördüğüm en güzel, en açıklayıcı datasheetlerden biri. Utanmasa sizin yerinize kodunuzu yazacak.<br />
&#8220;Vay bu çok güzelmiş&#8221; diyorsanız, sırayla yapmanız gerekenler ise şöyle:</p>
<p>- Öncelikle <a href="http://winavr.sourceforge.net/" target="_blank"><b>WinAVR</b></a>&#8216;yi bilgisayarımıza kuruyoruz.<br />
- Daha sonra <a href="http://www.eclipse.org/" target="_blank"><b>Eclipse</b></a> sitesinden Eclipse IDE for C/C++ Developer pakedini indiriyoruz, hemen bir yere dosyaları çıkartıp çalıştırıyoruz.<br />
- Daha sonra ise Eclipse&#8217;in Help sekmesinden Install New Software/Add kısmına basıp Location bölümüne &#8220;http://avr-eclipse.sourceforge.net/updatesite/&#8221; yazarak, eklentiyi yüklüyoruz ve hepsi bu.</p>
<p>Artık yeni proje oluşturup, AVR mikrodenetleyicinizi seçip kullanabilirsiniz.<br />
WinAVR&#8217;de ANSI C kullanıldığı için, daha önce PIC için hazırladığım donanım kütüphanelerimi çok az değiştirip kullanmak gerçekten çok rahat. Buradan hâlâ Pic Basic, CCS C kullananlara duyurulur.</p>
<p>Ben ilk örneğimi, Atmega16&#8242;nın ADC&#8217;lerinden bilgi okuyup, bunu LCD&#8217;de göstermek için uyguladım. Aşağıda uygulamaya ait resmi ve yazdığım basit kodları bulabilirsiniz. Üzerinde herhangi bir değişiklik yapıp kullanabilirsiniz.<br />
Yalnız kodu iyi incelerseniz PIC&#8217;teki TRISx yerine DDRx&#8217;nin geldiğini, PORT&#8217;larn PIC&#8217;teki gibi RB0 gibi bit bit kontrol edilemediğini göreceksiniz. İlk AVR denemelerinizde buna dikkat edip, &#8216;maskeleme&#8217; ne imiş öğrenmeniz gerekiyor. Gerisi yine size kalmış.</p>
<p>Sonuç olarak söylemem gerekirse; AVR ne denli güzelse, finaller de o denli sıkıcı.<br />
Herkese çalışmalarında, bana da finallerde başarılar.<a class="lightbox" title="Atmega16 ADC Uygulaması" href="http://www.fxdev.org/wp-content/uploads/2010/05/ADC.png"><img class="aligncenter size-full wp-image-723" title="Atmega16 ADC Uygulaması" src="http://www.fxdev.org/wp-content/uploads/2010/05/ADC.png" alt="" width="526" height="407" /></a></p>
<p><b>ADC Okuma Örneği:</b></p>
<pre class="brush: c">/* **** www.FxDev.org ****
 * ADC'den Gerilim ve Sıcaklık Ölçen Program
 */

#include "avr/io.h"
#include "util/delay.h"
#include "lcd.h"

#define ADC_REF_AREF 0x00
#define ADC_REF_AVCC 0x40
#define ADC_REF_INT  0xC0

unsigned char ADC_REF_TYPE;

void adc_init(unsigned char ADC_REF)
{
	ADCSRA = 0x87;
	ADC_REF_TYPE = ADC_REF;
}

unsigned int read_adc(unsigned char adc_channel)
{
	ADMUX = ADC_REF_TYPE | adc_channel;
	ADCSRA |= 0x40;
	while (ADCSRA &#038; 0x40);
	return ADC;
}

int main(void)
{
	unsigned int sicaklik,voltaj;
	PORTC=0x00;
	DDRC=0xFF;

	lcd_init();

	adc_init(ADC_REF_AVCC);

	lcd_yaz("FxDev.org Sunar!");
	lcd_gotoxy(2,1);
	lcd_yaz("AVR'ye Merhaba..");
	_delay_ms(1500);
	lcd_clear();

	lcd_gotoxy(1,1);
	veri_yolla('C');
	veri_yolla(0xDF);
	veri_yolla(':');
	lcd_gotoxy(2,1);
	lcd_yaz("V :");

	for(;;)
	{
		lcd_gotoxy(1,4);	// Okunan değer LCD'ye yazılıyor
		sicaklik=read_adc(0)*48; // Hesaplama yapılıyor
		_delay_us(50);
		veri_yolla(sicaklik/1000+48);
		veri_yolla((sicaklik%1000)/100+48);
		veri_yolla('.');
		veri_yolla((sicaklik%100)/10+48);
		veri_yolla(sicaklik%10+48);
		veri_yolla(0xDF);
		veri_yolla('C');
		lcd_gotoxy(2,4);
		voltaj=(int)(read_adc(1)/2.048);
		_delay_us(50);
		veri_yolla(voltaj/1000+48);
		veri_yolla((voltaj%1000)/100+48);
		veri_yolla('.');
		veri_yolla((voltaj%100)/10+48);
		veri_yolla(voltaj%10+48);
		veri_yolla('V');
	}
}</pre>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 290px;"><g:plusone size="standard" count="1" href="http://www.fxdev.org/avrye-merhaba/">{lang: 'tr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.fxdev.org/avrye-merhaba/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

