Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
216
Cevap
48719
Tıklama
0
Öne Çıkarma
Cevap: ATMEL AVR ile ilgilenenler BURAYA!!! (8. sayfa)
A
18 yıl
Teğmen
Konu Sahibi

atmel avr kullanıcılarına BASCOM-AVR programını öneriyorum. süper program...


Bu mesaja 1 cevap geldi.
A
18 yıl
Teğmen

arkadaşlar fuse bitlerini bir türlü değiştiremiyorum,avr-osp2 kullanıyorum verdiği hata aynen şu ***Selected device has no extended fuse bits!
Leaving programming mode...
yardımcı olabilirseniz çok sevinirim


Bu mesaja 1 cevap geldi.
G
18 yıl
Er

Usartla ilgili kendi yaptıgım bir ornek.
Cok temel bir ornek oldugunu dusunuyorum.
Veri gonderiyor. Veriyi alıyor. Gelen veriyi mikroislemci RAM'ine yazıyor. Daha sonra farklı adreslerden okuma yapıyor. Ayrıca Vektorleri de kullandım.
Ayrıca cok detaylı olmasa da protocol kullanımı da var.
Aslında USART la yaptıgım son calısma. Buraya gelene kadar sadece Transmit sadece Receive, sadece Ram'a yazma... gibi ornekler de elimde isteyen olursa onları da koyabilirim.
Bittikçe buraya baska kodlar eklerim
Acıklamalar ingilizce kusura bakmayın :)

Sagdan soldan kod bulup koymak yerine herkes yazdıgı kodu koyarsa daha faydalı olur bence
Umarım faydalı olur...
Kolay gele herkese...




; We are using the protocol to receive the data.
; We are sending 6 data to our Atmel from computer or another atmel
; First we are checking the start adress and the end adress if they are right than we checked the 2. adress
; if it is which we wanted than we are looking for 3 adress and 4. adress for checking for the adress that we
; will use and the 5 adress is data adress. We put the data to the vector which is defined with 3. and 4 adress.

;I used STK500
;PORTA ==> LEDs
;PORTC ==> Buttons


.include "m16def.inc"




.def Temp = R21




.equ brp = 25; Baud rate parameter ; 4Mhz osc ==> 9600 baud

.org 0x0000
rjmp Reset

.org 0x16
rjmp RXC_INT ;receiving interrupt

.org 0x1A
rjmp TXC_INT ;transmitting interrupt











Reset:

; Stack pointer
ldi Temp, low(RAMEND)
out SPL, Temp
ldi Temp, high(RAMEND)
out SPH, Temp

ldi Temp, 0b11111111 ;Port A as output to the LEDs
out DDRA, Temp

ldi Temp, 0b11111110 ;PortD.8 as input for receiving PortD.7 as output for transmitting the others are not necessary
out DDRD, Temp

clr Temp
out DDRC, Temp ;Port C as input (push buttons)



init:
ldi Temp, high(brp) ;Baud rate
out UBRRH, Temp
ldi Temp, low(brp) ;Baud rate
out UBRRL, Temp






ldi Temp, 0b11011000 ; transmitter and receiver enable ; tx and rx complete interrupt enable ; udrie disable
out UCSRB, Temp


ldi Temp, 0b10000110 ; 1 stop bit ; 8 bit character; parity mode disable ; async operation
out UCSRC, Temp


ldi Temp, 0xFF ; Leds are off
out PORTA,Temp

ldi r30, 0x90 ;Vector Z
ldi r31, 0x00

ldi r16, 0xAA
sts $90,r16
ldi r16, 0xD1
sts $91,r16
ldi r16, 0xB0
sts $92,r16
ldi r16, 0x00
sts $93,r16
ldi r16, 0xCC
sts $94,r16
ldi r16, 0xAB
sts $95,r16






ldi r28, 0xA0 ;Vector Y
ldi r29, 0x00








sei ; Enable All interrupts

ldi R23,0
ldi R24,0

options:
ldi R25,0 ; for clearing the register















RXC_INT: ;receive interrupt function

inc R24

cpi R24,6 ; counting for six data
breq RXC_END ; if it is 6 receiving finish
brne Write_data ; while receiving data also we are writing the data to ram
reti


Write_data:

in Temp, UDR ; take the data from UDR
st Y+,temp ; put the data to Y vektor
reti






RXC_END: ; After receiving the 5 data

in Temp, UDR ; Take the last data
st Y+,Temp ; Write the last data

