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 |
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 |
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 |
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. |
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 ![]() 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 |
@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 |
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.. |
electrogenius arkadaşım o devre bilgisayarımı formatlandığım için bende yok. basic avr system diye aratırsan orjinaline ulaşabilirsin. |
89s51 in avr serisi mikrodenetleyicilerden farkı nedir? bilen paylaşabilir mi? |
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 > |
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. |
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. |
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 |
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 |
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. Cevapları Gizle