Gönderen Konu: atmel, ardunio programlama hakkında  (Okunma sayısı 291 defa)

Çevrimdışı TA3IHD

atmel, ardunio programlama hakkında
« : 29 Aralık 2016, 12:40:59 »
Arkadaşlar,
Atmel, ardunio v.s. olarak adlandırılan cihazlar ile DDS'e kumanda ediliyor ve LCD ekranda frekans v.s. görünebiliyor. Bunun için bir program vardır mutlaka. Bu konuda hiç bilgim yok.  Nasıl oluyor? bilen arkadaşlar yardımcı olabilirmi?Şimdiden teşekkürler.

Çevrimdışı TA1JA

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #1 : 29 Aralık 2016, 14:02:45 »
Merhaba,

Arduino dediğimiz devre, üzerinde atmel mikrokontrolcü ve çalışması için gerekli komponentlerin (kristal, regülatör, usb/seri ttl vs) bulunduğu bir karttır.
Modeline göre, bu mikrokontrolcünün bacaklarını, giriş/çıkış olarak set edebilirsiniz. Yine bu giriş çıkışlar, analog/dijital olarak seçilebilir.
Bu çipin içinde ayrıca, belirli pinlere atanmış, SPI, UART, PWM, ADC, I2C gibi donanımlar bulunur.
Kullanıcı, pinlerin (port) nasıl tanımlanacağını, ne iş yapacağını bir IDE üzerinde (Integrated Development Environment) hazırlar, derler ve çipe gönderir.
Arduino'nun standart IDE'si C tabanlı derleyici kullanır.

DDS'i örnek alarak konuşursak;
Arduino AD9850 ile SPI portu üzerinden haberleşir. Normalde, AD9850'nin datasından, bu entegrenin SPI komutlarını bulup, byte byte yazmanız, okumanız gerekir.
Ancak, kullanılan bir çok çevre birim için hazır ve ücretsiz kütüphaneler bulunmakta. Bu kütüphaneleri arduino IDE'sine yükleyerek bir çok işi çözebilirsiniz. İsterseniz kendi
kütüphanelerinizi oluşturabilirsiniz.

Aşağıda, arduino için, AD9850 DDS ile yapılmış 1-30MHz anten analizör devresinin kodu var.
DDS'in frekansını değiştirir (SPI), SWR köprüsünden gelen FWD ve RWD voltajlarını ölçer (ADC)
bu değerleri PC'ye gönderir (UART)
istenirse, bir kaç satırla, LCD'ye gönderilebilir.

Uzun lafın kısası, aslında arduino ile basit işler yapmak için programcı olmak gerekmiyor.

Saygılar, 73



// Define Pins used to control AD9850 DDS
const int FQ_UD=5;
const int SDAT=4;
const int SCLK=6;
const int RESET=3;


double Fstart_MHz = 1;  // Start Frequency for sweep
double Fstop_MHz = 10;  // Stop Frequency for sweep
double current_freq_MHz; // Temp variable used during sweep
long serial_input_number; // Used to build number from serial stream
int num_steps = 100; // Number of steps to use in the sweep
char incoming_char; // Character read from serial stream


// the setup routine runs once when you press reset:
void setup() {
  // Configiure DDS control pins for digital output
  pinMode(FQ_UD,OUTPUT);
  pinMode(SCLK,OUTPUT);
  pinMode(SDAT,OUTPUT);
  pinMode(RESET,OUTPUT);
 
  // Configure LED pin for digital output
  pinMode(13,OUTPUT);


  // Set up analog inputs on A0 and A1, internal reference voltage
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  analogReference(INTERNAL);
 
  // initialize serial communication at 57600 baud
  Serial.begin(57600);


  // Reset the DDS
  digitalWrite(RESET,HIGH);
  digitalWrite(RESET,LOW);
 
  //Initialise the incoming serial number to zero
  serial_input_number=0;

}

// the loop routine runs over and over again forever:
void loop() {
  //Check for character
  if(Serial.available()>0){
    incoming_char = Serial.read();
    switch(incoming_char){
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      serial_input_number=serial_input_number*10+(incoming_char-'0');
      break;
    case 'A':
      //Turn frequency into FStart
      Fstart_MHz = ((double)serial_input_number)/1000000;
      serial_input_number=0;
      break;
    case 'B':
      //Turn frequency into FStart
      Fstop_MHz = ((double)serial_input_number)/1000000;
      serial_input_number=0;
      break;
    case 'C':
      //Turn frequency into FStart and set DDS output to single frequency
      Fstart_MHz = ((double)serial_input_number)/1000000;
      SetDDSFreq(Fstart_MHz);
      serial_input_number=0;   
      break;
    case 'N':
      // Set number of steps in the sweep
      num_steps = serial_input_number;
      serial_input_number=0;
      break;
    case 'S':   
    case 's':   
      Perform_sweep();
      break;
    case '?':
      // Report current configuration to PC   
      Serial.print("Start Freq:");
      Serial.println(Fstart_MHz*1000000);
      Serial.print("Stop Freq:");
      Serial.println(Fstart_MHz*1000000);
      Serial.print("Num Steps:");
      Serial.println(num_steps);
      break;
    }
    Serial.flush();     
  }
}

