9 Aralık 2015 Çarşamba

En Fazla 4 Basamaklı Sayılar Üzerinde 4 İşlem Yapan Hesap Makinesi(Picbasic Pro vs LCD vs KeyPad)

Öncelikle bu iş için kullanılacak olan ISIS bileşenlerine bakalım.
  • 16F877 mikrodenetleyicisi
  •  LM016L(LCD)


  •  PullDown

  • KEYPAD-SMALLCALC
  • Power(güç kaynağı)
Bu bileşenlerden oluşan ISIS devresi ise aşağıdaki gibidir.

 Bu yazıda işin yazılımsal kısmıyla ilgileniyoruz.Bu bileşenler hakkında daha çok bilgi elde etmek için bileşen üzerine sağ tıklayıp "Display Datasheet" seçeneyi kullanılabilir.Bu devre üzerindeki bileşenlerin microdenetleyici ile etkileşimde buluna bilmesi için bu bileşenlerin microdenetleyiciye tanıtılması gerekmektedir.Yukarıdaki bileşenler arasında buna ihtiyacı olan bileşen lcd dir.Dolayısıyla lcd yi 16F877 microdenetleyicisine tanıtmak için aşağıdaki PicBasic kodu kullanılabilir.
  • lcd_tanim.pbp
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [heydar]                                          *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 04.12.2015                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE LCD_DREG PORTD 'lcd'in veri giriş/çıkışı için kullanılacak olan 
                       'mikrodenetleyici port'u 
DEFINE LCD_DBIT 0      'başlangıç veri bitini değiş,o-bit bus için
DEFINE LCD_RSREG PORTE 'lcd nin registrları için porte yi kullan
DEFINE LCD_RSBIT 0     'registr seçme bitini porte.0 a bagla
DEFINE LCD_EREG PORTE   'lcd yi kullanılabilir(enable) yapmak için 
                        'porte yi kullan
DEFINE LCD_EBIT 2       'lcd yi enable yapmak için porte.2 yi kullan
DEFINE LCD_BITS 8       'lcd nin veri yolunu(bus) 8 bit yap
pause 100

        Pic e gömeceyimiz PicBasic kodu ise aşağıdaki gibidir.

  • hesap_makinesi.pbp 
'****************************************************************'
'*  Name    : hesap_makinesi.pbp                                *'
'*  Author  : [heydar]                                          *'
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *'
'*          : All Rights Reserved                               *'
'*  Date    : 04.12.2015                                        *'
'*  Version : 1.0                                               *'
'*  Notes   :                                                   *'
'*          :                                                   *'
'****************************************************************'
include "lcd_tanim.pbp"
'--------Tanımlamalar----------------------------------'
ADCON1=7         '16F8xx ailesinin portları veri giriş-çıkışı'
                 'default olarak analog modda tanımlanmışdır.'
                 'biz ise Pic i sayısal modda kullanıcağımız için' 
                 'bu tanımlamayı eklememiz lazım'
trisd=%00000000 'bütün D portları çıkış portu yap'

trisb=%11110000 'B nin ilk 0-3 port çıkış,4-7 portları giriş'

islem var byte  'hangi işlem yapılacak'

birinci_sayi_bul var byte 'birinci sayı bulunsunmu'

birinci_sayi_bul="h"

ikinci_sayi_bul var byte 'ikinci sayı bulunsunmu'

ikinci_sayi_bul="h"

sonuc var word 'işlem sonucunu tut'

sayi1 var word:sayi1=0 'birinci sayıyı tut'

sayi2 var word:sayi2=0 'ikinci sayıyı tut'

basamaklar var byte[4] 'basamakları bu dizide tut'

index var byte 'dizinin index ni tut'

index=0

