30 Ocak 2016 Cumartesi

MICROCHIP ATMEL'İ SATIN ALDI

Microchip, Atmel’i 3,6 Milyar Dolara Satın Aldı…



Microchip firması hamle yaparak, Atmega mikrodenetleyicilerini üreten Atmel firmasını 3,6 milyar dolara 
 satın aldı. 

29 Ocak 2016 Cuma

ATMEGA32 İLE LDR IŞIK SENSÖRÜ

Bu yazımızda ATmega32 mikrodenetleyicisi ile LDR'yi kullanarak ışık(LED)yakıp söndürme işlevini gerçekleyeceğiz.



             1)ATMEGA32 İÇ YAPISI 

                                 

Atmega32 40 adet Pine sahiptir. Bunlar;
  1. 8 tane ADC (Analog Dijital Çevirici)
  2. ICSP Pinleri (MOSI,MISO,SCK,SS) bunlar proglanma pinleri
  3. 2 adet XTAL pini (Kristal Osilatörün Bağlandığı Pinler)
  4. Reset Pini (içindeki programı silmeye yarayan pin)
  5. RX,TX pinleri (seri port haberleşme pinleri)
  6. Vcc ,GND pinleri (denetleyicin beslemesi, aktifleştircisi)
  7. AVcc,GND pinleri (Analog pinleri aktifleştirmek için beslemeler)
  8. AREF pini (analog pinler için referans ayarının yapıldığı pin)
  9. 2 adet INT pini (dış kesme pinleri)
  10. Totalde 32 tane Programlanabilir Pine sahiptir.
Atmega32'nin datasheet'ine baktığımız zaman en fazla 12Mhz'lik kristal ve en fazla 22pF'lık kutupsuz kondansatör ile çalıştığını görürüz. 


                            
Yukarıdaki resimde verilen bağlantı şekli genel mikrodenetleyici kristal bağlama şeklidir.Biz datasheetten okuduğumuz sınır değerlere uygun olarak;
  • C1,C2 kondansatörünü 22pF,XTAL kristalini 8 Mhz seçtik
          
           3) LDR Nedir?

Direnç değeri aydınlıkta azalan, karanlıkta ise artan elemana foto direnç (LDR)denir.Tam  aydınlık bir alanda yani üzerine güneş ışığı düşüyorken direnç değeri 5-10 Ω değerleri arasına kadar düşebilir. Tam karanlık bir ortamda yani üzerine az yada hiç ışık düşmezken  direnç değeri 200 MΩ gibi oldukça yüksek direnç değerleri gösterir. Yani foto direnç, üzerine düşen ışık arttıkça direnç değeri lineer olmayan bir şekilde azalır. Bu yüzden ışık şiddetinin artması direnç değerinin düşmesine, ışık şiddetinin azalması ise direnç değerinin artmasına sebep olur.


                 4)Devre Şeması
                 5)Devrenin KODU



#include <avr/io.h>
#include <util/delay.h>

#define LTHRES 500

// initialize adc
void adc_init()
{
    // AREF = AVcc
    ADMUX = (1<<REFS0);

    // ADC Enable and prescaler of 128
    // 16000000/128 = 125000
    ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}

// read adc value
uint16_t adc_read(uint8_t ch)
{
    // select the corresponding channel 0~7
    // ANDing with '7' will always keep the value
    // of 'ch' between 0 and 7
    ch &= 0b00000111;  // AND operation with 7
    ADMUX = (ADMUX & 0xF8)|ch;     // clears the bottom 3 bits before ORing

    // start single conversion
    // write '1' to ADSC
    ADCSRA |= (1<<ADSC);

    // wait for conversion to complete
    // ADSC becomes '0' again
    // till then, run loop continuously
    while(ADCSRA & (1<<ADSC));

    return (ADC);
}

int main()
{
    uint16_t adc_result0, adc_result1;
    char int_buffer[10];
    DDRC = 0x01;           // to connect led to PC0

    // initialize adc and lcd
    adc_init();



    _delay_ms(50);

    while(1)
    {
        adc_result0 = adc_read(0);      // read adc value at PA0


        // condition for led to glow
        if (adc_result0 < LTHRES)
        PORTC = 0x00;
        else
        PORTC = 0x01;


    }
}





Okuduğunuz için Teşekkür ederim. Size daha iyi anlatım yapabilmem için lütfen yorumlarınızı eksik etmeyin


28 Ocak 2016 Perşembe

ATMEGA32 İLE SICAKLIK ÖLÇER

Bu yazımızda ATMEGA32 mikrodenetleyicisine LM35DZ sıcaklık sensörünü bağlayarak sensörün ölçtüğü sıcaklığı 2x16'lık LCD ekran ile Görüntülemeyi anlatacağız


             1)ATMEGA32 İÇ YAPISI 

                                 