void Perform_sweep(){
  int FWD=0;
  int REV=0;
  double VSWR;
  double Fstep_MHz = (Fstop_MHz-Fstart_MHz)/num_steps;
 
  // Start loop
  for(int i=0;i<=num_steps;i++){
    // Calculate current frequency
    current_freq_MHz = Fstart_MHz + i*Fstep_MHz;
    // Set DDS to current frequency
    SetDDSFreq(current_freq_MHz*1000000);
    // Wait a little for settling
    delay(10);
    // Read the forawrd and reverse voltages
    REV = analogRead(A0);
    FWD = analogRead(A1);
    Serial.print("REV --> ");
    Serial.println(REV);
    Serial.print("FWD --> ");
    Serial.println(FWD);
    if(REV>=FWD){
      // To avoid a divide by zero or negative VSWR then set to max 999
      VSWR = 999;
    }else{
      // Calculate VSWR
      VSWR = (FWD+REV)/(FWD-REV);
    }
   
    // Send current line back to PC over serial bus
    Serial.print(current_freq_MHz*1000000);
//    Serial.print(",0,");  // removed GS format for new sweeper
    Serial.print(",");      // added GS format for new sweeper
    Serial.println(float(VSWR*1000));  // made println to terminate
//    Serial.print(",");  // removed below
//    Serial.print(FWD);
//    Serial.print(",");
//    Serial.println(REV);
  }
  // Send "End" to PC to indicate end of sweep
  Serial.println("End");
  Serial.flush();   
}

void SetDDSFreq(double Freq_Hz){
  // Calculate the DDS word - from AD9850 Datasheet
  int32_t f = Freq_Hz * 4294967295/125000000;
  // Send one byte at a time
  for (int b=0;b<4;b++,f>>=8){
    send_byte(f & 0xFF);
  }
  // 5th byte needs to be zeros
  send_byte(0);
  // Strobe the Update pin to tell DDS to use values
  digitalWrite(FQ_UD,HIGH);
  digitalWrite(FQ_UD,LOW);
}

void send_byte(byte data_to_send){
  // Bit bang the byte over the SPI bus
  for (int i=0; i<8; i++,data_to_send>>=1){
    // Set Data bit on output pin
    digitalWrite(SDAT,data_to_send & 0x01);
    // Strobe the clock pin
    digitalWrite(SCLK,HIGH);
    digitalWrite(SCLK,LOW);
  }
}






Çevrimdışı TA3IHD

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #2 : 30 Aralık 2016, 09:01:26 »
Murat bey, öncelikle cevabınız için çok teşekkürler.
Sanırım bu program formatını pic işlemciye gönderebilmek için HEX formatına çevirmek gerekiyor.
Bu konudada bilgim yok.

Ancak LU5DJV nin devre ve HEX programı yetiyor, fakat hep birer adım ileri gitmek arzusu
beni ardunio ya yönlendirdi. 73

Çevrimdışı TA1JA

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #3 : 30 Aralık 2016, 10:10:10 »
Üstat,

Yukarıdaki kod, arduino (atmel) içindir. Burada oluşturduğunuz hex dosyasını PIC'e yükleyemezsiniz.
Aynı işi PIC'le yapacaksanız, başka bir IDE/kod derleyicisi kullanarak, bu kez PIC için hex oluşturmalısınız.

Arduino'nun, PIC'e (PIC ile yapılmış devreye) göre en büyük avantajı, açık kaynak kodu ve bolca erişilebilir örnek olması.
Maalesef her yeniliği takip etmek, yetişmek mümkün değil, belli bir yaştan sonra bu daha da zorlaşıyor (kendim için söylüyorum :) )

Arduino bu işler için yeterli ve kullanışlı. Micro, miniPro veya uno modellerini kullanabilirsiniz. Bilgim dahilinde ben de yardımcı olurum.

Saygılar, 73


Çevrimdışı TA2VW



    TA Callbook kaydı

    Hayati Yazdıran
    ANKARA
  • OM/YL
  • *****
  • İleti: 1451
  • BİLGİ PAYLAŞTIKÇA GÜZELLEŞİR. 0506 053 27 68
Ynt: atmel, ardunio programlama hakkında
« Yanıtla #4 : 30 Aralık 2016, 12:35:35 »
PonyProg


http://www.lancos.com/prog.html