ldi r28, 0xA0 ; Vector Y low bits
ldi r29, 0x00 ; Vector Y high bits
clr R24



lds Temp,$A0
cpi Temp,0xAA ; Checking the first adress for justifying the protocol
breq cont_end_adress ; If it is equal to value that we determined before go to check the end adress
brne Error_start_adress ; If it is not equal go to ERROR at starting adress
reti




cont_end_adress:
lds Temp,$A5
cpi Temp,0xAB ; Checking the last adress for justifying the protocol
breq OK ; If it is equal to value that we determined before go to OK
brne Error_end_adress ; If it is not equal go to ERROR at the last adress
reti


Error_start_adress:
lds Temp,$A5
cpi Temp,0xAB ; Checking the last adress
brne Error_all_adresses ; If it is not equal go to ERROR all adress
ldi Temp,0x0F ; If it is equal we have an error only at first adress, give error message
out PORTA,Temp ; The error message : First 4 leds are on
reti

Error_end_adress:
ldi Temp,0xF0
out PORTA,Temp ; The error message : Last 4 leds are off
reti

Error_all_adresses:
ldi Temp,0x00
out PORTA,Temp ; The error message : All leds are on
reti

OK:
ldi Temp,0xAA
out PORTA,Temp



rjmp second_adress ; After checking the first and last adress Check the Second adress
reti


second_adress:

lds Temp,$A1
cpi Temp,0xD1 ; Control whether the second adress is D1 or D2
breq write_data_to_ram ; If it is D1 write the data to Ram

cpi Temp,0xD2 ; Control whether the second adress is D1 or D2
breq check_requesting_adress ;If it is D2 check for requesting adress that we receive
ldi Temp,0b01111110 ; If second adress is neither D1 nor D2 give an error message
out PORTA, Temp ; First and Last leds are on
reti

check_requesting_adress:
lds Temp,$A2 ; Take the requesting adress low bit
mov R26,Temp ; Put it in X vektor Low bit


lds Temp,$A3 ; Take the requesting adress high bit
mov R27,Temp ; Put it in X vektor High bit

ld Temp, X ; Put the data which is in X vektor to the Temp


sts $94,Temp ; Put the data to adress $94 of Z vektor
com Temp
out PortA,Temp ; Change the Leds according to the data as Hex view

ldi Temp,0xAA ; Put the starting adress
sts $90,Temp

ldi Temp,0xD3 ; Put D3 that we understand we are trasmitting data which is request adress
sts $91,Temp

sts $92,R26 ; Put the requestind adress low bit
sts $93,R27 ; Put the requestind adress high bit

ldi Temp, 0xAB ; Put the last adress
sts $95,Temp



ld Temp,Z+ ;SENDING the Z VEKTOR
out UDR, Temp
inc R23
reti






write_data_to_ram:

lds Temp, $A2 ; Defining the X Vector adress
mov R26,Temp

lds Temp,$A3 ; Defining the X vector adress
mov R27,Temp

lds Temp,$A4 ; Take the data from adress
st X,Temp ; Put it in X vektor
ld Temp,X
com Temp
out PORTA,Temp ; Out as hex to the LED




reti


TXC_INT: ; Transmitting interrupt
cpi R23, 0
breq TXC_OUT
cpi R23, 6
breq TXC_END
ld Temp,Z+
out UDR, Temp
inc R23



TXC_OUT:
reti


TXC_END:
ldi r30, 0x90 ;Defining Vector Z
ldi r31, 0x00
clr R23
reti





< Bu mesaj bu kişi tarafından değiştirildi gurbuzcagri -- 3 Ağustos 2007; 19:31:04 >

A
18 yıl
Er

Merhaba arkadaşlar,

C ile Mikroişlemci (PIC ve AVR) programlama konusunda oldukça deneyimliyim ve bu bilgileri konuya ilgi duyan insanlarla paylaşmak için bir web sitesi hazırladım (www.berik.net). Siteye fırsat buldukça bir şeyler ekliyorum.

Selamlar,

Cem


Bu mesaja 2 cevap geldi.
_
18 yıl
Yüzbaşı

yardım lütfen

arkadaşlar ben bu linktediki devreyi yaptım ama ampermetre kısmı yazılımsal olarak en fazla 1 amper gösteriyor.sizden ricam bu devredekiyazılım benim için değiştirip tekrar yüklermizsiniz.şimdiden teşekkürler.



A
18 yıl
Er