bekle con 5
'---------Butun işlemlerin gerçekleştirilecegi Ana Label-----------------------'
main:
  'butun portlar sırasıyla aktif edilir'
  portb.0=1:portb.1=0:portb.2=0:portb.3=0  
  '0.  ve 4. portun degeri 1 ise demekki 7 tuşuna basılmış'
  if portb.4=1 then basamaklar[index]=7:index=index+1:lcdout "7"
  
  if portb.5=1 then basamaklar[index]=8:index=index+1:lcdout "8"
  
  if portb.6=1 then basamaklar[index]=9:index=index+1:lcdout "9"
  'eger / tuşuna basılmışsa demekki birinci sayı bulunmus '
  'sayı_bul a git ve 1. sayıyı bul'
  if portb.7=1 then islem="/":lcdout "/":birinci_sayi_bul="e":gosub sayi_bul
  
  pause bekle '5 millisaniye bekle.microdenetleyiciye 5'
  'millisaniye hiçbir işlem yaptırmıyoruz'
  portb.0=0:portb.1=1:portb.2=0:portb.3=0
  '4 tuşuna basılmışsa basamaklar dizisine 4ü ekle'
  'örn:basamaklar[0]=4 '
  if portb.4=1 then basamaklar[index]=4:index=index+1:lcdout "4"
  
  if portb.5=1 then basamaklar[index]=5:index=index+1:lcdout "5"
  
  if portb.6=1 then basamaklar[index]=6:index=index+1:lcdout "6"
  
  if portb.7=1 then islem="x":lcdout "x":birinci_sayi_bul="e":gosub sayi_bul
  
  pause bekle
  portb.0=0:portb.1=0:portb.2=1:portb.3=0
 
  if portb.4=1 then basamaklar[index]=1:index=index+1:lcdout "1"
  
  if portb.5=1 then basamaklar[index]=2:index=index+1:lcdout "2"
  
  if portb.6=1 then basamaklar[index]=3:index=index+1:lcdout "3"
  
  if portb.7=1 then islem="-":lcdout "-":birinci_sayi_bul="e":gosub sayi_bul
  
  pause bekle
  portb.0=0:portb.1=0:portb.2=0:portb.3=1
  
  if portb.4=1 then islem="o":gosub ekrani_temizle

  if portb.5=1 then basamaklar[index]=0:index=index+1:lcdout "0"
  '= tuşuna basılmışsa demekki ikinci sayıda girilmiş,sayı_bula git ve sayiyi bul'
  've sonucu hesaplayıp yaz'
  if portb.6=1 then lcdout "=":ikinci_sayi_bul="e":gosub sayi_bul:gosub hesapla_ve_yaz
  
  if portb.7=1 then islem="+":lcdout "+":birinci_sayi_bul="e":gosub sayi_bul
  pause bekle
goto main

sayi_bul:
      'girilen sayıları onların basamakları şeklinde bir dizide' 
      'tutuldugu için bu basamakların girilen gerçek sayıya' 
      'dönuşturulmesi gerekir,decimal sayı sistemi kullandıgımız '
      'için 10 nun katlarını kullanıcagız.    '
      'örn:diyelimki 4 ve 5 tuşlarına basılmış '
      'o zaman basamaklar[0]=4 ve basamaklar[1]=5 olur'
      've biz 45 sayısını elde etmek için 4*10+5 işlemini'
      'yapmamız lazım.onluk_tabani degişkeni burada 10 nun 1.katıdır.'
      '4 basamaklı bir sayı girilseydi eger mesela 4,5,6,7 '
      'sayımız 4567 olurdu ve onu bulmak için 4*1000+5*100+6*10+7' 
      'işlemini yapmak gerekecekdi'
      onluk_tabani var word:onluk_tabani=1
      i var byte
      for i=0 to index-1
        onluk_tabani=onluk_tabani*10
      next i 
      'örn:4 basamak girilmişse onluk_tabani=10000 olur'
      'fakat 1000 olmalıdır,o yuzden 1 kat azaltmamız lazım'
      onluk_tabani=onluk_tabani/10
      if birinci_sayi_bul="e" then
        for i=0 to index-1
            'orn:0+4*1000+5*100+6*10+7 '
            sayi1=sayi1+basamaklar[i]*onluk_tabani
            onluk_tabani=onluk_tabani/10     
        next i
        index=0
        birinci_sayi_bul="h"
      endif
      if ikinci_sayi_bul="e" then  
        for i=0 to index-1
            sayi2=sayi2+basamaklar[i]*onluk_tabani
            onluk_tabani=onluk_tabani/10     
        next i
        ikinci_sayi_bul="h"
      endif
      