bu proğramda bahsedilen pic varmı isterseniz kontrol edin.

Çevrimdışı TA2VW



    TA Callbook kaydı

    Hayati Yazdıran
    ANKARA
  • OM/YL
  • *****
  • İleti: 1451
  • BİLGİ PAYLAŞTIKÇA GÜZELLEŞİR. 0506 053 27 68
Ynt: atmel, ardunio programlama hakkında
« Yanıtla #5 : 30 Aralık 2016, 13:13:01 »
win 7 ye göre tasarlanmış pony de yukardaki dataları indirdikten sonra pony ile açtım aşağıdaki tablo gibi bir tablo çıktı pony de bahsedilen pic veya eprom var ise uygun programmer ile proğramlanabilirmi bilmiyorum elde ettiğim görüntüyü aşağıya ekliyorum. pony yi incelemek lazım yazabildiği pic eprom vs şeyler listesinde varmıdır bilmiyorum ayrıca yine pony istediği pic veya eprom programmer olması gerekir kendi sitesinde birlikte çalışabildiği programmer şemaları verilmiş bunlardan biri yapılabilir veya temin edilebilir. pony indirdikten sonra aradığınız veya yazmak istediğiniz pic eprom vs compenentler varmıdır isterseniz bakın pek çok compenenti menüsune almış kendi sitesinde başka pic veya eprom vs şeyler eklenebilmesi için başka dosyası varmıdır bilmiyorum.ayrıca hulusi bey bu ardunio işine biraz bakalım doğru dürüst pek bilgimiz yok aslında bitlikte ARDUNİO başlığı altında bölüm açılsa arkadaşlar kendi görüşlerini veya paylaştıkları bilgilerden hepimiz istifade ederiz ve nasıl bir yol izlenmesi gerektiği hakkında bilgi sahibi olabiliriz iyi çalışmalar dilerim.
 
« Son Düzenleme: 30 Aralık 2016, 13:22:28 Gönderen: TA2VW »

Çevrimdışı TA4SO

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #6 : 30 Aralık 2016, 14:39:44 »
Murat Bey aslında çok güzel anlatmış ama ben de bir kaç cümle ekleyeyim.

PIC seri mikro kontrolcüler Microchip firmasının ürünleridir. Atmel'lerde yine AT veya ATMega serisi gibi mikro kontrolcü üreten başka bir firmadır. Bu ikisi dışında da mikro kontrolcü üreten firmalar bulunmaktadır. Bunları Yaesu, Icom ve Kenwood'a benzetebiliriz. Nasıl bu firmalarının telsizlerinin maykları, arabirimleri ve programları birbirine uymazsa farklı mikro kontrolcülerinde bacak bağlantıları iç register yapıları v.s. birbirine uymaz. Yani bir PIC programını alıp aynen Atmel bir işlemciye yükleyemeyiz. Fakat eğer donanımsal olarak imkan varsa uyarlama yapabiliriz. Bildiğiniz gibi bu aygıtlara makine dilinde programlar yüklenir. Fakat biz ASM, C, Basic v.b. farklı üst seviye diller kullanarak programlarımızı yazar ve makine diline çeviririz.  İşte bu programlarda farklı bir mikrokonroller için değişikleri yaparak burada da programımızın çalışmasını sağlayabiliriz. (Ek Not: Bir süre önce Atmel firmasını Microchip satın aldı, dolayısyla şimdi aynı firmanın ürünü oldular ama yapılar hala farklı)

Arduino'lara gelirsek bunlar Murat Bey'in de belirttiği gibi içlerinde Atmel işlemci ve bazı çevre birimleri bulunduran hazır kartlardır. Bu kartlar üzerine takılan shield adı verilen yavru devre kartları veya kendi yapacağımız devrelerle neredeyse elektronik olarak yapılamayacak şey yok gibi. Kolay programlanması ve geniş kütüphane yapısı da cabası. Örneğin 2 satır bir LCD ekran aldınız PIC16f877 ile kullanacaksınız osilatör seç, giriş çıkışları ayarla, LCD pinleri belirle tanımla v.s. bir sürü işle uğraşmak yerine arduino borda bir lcd bordu takıp atıyorum print LCD (Merhaba) yazarak ekrana merhaba yazdırabiliyorsunuz. Dolayısıyla birinci işi elektronik olmayanlar ve hobi olarak ilgilenenler için büyük kolaylıklar sunuyor.

Benim radyo amatörlerine naçizane tavsiyem arduinoya önem vermeleridir. Bu bordlar sayesinde ihtiyacınız olan bir çok uygulamayı kolayca ve kısa zamanda gerçekleştirebilirsiniz. Arduino resmi sitesi Arduino.cc ve Türkiye'deki http://arduinoturkiye.com/ gibi sitelerden ve Arduino hakkındaki Türkçe kitaplardan programlamayı öğrenebilirsiniz. Uygun fiyatlı bir Arduino Uno veya Arduino Mega board alırsanız bir çok işinizi rahat görür.