AVR Programlama – Yeni Başlayanlara Öğütler

Hangi işlemciyle başlamalıyım?
Yeni başlayanlara Atmega serisi işlemcilerden Atmega8’i tavsiye ederim. Yeterli sayıda çıkışı, 8Kb program hafızası, 1Kb SRAM, 512 Byte EEPROM, 8Mhz’e kadar çıkan dahili kristal, harici kristal ile 16MHz hıza erişebilme, 2 adet 8 bit ve bir adet 16 bit Timer, 6 kanal AD çevirici (2,56v dahili referans voltaj), SPI, TWI, PWM, USART modülleri ile pek çok proje için yeterli bir işlemcidir. Ayrıca Atmega serisi işlemciler ISP(In System Programmable) özelliğine sahiptir.

Bu konuda İnternette Türkçe kaynak var mı?
Bildiğim kadarıyla şu an da en iyi kaynak benim web sitem www.berik.net

PIC serisi işlemcilere göre avantajları neler?
Mimarisi gereği AVR işlemciler her bir saat darbesinde bir işlem yaparlar, oysa PIC için 4 saat vuruşuna ihtiyaç vardır. Bu da hızı etkiler, örneğin 16Mhz’de çalışan bir Atmega8 işlemcisi 16MIPS (Million Instruction Per Second – Saniyede 16 Milyon İşlem) hıza ulaşırken aynı saat hızında çalışan PIC16F877 4 MIPS hızına çıkabilir. Ayrıca WinAVR çok gelişmiş bir C derleyicidir ve özgür yazılımdır.

Atmega8 için programlayıcı nereden bulabilirim?
Teorik olarak ISP özelliği olan işlemcileri programlamak için her hangi bir devreye ihtiyaç yoktur, işlemcinizi devreden hiç çıkarmadan programlayabilirsiniz. Ancak bu tehlikeli bir yoldur, çünkü programlama esnasında işlemcinizi ve hatta bilgisayarınızın çıkışlarını yakabilirsiniz. Bu yüzden basit bir buffer devresi kullanarak işlemcinizi güvenli bir şekilde programlayabilirsiniz. Benim sitemde, 74HC244 entegresiyle yapılmış böyle bir devre şemasını bulabilirsiniz.

Hangi dilde programlamalıyım?
Bu konuda birkaç seçenek var ama bence C dilini tercih etmelisiniz. WinAVR mükemmel bir derleyicidir (aslında AVR-GCC derleyicisinin Windows’a uyarlanmış halidir). Kurulumu çok basittir. Web sitemdeki yanıp sönen LED projesini derleyip işlemciye yükleyerek ilk adımı atabilirsiniz. Tamamen Assembly dilinde program yazmaya çalışmak sizi çok yoracaktır. Programlarınızı C de yazmak, sadece zamanlama veya hızın kritik olduğu kısımları Assembly de yazmak en mükemmel yoldur. WinAVR, Assembly ve C dosyalarını birlikte sorunsuz bir şekilde derleyebilir.

İlk aşamada harici kristal kullanmam lazım mı?
Hayır, Atmega8 işlemcisi fabrikada 1Mhz dahili kristal kullanacak şekilde ayarlanmıştır. Sigortaların nasıl kullanıldığını anlayıncaya kadar bu şekilde kullanmanızı tavsiye ederim.

Yazdığım programı işlemciye nasıl aktaracağım?
Yine bedava olan PonyProg programını kullanabilirsiniz.

İşlemcinin çıkışlarına neler bağlayabilirim?
İşlemcinin çıkışları 15-20mA’lik bir akım sağlayabilirler, bu da bu çıkışlara bu miktarlarda akım çeken LED’lerden başka bir şey bağlamamanız gerektiği anlamına gelir. Yeni nesil yüksek akım çeken LED’leri doğrudan çıkışlara bağlarsanız işlemciniz bozulur. 20mA’in üzerindeki yükler için mutlaka uygun transistorlar kullanmanız gerekir.


