İÇİNDEKİLER ÖNSÖZ...3 1.AVR MİKRODENETLİYİCİLERE GİRİŞ 1.1 GÖMÜLÜ (EMBEDDED) SİSTEMLER... 11 1.1.1 GÖMÜLÜ SİSTEMERİN KULLANIM ALANLARI... 11 1.2 MİKROİŞLEMCİ NEDİR?... 12 1.3 MİKRODETNETLEYİCİ NEDİR?... 14 1.3.1 BİR MİKRODENETLEYİCİYE İHTİYACINIZ VAR MI?... 15 1.3.2 NİÇİN ATMEL AVR AİLESİ MİKRODENETLEYİCİ?... 17 1.4. MİKROİŞLEMCİ VE MİKRODENETLEYİCİ MİMARİLERİ... 18 1.4.1 VON-NEUMAN MİMARİSİ VE CISC İŞLEMCİLER... 18 1.4.2 HAVARD MİMARİSİ VE RISC İŞLEMCİLER... 19 1.4.3 MİKROİŞLEMCİ İLE MİKRODENETLEYİCİNİN KARŞILAŞTIRILMASI... 20 1.4.4. MİKRODENETLEYİCİ YAPISINA HIZLI BAKIŞ... 20 1.4.4.1MİKRODENETLEYİCİ İLE BİR UYGULAMA GELİŞTİRMEK... 23 1.5. AVR PROGRAMLAMAK İÇİN NELER GEREKLİ?... 25 1.5.1 KİŞİSEL BİLGİSAYAR... 25 1.5.2 METİN EDİTÖRÜ... 26 1.5.3 ASSEMBLER PROGRAMI... 27 1.5.4 AVR PROGRAMLAMA KARTI... 28 1.5.5 PROGRAM YÜKLEME YAZILIMI (ARAYÜZÜ)... 28 1.5.6 PROGRAMLANMIŞ AVR Yİ NASIL DENEYEBİLİRSİNİZ?... 29 1.5.6.1 PROJE BOARDU ÜZERİNDEKİ DEVRE İLE DENEMEK... 29 1.5.6.2 AVR DENEME KARTI İLE DENEMEK... 30 2. AVR MİKRODENETLİYİCİ DONANIM ÖZELLİKLERİ 2.1 AVR MİKRODENETLEYİCİLERİN GENEL ÖZELLİKLERİ... 33 2.2 AVR ÇEŞİTLERİ... 34 2.3 AVR LERİN DIŞ GÖRÜNÜŞLERİ... 36 2.3.1 AVR CHIP LERİNİN KILIF TİPLERİ (PACKAGE TYPE)... 37 2.4 AVR PROGRAM BELLEKLERİ.....37 3.AVR ATtiny2313 ÖZELLİKLERİ 3.1 AVR ATTİNY2313 ÜN PIN YAPISI... 39 3.2 AVR ATTİNY2313 ÜN BASİT BLOK DİYAGRAMI... 40 3.2.1 PROGRAM BELLEĞİ (FLASH MEMORY)... 40 3.2.2 VERİ BELLEĞİ (SRAM/EEPROM DATA MEMORY)... 42 3.2.3 CPU/ALU... 43 3.2.4 GENEL AMAÇLI SAKLAYICILAR (GENERAL PURPUSE REGISTES)... 44 3.3 BİR KOMUTUN İŞLENME AŞAMALARI... 45 3.3.1 BİR KOMUTUN İŞLENMESİNE AİT ZAMAN DİYAGRAMLARI... 46 3.3.2 DURUM (STATUS) SAKLAYICI... 48 3.4 AVR NİN BESLEME GERİLİMİ... 48 3.5 SAAT (CLOCK) KULLANIMI VE KAYNAKLARI... 49 3.5.1 KRİSTAL SAAT IC OSİLATÖR(CRYSTAL CLOCK IC )... 49 3.5.2 SERAMİK REZONATÖR OSİLATÖR (CERAMİC RESONATOR)... 50 3.5.3 QUARTZ KRİSTAL OSİLATOR/XTAL (QUARTZ CRYSTAL)... 50
2 3.5.4 DAHİLİ RC OSİLATÖR (INTERNAL RC OSCILLATOR)... 51 3.6 RESET VE RESET KAYNAKLARI... 51 3.6.1 POWER-ON RESET (POR)... 52 3.6.2 HARİCİ (EXTERNAL) RESET... 53 3.6.3 BROWN-OUT RESET... 54 3.6.4 WATCHDOG RESET (WDT RESET)... 55 3.6.5 MCUSR- RESET KAYNAĞININ SAKLAYICISI... 56 3.7 I/O (GİRİŞ/ÇIKIŞ) PORT LARI... 56 3.7.1 ALTERNATİF PORT İŞLEVLERİ... 60 3.7.2 A PORT U PİNLERİ VE İŞLEVLERİ... 60 3.7.3 B PORT U PİNLERİ VE İŞLEVLERİ... 61 3.7.4 D PORT U PİNLERİ VE İŞLEVLERİ... 62 4. AVR ASSEMBLY E GİRİŞ 4.1 AVR ASSEMBLY DİLİ VE ERLEYİCİSİ... 63 4.1.1 PROGRAM KOD SATIRI... 64 4.2 VERİ ADRESLEME MODLARI... 64 4.2.1 DOĞRUDAN SAKLAYICI ADRESLEMEK (TEK SAKLAYICI)... 65 4.2.2 DOĞRUDAN SAKLAYICI ADRESLEMEK (İKİ SAKLAYICI)... 65 4.2.3 DOĞRUDAN GİRİŞ/ÇIKIŞ (I/O) BELLEK ADRESLEMEK... 66 4.2.4 DOĞRUDAN VERİ (DATA) BELLEK ADRESLEMEK... 66 4.2.5 DOLAYI VERİ (DATA) BELLEĞİ ADRESLEMEK... 67 4.2.6 DOLAYI VERİ BELLEĞİ ADRESLEMEK (ARTIRARAK/AZALTARAK)... 67 4.2.7 DOLAYI PROGRAM BELLEĞİ ADRESLEMEK... 68 4.2.8 İLİŞKİLİ (RELATIVE) PROGRAM BELLEĞİ ADRESLEMEK... 68 4.3 AVR ATTİNY 2313 KOMUT SETİ... 69 4.4 AVR ASSEMBLER YÖNERGELERİ... 83 5. AVR PROGRAMLAMAK VE DENEMEK 5.1 AVR ASSEMBLY DİLİ YAZIM KURALLARI... 89 5.1.1 PROGRAM BLOKLARI VE GİRİNTİLERİ... 90 5.1.1.1 NOKTALI VİRGÜL (;) KARAKTERİ KULLANMAK... 91 5.1.2 SAYI VE YAZIM FORMATLARI... 91 5.1.2.1 HEKSADESİMAL SAYI FORMATI... 91 5.1.2.2 BİNARY sayı formatı... 91 5.1.2.3 DESİMAL sayı formatı... 92 5.1.2.4 ASCII karakter formatı... 92 5.1.2.5 BÜYÜK/KÜÇÜK HARF KULLANMAK... 92 5.1.2.6 ETİKETLER... 92 5.1.3 AKIŞ DİYAGRAMLARININ ÇİZİLMESİ... 93 5.2 AVR PROGRAM YAZIM ADIMLARI... 96 5.3 AVR STUDIO EDİTÖRÜNDE PROGRAMI YAZMAK... 96 5.4 PROGRAMIN DERLENMESİ... 98 5.4.1 INCLUDE DOSYASININ ÖZELLİKLERİ... 99 5.5 PROGRAMI AVR ENTEGREYE YAZDIRMAK... 101 5.5.1 AVR PROG/DEKA PROGRAMLAMA VE DENEME KARTI... 101 5.5.2 PONYPROG2000 SERİ PROGRAMLAYICI... 103
AVR Mikrodenetleyicilere Giriş 3 5.6 PROGRAMLANMIŞ BİR AVR Yİ DENEMEK... 106 5.6.1 PROJE BOARDU ÜZERİNE KURULAN DEVREDE DENEMEK... 106 5.6.2 DENEME KARTI ÜZERİNDE DENEMEK... 107 5.7 GÜVENLİK VE SİGORTA BİTLERİ (KONFİGÜRASYON)... 108 5.7.1 LOCK (KİLİTLEME) BİTLERİ... 109 5.7.2 FUSE (SİGORTA) BİTLERİ... 110 5.7.2.1 Fuse Extended Byte... 110 5.7.2.2 Fuse HIgh Byte... 110 5.7.2.3 Fuse Low Byte... 112 5.8 SAAT (CLOCK) SİSTEMLERİ VE DAĞILIMLARI... 112 5.9 SAAT (CLOCK) SİGORTA BİTLERİ VE KAYNAKLARI... 114 5.9.1 KRİSTAL (CRYSTAL) OSİLATÖR KAYNAĞI MODLARI... 114 5.9.2 AYARLANABİLİR DÂHİLİ RC OSİLATÖR... 116 5.9.2.1 OSCCAL... 117 5.9.3 HARİCİ SAAT (EXTERNAL CLOCK)... 117 5.10 AVR STUDIO PROGRAMI İLE İLGİLİ BAZI UYGULAMALAR... 118 5.10.1 AVR STUDIO da derlenmiş dosyadan yeni bir PROJE OLUŞTURMAK... 118 5.10.2 AVR STUDIO DA PROJE simülasyonu yapmak... 119 5.11 PONYPROG2000 İLE İLGİLİ BAZI UYGULAMALAR... 123 6. VERİ TRANSFERİ VE KARAR İŞLEMLERİ 6.1 SAKLAYICILAR ARACILIĞI İLE VERİ TRANSFERİ... 125 6.1.1 LDI ve OUT KOMUTLARI İLE VERİ TRANSFERİ... 125 6.1.2 VERİNİN IN VE OUT KOMUTLARI İLE TRANSFERİ... 130 6.1.3 AVR yi PROGRAMLARKEN UYGUN OSİLATÖR SEÇMEK... 134 6.2 BİT TEST EDEREK PROGRAM AKIŞINI DEĞİŞTİRMEK... 137 6.2.1 BİR SAKLAYICININ BİT İNİ TEST EDEREK KARAR VERMEK... 137 6.2.3 I/O SAKLAYICISININ BİT İNİ TEST EDEREK KARAR VERMEK... 141 6.2.4 I/O SAKLAYICISININ BIT İNİ DOĞRUDAN SET VE CLEAR YAPMAK... 144 7. DÖNGÜ DÜZENLEMEK 7.4 ARİTMETİK İŞLEM VE KARŞILAŞTIRMA YAPARAK DÖNGÜ DÜZENLEMEK... 161 7.4.1 SUB VE SUBI KOMUTLARI İLE DÖNGÜ DÜZENLEMEK... 161 7.4.2 KARŞILAŞTIRMA KOMUTLARIYLA DÖNGÜ DÜZENLEMEK... 166 7.4.3 DİĞER KOMUTLARLA DÖNGÜ DÜZENLEMEK... 168 8. ZAMAN GECİKTİRMESİ VE HESAPLAMALARI 8.1 ZAMAN GECİKTİRMENİN PRENSİPLERİ... 173 8.1.1 KOMUT ÇEVRİMİ VE SÜRESİ... 173 8.1.2 ZAMAN GECİKTİRME DÖNGÜLERİNDE HESAPLAMALAR... 175 8.1.3 TEK DÖNGÜ İLE EN AZ ZAMAN GECİKTİRMESİ YAPMAK... 176 8.1.4 TEK DÖNGÜ İLE EN FAZLA ZAMAN GECİKTİRMESİ YAPMAK... 177 8.1.4.1 TEKRAR SAYISININ (N) HESABI... 179 8.1.5 ÇİFT DÖNGÜLÜ ZAMAN CECİKTİRMESİ DÜZENLEMEK... 180 9. ALT PROGRAM OLUŞTURMAK 9.1 ALT PROGRAM NEDİR?... 183 9.1.1 ALT PROGRAM KULLANMANIN YARARLARI... 183
4 9.2 YIĞIN (GÖSTERİCİ) SAKLAYICI (STACK POİNTER REGİSTER)... 185 10. BİT KAYDIRMAK VE MANTIKSAL İŞLEMLER 10.1 BİT KAYDIRMA KOMUTLARI... 199 10.1.1 SOLA KAYDIRMAK (LSL VE ROL KOMUTLARI)... 199 10.1.1.1 LSL ( LOGİCAL SHİFT LEFT) MANTIKSAL SOLA KAYDIRMA KOMUTU... 199 10.1.1.2 ROL (ROTATE LEFT TROUGH CARRY) TAŞMA İLE SOLA KAYDIRMA... 203 10.1.2 SAĞA KAYDIRMAK (LSR VE ROR KOMUTLARI)... 205 10.1.2.1 LSR ( LOGİCAL SHİFT RİGHT) MANTIKSAL SAĞA KAYDIRMA... 205 10.1.2.2 ROR (ROTATE RİGHT TROUGH CARRY) TAŞMA İLE SAĞA KAYDIRMA... 208 10.1.3 COM KOMUTU (BİR İN TAMAMLAYICISINI ALMAK)... 209 10.1.4 SWAP KOMUTU (YER DEĞİŞTİRMEK)... 212 10.2 MANTIKSAL İLŞLEM KOMUTLARI... 215 10.2.1 AND KOMUTU (İKİ SAKLAYICI ARASINDA AND İŞLEMİ YAPMAK)... 215 10.2.2 ANDI KOMUTU (SAKLAYICI İLE SABİT ARASINDA AND İŞLEMİ YAPMAK)... 216 10.2.3 OR KOMUTU (SAKLAYICILAR ARASINDA OR İŞLEMİ YAPMAK)... 217 10.2.4 ORI KOMUTU (SAKLAYICI İLE SABİT ARASINDA OR İŞLEMİ YAPMAK)... 217 10.2.5 EOR KOMUTU (İKİ SAKLAYICI ARASINDA EX-OR/ ÖZEL OR İŞLEMİ YAPMAK)... 218 10.3 MANTIKSAL İŞLEM KOMUTLARI İLE VERİLERİ KARŞILAŞTIRMAK... 219 10.3.1 EOR KOMUTU İLE İKİ VERİYİ KARŞILAŞTIRMAK... 219 10.3.2 OR KOMUTU İLE VERİYİ 0 İLE KARŞILAŞTIRMAK... 220 10.4 BİLEŞİMSEL MANTIK DEVRESİ ÇÖZÜMÜ... 221 11. ARİTMETİK İŞLEM KOMUTLARI VE İŞLEMLERİ 11.1 ARİTMETİK İŞLEM KOMUTLARI... 225 11.1.1 TOPLAMA KOMUTLARI... 225 11.1.2 I6 BİT TOPLAMA YAPMAK... 229 11.1.3 ÇIKARMA KOMUTLARI... 232 12.POINTER SAKLAYICILAR VE ÇEVRİM TABLOLAR 12.1 POINTER SAKLAYICILARI... 243 12.1.1 VERİ BELLEĞİNE YAZMA VE OKUMA... 244 12.1.2 PROGRAM BELLEĞİNDEN VERİ OKUMA (LPM KOMUTU)... 248 12.2 ÇEVRİM TABLOLARI... 249 13. KESMELER (INTERRUPTS) 13.1 KESME (INTERRUPT) NEDİR?... 269 13.1.1 GENEL KESMENİN YETKİLİ KILINMASI... 272 13.1.2 KESME SERVİS PROGRAMINA YÖNLENDİRME... 273 13.2 KESME ÖZELLİKLERİNİN TANIMLANMASI... 274 13.2.1 INT0, INT1 VE PCINT KESMELERİ VE DÜZENLEMELERİ... 274 13.2.1.1 GENERAL INTERRUPT MASK REGISTER (GIMSK)... 275 13.2.1.2 MCU CONTROL REGISTER (MCUCR)... 275 13.3 KESME SIRASINDA SREG VE SAKLAYICI İÇERİĞİNİN KORUNMASI... 281 14. ZAMANLAYICILAR /SAYICILAR 14.1 DONANIM ZAMANLAYICILARI/SAYICILARI... 289
AVR Mikrodenetleyicilere Giriş 5 14.1.1 8-BIT ZAMANLAYICI/SAYICI0 (TIMER/COUNTER0)... 290 14.1.2 ZAMANLAYICI/SAYICI0 ÜNİTE SAKLAYICILARI... 290 14.1.3 SAYICI ÜNİTESİ... 291 14.1.4 ÇIKIŞ KARŞILAŞTIRMA ÜNİTESİ... 292 14.1.5 KARŞILAŞTIRMA EŞLEŞME ÇIKIŞ ÜNİTESİ... 293 14.2 ZAMANLAYICI/SAKLAYICI0 MODLARI... 293 14.2.1 NORMAL MODE... 294 14.2.2 ZAMANLAYICI SİLME KARŞILAŞTIRMA MODU (CTC)... 294 14.2.3 HIZLI PWM (Fast PWM Mode) MODU... 295 14.2.4 FAZ DÜZELTME PWM MODU (Phase Correct PWM Mode)... 296 14.3. ZAMANLAYICI/SAYICI0 ZAMANLAMA DİYAGRAMLARI... 297 14.4 ZAMANLAYICI/SAYICI0 SAKLAYICILARININ İNCELENMESİ... 299 14.4.1 TCCR0A (Timer/Counter Control Register A-Zamanlayıcı/Sayıcı Kontrol Saklayıcısı A)... 299 14.4.2 TCCR0B (Timer/Counter Control Register B -Zamanlayıcı/Sayıcı Kontrol Saklayıcısı B)... 301 14.4.3 TCNT0 (Timer/Counter Register0 -Zamanlayıcı/Sayıcı Saklayıcısı0... 302 14.4.4 OCR0A ( Output Compare Register A Çıkış Karşılaştırma Saklayıcısı A)... 302 14.4.5 OCR0B ( Output Compare Register0 B Çıkış Karşılaştırma Saklayıcısı B)... 303 14.4.6 TIMSK (Timer/Counter Interrupt Mask Register saklayıcısı)... 303 14.4.7 TIFR (Timer/Counter Interrupt Flag Register )... 304 14.5 16 BIT ZAMANLAYICI/SAYICI1 (TIMER/COUNTER1)... 325 14.5.1 GENEL AÇIKLAMALAR... 326 14.5.2 ZAMANLAYICI/SAYICI1 ÜNİTE SAKLAYICILARI... 327 14.5.3 16-BIT SAKLAYICILARA ERİŞİM... 328 14.5.4 GİRİŞ YAKALAMA ÜNİTESİ (INPUT CAPTURE UNIT)... 330 14.5.4.1 GİRİŞ YAKALAMA TETİKLEME KAYNAKLARI... 331 14.5.4.2 GÜRÜLTÜ KESİCİ... 331 14.5.4.3 GİRİŞ YAKALAMA ÜNİTESİNİN KULLANILMASI... 331 14.6 ZAMANLAYICI/SAYICI1 SAKLAYICILARININ İNCELENMESİ... 332 14.6.1 TCCR1A (Timer/Counter Control Register A-Zamanlayıcı/Sayıcı1 Kontrol Saklayıcısı A)... 332 14.6.2 TCCR1B (Timer/Counter Control Register B -Zamanlayıcı/Sayıcı Kontrol Saklayıcısı B)... 335 14.6.3 TCCR1C (Timer/Counter Control Register C -Zamanlayıcı/Sayıcı Kontrol Saklayıcısı C)... 336 14.6.4 TCNT1H ve TCNT1L (Timer/Counter Register1 -Zamanlayıcı/Sayıcı Saklayıcısı1... 336 14.6.5 OCR1AH ve OCR1AL ( Output Compare Register 1 A Çıkış Karşılaştırma saklayıcısı 1 A)... 337 14.6.6 OCR1BH ve OCR1BL ( Output Compare Register 1 B Çıkış Karşılaştırma saklayıcısı 1 B)... 337 14.6.7 ICR1H ve ICR1L ( Input Capture Register 1 Giriş Yakalama Saklayıcısı 1... 337 14.6.8 TIMSK (Timer/Counter Interrupt Mask Register)... 338 14.6.9 TIFR (Timer/Counter Interrupt Flag Register )... 339 14.7 ZAMANLAYICI/SAYICI 1 MODLARI... 340 14.7.1 NORMAL MOD... 341 14.7.2 ZAMANLAYICI SİLME KARŞILAŞTIRMA MODU (CTC)... 348 14.7.3 HIZLI (Fast) PWM MODU... 353 14.7.4 FAZ DÜZELTME PWM MODU... 357 14.7.5 FAZ ve FREKANS DÜZELTME PWM MODU... 358 14.8 WATCHDOG ZAMANLAYICI (WATCHDOG TIMER)... 363 14.8.1 WDTCR ( WatchDog Timer Control Register - Watchdog Zamanlayıcı Kontrol Saklayıcısı)... 364 14.8.1.1 WDT I DURDURMAK ve DEĞERLERİNİ DEĞİŞTİRMEK... 366 14.9 UYKU (SLEEP) MODU... 375 14.9.1 MCUCR SAKLAYICISINI UYKU MUDU İÇİN DÜZENLEMEK... 376
6 14.9.1.1 IDLE MOD 376 14.9.1.2 POWER-DOWN MODU... 377 14.9.1.3 BEKLEME (STANDBY) MODU... 377 15. ANALOG KARŞILAŞTIRICI ve İŞLEMLERİ 15.1 ANALOG KARŞILAŞTIRMA ÜNİTESİ... 383 15.1.1 ACSR (ANALOG COMPARATOR CONTROL AND STATUS REGİSTER )... 386 15.1.2 DIDR /DIJITAL GİRİŞİ KAPATMA SAKLAYICISI... 387 16. USART SERİ VERİ İLETİŞİMİ 16.1 SERİ İLETİŞİM NEDİR?... 395 16.1.1 ASENKRON (EŞ ZAMANSIZ) VERİ İLETİŞİMİ... 395 16.1.2 SENKRON (EŞ ZAMANLI) VERİ İLETİŞİMİ... 397 16.1.3 İLETİM YÖNLERİNE GÖRE SERİ VERİ İLETİŞİM MODLARI... 397 16.1.3.1 FULL DUBLEX (TAM ÇİFT YÖNLÜ) MODU... 397 16.1.3.2 HALF DUBLEX (YARIM ÇİFT YÖNLÜ) MODU... 398 16.1.3.3 SIMPLEX (TEK YÖNLÜ) MODU... 398 16.2 AVR ATTİNY2313 USART BİRİMİ... 398 16.2.1 USART BLOK DİYAGRAMI... 399 16.2.1.1 SAAT SİNYALİ ÜRETİMİ... 400 16.2.1.2 BAUD RATE ÜRETİMİ VE SİNYAL HIZININ BELİRLENMESİ... 401 16.2.1.3 ÇERÇEVE (FRAME) FORMATLARI... 402 16.3 USART SAKLAYICILARININ İNCELENMESİ... 403 16.3.1 UDR (USART I/O DATA REGİSTER-USART GİRİŞ/ÇIKIŞ SAKLAYICISI)... 404 16.3.2 UCSRA ( USART CONTROL AND STATUS REGİSTER A )... 404 16.3.3 UCSRB ( USART CONTROL AND STATUS REGİSTER B )... 405 16.3.4 UCSRC ( USART CONTROL AND STATUS REGİSTER C)... 406 16.3.5 UBRRL VE UBRRH (USART BAUD RATE REGİSTERS)... 407 16.4 USART IN KULLANILMASI... 409 16.4.1 USART İLE VERİ GÖNDERMEK... 410 16.4.1.1 5 İLE 8 BIT ARASI VERİ GÖNDERMEK... 410 16.4.1.2 9 BIT VERİ GÖNDERMEK... 411 16.4.1.3 GÖNDERİCİ KESMELERİ... 411 16.4.2 WINDOWS XP DE HYPER TERMİNAL OLUŞTURMAK... 415 16.4.3 USART İLE VERİ ALMAK... 419 16.4.3.1 5 İLE 8 ARASI VERİ ALMAK... 419 16.4.3.2 9 BİT VERİ ALMAK... 420 16.4.3.3 ALMA TAMAMLANDI BAYRAĞI VE KESME... 420 16.4.3.3 ALICIYI DEVRE DIŞI BIRAKMAK VE BOŞALTMAK... 420 17. EEPROM VERİ BELLEĞİNİ YAZMA/OKUMA İŞLEMLERİ 17.1 AVR ATTİNY2313 EEPROM VERİ BELLEĞİ... 425 17.1.1 EEPROM SAKLAYICILARI... 425 17.1.1.1 EEAR (EEPROM Address Register- EEPROM Adres Saklayıcısı)... 426 17.1.1.2 EEDR (EEPROM Data Register- EEPROM Veri Saklayıcısı)... 426 17.1.1.3 EECR (EEPROM Control Register-EEPROM Kontrol Saklayıcısı)... 427 DİZİN...434