Atmega32 40 adet Pine sahiptir. Bunlar;
  1. 8 tane ADC (Analog Dijital Çevirici)
  2. ICSP Pinleri (MOSI,MISO,SCK,SS) bunlar proglanma pinleri
  3. 2 adet XTAL pini (Kristal Osilatörün Bağlandığı Pinler)
  4. Reset Pini (içindeki programı silmeye yarayan pin)
  5. RX,TX pinleri (seri port haberleşme pinleri)
  6. Vcc ,GND pinleri (denetleyicin beslemesi, aktifleştircisi)
  7. AVcc,GND pinleri (Analog pinleri aktifleştirmek için beslemeler)
  8. AREF pini (analog pinler için referans ayarının yapıldığı pin)
  9. 2 adet INT pini (dış kesme pinleri)
  10. Totalde 32 tane Programlanabilir Pine sahiptir.
Atmega32'nin datasheet'ine baktığımız zaman en fazla 12Mhz'lik kristal ve en fazla 22pF'lık kutupsuz kondansatör ile çalıştığını görürüz. 


                            
Yukarıdaki resimde verilen bağlantı şekli genel mikrodenetleyici kristal bağlama şeklidir.Biz datasheetten okuduğumuz sınır değerlere uygun olarak;
  • C1,C2 kondansatörünü 22pF,XTAL kristalini 8 Mhz seçtik


            2)LM35DZ Sensörü Bacak Bağlantısı



                             
şekildede görüldüğü gi düz kısmı size bakacak şekilde en soldaki pin besleme pini(Vs),ortadaki pin çıkış pini(Analog çıkış,Vout),en sağdaki pin ise toprak(GND) pinidir.



           3)LCD Bacakları

Yukarıdaki şekilde görülen 16x2'lik bir LCD displaydir.LCD displayler I2C protokolü ile haberleşir.Biz bu devremizde 1602a LCD displayini seçtik.

                 

Pinlerinin Anlamları ise;

  1. Vss = Displayin toprağıdır.
  2. VDD = Displayin beslemesidri.(5v)
  3. V0 = Kontrast Ayarıdır.
  4. RS = Hafıza seçme pinidir.
  5. R/W = Okuma/ Yazma aktifleştirme pinidir.
  6. E = Aktifleştirme pinidir.
  7. DB PİNLERİ = Veri Yolu pinleri(programlanacak pinlerdir)
  8. A = Arka fon ışığı beslemesidir.
  9. K = Arka fon ışığı toprağıdır.



           4)Devre Şeması



NOT: LCD V0 pini 10k'lık bir potansiyometre ile toprağ bağlanacaktır.Bağlana potansiyometrenin değeri ile oynanarak LCD'nin kontrast ayarı yapılır!!!

Devre Şeması Açıklaması;

  1. Lm35'in 2. ve 3. bacağı arasına 100uF'lıkc elektrolitik kondansatör bağlanmasının nedeni ölçülen değerdeki sapmayı gidermek içindir.
  2. AREF pinin kutupsuz kondansatör ile beslenmeye bağlanmasının nedeni Lm35'in analog sensör olması ve beslemeden gelen DC gerilimin gürültüsünü giderip sensörü verilerini daha hassas yapmaktır
  3. ICSP pinleri ise Programlama için kullanılır.




           5)Devrenin KODU


#include <avr/io.h>
#define F_CPU 1000000
#include <util/delay.h>
#include <stdlib.h>
#define enable            5
#define registerselection 6
void send_a_command(unsigned char command);
void send_a_character(unsigned char character);
void send_a_string(char *string_of_characters);
int main(void)
{
    DDRB = 0xFF;
    DDRA = 0;
    DDRD = 0xFF;
    _delay_ms(50);
    
    ADMUX |=(1<<REFS0)|(1<<REFS1);
    ADCSRA |=(1<<ADEN)|(1<<ADATE)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
    
    int16_t COUNTA = 0;
    char SHOWA [3];
     
    send_a_command(0x01); //Clear Screen 0x01 = 00000001
    _delay_ms(50);
    send_a_command(0x38);
    _delay_ms(50);
    send_a_command(0b00001111);
    _delay_ms(50);
    
    ADCSRA |=(1<<ADSC);
    while(1)
    {
        COUNTA = ADC/4;
        send_a_string ("BERK DESIGN");
        send_a_command(0x80 + 0x40 + 0);
        send_a_string ("Temp(C)=");
        send_a_command(0x80 + 0x40 + 8);
        itoa(COUNTA,SHOWA,10);
        send_a_string(SHOWA);
        send_a_string ("      ");
        send_a_command(0x80 + 0);
        
    }    
}
void send_a_command(unsigned char command)
{
    PORTB = command;
    PORTD &= ~ (1<<registerselection);
    PORTD |= 1<<enable;
    _delay_ms(20);
    PORTD &= ~1<<enable;
    PORTB = 0;
}
void send_a_character(unsigned char character)
{
    PORTB = character;
    PORTD |= 1<<registerselection;
    PORTD |= 1<<enable;
    _delay_ms(20);
    PORTD &= ~1<<enable;
    PORTB = 0;
}
void send_a_string(char *string_of_characters)
{
    while(*string_of_characters > 0)
    {
        send_a_character(*string_of_characters++);
    }
}




           

