Atmel programlama ile ilgili birkaç sorum olacak.Siz ustalarımın yardımlarını bekliyorum.
Benim elimde şu an arduino var üzerindeki atmega328p yi çıkarıp arduino ide si ile değilde atmel studio(avr c) ile programlamak istiyorum.
1-)Atmel studio ile arduino idesi ile programlamam arasında ne fark var? (Entegredeki Hız,performans vs.)
2-)Atmega içerisindeki bootloaderi silmek mi lazım avr c de kullanabilmek için?
3-)Bu bootloader yavaşlığa mı sebebiyet veriyor?
1) Arduino ide de hazır kütüphaneler ve tanımlamalar olduğu için
her şey kolay. Diğer türlü her kütüphaneyi ve tanımlamaları siz
yapmanız gerekecek...
2) Zaten başka bir hex yüklerseniz her şey silinir. Sizin dikkat
etmeniz gereken sigorta ayarları...
3) Bootloader; resetten sonra bir süre bekler, program atılıyor
mu diye. Bu sadece resetten sonraki yavaşlıktır. Yoksa Arduino
16MHz.(16Mips) olarak çalışmaktadır...
Alıntı yapılan: mehmet - 23 Ocak 2016, 13:54:21
1) Arduino ide de hazır kütüphaneler ve tanımlamalar olduğu için
her şey kolay. Diğer türlü her kütüphaneyi ve tanımlamaları siz
yapmanız gerekecek...
2) Zaten başka bir hex yüklerseniz her şey silinir. Sizin dikkat
etmeniz gereken sigorta ayarları...
3) Bootloader; resetten sonra bir süre bekler, program atılıyor
mu diye. Bu sadece resetten sonraki yavaşlıktır. Yoksa Arduino
16MHz.(16Mips) olarak çalışmaktadır...
mehmet hocam çok teşekkür ederim verdiğiniz bilgiler için
mesaj birleştirme:: 23 Ocak 2016, 14:53:03
Peki hocam atmel studioda yapılan bir uygulamayı yada kütüphaneyi arduino ide içinde kullanabilirmiyim
Ufak tefek değişikliklerle kullanmak mümkün olabilir...
Arduino yavaşlığı konusunda, biraz lafa karışacağım, kusura bakmayın.
Normalde Arduino çalışmasını ram üzerinde konusu ile ilgili olarak ayrılmış tamponlar üzerinden yürütüyor.
Yani en basitinden siz
digitalWrite (1,LOW);
komutunu (fonksiyonunu) işleme koyduğunuzda işlemci bunu bir yığın komut ile yerine getiriyor... (1. nolu bacağı lojik 0 seviyesine çeker).
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
tabii bu kadar işlem için işlemci yavaşlık olarak geri dönüyor.
normalde bu atmel işlemcide yanlış hatırlamıyorsam portd üzerinde pd1 pinine denk düşerki bu işlemi
PORTD &=0x01;
ile yerine getirebiliriz. (Tabi aynı şey arduino üzerinde de yapılabilir.)
Bu sadece bir örnek, daha programlamada neler olduğunu kütüphaneleri inceleyerek görebilirsiniz.