73...
http://www.qrz.com/db/TA4SO?
TA4SO - Eski TA4ASO - TB4FP - Şadan ÖZDEN

Çevrimdışı TA1JA

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #7 : 30 Aralık 2016, 16:05:45 »
Şadan Bey, ben de sizin yazdıklarınıza ekleme/yorum yapayım :)

Hobi olarak elektronik ve programcılıkla ilgilenenler için, sizin de anlattığınız sebeplerden dolayı Arduino gerçekten büyük kolaylık.
Ancak PIC ile yapılmış bir devre ve eşdeğeri arduino arasında, programlamada bir zorluk/üstünlük olduğunu düşünmüyorum.
(programlayıcı gerektirmemesi, açık kaynak olması ve nette örnek bulunabilirliği haricinde) PIC tarafında derleyici dili ve IDE olarak daha fazla alternatif var.
Gerçi şimdilerde ATMEL dışında işlemcilerin de olduğu ve aynı arayüz ile çalışan arduino tabanlı kartlar da piyasada.

Bir çok uygulama için yeterli gelecek kartlar, uzakdoğu sitelerinde 3-4$ civarında. Özellikle arduino nano'yu tavsiye ederim.


Hayati Bey,

O şekilde olmaz :) 
Arduino kartları ayrı bir programlayıcı gerektirmez. Arduino üzerindeki çip ön yüklemeli olarak gelir. Bu da, yazdığınız (veya netten indirdiğiniz) kodu, tek tuşla devreye yüklemenizi sağlar. O nedenle, aslında arduino'ya başlamak, bir modül satın almak, usb kablosu ile PC'ye bağlamak ve programı internetten indirip kurmaktan ibaret.

Önceki mesajımda verdiğim örneği, Şadan Bey'in verdiği linklerden indirip kuracağınız program ile açabilir ve hex'e çevirip doğrudan arduino'ya yükleyebilirsiniz.


73

« Son Düzenleme: 30 Aralık 2016, 16:07:02 Gönderen: TA1MRT »

Çevrimdışı TA3MHA

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #8 : 30 Aralık 2016, 17:41:12 »
Birkaç şey de ben paylaşmak istiyorum.
Öncelikle kendimi tanımlayayım. Ben yazılımcı veya elektronikçi değilim. Her ikisiyle de hobi düzeyinde ilgiliyim.
Mikrodenetleyici dünyasına 3-4 yıl önce bir PIC geliştirme kartı alarak adım attım. O zamanki düşüncem, hem donanım hem yazılım benim denetimimde olsun idi. Böylelikle kendimi daha özgür hissedecektim. Gerçekten de tasarımı baştan sona bana ait birkaç proje yaptım (kendime). Hala da çalışıyorlar.
Fakat, pcb'nin tasarlanması, aman parazit almasın kaygıları, Türkiye'de bastıramama, Çin'e sipariş. Her defasında gümrüğe takılır mı stresi falan bezdirdi beni.
Şimdiki aklım olsa kesinlikle Arduino ile başlar, en azından donanımla uğraşmazdım, haftalarca çin'den pcb beklemez, ya bir hata yapmışsam diye karın ağrıları çekmezdim.

Arduino ile hiç çalışmadım ama, piyasadaki kimi Çin taklitlerinin, orjinali ile aynı performansa sahip olmadığını duydum. Alırken bu hususa dikkat edilirse iyi olur kanaatindeyim.

73 ta3mha Ateş

Çevrimdışı TA3IHD

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #9 : 02 Ocak 2017, 07:55:39 »
Murat bey,   Şadan bey;

Acaba bir Ardunio için bana,  0-30 Mhz  AD9850 DDS'i kontrol edebilen,
2x16 LCD ekranda izleyebileceğimiz bir program mevcutmu? Varsa paylaşabilirmisiniz?

Çevrimdışı TA3IHD

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #10 : 02 Ocak 2017, 17:26:01 »
Murat bey yukarıda ad98550  DDS  programı göndermiş. Şimdi algıladım. Bunu en kısa zamanda deneyeceğim. Çok teşekkürler. 73

Çevrimdışı TA1JA

Ynt: atmel, ardunio programlama hakkında
« Yanıtla #11 : 04 Ocak 2017, 08:32:38 »
Hulusi Bey,
Nette, yapmak istediğinize uygun, kaynak kod bulma ihtimaliniz yüksek. Bu kod üzerinde de
değişiklik yaparak kullanabilirsiniz. Arduino IDE'yi kurduğunuzda, örnekler içinde LCD uygulamalarını göreceksiniz.

73