Atmel programlamayı öğrenmek için yardım

Başlatan muat, 19 Ekim 2006, 22:13:49

muat

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.

engin_

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

muat

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.

muat

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.

engin_


muat

ö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ı

engin_

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.

muat

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

muat

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.

engin_

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.

muat

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ı?

engin_


muat

evet ben yanlış yere bakmışım, teşekkür ederim.

muat

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.

engin_

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;