return
'-----hesaplama ve lcd ye yazma işlemlerinin yapılağı label------ '
hesapla_ve_yaz:
  select case islem
    case "+"
      sonuc=sayi1+sayi2
      lcdout #sonuc
    case "x"
       sonuc=sayi1*sayi2
       lcdout #sonuc
    case "-"
       sonuc=sayi1-sayi2
       lcdout #sonuc
    case "/"
       sonuc=sayi1/sayi2
       lcdout #sonuc
  end select
return
'----------lcd ekranını temizleyip ve gereken değişkenlere'
                     'default değerlerinin atandığı Label---------------------'
ekrani_temizle:
  lcdout $fe,1
  sayi1=0:sayi2=0:sonuc=0:islem=" ":index=0
return

Aşağıdaki videoda bu kodun derlenip pic e gömülerek çalıştırılması vardır.

8 Aralık 2015 Salı

Bulut Depolama Servislerinin Karşılaştırılması(Azure vs Amazon)

Bir önceki yazımda Azure un depolama servisinin yapısından,yonetiminden ve nasıl kullanılacagından  bahsetmişdim.Bu yazımda ise daha çok Amazon Simple Storage Service(Amazon S3) den bahsetmek istiyorum.Bu servisler arasında karşılaşdırma yapacak olursak,araşdırdıgıma göre bu her iki servis geliştiriciler için hemen hemen aynı özellikde hizmet vermektedirler.Her ikisinde Ücretlendirme kullandıgınız alana göre değişmekte,web ortamında istediyiniz noktadan erişim imkanı saglama,sınırsız depolama alanı sağlama gibi ortak özelliklere sahiptirler.Fakat verilerin tutulmasında ve veriye nasıl gözle bakılması yönenden farklar var diyebiliriz.Birde burada belirtmem gereken Azureda de olan Standart ve Premium storage gibi,Amazon da çok sık erişilen ve az sık erişilen depolama hizmeti vardır  ve bunların ücretlendirmesi arasında da tahmin edilecegi gibi farklılıklar mevcuttur.Yönetim işine geldikde Azure gibi Amazon da yönetim konsolu aracılıgıyla yönetilebilmektedir,ve bana göre Amazon bu işde daha saglam hizmet vermektedir.Geliştiriciler için,Azure da  oldugu gibi, Amazon da bir çok programlama dili  için SDK sağlamaktadır.Örnegin burdan Java ile depolama servisi geliştirmek için Java SDK ve Eclipse üzerinden direk Amazon S3 üzerinde istediyiniz işlemleri gerçekleştirmek için Eclipse SDK yi indirim sisteminize kurabilirsiniz.
Veriyi Tutma Şekilleri Arasındaki Farklar.Amazon S3 veriyi nesne şeklinde buckets(kovalar) içinde tutmakdadır.Bu Azure Storage deki Container mantığıyla aynıdır.Depodaki bir nesne bir dosyadan ve bununla isteğe bağlı olarak ilişkilendirilmiş bir metadata(üstveri)dan ibaretdir.Her bucket için ayrı bir bölge,erişim izni ve hatta bu bucket in barındırdığı her nesne için bile ayrı erişim izni oluşturula bilmektedir.Bucketler nested(iç-içe) şeklinde olabilmektedir,yani bir bucket başka bir bucket'i barıdıra bilmektedir.
Amazon SDK for Java ,Azure Storage SDK for Java dan farklı olarak sadece depolama işlemleri için kütüphaneler barıdrımamaktadır.Bu sdk Amazonun bütün servisleri için Java  API'leri barındırmaktadır.Örneğin;Amazon Elastic Compute Cloud(Amazon EC2),Amazon SimpleDB vs.Bu sdk ile aws s3 e bağlanmak için azure storage de oldugu gibi bir "credentials"(kimlik bilgileri oluşturulmalıdır.
AWSCredentials credentials = new BasicAWSCredentials("YourAccessKeyID", "YourSecretAccessKey");

 Buradaki iki key e sahip olmak için bir aws accounta sahip olmak gerekir.AWS platformunda Security Credentials bölümünden bu Access Key leri oluşturup elde edilebilir.Ve tabi Azure Sdkda da oldugu gibi bir istemciye ihtiyaç vardır.
AmazonS3 istemci = new AmazonS3Client(credentials);
 Amazon S3 storage üzerinde Java SDK ile diğer işlemleri gerçekleştirmek için buradan faydalanabilirsiniz.