TWI ve I2C aynı şey midir?
I2C Philips tarafından geliştirilmiş olan bir iletişim protokolüdür. TWI (Two Wire Interface) ise Atmega8’in içinde bulunan aynen USART gibi bir donanımdır. Bu donanım I2C protokolü için kullanılabilir. Dolayısıyla eğer bir işlemcide TWI donanımı varsa I2C protokolünü bu donanım üzerinden gerçekleştirebilirsiniz, eğer yoksa donananımın yapacağı işleri sizin yazılımla taklit etmeniz gerekir. Bu konu USART örneği için daha anlaşılırdır, eğer işlemciniz de USART donanımı mevcut ise RS232 iletişimini donanım üzerinden yapmak hem daha hızlı ve hem de daha kolaydır ve işlemciyi meşgul etmez. Siz sadece donanıma ait yazmaçlara (register) gerekli komutları ve değerleri yazarsınız USART donanımı data iletişimini kendisi halleder (örneğin hassas zamanlama sorunları ile boğuşmazsınız). Eğer USART donanımı yoksa RS232 protokolü için gerekli tüm işlemleri yazılımla halletmek zorunda kalırsınız ve işlemci iletişim sonuçlanıncaya kadar başka bir işle uğraşamaz. Donanım modülleri ile ilgili son örnek de PWM (Pulse With Modulation) ‘dir. Eğer PWM sinyalini yazılımla yaparsanız işlemci sürekli olarak bu PWM sinyalini şekillendirmek için uğraşacak, ancak vakit buldukça diğer işlerle uğraşabilecektir, oysa PWM modülünü kullanırsanız bu modülle ilgili yazmaçlara PWM sinyali ile ilgili parametreleri bir kere yazdıktan sonra artık işlemci bir değişiklik olana kadar PWM modülü ile ilgili bir iş yapmayacaktır.

Program yazmak için AVRStudio’ya ihtiyaç var mı?
Hayır, WinAVR Programmers Notepad ile gelir, programlarınızı bu editörde yazıp editörden çıkmadan programınızı derleyebilirsiniz. AVRStudio programına hata ayıklama (debugging) işlemleri için ihtiyacınız olacak. AVRStudio’nun içindeki simülatörle yazdığınız kodu adım adım izleyebilir, hataları tespit edebilirsiniz.

AVR-GCC komut setini nerede bulabilirim?
AVR-GCC, GCC derleyici koleksiyonun bir parçasıdır ve AVR işlemciler için uyarlanmıştır. Bütün C dillerinin temeli aynıdır, C dilinde komut setinden bahsetmek pek doğru olmaz, C dilinde kütüphanelerden bahsedilir. Örneğin hangi C derleyicisinde hangi ortam (AVR, Windows, Linux) için program yazarsanız yazın

While (koşul){…..}

ifadesi aynıdır. Ancak her ortam için farklı fonksiyonlar, dahası bu fonksiyonlardan oluşan kütüphaneler olacaktır. AVR-GCC’nin temel kütüphanesi AVR-Libc ’dir. Bu kütüphanenin linkini ve el kitabını sitemde bulabilirsiniz.

Selamlar,

Cem



E
18 yıl
Çavuş

quote:

Orjinalden alıntı: agum

arkadaşlar hiçmi avr ile ilgilenen yok. pic ile bende yıllarca uğraştım. evet çok güzel bir mikrodenetleyici. ama artık yeni entegrelerin çalışmasını öğrenme zamanı. pic'e bu kadar bağlı olunduğunu hiç düşünmemeiştim. ayrıca pic'e göre, avr'nin fiyatı çok daha uygun. avr serilerinden atmega8515 çipini aldım fiyatı 7,5 ytl. bunun muadili saylabilecek pic16f877a 12 ytl'ye kadar çıkan fiyatta satılıyo. gerçi atmega8515 pic16f877a daha gelişmiş ama hemen hemen aynı işi yapıyorlar. ayrıca bu entegreyi programlamak için 3 diyod, 4 direnç ve 1 adet transistör yetiyor.


quote:

Orjinalden alıntı: agum
< Resime gitmek için tıklayın >


@agum eğer bu devre ise lütfen orjinalini yani okunabilir olanını bana gönderebilirmisin. Foruma herkez için eklerim.

e-mail:electrogenius@gmail.com


Bu mesaja 1 cevap geldi.
L
18 yıl
Yüzbaşı

slmlar ben 89s51 kullandım programlama kartı diye işi yok direk çalıştığı karttan programı yüklüyebiliyorum işlemciyi verenarkadaşlar onun bellek mimarisini falanda verirlerse ve programlanmasınıda verirlerse çok iyi olur dileyene mail atabilirim erhan_koclar hotmail bu benim msn adresim ilgili arkadaşlarla bilgimi paylaşırım..


Bu mesaja 1 cevap geldi.
A
18 yıl
Teğmen
Konu Sahibi