Okuduğunuz için Teşekkür ederim. Size daha iyi anlatım yapabilmem için lütfen yorumlarınızı eksik etmeyin








ARDUİNODAN AVR PROGRAMLAMA

1. Adım: Gerekli Donanım & Yazılımlar

Donanımlar;

Arduino
AVR Microdenetleyici (Atmega328,Atmega8,Attiny2313,vs.)
Jumper kablolar
LED
220 Ohm Direnç
10 mikrofarad elektrolit kapasitör

Yazılımlar;


Aşağıdaki yazılımlara tıklayarak ulaşabilirsiniz.

Arduino IDE
WinAVR

Makefile

main.c

2. Adım: Arduino Sketch Yükleme

Bu aşamada Arduino IDE'niz içerisinde mevcut olan bir örneği Arduino kartımıza yükleyeceğiz. Yapmamız gereken konum olarak Arduino IDE>>File>>Examples>>Arduino ISP seçip kodu Arduino kartımıza yüklemek.

3. Adım: WinAVR Kurulumu

WinAVR programını indirdikten sonra programı bilgisayarımıza kuracağız.

Kurulum aşamasında resimde görüldüğü gibi “Install Files” ve “Add Directories to PATH”kutucuklarının işaretli olduğuna dikkat etmeli ve işaretli değilse işaretleyerek kuruluma devam etmeliyiz. 



4. Adım: Makefile Dosyasının Düzenlenmesi

İndirmiş olduğumuz makefile dosyasını wordpad programıyla açıyoruz.

Gelen ekran içerisinde kullandığımız mikrodenetleyici türüne göre değiştireceğimiz kısımlar var; DEVICE, CLOCK, PROGRAMMER, OBJECTS, FUSES peki bunları nasıl değiştireceğiz.
DEVICE = Kullandığımız AVR Mikrodenetleyiciyi belirtmeliyiz (Atmega8 kullanıldı)
CLOCK = Kullandığımız Mikrodenetleyicimizin timer değerini yazıyoruz (Datasheet te geçmektedir)
PROGRAMMER = -c arduino -P PORT -b 19200 (Arduinonuzun bağlı olduğu PORT'u yazmamız gerekiyor, Resimde gösterildiği gibi PORTu bulabilirsiniz.)

OBJECTS = Derlenmiş olan C kodunuzun dosyası (kodadı.o formatında olmalıdır)
FUSES = Her mikrodenetleyici farklı değerler içerir kullandığımız mikrodenetleyicinin fuse değerine online fuse hesaplama sitesinden ulaşabilirsiniz.

5. Adım: Devrenin Kurulması

öncelikle kullanacağımız mikodenetleyicinin pin diyagramınu iyi bilmemiz gerekiyor, bunun için mikrodenetleyicimizin datasheetini incelememiz yeterli olacaktır.


Resimde arduino ile mikrodenetleyici bağlantı tablosu verilmiştir. Bu tabloya göre eğer Atmega8 kullanıyorsak bağlantı şekli aşağıdaki gibi olacaktır. Kullandığımız mikrodenetleyiciye göre pinler farklılık gösterebilir bu sebeble datasheette geçen pin diyagramını baz alarak bağlantıları yapmamız gerekecektir.


► İlginizi Çekebilir : Proteus İle Arduino Simülasyonu

C kodunda ledimizi PD5 pinine bağladığımızı belirtmiştik, PD5 pini Atmega8 de 11. pin olduğundan ledimizi bu pine bağlıyoruz. Ayrıca otoreset olayını sağlamamız için Reset ile GND arasına 10 mikrofaradlık bir kondansatör bağladık.


    

6. Adım: C kodunun yüklenmesi

Bağlantılarımızdan emin olduktan sonra kodu mikrodenetleyiciye yüklemek için Komut İstemcisini açıyoruz. Komut İstemcisine BAŞLAT'a sağ tıklayarak, ve ya klavyenizden Windows ve R tuşlarına basarak gelen ekranda cmd yazarak ulaşabiliriz.


İndirdiğimiz main.c ve makefile dosyalarını bir klasör içerisinde veraber olacak şekilde tutuyoruz. Bu klasörün konumunu komut istemcisine girmemiz gerekecek, kolay olması açısından masaüstünde "avr" adlı bir klasör açarak dosyaları avr klasörünün içine atabiliriz. Komut istemcisi ekranına "cd Desktop/avr/" yazarak satırı onaylıyoruz.

Gelen yeni satırda "make flash" komutunu yazarak tekrar onaylıyoruz, ve C kodu ile bir led yaktınız. İsterseniz aynı yolu takip ederek farklı projelere imzatabilirsiniz.


Not: Denetleyicinin içine atılan kod “main.c” dosyasıdır içine atılacak kod değiştirmek istenirse not defteri veya herhangi bir “C” programından yeni kod yazılabilir!