Arkadaşlar ben bu yaz pic assembly yi öğrenmiştim.
Fakat okulda yapacağımız bi proje için atmega serisinden çipler kullanacağız, ve ben onu da öğrenmek istiyorum.
öğrenirken C dilini tercih edeceğim sanırım
öğrenmek için türkçe bir kitap ya da site biliyor musunuz?
ingilizce ya da almanca, ağır bir dili olmayan siteler de olabilir.
şimdiden teşekkürler.
http://www.linuxfocus.org/Turkce/November2004/article352.shtml
Bunda başka sitede birkaç proje daha var. Daha başka Türkçe kaynak var mıdır bilmiyorum?
Yabancı kaynaklara aşağıdaki siteden ulaşabilirsin.
http://r.webring.com/hub?ring=avr
arkadaşlar sanırım yeteri kadar yabancı kaynak buldum ama türkçe olarak iyi bir kaynak arayışım devam ediyor. Eğer biliyorsanınz lütfen yazın. Şİmdiden teşekkür ederim.
Arkadaşlar yabancı kaynakları mümkün olduğunca zorlayacağım.
Ama elinizde örnek programlar varsa gönderebilir misiniz?
özellikle sadece bir pini on off yapan bi program arıyorum, çünkü picde başta olan ayarlamaların atmega serisinde nasıl olduğunu anlayamadım daha.
Buyur Assembly de basit bir kod.
http://blog.engin.hostiz.com/?p=31
özür dilerim eklemeyi unutmuşum, c dilinde arıyorum
ama size bişi sorayım, bu atmel çiplerde picin ilk başta bacaklarını yada sigortalarını programladığın gibi bişi var mı
Assembly de yaptıktan sonra C de yapamamak mümkün değil.
#include <avr/io.h>
.....
DDRB=...;
PORTB=...;
.....
bu kadar
.
Sigortalar PIC'deki gibi AVR'de de var. Win'de nasıl oluyor bilmem. Linux'da Uisp yükleyicisine parametre olarak ayarlıyorsun. Mesela
uisp -dlpt=/dev/parport0 -dprog=dapa -dpart=ATmega8 --wr_fuse_l=0xe3
--wr_fuse_l ve --wr_fuse_h olmak üzere sigortalar 2byte ile ayarlanır. 4MHz dahili osilatör kullanmak için gereli byte yukardaki gibi yüklenir. Ayrıntılı ayarlar için datasheet'e bakmalısın.
tekrar teşekkür ederim
benim c hakkındaki sorunum daha c nin dil kurallarını öğrenmedim, bu nedenle çok basit bi kod istiyordum.
Biraz c çalışıp sonra atmele geri dönim en iyisi
Atmelin pic16f628 seviyesinde olan, üzerinde özellikle adc pinlerinin olmasını istediğim bir modelini tavsiye eder misiniz?
Karaköy'de rahatça bulunabilir olması tercihimdir.
16F628 seviyesi bir denetleyicisi varmı bilmiyorum. Atmega serisi en düşük özellikteki Atmega8 rahat bulunması lazım. 16F628 'e kıyasla daha iyi bir denetleyici. 16F628 de ADC yok zaten. Atmega8 de PDIP soket te 6 kanal 10bit ADC var.
atmega8 in 40 pinli olması beni korkutuyor. Başlangıç için 20 pin civarı bi çiple başlamak daha kolay gibi göründü bana. o yüzden pic16f628 gibi dedim.
attiny26 modeli uygun gibi gözüküyor, daha önce bunu kullanan var mı?
Atmega8 28pindir 40 değil.
evet ben yanlış yere bakmışım, teşekkür ederim.
Ya ben analog bi veriyi okumak istiyorum, bunun için şöyle bi program yazdım,
{
char i;
ADCSRA |=(1<<ADEN); // adc enable
ADCSRA |=(1<<ADSC); // single conversation
ADMUX |=(1<<ADLAR); // üst 8 bit adch de
DDRA == 0;
_delay_loop_2(300);
i == ADCH;
}
fakat şöyle bi sorunum var, ben bu programı datasheetten anladığım kadarıyla yazdım, ama hangi pini okuduğunu nasıl seçeceğim?
not: bu programın bi kısmı, gerçeğinde include dosyaları falan ekli.
edit: daha sonra baktığım kadarıyla admux registerindeki ilk 5 biti ayarlayarak bu kanal seçiliyormuş.
bir soru da c hakkında, ADCL ve ADCH registerlerin içeriğini nasıl birleştirebilirim. Bİlirsiniz ki 10 bit okuyor ve bunların bi kısmınıADCH ye bi kısmını ADCL ye yazıyor. BUnları toplamanın yöntemini söylerseniz sevinirim.
ADMUX'un ilk 4 biti ile giriş kanalını seçiyorsun.
ADCH ile ADCL'yi birleştirmeye gelince, önce 16 bitlik işaretsiz bir tamsayı tanımlarsın. ADLAR bitini ayarlamana göre bu kaydedicilerden birini bu değişkenle "VEYA" işlemine sokup kaydırdıktan sonra diğer kaydedici ile "VEYA" işlemine sokarsın.
ADLAR = 0 tanımlamak daha mantıklı olur tabi
unsigned int a=0;
a=a|ADCH;
a=a<<8;
a=a|ADHL;
unsigned int a=0;
a=a|ADCH; //ADCH a ya yazılıyor
a=a<<8; //a 8 basamak kaydırılyor
a=a|ADHL; //ADHL a ya yazdırıyor
burayı bu şekilde anladım doğru mu?
Evet doğru.
C öğrenilmesi zor bir değil. Türkçe kaynak bulmakta zorluk çekmessiniz. Öncelikle temel düzeyde C öğrenmeniz lazım.
Böyle kolay felan dedim ya gerçi bunun böyle olmadığını 10 yıllara varan bir mazi sonucu artık C'yi tam olarak öğrendiğini söyleyen üstadlarda var.
Şahsen C ile ilgili 3 kitap okudum daha C'yi herşeyiyle kullanmış değilim. Ayrıca daha öğrenmem gereken çok şey var.
Bu durumda sizin en azından bir kitabı baştan sona okumanız gerekiyor. Yoksa bu şekilde ilerlemek pekte sağlıklık değil.
şu anda katıldığım bi proje için c ye ihtiyaç duyuyorum, ve bu projenin 2 ay sonra bitmiş olması gerekiyor, bu nedenle c ye ortadan daldım.
Yanımda c öğrenen arkadaşlar da var, onlar en baştan başladı, fakat ben biraz aceleciyim, ve bu da işlerin kolaylaşmasını sağlıyor. Çünkü ben büyük adım atmak isterken yaptığım hataları, onlar düzeltiyorlar. Ve birlikte çözmezsek buraya yazıyorum. Bu proje bittikten sonra c'ye yeni baştan başlayacağım.
Ya bende hazır bir kit var, bunun lcd ekranında bir şey göstermek istiyorum, bunun için fonksiyonlar falan hazır olarak bulunuyor. Fakat nasıl kullanacağımı bulamadım.
Açıklamada yazanları bunlar, almanca oldukları için türkçeye çevirdim:
void lcdInit(void); //Bununla lcd kuruluyor
void lcdHome(void); //Kursor lcd nin sağ üstüne geliyor
void lcdClear(void); //Lcd yi temizliyor
void lcdGotoXY(u08 row, u08 col); //Kursoru istenilen yere götürüyor
void lcdDataWrite(u08 data); //Karakteri lcd ye gönder
rprintfInit(lcdDataWrite); // lcd ye çıktı gönder (bunu bu şekilde anladım, yanlış olabilir
şimdi ben bunlarla lcd de i değişkenini göstermek istediğimde nasıl bir yol izlemeliyim, hangilerini kullanmalıyım. Lcd yi kurmayı falan anladım, ama kursoru nasıl hareket ettireceğimi ve değişkeni nasıl yazdıracağımı anlamadım. Bir de "u08" in genel bir anlamı var mı
bu da kütüphane de lcd ile ilgili olan kısım:
http://www.rafb.net/paste/results/IaqH3r35.html
Yazdığım programı hexe çevirmeye çalışırken, "undefined reference" şeklinde bir hata alıyorum böyle bir hatanın nedeni ne olabilir?