electrogenius arkadaşım o devre bilgisayarımı formatlandığım için bende yok. basic avr system diye aratırsan orjinaline ulaşabilirsin.


Bu mesaja 1 cevap geldi.
A
18 yıl
Teğmen
Konu Sahibi

89s51 in avr serisi mikrodenetleyicilerden farkı nedir? bilen paylaşabilir mi?


Bu mesaja 2 cevap geldi.
A
18 yıl
Teğmen
Konu Sahibi

ATtiny2313 entegresinin OSC konfigürasyonunu anlamadım. bilenler lütven paylaşsın.


Bu mesaja 1 cevap geldi.
E
18 yıl
Çavuş

Böyle birşey buldum umarım işine yarar...



A
18 yıl
Er

quote:

Orjinalden alıntı: agum

ATtiny2313 entegresinin OSC konfigürasyonunu anlamadım. bilenler lütven paylaşsın.


CKSEL0 CKSEL1 CKSEL2 ve CKSEL3 sigortalarini tablodaki seceneklere gore programlayacaksiniz, oncelikle harici mi dahili mi kristal kullanacaksiniz? Tam olarak neyi anlamadiginizi soylerseniz daha cok yardimci olabilirim.. Dikkat: 0(sifir) programlanmis, 1 programlanmamis anlamina gelir.

C ile AVR Programlamawww.berik.net

< Resime gitmek için tıklayın >

< Resime gitmek için tıklayın >





< Bu mesaj bu kişi tarafından değiştirildi Avrfreak -- 25 Eylül 2007; 0:32:04 >

A
18 yıl
Teğmen
Konu Sahibi

S
18 yıl
Yüzbaşı

Sayın arkadaşlar asm yi hex olarak derlemek için avr studio 4 programını kullanmayı tam olarak bilen var mı?Eğer mümkünse bu kodları hex olarak derleyebilirmisiniz.Şimdiden teşekkürler.Saygılarımla.


Bu mesaja 1 cevap geldi.
S
18 yıl
Yüzbaşı

Sayın arkadaşlar clone PI -2 adlı devreyi yaptım,ATMEGA32 yerine ATMEGA8535 kullanmak için, yazılımı avr disassembler programı ile modifiye edip, atmega8535 için düzenleyip, hex olarak çeviri yapmak istedim, başaramadım.İki entegrede aynı yapıya ve aynı bacak sayılarına sahip.Data olarak inceledim tüm özellikleri aynı.Elime atmega32 olmadığı için atmega8535 şeklinde değiştirip nasıl programlama yapabilirim.Yardımlarınız için şimdiden teşekkürler.Saygılarımla.


Bu mesaja 1 cevap geldi.
C
18 yıl
Er

selam arkadaşlar ya ben atmega32 arıyorum, ankarada konya sokağa baktım bulamadım nerden temin edebillirim yardımcı olursanız çok sevinirim


Bu mesaja 1 cevap geldi.
U
18 yıl
Binbaşı

Selam

Arkadaşlar yaklaşık 2 yıldır pic ler ile ilgileniyorum. Fakat artık ciddi bir şekilde AVR ile çalışmaya başlamalıyım. Kafamatakılan birkaç sorun var

16MHz frekansında çalışan bir pic mi daha hızlıdır yoksa AVR mi?

Mesela pic te bsf bcf komutlarınını kullanarak elde ettiğimiz en yüksek frekanlı kare dalganın frekansı mı yoksa aynı işlemi avr de de yaparak elde ettiğimiz karedalganın frekansı mı büyüktür?

Bir de genel bir atmel usb programlayıcı devresine ihtiayacım var şöyle çoğu atmeli programlayabilen bir programlayıcı... Tavsiye edebileceğiniz bir usb programlayıcısı varsa çok sevinirim. Saygılar


Bu mesaja 1 cevap geldi.
R
18 yıl
Çavuş

Hız konusunda pek bir fikrim yok ama ben aşağıdaki adresteki programlayıcıyı kendim yapmayı düşünüyorum. Göz atabilirsin, ayrıca belki biliyorsundur, avr lerle ilgili güzel bir site :http://www.avrfreaks.net/

bu da progamlayıcı:
http://tuxgraphics.org/electronics/200705/article07052.shtml


Bu mesaja 1 cevap geldi.
U
18 yıl
Binbaşı

linkler için teşekkürler bu konuyu iyice araştıracağım.


Bu mesaja 1 cevap geldi.