Ev / Yorumlar / AVR mikrokontrolörlerinin programlanması ilk adımdır. Mikrodenetleyicileri programlamak için neler gereklidir? AVR'yi öğrenmenin en kolay yolu

AVR mikrokontrolörlerinin programlanması ilk adımdır. Mikrodenetleyicileri programlamak için neler gereklidir? AVR'yi öğrenmenin en kolay yolu

Böylece çekirdeğin geçişler ve adresleme ile ilgili çalışmalarını sıraladık. Dikkatimizi başka bir alana, hafızaya çevirmenin zamanı geldi.

İki türü vardır (EEPROM genellikle çevre birimi olduğundan sayılmaz, ancak daha sonra bu konu hakkında daha fazla bilgi vereceğiz):

  • RAM - RAM
  • ROM - ROM, diğer adıyla flash, diğer adıyla program belleği

Mimarimiz Harvard olduğu için operatörün kendi adresi var, flaşın da kendine ait. Veri sayfasında RAM adresleme yapısını görebilirsiniz.

Adreslere hemen dikkat edin! RON ve çevresel kayıtların yanı sıra RAM de aynı adres alanında bulunur. Onlar. 0000'den 001F'ye kadar olan adresler kayıtlarımızı işgal eder, ardından 005F adresine kadar I/O hücreleri - portlar bulunur. Bağlantı noktaları aracılığıyla denetleyicide bulunan her şey yapılandırılır. Ve ancak o zaman 0060 adresinden amacına uygun olarak kullanabileceğimiz RAM'imiz gelir.

Ayrıca, I/O kayıtlarının da kendi adreslerine sahip olduğunu lütfen unutmayın - I/O kayıtlarının adres alanı (00'dan 3F'ye kadar), şeklin sol tarafında belirtilmiştir. IO/Register Bloğu Bu adresleme YALNIZCA OUT ve IN komutlarında çalışır.

Çevresel kayıtlara iki farklı yoldan erişilebilir:

  • G/Ç adres alanındaki kısa adreste GİRİŞ/ÇIKIŞ komutları aracılığıyla
  • RAM adres alanındaki tam adresteki bir grup LOAD/STORE komutu aracılığıyla

Örnek. Eşzamansız alıcı-verici UDR'nin giriş kaydını alalım; 0x0C (0x2C) adresine sahiptir; genel adres alanındaki adres parantez içinde gösterilir.

LDI R18.10; 10 sayısını R18 kaydedicisine yükledik. OUT UDR,R18 gibi; İlk yoldan derleyicinin kendisi çıkarılmıştır; UDR STS 0x2C,R18 yerine 0x0C değerini değiştirir; Beni ikinci yoldan çıkardılar. Store komutu ile; Adresi doğrudan girerek.

Her iki yöntem de aynı sonuçları verir. ANCAK! Giriş/çıkış alanındaki (OUT/IN) adreslemeyle çalışanlar iki byte daha kısadır. Bu anlaşılabilir bir durumdur - rastgele bir bellek hücresinin çift baytlık adresini saklamalarına gerek yoktur ve giriş-çıkış alanının kısa adresi, çift baytlık talimat koduna uyar.

Doğru, burada başka bir şaka daha var. Gerçek şu ki, her yıl AVR'den giderek daha fazla taş ortaya çıkıyor ve içlerinde giderek daha fazla et bulunuyor. Ve her çatırtının kendi çevresel G/Ç kayıtlarına ihtiyacı vardır. Ve şimdi, ATMega88'in (Mega8'in yerini alan) halihazırda o kadar çok çevre birimine sahip olduğu ve I/O kayıtlarının artık 3F adres alanı sınırına sığmadığı bir noktaya ulaştık.

Eyvah, geldiler. Ve eski taşlardan yenilerine geçiş yapanların şaşkın ifadeler ifade etmeye başladıkları yer burasıdır - OUT/IN komutları neden bazı çevresel kayıtlarda çalışıyor da diğerlerinde çalışmıyor?

Ve çok basit; yeterli derinlik yoktu.

Ama çekirdek tektir, yeniden yapılamaz. Ve burada ATMEL çalışanları kurnazca davrandılar - sözde hafıza haritalı kayıtları tanıttılar. Onlar. 3F sınırına uymayan tüm kayıtlar artık tek bir yolla, Yükle/Depola aracılığıyla mevcuttur.

Ne şaka ama. Bazı m88def.inc'yi açarsanız, hangi G/Ç kayıtlarının "doğru" olduğunu ve hangilerinin bellek eşlemeli olduğunu görebilirsiniz.

Bunun gibi bir şey olacak:

; ***** I/O KAYIT TANIMLARI ******************************************** ******** * ; NOT: ; "BELLEK EŞLEŞTİRİLMİŞ" olarak işaretlenen tanımlar genişletilmiş G/Ç bağlantı noktalarıdır; ve GİRİŞ/ÇIKIŞ komutlarıyla kullanılamaz.equ UDR0 = 0xc6; BELLEK EŞLEŞTİRİLMİŞ .equ UBRR0L = 0xc4 ; BELLEK EŞLEŞTİRİLMİŞ .equ UBRR0H = 0xc5 ; BELLEK EŞLEŞTİRİLMİŞ .equ UCSR0C = 0xc2; BELLEK EŞLEŞTİRİLMİŞ .equ UCSR0B = 0xc1 ; BELLEK EŞLEŞTİRİLMİŞ .equ UCSR0A = 0xc0; BELLEK HARİTALANMIŞ falan filan ve çok daha fazlası.equ OSCCAL = 0x66 ; BELLEK EŞLEŞTİRİLMİŞ .equ PRR = 0x64; BELLEK EŞLEŞTİRİLMİŞ .equ CLKPR = 0x61; BELLEK EŞLEŞTİRİLMİŞ .equ WDTCSR = 0x60; BELLEK EŞLEŞTİRİLMİŞ .equ SREG = 0x3f ;<------ А тут пошли обычные.equ SPL = 0x3d .equ SPH = 0x3e .equ SPMCSR = 0x37 .equ MCUCR = 0x35 .equ MCUSR = 0x34 .equ SMCR = 0x33 .equ ACSR = 0x30

Bunlar turtalar.

Ve bu alanda, büyük tüylü bir organın, onu sıkı bir şekilde kaplamak amacıyla montaj kodunun modeller arası uyumluluğuna doğru uçtuğunu anlıyorsunuz. Sonuçta, kayıtları tanımlayan her türlü makro tanımı ve tanımı düzeltmek bir şey, oturup Cinderella gibi doğru bağlantı noktalarını yanlış olanlardan ayırmak başka bir şey.

Ancak bir çözüm var. Makro dil! Komuta sistemini beğenmediniz mi? Blackjack ve fahişelerle kendinizinkini yaratın!
Evrensel bir OUT gibi kendi UOUT takımımızı kuralım

IN komutu için de benzer şekilde, genel olarak, bu tür makrolarla, birleştiriciyi ÇOK büyük ölçüde çeşitlendirebilir ve onu her türlü C ve Pascal'ı bir paçavra gibi parçalayabilecek güçlü bir programlama diline dönüştürebilirsiniz.

Peki ben neden bahsediyorum... RAM hakkında.

Böylece adreslemeyi hallettik. Artık kullanıcı RAM hücrelerinin başladığı bellek adreslerini veri sayfasının Bellek Haritası bölümünde nerede arayacağınızı biliyorsunuz. Ama bilmek için referans için orada.

Ve bizim kodumuzda RAM direktifi ile başlıyor.DSEG Şablonumuzu hatırlıyor musunuz?

"m16def.inc"yi ekleyin; ATMega16 kullanıyoruz ;= macro.inc'yi başlat ============================== ; Makrolar burada;= macro.inc'yi sonlandırın ================================= ; RAM ================================================== =========== .DSEG ; RAM bölümü; FLAŞ ================================================= ========== .CSEG ; Kod bölümü; EEPROM ================================================= ======== .ESEG ; EEPROM segmenti

.DSEG'den sonra değişkenlerimizi ayarlayabiliriz. Ve burada sadece bir hücre patlaması var; herhangi birini işgal edin. Adresi girin ve mutlu olun. Peki neden adresleri manuel olarak sayalım? Derleyicinin burada düşünmesine izin verin.

Bu nedenle bir etiket alıp ayarlayacağız

0x0060 ## ;Variables 0x0061 ## 0x0062 ## 0x0063 ## ;Variables2 0x0064 ## 0x0065 ## ;Variables4 buradan başlayabilir

## olarak herhangi bir bayt. Varsayılan olarak FF. Elbette herhangi bir değişken tipinden, ilk başlatmadan, taşma kontrolünden ve diğer burjuva zevklerinden bahsetmeye gerek yok. Burası Sparta! Yani montajcı. Hepsi elle.
C ile bir benzetme yaparsak, bu, yalnızca boşluk işaretçileri aracılığıyla bellekle çalışmak gibidir. Şişnikler anlayacaktır. Anlayacaklar ve dehşete düşecekler. Çünkü bu dünya zalim ve haindir. Endeksi biraz yanlış hesapladım ve diğer verileri kaybettim. Ve hemen ortaya çıkmazsa bu hatayı yakalayacaksınız.

Yani yine dikkat, dikkat ve dikkat. Tüm bellek işlemlerini izleme yoluyla yürütüyoruz ve hiçbir şey başarısız olmayacak veya taşmayacaktır.

.ORG yönergesi veri segmentinde de tamamen aynı şekilde çalışır; adresleri, bu durumda işaretleri, buradan belleğin sonuna aktarır. Sadece bir incelik - ORG 0000 bize RAM'in en başlangıcını verecek ve bu R0 ve diğer kayıtlardır. Örnek olarak Mega16'yı kullanan sıfır kilometre RAM, ORG 0x0060'ı verecektir. Ve diğer kontrolörlerde başka bir değer var. Her seferinde veri sayfasını gözden geçirmek tembeldir, bu nedenle SRAM_START gibi belirli bir MK için RAM'in başlangıcını gösteren bir makro tanımı vardır.

Yani eğer RAM'in başlangıcının, örneğin 100 baytın, bir tür çöp arabelleği altında bırakılmasını istiyorsak, o zaman bu numarayı yaparız.

1 2 3 4 .DSEG .ORG SRAM_START+100 Değişkenler: .byte 3

DSEG .ORG SRAM_START+100 Değişkenler: .byte 3

Bitti, tampon bölgemizi baştan 100'e kadar temizledik.

Tamam, adreslemeyi çözdük. Bellek hücreleriyle nasıl çalışılır? Ve bu amaçlar için iki grup komut vardır. LOAD ve STORE en büyük komut grubudur.

Gerçek şu ki, bir RAM hücresine RON'dan bir bayt yüklemek veya ondan bir baytı RON'a boşaltmak dışında hiçbir şey yapılamaz.

Sakla (ST**) komutları RAM'e yazılır ve Yükle (LD**) komutları okunur.

Okuma R16…R31 kaydına gider ve hücre adresi doğrudan komutta belirtilir. İşte basit bir örnek. Üç baytlık Değişkenler değişkeni var, 1 artırılmalı. Değişkenler++ işlemini gerçekleştirin

DSEG Değişkenleri: .byte 3 Değişkenler2: .byte 1 .CSEG ; Değişken hafızadadır; önce onu almanız gerekir. LDS R16, Değişkenler; R16 LDS R17, Variables+1'deki ilk Değişkenler baytını okuyun; R17 LDS R18, Değişkenler+2'deki ikinci Değişkenler baytını okuyun; Peki, R18'deki üçüncü bayt; Şimdi buna 1 ekleyelim çünkü AVR yalnızca bir sabitle eklenemez; çıkarmak için çarpıtmanız gerekir. Ancak herhangi bir özel soruna neden olmaz. SUBI R16,(-1); Genel olarak SUBI bir çıkarma işlemidir ancak -(- + SBCI R17,(-1) değerini verir; Ve burada aktarım dikkate alınır. Ancak buna daha sonra değineceğiz. SBCI R18,(-1) ; Çeviricide matematik bir farklı hikaye STS Değişkenleri, R16 ; Her şeyi olduğu gibi kaydedin. STS Değişkenleri+1,R17 STS Değişkenleri+2,R18.

Veya başka bir yöntem kullanabilirsiniz. İndeks kaydı aracılığıyla dolaylı kayıt.

DSEG Değişkenleri: .byte 3 Değişkenler2: .byte 1 .CSEG ; Değişkenimizin adresini alın LDI YL,low(Variables) LDI YH,High(Variables) ; Değişken hafızadadır; önce onu almanız gerekir. LD R16, Y+; R16 LD R17, Y+'daki ilk Değişkenler baytını okuyun; R17 LD R18, Y+'daki ikinci Değişkenler baytını okuyun; Peki, R18'deki üçüncü bayt; Şimdi buna 1 ekleyelim çünkü AVR yalnızca bir sabitle eklenemez; çıkarmak için çarpıtmanız gerekir. Ancak herhangi bir özel soruna neden olmaz. SUBI R16,(-1); aslında SUBI bir çıkarma işlemidir, ancak -(- verir + SBCI R17,(-1) ; Ve burada transfer dikkate alınır. Ancak buna daha sonra değineceğiz. SBCI R18,(-1) ; Çeviricide matematik farklı bir hikaye ST -Y,R18 ; Her şeyi olduğu gibi tutuyoruz ST -Y,R17 Ama ters sırada ST -Y,R16.

Arttırma sonrası ve azaltma öncesi işlemler burada zaten kullanılıyor. İlkinde önce adresi okuyoruz, sonra adrese 1 ekliyoruz, ikincisinde ise adresten önce 1 çıkarıyoruz, sonra kaydediyoruz.

Bellekteki veya tablolardaki diziler arasında yineleme yapmak için bu tür artımlı komutların kullanılması uygundur.
Ayrıca her üç dizin türü (X,Y,Z) için dolaylı göreceli yazma/okuma LDD/STD ve diğer seçenekler de mevcuttur. Genel olarak veri sayfasını ve komut sistemini kullanın.

Yığın
Oh, yığın harika bir şey. Bu konuda sevdiğim şey, yığın bozulmasının çalışan bir programı tam bir karmaşaya dönüştürmesidir. Çünkü yığın işlemleri daha fazla dikkat gerektirir, çünkü bir yığın bir yerde kırılırsa ve onu hemen takip edemezseniz daha sonra yakalarsınız... Genel olarak bu bir güzelliktir, bir alet değil.

Neden seni seviyorum? Eğer C aptalca, hızlı ve etkili bir zanaatsa, o zaman Montaj telkari bir sanattır. Jim gibi manyaklar başyapıtları kağıttan ve sadece kağıttan perçinliyor, ancak kendi zevkiniz için hazır bir prefabrik model ve yapıştırıcı satın alabileceğiniz anlaşılıyor. Burada da sürecin kendisi çok zorlayıcı. Hata ayıklama zahmetinden de dahil :))))

Yani, yığın hakkında. Ne olduğunu? Ve burası hafıza alanıdır. Yığın prensibiyle çalışır. Onlar. En son bıraktığını, ilkini aldı.

Yığın, yığının tepesini gösteren bir işaretçiye sahiptir. Yığın işaretçisinden özel bir kayıt SP sorumludur veya daha doğrusu bir SPL ve SPH kayıt çiftidir. Ancak az miktarda RAM'e sahip mikrodenetleyicilerde, örneğin Tini2313'te yalnızca SPL vardır

Denetleyici başladığında, genellikle yaptıkları ilk şey yığını başlatmak, SP'ye yığının büyüyeceği alt kısmının adresini yazmaktır. Genellikle bu RAM'in sonudur ve başlangıca doğru büyür.

Bu, programın en başında şu şekilde yapılır:

1 2 3 4 5 LDI R16,Düşük(RAMEND) ÇIKIŞ SPL,R16 LDI R16,Yüksek(RAMEND) ÇIKIŞ SPH,R16

LDI R16,Düşük(RAMEND) ÇIKIŞ SPL,R16 LDI R16,Yüksek(RAMEND) ÇIKIŞ SPH,R16

Burada RAMEND, geçerli MK'deki RAM'in sonunu gösteren bir makro tanımıdır.

İşte bu, yığın gitmeye hazır. Veriler PUSH Rn komutu kullanılarak yığına gönderilir ve POP Rn aracılığıyla alınır.
Rn, RON'dan herhangi biridir.

CALL, RCALL, ICALL, RET, RETI komutları ve kesme çağırma komutları da yığınla çalışır, ancak bu konuya daha sonra değinilecektir.

Nasıl çalıştığını hissetmek, nasıl ve nereye hareket ettiğini anlamak için yığınla oynayalım.

Stüdyoya aşağıdaki kodu girin:

CSEG; LDI kod segmenti R16,Düşük(RAMEND) ; Yığın başlatma OUT SPL,R16 LDI R16,High(RAMEND) OUT SPH,R16 LDI R17,0 ; Değerler yükleniyor LDI R18.1 LDI R19.2 LDI R20.3 LDI R21.4 LDI R22.5 LDI R23.6 LDI R24.7 LDI R25.8 LDI R26.9 PUSH R17 ; Değerleri yığının üzerine koyuyoruz PUSH R18 PUSH R19 PUSH R20 PUSH R21 PUSH R22 PUSH R23 PUSH R24 PUSH R25 PUSH R26 POP R0 ; Yığından pop değerleri POP R1 POP R2 POP R3 POP R4 POP R5 POP R6 POP R7 POP R8 POP R9

Şimdi stüdyoyu adım adım çalıştırın ve SP'nin nasıl değiştiğini izleyin. Yığın İşaretçisi stüdyoda Program Sayacı ile aynı yerde görülebilir.

Öncelikle yığını başlatıyoruz ve kayıtları veriyle yüklüyoruz. Sonuç aşağıdaki resim olacaktır:

Daha sonra POP komutunu kullanarak yığından veri alıyoruz. Verileri yığında nereye koyduğumuz ve nereye yüklediğimiz bizim için önemli olmadığını lütfen unutmayın. Önemli olan kurulum sırasıdır! Üst kayıtlardan koyuyoruz ve alt kayıtlardan alacağız. Bu yığın işaretçisini artıracaktır.

İTİN R16 İTİN R17 POP R16 POP R17

Örneğin, daha düşük RON'ların sınırlandırılmasından zaten bahsetmiştim - doğrudan kendinize bir sayı yazmanıza izin vermiyorlar. Sadece kıdemli grubun kayıtları aracılığıyla. Ama bu sakıncalı!

Sorun makro kullanılarak çözüldü. Buna LDIL - LDI düşük adını verdim

MAKRO LDIL PUSH R17; Daha yüksek yazmaçlardan birinin değerini yığına kaydedelim. LDI R17,1; Şimdilik değerimiz MOV @0,R17'yi içine yükleyelim; Değeri düşük grubun kaydedicisine aktaralım. POP R17; En yüksek yazmacın değerini yığından geri yükleyelim. .ENDM

Artık ev yapımı komutumuzu kolayca kullanabilirsiniz.

1 LDIL R0.18

Zamanla makro içeren dosya bu tür ev yapımı komutları edinir ve çalışmak kolay ve keyifli hale gelir.

Yığın hataları
Yığın verilere doğru büyüyor ve şimdi hafızamızda bir Durum değişkeninin olduğunu ve bunun örneğin 0x0450 adresinde bulunduğunu hayal edin. Tehlikeli derecede yığının tepesine yakın. Değişken, örneğin programın ilerideki mantığının bağlı olduğu sonlu durum makinesinin durumunu saklar. Diyelim ki 3 varsa bir şey yapalım, 4 varsa başka bir şey yapalım, 5 varsa başka bir şey yapalım ve bu şekilde 255 duruma kadar devam edelim. Ve işin mantığına göre 3'ten sonra 4re olması gerekiyor ama 10 değil

Ve sonra, korkunç bir anda koşullar o kadar çakıştı ki, yığın büyüdü ve tepesi bu değişkene ulaştı, oraya bir değer girdi, örneğin 20 ve sonra tazı geri düştü. Pisliği geride bırakmak, yığın taşmasının klasik bir örneğidir. Ve bu yüzden programın mantığı tamamen çöktü.

Veya tam tersi örnek; yığın değişkenlere kadar itildi, ancak o anda değişkenler güncellendi ve yığın verilerinin üzerine yazıldı. Sonuç olarak, yığından yanlış bir şey çıkarıldı (genellikle çarpık dönüş adresleri) ve program çöktü. Bu arada bu seçenek çok daha zararsız çünkü... bu durumda pervaz hemen görünür ve Tanrı bilir ne kadar süre sonra ANINDA ortaya çıkmaz.

Üstelik bu hata görünebilir ve kaybolabilir. Programın nasıl çalıştığına ve yığının ne kadar derin yüklendiğine bağlı olarak. Ancak böyle bir sıkıntı, yığınla ne kadar aktif çalışmanın devam ettiğini göremediğiniz C dilinde yazdığınızda daha sık görülür. ASMA'da her şey çok daha şeffaf. Ve burada bu, açıkçası çarpık bir algoritma nedeniyle ortaya çıkabilir.

Birleştiriciler sıklıkla başka yığın hatalarıyla karşılaşırlar. Her şeyden önce unutkanlık. İçine bir şey koydum ve çıkarmayı unuttum. Sorun bir alt programda veya bir kesintideyse, dönüş adresi bozulur (bu konuya biraz sonra değineceğiz), yığın kopar ve program anında çöker. Veya dikkatsizlik - Verileri bir sırayla kaydettim ve başka bir sırayla aldım. Hata, kayıtların içeriği değiştirildi.

Bu tür hatalardan kaçınmak için öncelikle yığını izlemeniz ve ikinci olarak değişkenlerin belleğe yerleştirilmesini doğru bir şekilde planlamanız gerekir. En kritik alanları ve değişkenleri (durum makineleri veya program mantık bayrakları gibi) yığının tepesinden uzakta, belleğin başlangıcına yakın tutmak.

Bazı insanlar yığını alıp RAM'in en ucuna değil, daha yakın bir yere yerleştirebileceklerini ve arkasında kritik veriler için bir cep bırakabileceklerini düşünecekler. Pek iyi bir fikir değil. Gerçek şu ki, yığın PUSH komutu kullanılarak hem aşağıya, hem de POP komutları kullanılarak yukarıya doğru itilebilir. İkincisi, çok daha az sıklıkta olmasına rağmen, çünkü... Bu, hantal bir algoritmadan ziyade çarpık ellerin günahıdır, ama aynı zamanda da olur.
Ancak asıl önemli olan yığının kendisinin çok önemli bir yapı olmasıdır. Alt programların ve işlevlerin tüm mekanizması buna dayanır. Yani yığın arızası her durumda acil bir durumdur.

Yığın sapkınlıkları
En sevdiğim konu. =)))) Yığın işaretçisinin PUSH ve POP komutları sırasında hesaplanmasına rağmen, hiç kimse bizi onu SP'den seçmekten ve üzerinde bulunan verilerin adresini manuel olarak hesaplamak için değerlerini kullanmaktan alıkoyamaz. yığın. Veya yığın verilerini istediğimiz gibi düzeltin.
Ne için? Beyninizi zorlarsanız ve kalıpların dışında düşünmeye başlarsanız pek çok uygulama bulabilirsiniz :))))

Ayrıca, x86 mimarisinde klasik C ve Pascal'da parametreler yığın üzerinden iletilir ve yerel değişkenler çalışır. Onlar. Bir işlevi çağırmadan önce, ilk olarak tüm değişkenler yığına aktarılır ve ardından işlev çağrıldıktan sonra gelecekteki yerel değişkenlerin baytları yığına aktarılır.

Daha sonra SP'yi referans noktası olarak kullanarak bu değişkenleri istediğimiz gibi ele alabiliriz. Yığın POP komutuyla serbest bırakıldığında, bunlar yok edilir ve bellekte yer açılır.

AVR'de her şey biraz farklıdır (görünüşe göre yığına gerçekten giremeyeceğiniz az miktarda bellek nedeniyle, ancak çok fazla RON var), ancak bu mekanizmayı kullanmayı da deneyebilirsiniz.

Doğru, bu zaten beyin cerrahisine benziyor. Ufak bir hata yaptım ve hasta öldü.

Yığın ve RAM sayesinde, yalnızca iki veya üç kayıtla, bunların eksikliği konusunda fazla stres yaşamadan idare edebilirsiniz.

Flaş bellek

EEPROM belleği küçüktür, sadece birkaç bayttır ve bazen hesaplamakla zaman kaybetmemek için çok fazla veriyi, örneğin uzaylılara gönderilen bir mesajı veya sinüs tablosunu kaydetmeniz gerekir. Hafızada neyin saklanması gerektiğini önceden bilemezsiniz. Bu nedenle veriler, program belleğinde, denetleyicinin yerleşik olduğu aynı kilobaytlık flaşta saklanabilir.

Yazacağız ama nasıl alacağız? Bunu yapmak için önce oraya bir şey koymanız gerekir.
Bu nedenle, programın sonuna, .CSEG segmenti içine, örneğin veri gibi bir etiket ekleyin ve ardından .db operatörünü kullanarak verilerinizi girin.

DB operatörü, her sabit için bir bayt kullandığımız anlamına gelir. Ayrıca çift baytlı sabitleri DW (aynı zamanda DD ve DQ) belirten operatörler de vardır.

1 veri: .db 12,34,45,23

veri: .db 12,34,45,23

Artık veri etiketi, dizinin ilk baytının adresini işaret eder, geri kalan baytlar, adrese bir tane eklenerek ofset ile yerleştirilir.

İnceliklerden biri, derleyicinin işaret adresini değiştirmesi ve bunu program sayacı için atlama adresi olarak kabul etmesidir. Ve eğer hatırlarsanız, çift baytlık kelimeleri ele alıyor - sonuçta komutun uzunluğu 2 veya 4 bayt olabilir.

Ve verilerimiz bayt bayttır ve ona erişirken denetleyici aynı zamanda onu bayt bayt olarak adresler. Kelimelerdeki adres, bayt cinsinden adresin iki katı kadar küçüktür ve adresi ikiyle çarparken bu dikkate alınmalıdır.

Program belleğinden veri yüklemek için Program Belleğini Yükle grubundaki komutu kullanın.

Örneğin LPM Rn,Z

Z yazmaç çifti tarafından işaret edilen hücreden gelen sayıyı Rn yazmacına girer. Z'nin iki yazmaç olduğunu, R30 (ZL) ve R31 (ZH) olduğunu hatırlatmama izin verin. Adresin düşük baytı R30'a, yüksek baytı ise R31'e girilir.

Kodda şöyle görünür:

LDI ZL,düşük(veri*2) ; Adresin düşük baytını Z LDI ZH,high(data*2) kayıt çiftine giriyoruz; Adresin yüksek baytını Z kayıt çiftine giriyoruz; ikiyle çarpma adresin belirtildiği gerçeğinden kaynaklanmaktadır; çift ​​baytlık sözcüklerle, ancak onlara bayt cinsinden ihtiyacımız var. ; Bu nedenle ikiyle çarpıyoruz; Adresi yükledikten sonra numarayı LPM R16, Z belleğinden yükleyebilirsiniz; Bu komuttan sonra R16 kaydında 12 sayısı olacaktır; program belleğinden alınır. ; programın sonunda bir yerde, ancak .CSEG veri bölümünde: .db 12,34,45,23


Modern amatör radyo, mikrodenetleyiciler olmadan hayal edilemez ve bu açıktır. Son yıllarda, çeşitli üreticilerin mikrodenetleyicileri insan faaliyetinin çeşitli alanlarında yaygınlaştı. Çoğu zaman en beklenmedik cihazlarda ve tasarımlarda bulunabilirler. Siz ve ben etrafımızdaki süreçlerin bilgisayarlaştırılmasına ve otomasyonuna tanık oluyoruz. Gerçek şu ki, programlamanın temelleri bilgisi olmadan, modern, rekabetçi cihazlar yaratmak neredeyse imkansız hale geldi...

Bu makaleyi okuyorsanız, muhtemelen mikrodenetleyicilerin nasıl çalıştığını anlamak istiyorsunuz ve büyük olasılıkla sorularınız var:

4. Hangi literatürü incelemeliyim?

Bu soruları cevaplamaya çalışalım.

1. İş için hangi mikrodenetleyiciyi seçmeliyim?

8 bitlik mikrodenetleyiciler radyo amatörleri arasında oldukça popülerdir. resim Mikroçip Teknolojisi ve AVR Atmel, 16 bit MSP430 TI'nin yanı sıra 32 bit mikrodenetleyiciler, mimariler KOL.

Sanayide, biraz farklı olarak, büyük bir farkla ilk sırada yer alıyor. Renesas Elektronik ikincisinde Serbest ölçek, üçüncüde SAMSUNG, sonra gidin Mikroçip Ve T.I., sonra geri kalan her şey.
Popülerlik, fiyat ve kullanılabilirliğe göre belirlenir; teknik bilgilerin bulunabilirliği ve yazılım desteğinin maliyeti önemli bir rol oynar.

8-bit AVR mikrodenetleyicilerini, ailelerini inceleyeceğiz ATMEGA 8 ve 16 serisi. Seçim yine erişilebilirlik, birçok amatör gelişmenin varlığı ve büyük miktarda eğitim materyali ile belirlendi. Bu ailenin çeşitli yerleşik bileşenlerinin ve işlevselliğinin varlığı.

2. Seçilen mikro denetleyiciyi programlamak için hangi geliştirme ortamını kullanmalıyım?

AVR için çeşitli entegre geliştirme ortamları (IDE, Entegre geliştirme ortamı) oluşturulmuştur.
IDE programcılar tarafından yazılım geliştirmek için kullanılan bir yazılım sistemidir ve şunları içerir:
Metin düzeltici,
derleyici ve/veya tercüman,
montaj otomasyon araçları,
hata ayıklayıcı

En yaygın olanları AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR Gömülü Çalışma Tezgahı.
Program yazmak için ücretsiz kullanacağız IDE ATmelStudio sürüm 6 Ve daha yüksek.
Atmel Studio'yu kayıt olduktan sonra resmi web sitesinden indirebilirsiniz (kayıt tamamen ücretsizdir ve sizi hiçbir şeye yükümlü kılmaz!)

ATmelStudio hem çeviricide hem de SI'da projeler oluşturmanıza ve programlar yazmanıza olanak tanır.

Başlangıçta soru her zaman şudur: Etkili programlar yazmak için hangi programlama dilini seçmeliyim?

Cevabım basit: En az iki dilde yazabilmeniz gerekiyor: Assembly ve SI. Hızlı ve kompakt altprogramlar, makrolar ve çeşitli aygıt sürücüleri yazmanız gerektiğinde, Assembly dili basitçe gereklidir. Ancak, SI bilgisi olmadan karmaşık algoritmalar üzerine kurulu büyük bir proje oluşturmanız gerektiğinde, özellikle hata ayıklama sürecinde ve bunu başka bir platforma, örneğin PIC18'e aktarma isteği varsa, çok zaman harcanabilir. veya STM, çözülemez bir sorun haline gelebilir.
Ayrıca donanım bilgi işlem platformları da artık ortaya çıktı arduino, SI++ dili bilgisi gerektiren çalışmalar.
Bu nedenle hem assembler'da hem de SI'da programlar yazacağız.

Havya veya devre tahtası kullanmadan çalışmanızın sonucunu net bir şekilde görmek için programı kurmanız yeterli Proteus.

3. Denetleyici nasıl flaşlanır ve onlarla rahat çalışma için hangi ek cihazlara ve aksesuarlara ihtiyaç vardır?

Datagorian'ı kullanıyoruz. Ek olarak, devre tahtaları ve 5 Volt çıkış voltajına sahip bir güç kaynağı satın almanız gerekecektir. 5 Volt zener diyot kullanarak düşük dalgalı güç kaynağı olarak kullanabilirsiniz.
Belki zamanla Igor ve ben bir hata ayıklama panosu oluşturmak için bir proje önereceğiz.

4. Hangi literatürü incelemeliyim?

Ancak örneğin:
Assembler'da AVR'nin pratik programlanması. Reviç, 2011
1000 ve bir mikrodenetleyici devresi Vol. 1-2. Ryumik, 2010-2011
AVR MK Kitap 1-2'deki 10 pratik cihaz. Kravçenko, 2008-2009
AVR MK'de bir cihaz geliştiricisi için eğitim. Belov, 2008
Tiny ve Atmega ailelerinin MK AVR'si. Efstifeev, 2008
CodeVisionAVR. Yeni başlayanlar için bir rehber. Lebedev, 2008
Cihazların, tristörlerin, rölelerin mikroişlemci kontrolü. Belov, 2008
Analog arayüzler MK. Komiser, Top, 2007
AVR MK'de cihazlar yaratıyoruz. Belov, 2007
Amatör radyo uygulamalarında MK AVR. ATTINY2313'ün tam analizi. Belov, 2007
MK ile ağ ve ağlar arası veri alışverişi. Git, 2007
MK AVR'si. yeni başlayanlar için atölye. Hartov, 2007
AVR Şemalarının, algoritmalarının, programlarının uygulanması. Baranov, 2006
AVR mikro denetleyicileri. Giriş dersi. Morton, 2006
AVR kullanarak ölçüm, kontrol ve düzenleme. Trumpert, 2006
AVR ve PIC MK için C dilinde programlama. Şpak, 2006
MK'deki cihazların tasarımı. Belov, 2005
MK - çok basit, cilt 1-3. Frunze, 2002-2003
C Programlama Dili, 2. baskı. Kernighan, Ritchie, 2009
ATMEL mikrokontrolörlerinin S. Prokopenko dilinde programlanması, 2012

5. İnternette nerede soru sorabilir ve spesifik yanıtlar alabilirsiniz?

Sorularınızı bizim veya mikrodenetleyicilerle ilgili konuların şu veya bu şekilde ele alındığı herhangi bir forumda sorabilirsiniz. Forumlardaki en önemli şey, cevapları net bir şekilde alabilmek için soruları doğru bir şekilde formüle etmektir. Soyut sorular hoş karşılanmaz ve büyük olasılıkla cevap yerine sert eleştiriler alırsınız veya sorunuz cevapsız kalır!

Şimdi favorimiz olan ATMEGA 8 mikrokontrolcüsüne daha yakından bakalım

8 bit, yüksek performanslı, düşük güçlü AVR mikro denetleyici
Aşamalı RISC mimarisi
130 yüksek performanslı talimat, çoğu talimat tek bir saat döngüsünde yürütülür
32 adet 8 bitlik genel amaçlı çalışma kayıtları
Tamamen statik çalışma
16 MIPS'e yaklaşan performans (16 MHz saat hızında)
Dahili 2 döngülü çarpan

Kalıcı program ve veri belleği
8 KB Sistem İçi Kendiliğinden Programlanabilir Flash bellek
1000 silme/yazma döngüsü sağlar
Bağımsız kilit bitlerine sahip ek önyükleme kodu sektörü
Eş zamanlı okuma/yazma modu sağlar (Okuma-Yazma Sırasında)
512 bayt EEPROM
100.000 silme/yazma döngüsü sağlar
1 KB çip üzerinde SRAM
Kullanıcı yazılımını korumak için programlanabilir kilitleme

Gömülü Çevre Birimleri
Ayrı ön ölçekleyicili, biri karşılaştırma modlu iki adet 8 bitlik zamanlayıcı/sayıcı
Ayrı ön ölçekleyici ve yakalama ve karşılaştırma modlarına sahip bir adet 16 bit zamanlayıcı/sayıcı
Ayrı jeneratörlü gerçek zamanlı sayaç
Üç PWM kanalı
8 kanallı A/D dönüştürücü (TQFP ve MLF)
10 bit hassasiyetle 6 kanal
6 kanallı analogdan dijitale dönüştürücü (PDIP paketinde)
10 bit hassasiyetle 4 kanal
8 bit hassasiyetli 2 kanal
Bayt odaklı 2 telli seri arayüz
Programlanabilir Seri USART
Seri arayüz SPI (ana/bağımlı)
Ayrı yerleşik osilatöre sahip programlanabilir watchdog zamanlayıcısı
Dahili analog karşılaştırıcı

Özel mikrokontrolör fonksiyonları
Açılışta Sıfırlama ve Programlanabilir Düşük Gerilim Dedektörü
Dahili kalibre edilmiş RC osilatörü
Dahili ve harici kesme kaynakları
Beş düşük tüketim modu: Boşta, Güç Tasarrufu, Güç Kapatma, Bekleme ve ADC gürültü azaltma

G/Ç pinleri ve muhafazaları
23 programlanabilir I/O hattı
28 pinli PDIP paketi, 32 pinli TQFP paketi ve 32 pinli MLF paketi

Çalışma gerilimleri
2,7 - 5,5 V (ATmega8L)
4,5 - 5,5 V (ATmega8)

Çalışma frekansı
0 - 8 MHz (ATmega8L)
0 - 16 MHz (ATmega8)

ATMEGA16 ve 8 arasındaki farklar
16 KB Sistem İçi Kendiliğinden Programlanabilir Flash bellek

JTAG arayüzü (IEEE 1149.1 uyumlu)
JTAG standardıyla uyumlu çevresel tarama özelliği
Katıştırılmış hata ayıklama için genişletilmiş destek
JTAG arayüzü üzerinden programlama: Flash, EEPROM belleği, jumper'lar ve kilit bitleri

Dört kanallı PWM/PWM

8 kanallı 10 bit analogdan dijitale dönüştürücü
8 dengesiz kanal
7 diferansiyel kanal (yalnızca TQFP paketi)
1x, 10x veya 200x programlanabilir kazançlı 2 diferansiyel kanal (yalnızca TQFP paketi)

Altı düşük tüketim modu: Boşta, Güç Tasarrufu, Güç Kapatma, Bekleme, Uzatılmış Bekleme ve ADC gürültü azaltma

32 programlanabilir I/O hattı

40 pinli PDIP paketi ve 44 pinli TQFP paketi

AtmelStudio

Yeni başlıyorsanız, AtmelStudio programını atmel.com resmi sayfasından indirip yüklemeniz gerekir.
AtmelStudio programını kurduktan sonra proje oluşturmaya başlayabilirsiniz.
Proje- derleme sonrasında mikro denetleyicinin belleğine yazacağınız, hata ayıklayacağınız ve flaş yapacağınız programdır.

Bir proje oluşturmak için programı açmanız gerekir, aşağıdaki ekran koruyucu görünecektir,

ve proje oluşturma sayfası açılacaktır

Yeni bir proje oluşturmak için üzerine tıklamanız gerekir. "Yeni proje..."
Bu durumda, programlama dilini, projenin adını, konumunu, proje dosyalarını içeren paketin adını ve diğer çapraz projelerde daha fazla kullanmak üzere bir dizin oluşturma yeteneğini seçebileceğiniz yeni bir pencere açılacaktır. . Assembler'da programlayacağımız bir proje oluşturmak için şunu seçmemiz gerekiyor: Montajcı, bundan sonra projenin adını, konumunu değiştirip seçiyoruz TAMAM.

Bir sonraki pencere görünecektir

Seçmek “megaAVR, 8 bit” ve ihtiyacımız olan mikrodenetleyiciyi bulduk, seçtik ATmega8. Ekran koruyucunun sağ tarafında bu mikrodenetleyiciyle çalışan ve bunlardan birine bağlanabileceğimiz cihazların bir listesi çıkıyor. Seçmek TAMAM.

Programı düzenlemenize ve hata ayıklamanıza olanak tanıyan metin düzenleyici sayfası görünür. Sayfa boşken, oluşturulma tarihi ve saati ile proje dosyasının adı ve kullanıcı adı belirtilir. Ek G/Ç aygıtları penceresi ve program derleme raporları penceresi vardır. şimdi biz


Assembler'da programlayabiliriz.
SI dilinde programlamaya yönelik bir proje de aynı şekilde oluşturulur.

LPT bağlantı noktası programlayıcısının şematik diyagramı şekilde gösterilmiştir. Otobüs sürücüsü olarak 74AC 244 veya 74HC244 (K1564AP5), 74LS244 (K555AP5) veya 74ALS244 (K1533AP5) mikro devresini kullanın.

LED VD1 mikro denetleyicinin kayıt modunu gösterir,

LED VD2 - okuma,

LED VD3 - devreye güç kaynağının varlığı.

Devre, güç kaynağı için gereken voltajı ISP konektöründen alır; programlanabilir cihazdan Bu devre yeniden tasarlanmış bir STK200/300 programlayıcı devresidir (işletim kolaylığı için LED'ler eklenmiştir), dolayısıyla STK200/300 devresiyle çalışan tüm PC programcı programlarıyla uyumludur. Bu programcıyla çalışmak için programı kullanın CVVR

Programlayıcı, şekillerde gösterildiği gibi baskılı devre kartı üzerine yapılabilir ve LPT konnektör muhafazasına yerleştirilebilir:




Programcıyla çalışmak için, kendinizin yapması kolay olan bir LPT bağlantı noktası uzantısını kullanmak uygundur (örneğin, bir yazıcı için bir Centronix kablosundan), asıl mesele iletkenleri toprak için ayırmamaktır (18- 25 konektör ayağı) veya satın alın. Programlayıcı ile programlanabilir çip arasındaki kablo 20-30 cm'yi geçmemelidir.

AVRşirket tarafından üretilen popüler bir mikrodenetleyici ailesinin adıdır Atmel. Bu marka altında AVR'nin yanı sıra ARM ve i8051 gibi başka mimariler de üretilmektedir.

Ne tür AVR mikrokontrolörleri var?

Üç tip mikrodenetleyici vardır:

8 bitlik mikrodenetleyici ailesi on yılı aşkın süredir en popüler olanıdır. Birçok radyo amatörü ondan mikrodenetleyiciler üzerinde çalışmaya başladı. Neredeyse hepsi LED flaşörler, termometreler, saatler gibi kendi basit el sanatlarının yanı sıra aydınlatma ve ısıtma cihazlarını kontrol etmek gibi basit otomasyonlar yaparak programlanabilir kontrolörlerin dünyasını keşfetti.

AVR 8-bit mikrodenetleyiciler ise iki popüler aileye ayrılır:

    Attiny- adından da anlaşılacağı gibi en gençlerin (minik - genç, genç, daha genç) genellikle 8 veya daha fazla iğneye sahip olduğu açıktır. Bellek kapasiteleri ve işlevleri genellikle aşağıdakilerden daha mütevazıdır;

    Atmega- daha gelişmiş mikrodenetleyiciler daha fazla belleğe, pinlere ve çeşitli işlevsel birimlere sahiptir;

Mikrodenetleyicilerin en güçlü alt ailesi xMega'dır - bu mikrodenetleyiciler 44'ten 100'e kadar çok sayıda pin içeren paketler halinde mevcuttur. Bu, çok sayıda sensör ve aktüatör içeren projeler için gereklidir. Ayrıca artan bellek kapasitesi ve çalışma hızı, yüksek performansa olanak tanır.

Açıklama: Pin (İngilizce pin - iğne, pin) bir mikrodenetleyicinin veya insanların dediği gibi bir bacağın çıkışıdır. Dolayısıyla “pinout” kelimesi - yani. bacakların her birinin amacı hakkında bilgi.

Mikrodenetleyiciler ne için gereklidir ve neler yapabilirler?

Mikrodenetleyiciler neredeyse her yerde kullanılıyor! 21. yüzyılda neredeyse her cihaz bir mikrodenetleyici üzerinde çalışıyor: ölçüm aletleri, aletler, ev aletleri, saatler, oyuncaklar, müzik kutuları ve kartlar ve çok daha fazlası; Tek başına listeleme birkaç sayfalık metin gerektirecektir.

Geliştirici, onu mikro denetleyicinin girişine beslemek ve değeri hakkındaki verileri değiştirmek için bir analog sinyal kullanabilir. Bu iş bir analog-dijital dönüştürücü (ADC) tarafından gerçekleştirilir. Bu işlev, kullanıcının mikro denetleyiciyle iletişim kurmasına ve sensörleri kullanarak çevredeki dünyanın çeşitli parametrelerini algılamasına olanak tanır.

Örneğin, yaygın AVR mikrokontrolörlerinde, Atmega328 2017'de birçok kurulun kalbi olan arduino, ancak onlar hakkında daha sonra daha fazla bilgi vereceğiz. 8 kanal kullanılıyor ADC, bit derinliği ile 10 bit. Bu, 8 analog sensörden değeri okuyabileceğiniz anlamına gelir. Ve dijital sensörler dijital pinlere bağlı, ki bu da bariz olabilir. Ancak dijital bir sinyal yalnızca 1 (bir) veya 0 (sıfır) olabilirken, analog bir sinyal sonsuz sayıda değer alabilir.

Açıklama:

Bit derinliği analog girişin kalitesini, doğruluğunu ve hassasiyetini karakterize eden bir değerdir. Kulağa tamamen net gelmiyor. Küçük bir pratik: 10 bitlik ADC, porttan gelen analog bilgiyi 10 bitlik belleğe yazar, başka bir deyişle düzgün bir şekilde değişen dijital sinyal, mikrodenetleyici tarafından 0'dan 1024'e kadar sayısal bir değer olarak tanınır.

12 bitlik bir ADC aynı sinyali görür, ancak daha yüksek hassasiyetle - 0 ila 4096 biçiminde; bu, giriş sinyalinin ölçülen değerlerinin 4 kat daha doğru olacağı anlamına gelir. 1024 ve 4096'nın nereden geldiğini anlamak için, 2'yi ADC bit boyutuna eşit olan güce yükseltin (10 bit için 2'nin 10'un üssü, vb.)

Yük gücünü kontrol etmek için hizmetinizde olan PWM kanalları vardır; bunlar örneğin parlaklığı, sıcaklığı veya motor hızını ayarlamak için kullanılabilir. Aynı 328 kontrol cihazında 6 adet var.

Genel olarak AVR mikro denetleyicisinin yapısı şemada gösterilmektedir:

Tüm düğümler imzalanmıştır ancak yine de bazı adlar o kadar belirgin olmayabilir. İsimlerine bakalım.

    ALU- aritmetik-mantıksal cihaz. Hesaplamayı gerçekleştirmek için gereklidir.

    Genel amaçlı kayıtlar (RON)- mikrodenetleyici güce bağlıyken veri alabilen ve saklayabilen kayıtlar, yeniden başlatmanın ardından silinir. Veri işlemleri için geçici hücreler olarak hizmet verin.

    Kesintiler- mikrodenetleyici üzerindeki dahili veya harici etkiler nedeniyle meydana gelen bir olay gibi bir şey - zamanlayıcı taşması, MK pininden harici kesinti vb.

    JTAG- mikro denetleyiciyi karttan çıkarmadan devre içi programlama için arayüz.

    Flaş, RAM, EEPROM- bellek türleri - programlar, geçici çalışma verileri, mikrodenetleyicinin güç kaynağından bağımsız olarak adlarındaki sıraya göre uzun süreli depolama.

    Zamanlayıcılar ve sayaçlar- mikrodenetleyicideki en önemli bileşenler; bazı modellerde sayıları on'a kadar çıkabilir. Saat döngülerinin sayısını, sırasıyla zaman aralıklarını raporlamak için bunlara ihtiyaç duyulur ve sayaçlar herhangi bir olaya göre değerini artırır. Çalışmaları ve modu programa bağlıdır, ancak bu eylemler donanımda gerçekleştirilir; programın ana metnine paralel olarak, kod yürütmenin herhangi bir aşamasında, herhangi bir satırda (isteğe bağlı olarak zamanlayıcı taşması nedeniyle) kesintiye neden olabilirler.

    A/D (Analog/Dijital)- ADC, amacını daha önce açıklamıştık.

    WatchDogTime- belirli bir süreyi sayan ve çalışıyorsa MK için bir sıfırlama sinyali ve uyku modundaysa bir uyandırma sinyali üreten, mikro denetleyiciden ve hatta saat üretecinden bağımsız bir RC jeneratörü (enerji tasarrufu) . WDTE biti 0'a ayarlanarak çalışması devre dışı bırakılabilir.

Mikrodenetleyici çıkışları oldukça zayıftır, bu da içlerinden geçen akımın genellikle 20-40 miliampe kadar olduğu anlamına gelir, bu da LED ve LED göstergeleri ateşlemek için yeterlidir. Daha güçlü bir yük için, aynı transistörler gibi akım veya voltaj amplifikatörlerine ihtiyaç vardır.

Mikrodenetleyicileri öğrenmeye başlamak için neye ihtiyacınız var?

Öncelikle mikrodenetleyicinin kendisini satın almanız gerekir. İlk mikrodenetleyici herhangi bir Attiny2313, Attiny85, Atmega328 ve diğerleri olabilir. Çalışacağınız derslerde anlatılan modeli seçmeniz daha doğru olacaktır.

İhtiyacınız olan bir sonraki şey programcı. Firmware'i MK belleğine yüklemek gerekir; en ucuz ve en popüler olarak kabul edilir; USBASP.

Biraz daha pahalı ama daha az yaygın olmayan programcı AVRISP MKII kendi ellerinizle yapabileceğiniz - normal bir tahtadan arduino

Başka bir seçenek de onları flaşlamaktır USB-UART Genellikle dönüştürücülerden birinde yapılan adaptör: FT232RL, CH340, PL2303 ve CP2102.

Bazı durumlarda, böyle bir dönüştürücü için USB donanım desteğine sahip AVR mikrodenetleyicileri kullanılır; bu tür çok fazla model yoktur. İşte bazıları:

Yalnızca bir "ama" var - önce UART önyükleyicisini mikro denetleyicinin belleğine yüklemelisiniz. Elbette bunun için yine de AVR mikrodenetleyicilerine yönelik bir programlayıcıya ihtiyacınız var.

İlginç: Önyükleyici- bu, bir mikrodenetleyici için yalnızca alışılmadık bir görevi olan normal bir programdır - başlatıldıktan sonra (güce bağlandıktan sonra), ürün yazılımının kendisine yüklenmesi için bir süre bekler. Bu yöntemin avantajı herhangi bir USB-UART adaptörüyle flashlayabilmenizdir ve oldukça ucuzdur. Dezavantajı ise bellenimin yüklenmesinin uzun sürmesidir.

İş için UART AVR mikrokontrolörlerinde (RS-232) arayüzü, bir UDR kaydının tamamı tahsis edilmiştir (UART veri kaydı). UCSRA (alıcı-verici bit ayarları RX, TX), UCSRB ve UCSRC - bir bütün olarak arayüzün ayarlarından sorumlu bir dizi kayıt.

Hangi programlarda yazabilirsiniz?

Programcıya ek olarak, bir program yazmak ve indirmek için bir IDE'ye (bir geliştirme ortamı) ihtiyacınız vardır. Elbette kodu Not Defteri'ne yazabilir, derleyiciler vb. aracılığıyla çalıştırabilirsiniz. Mükemmel hazır seçenekler varken bu neden gerekli? Belki de en güçlülerinden biri IAR'dır, ancak ücretlidir.

Atmel'in resmi IDE'si, sürüm 6'da Atmel stüdyosu olarak yeniden adlandırılan AVR Studio'dur. Tüm AVR mikrokontrolörlerini (8, 32, xMega) destekler, komutları otomatik olarak algılar ve bunları girmenize yardımcı olur, doğru sözdizimini vurgular ve çok daha fazlasını yapar. Onun yardımıyla MK'yi flaş edebilirsiniz.

En yaygın olanı C AVR'dir, bu yüzden bununla ilgili bir eğitim bulun, birçok Rusça dil seçeneği var ve bunlardan biri V.Ya Hartov. “AVR mikrodenetleyicileri. Yeni başlayanlar için atölye."

Ayrıca Maxim Selivanov'un yeni başlayanlar için mikrodenetleyicilerin programlanmasıyla ilgili ayrıntılı eğitim video kurslarına da bakın:.

AVR'yi öğrenmenin en kolay yolu

Satın alın veya kendiniz yapın. Arduino projesi özellikle eğitim amaçlı tasarlanmıştır. Çeşitli şekil ve sayıda kontaktan oluşan düzinelerce panoya sahiptir. Arduino ile ilgili en önemli şey, yalnızca bir mikrodenetleyici değil, yüksek kaliteli bir textolite baskılı devre kartına lehimlenmiş, bir maskeyle kaplanmış ve SMD bileşenleri monte edilmiş tam teşekküllü bir hata ayıklama kartı satın almanızdır.

En yaygın olanları Arduino Nano ve Arduino UNO'dur, bunlar aslında aynıdır, ancak "Nano", "Uno"dan yaklaşık 3 kat daha küçüktür.

Birkaç gerçek:

    Arduino standart bir dilde programlanabilir - “C AVR”;

    kendi kablolamanız;

    standart geliştirme ortamı - Arduino IDE;

    Bir bilgisayara bağlanmak için, USB kablosunu Arduino nano kartındaki mikro USB soketine bağlamanız, sürücüleri yüklemeniz yeterlidir (dönüştürücü CH340'ta olmadığı sürece bu büyük olasılıkla otomatik olarak gerçekleşecektir, bende yoktu) sürücüleri Win 8.1'de indirmek zorunda kaldım, ancak bu fazla zaman almadı.) ardından "eskizlerinizi" yükleyebilirsiniz;

    "Sketches" Arduino için programların adıdır.

sonuçlar

Mikrodenetleyiciler amatör radyo uygulamalarınızda mükemmel bir yardımcı olacaktır; bu, dijital elektronik dünyasını keşfetmenize ve kendi ölçüm cihazlarınızı ve ev otomasyon ekipmanınızı tasarlamanıza olanak sağlayacaktır.  

programlar ve veriler ayrılmıştır (klasik mimariden farklı olarak)
von Neumann, belleğin paylaşıldığı sıradan bilgisayarlarda). için ayrı lastikler
bu bellek alanları programın yürütülmesini önemli ölçüde hızlandırır: veri ve
takımlar aynı anda seçilebilir.

32 genel amaçlı kayıt (RON). Atmel, şimdiye kadarki ilk şirketti.
bilgi işlem çekirdeğinin klasik modelinden ayrıldı;
Komut iletimi, ALU ile depolama arasında veri alışverişini sağlar
Paylaşılan hafızadaki hücreler. RON'un bu miktarlarda tanıtımı (unutmayın ki
mimari X 86 bu tür yalnızca dört kayıt vardır ve X 51 RON konsepti,
yok) bazı durumlarda küresel konumu tamamen terk etmeyi mümkün kılar
RAM'deki top ve yerel değişkenlerden ve yığının kullanımından, işlemler
programı karmaşıklaştırıyor ve karmaşıklaştırıyor. Sonuç olarak, faaliyetin yapısı
Örnek bir program, üst düzey dillerdeki programlara daha yakındır.
Doğru, bu, komut sisteminde, isimlendirmede bazı karmaşıklıklara yol açtı
Bunların AVR'si diğer RISC ailelerine göre daha fazladır (önemli oranda olmasına rağmen)
bazı talimatlar takma adlardır).

Flaş program belleği(10.000 silme/yazma döngüsü) yeteneği ile
sistem içi yeniden programlama ve seri yoluyla indirme
doğrudan bitmiş devrede kanal. Artık bu yaklaşımın avantajları hakkında
genel olarak kabul edilmiş olup, ayrıntılı olarak açıklanmıştır. yönetilen.

Uçucu olmayan belleğin ayrı alanı(EEPROM, 100.000 döngü
yazılımla yazma özelliği ile veri depolama için silme/yazma
tarafından veya SPI arayüzü aracılığıyla harici indirme.

Dahili analog sinyal işleme: analog
karşılaştırıcı ve çok kanallı 10 bit ADC.

Bekçi köpeği zamanlayıcısı, otomatik yeniden başlatmaya izin veriyor
kontrol cihazını belirli aralıklarla (örneğin, çıkmak için)
"uyku modu).

Seri SPI Arayüzleri, TWI (BEN

C) Ve UART (USART), İzin veriyorum-

Çoğu standart sensörle iletişim kurabilen ve
diğer harici cihazlar (kişisel bilgisayarlar dahil)
donanım.

Zamanlayıcılar-sayaçlarön ayarlı ve sayma kaynağını seçebilme özelliğine sahip -
son darbeler: genellikle bir veya iki 8 bit ve en az bir
16 bit, çok kanallı 8-, 9-'da çalışabilenler dahil
10-, 16-bit darbe genişliği modülasyonu (PWM).

Saat hızında çalışabilme yeteneği 0 Hz'den 16–20 MHz'e.

Besleme voltajı aralığı 2,7 ila 5,5 V(bazı durumlarda 1.8 veya
6,0 V'a kadar).

Çeşitli enerji tasarrufu modları Düğüm sayısı farklı,
bağlı kalmak. Watchdog'u kullanarak "uyku" modlarından çıkma
zamanlayıcı veya harici kesintiler.

Dahili güç monitörü- voltaj düşüşü dedektörü (Kahverengi çıkışı
Tespit etme).

Çeşitli modellerin karakteristik özelliklerinin tümü burada listelenmemiştir.
AVR. Bazılarını daha sonra ve pratikte tanıyacağız.
Yukarıdakilere daha ayrıntılı olarak bakalım. Ama önce genel bir tanım verelim
temel amaçları açısından çeşitli AVR aileleri.

AVR aileleri

2002 yılında Atmel, 8 bitlik MK'lerin yeni alt ailelerini piyasaya sürmeye başladı.
AVR çekirdekleri. O zamandan beri, bu ailenin tüm MK'leri üç gruba ayrıldı (alt aile
va): Klasik, Minik ve Mega. Classic ailesinin MK'si (AT90S xxxx) artık üretilmiyor;
Üretimde en uzun süre kalan çok başarılı olanıydı (basit, kompakt ve
yüksek hızlı model) AT90S2313, ancak 2005 yılında da yerini aldı.
ATtiny2313. Adında ilk sayıları 2 ve 8 olan tüm "klasik" AVR'ler
modellerin (bu kilobayt cinsinden program belleği miktarı anlamına gelir) analogları vardır.
Tiny ve Mega aileler. Mega için programlama sırasında özel kurulum yapmak mümkündür.
hiçbir değişiklik yapmadan kullanıma olanak sağlayan özel uyumluluk biti
Classic ailesi için oluşturulan programları kullanın. Bu nedenle çok sayıda örnek
Sunumu basitleştirmek amacıyla bu kitap aileye yönelik bir versiyonda sunulmaktadır.
Klasik.
AVR çiplerinin üretildiği farklı kasa tiplerine örnekler,
Şekil 2'de gösterilmektedir. 1.1. Bu konu hakkında daha fazla bilgiyi şu adreste bulabilirsiniz:
ek 1(Tablo A1.2) ve cihazların teknik belgelerinde.
Amatör radyo ihtiyaçları ve prototipleme için mikro radyo kullanmanın en uygun yöntem olduğunu unutmayın.
devreler PDIP paketlerindedir ancak tüm MK modelleri bu tür paketlerde üretilmemektedir.
Tüm ailelerin iki modifikasyonu olabilir: Tanımdaki "L" harfi şöyle diyor:
2,7–5,5 V genişletilmiş güç aralığı hakkında, böyle bir harfin bulunmaması,
güç aralığı 4,5–5,5 V. Belirli bir mikro devre türünü seçerken,
L versiyonları da daha az hızlı hareket ettiğinden dikkatli olun,
Çoğunun maksimum saat hızı 8 MHz'dir.
"Normal" versiyonlar için maksimum frekans 16 veya 20 MHz'dir. Buna rağmen nasıl
Kural olarak, 10–'ye kadar frekanslarda 5 V besleme voltajıyla L-çiplerini çalıştırırken
12 MHz sıkıntısı beklenmemeli (L harfi olmayan versiyona benzer, oldukça
yaklaşık 3 V'luk bir besleme voltajında ​​​​çalışabilir, elbette aşırı değil
frekans değerleri), ancak son derece güvenilir cihazlar tasarlarken
Firmaların bu zorunluluğu dikkate alması gerekiyor.
Minik çipler, 1-8 kbyte kapasiteli Flash ROM programlarına sahiptir ve
esas olarak 8-20 pinli paketlerde (ATtiny28 hariç), yani genellikle amaçlanırlar
Daha basit ve daha ucuz cihazlar için tasarlanmıştır. Bu onların mümkün olduğu anlamına gelmez -
Özellikleri her durumda Mega ailesininkinden daha sınırlıdır. Örneğin,
2 doların altındaki ATtiny26, yüksek hızlı bir PWM zamanlayıcı içerir
modu (diğer modellerde bu yoktur) ve ayrıca 11 kanallı bir ADC olanağı
Ayarlanabilir giriş amplifikatörü ile diferansiyel modda çalışma imkanı

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

ve yüksek güç için tipik olan yerleşik bir referans voltaj kaynağı
paylaşmak. ATtiny2313 yongası, daha önce de belirtildiği gibi, geliştirilmiş bir yongadır.
En çok yönlü ve kullanışlı "klasik" AVR'lerden birinin yeni versiyonu
AT90S2313.

Pirinç. 1.1. AVR MCU'lar için farklı muhafaza türlerine örnekler

Mega alt ailesi, 8–256 KB kapasiteli Flash ROM programları ve bir muhafaza ile donatılmıştır.
kendileri 28-100 pinlidir. Genel olarak bu grubun MK'leri diğerlerinden daha karmaşıktır.
Tiny, daha gelişmiş özelliklere sahip daha kapsamlı bir gömülü cihaz sistemine sahiptir.
işlevsellik.
Aralarından bazı Tiny ve Mega modellerin temel özelliklerini içeren tablolar
en popüler olanlar listelenmiştir ek 1. Orada bazı genel teknikler de verilmektedir.
AVR ailesinin teknik özellikleri. Daha detaylı bilgiyi adresinden alabilirsiniz.
web sitesinden temin edilebilen ve tescilli teknik belgeler
Her model için Atmel.
Bu üç aileye ek olarak AVR çekirdeğini temel alan özel aileler de üretilmektedir.
USB arayüzüyle çalışmak için mikro devreler (AT90USB xxxx), endüstriyel in-
CAN arayüzü (AT90CAN xxx), LCD ekranları kontrol etmek için (ATmega329, vb.),
Ticaret ve ticaret için kablosuz IEEE 802.15.4 (ZigBee) arayüzü ile
bazı diğerleri. Son zamanlarda Tiny'nin bazı mikrodenetleyicileri ve
Mega, ultra düşük tüketimli versiyonlarda üretilmeye başlandı (teknoloji
Bu serinin MK adının sonunda 1,8 V besleme voltajına sahip picoPower
"P" harfi eklendi) ve otomotiv kullanımı için yüksek sıcaklık
endüstri (Otomotiv versiyonları). XMega ailesi gerilimle ortaya çıktı
güç kaynağı 1,8–3,6 V, artırılmış hız (saat frekansı 32 MHz'e kadar),

Bölüm 1. Atmel AVR mikrokontrolörlerine genel bakış

12 bit 16 kanallı ADC ve 2–4 kanallı DAC (hala yapıdadır)
AVR eksikti), birkaç UART kanalı ve diğer seri
bağlantı noktaları (ve durdurulduğunda çevrimdışı modda çalışma yeteneği ile)
çekirdek), yerleşik şifreleme desteği, gelişmiş mod
picoPower ve diğer özellikler. 32 kişilik ayrı bir aile de var
gibi yüksek hızlı uygulamalar için tasarlanmış hat içi MK AVR32
video akışı işleme veya gerçek zamanlı görüntü tanıma gibi.

Özellikler
MK AVR'nin pratik kullanımı

AVR'yi kullanırken bir dizi pratik sorun ortaya çıkar;
düzeltilmesi bazen cihazın çalışmamasına veya arızalanmasına neden olabilir.
sürüler (ve bazı durumlarda - hatta onu programlamanın imkansızlığı).
Örneğin bu sorunlardan biri EEPROM içeriğinin kaybolma ihtimalidir.
gücü kapattığınızda. Bu ve buna benzer sorunları detaylı olarak ele alacağız.
ilgili bölümler. Burada bazı genel konular üzerinde duracağız.
AVR MK'yi açıyoruz.

Tüketim hakkında

AVR MCU'ları ortalama 5–15 mA tüketir (harici cihazların tüketimi hariç).
MK'nin vardığı sonuçların üzerinden geçin). Mevcut tüketim yalnızca "navo-
Modelin "termi", aynı zamanda saat frekansı ve besleme voltajı ile de ilgilidir. Şekil 1.2'de.
akım tüketiminin besleme voltajına bağımlılığının tipik bir diyagramını gösterir
Mega ailesinin daha genç modelleri için frekans ve saat frekansı.
Şek. Özellikle 1.2'den, tüketimin şu şekilde önemli ölçüde azaltılabileceği sonucu çıkmaktadır:
program yürütme süresinin kısa olmadığı durumlarda saat frekansının azaltılması
kritik. Bu, enerji modlarını ortadan kaldırarak programı basitleştirmenize olanak tanır
tasarruf: örneğin, 32.768 Hz'lik bir "saat" kuvars takıldığında
zorlayıcı MK tüketimi 200–300 μA düzeyinde olabilir.

Z

MARJ HAKKINDA NOTLAR

1–2 mA veya daha düşük bir akım tüketim değeri, şartlı olarak aşağıdakiler için kabul edilebilir olarak kabul edilebilir:
uzun süreli sürekli çalışma için tasarlanmış pil cihazları
iş. AA boyutundaki elementler (alkali tip yani alkalin) kapasitesine sahiptir.
yaklaşık 2000 mAh şarj oluyor, yani bu unsurlardan belirtilen tüketime sahip bir cihaz
en az 1000 saat (hatta biraz daha fazla) veya 40 günden fazla çalışır. Zaman
Yaklaşık 15–18.000 mAh enerji kapasitesine sahip D boyutlu pillerle çalışma
yaklaşık bir yıl sürer ve bu çoğu pratik uygulama için yeterlidir.
Bu tür cihazlara (özellikle periyodik olarak açılanlara) güç vermeyi seçin
kısa bir süre için) kullanılması gereken alkalin elementlerdir, çünkü bunlar büyük
kapasiteye sahiptir, aşırı deşarj olduğunda sızıntı yapmaz ve en önemlisi çok daha uzun bir hizmet ömrüne sahiptir
diğer element türlerine kıyasla depolama (yaklaşık 7 yıl).

Ancak konunun dikkatli bir şekilde değerlendirilmesi, işi kolaylaştıran şeyin tam da bu olduğunu gösteriyor.
program - vakaların büyük çoğunluğunda faydalar daha fazladır

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

düşük saat hızı ve sınırlıdır. Şekil 2'deki grafikler. 1.2 doğrusaldır, dolayısıyla
saat frekansındaki azalmayla orantılı olarak yürütme süresinin arttığı sonucu çıkar
komutlar. Böylece, saat frekansında yürütülmesi gereken bir prosedür
4 MHz 100 µs sürecek, 32.768 Hz saat hızında 12 ms'den fazla sürecek.
Her iki durumda da kişi başına tüketilen enerji miktarını hesaplamak kolaydır.
bu prosedürü gerçekleştirmek aynı olacaktır.

Pirinç. 1.2. Besleme voltajına karşı akım tüketimi şeması

Mega ailesinin daha genç modelleri için saat frekansı ve

Bu nedenle, aşağıdaki genel sonucu çıkarabiliriz: Eğer derinlemesine araştırmak istemiyorsanız
enerji tasarrufu modlarının inceliklerini öğrenin ve bunları programda uygulamayın, o zaman genel olarak
Tüketimi azaltmak için mümkün olduğu kadar düşük bir saat frekansı seçmeniz gerekir (
Uygulamada, değeri 1 MHz ile sınırlandırmak genellikle yeterlidir;
ek dış tüketim nedeniyle azalmanın büyük olasılıkla hiçbir etkisi olmayacaktır.
kaçınılmaz olarak tüm devrelerde mevcut olan devrelerdir). Bir uyarınız varsa
“Derin” enerji tasarrufu modlarından birine baktık (bkz. 4. Bölüm), ardından saat
Toplam tüketim açısından sıklığın pratikte önemi yoktur.
Başka bir şey de, mümkün olduğunca yapılması tavsiye edilen besleme voltajı seçimidir.
harici cihazlar izin veriyorsa daha az. Mevcut tüketimin bağımlılığı
Şekil 2'deki grafiklerden de kolaylıkla anlaşılabileceği gibi besleme gerilimi 1.2, doğrusal olmayan: artan
Gerilim arttıkça akım tüketimi hızla artar. Bu nedenle azaltın
çoğu için saat frekansı sınırlaması dikkate alındığında bile besleme voltajı
VA AVR modelleri (2,7 V beslemeyle 8 MHz'den fazla olmayan) hala karlı. Örneğin,
Şekil 2'ye göre 8 MHz saat frekansında 3 V güç kaynağına sahip cihaz. 1.2, olacak
yaklaşık 3 mA veya güç üniteleri açısından 9 mW tüketir; prosedür için-

Bölüm 1. Atmel AVR mikrokontrolörlerine genel bakış

100 μs süreli ru, 0,9 μJ enerji gerektirecektir. 16 MHz frekansında aynı pro-
Prosedür 50 µs sürecektir ancak gerekli 5 V besleme voltajında ​​​​tüketim
yaklaşık 14 mA, yani 70 mW olacaktır; toplamda prosedürü tamamlamak için enerji gerekecek
3,5 µJ, neredeyse 4 kat daha fazla.
Çok az istisna dışında tüm harici dijital cihazlar için şunları yapabilirsiniz:
2,7– voltajlarda çalışacak şekilde tasarlanmış modern bir analog edinin
3,0 V (ve denetleyici modeli izin veriyorsa daha da düşük), yani bu tarafta
kısıtlama yok; bu kitaptaki örneklerin çoğunun odaklandığı
Besleme voltajı 5 V'tur, yalnızca geleneğe bir saygı duruşu vardır. Üstelik bu örnekler şöyle
Kural olarak, tüketimin çok önemli olmadığı ağdan güç kaynağı anlamına gelirler.
okumalar. LED göstergeler besleme voltajındaki düşüşü sınırlayabilir
tors (LED'lerin kendisindeki doğrudan voltaj düşüşünün
yaklaşık 2 V'tur ve büyük göstergeler için alt kısmı kontrol etmek için bile 5 V'tur.
tam olarak), ancak bu tür cihazlarda denetleyici tüketimi artık büyük bir rol oynamıyor
roller: dört yedi bölümlü rakamın kendisi, mertebesinde bir akımı tüketecektir
100 mA veya daha fazla. Başka bir durum, artışın olduğu analog devrelerle temsil edilir.
Besleme voltajı, sinyal-gürültü oranının arttırılması açısından faydalıdır.
AVR pinlerinin önemli uzun vadeli sonuçlar üretebileceğini unutmayın.
akım (20-40 mA'ya kadar), ancak genel toplam sınırlamayı unutmayın
güç çıkışına göre tüketim için (bkz. . masa P1.3). Şunu da belirtmek gerekir ki
ADC girişlerine analog voltajlar uygulandığında, giriş dijital CMOS-
öğesi (ilgili bağlantı noktasının girişi) devre dışı bırakılmaz ve bunun değeriyle
elemanın tepki eşiğine yakın gerilim, bu durum artan
Çıkış aşamalarından geçen akımın akışı nedeniyle tüketim
CMOS (bazen mikro devrenin uyku modunda olduğu durumlar da dahil)
santimetre. bölüm 14). PicoPower teknolojisine sahip mikro devrelerin bu dezavantajı yoktur.

AVR'yi devrelerde kullanmanın bazı özellikleri

Çoğu MK pininde yerleşik bir "çekme" eklentisi bulunur
(yani güç veriyoluna bağlı) direnç, bu da aşağıdakilerden birini çözüyor gibi görünüyor
böyle bir direncin varlığı gerektiğinde yaygın devre sorunları
iki pinli düğmeleri veya "açık kollektör" çıkışlarını bağlamak için.
Ancak kritik durumlarda direnci 2–2 olan harici bir direnç
5 kOhm (tüketimin kritik olduğu durumlarda 10–30 kOhm'a kadar).
Çekme direnci yalnızca /RESET pinine kurulmamalıdır.
(bu konu daha sonra tartışılacaktır) Bölüm 2), ancak aynı zamanda SCK, MOSI ve MISO pinlerinin kullanılması durumunda da
karşılık gelen portlar programlama için kullanılır ve
ISP programlama konektörü (bkz. Bölüm 5) ve ayrıca harici kesintilerin çıkışlarından
Vaniya, eğer işin içindeyseler. Bu sonuçlar gerilime "çekilmezse"
ek dirençli güç kaynağı (bu teknik olarak belirtilmemiş olmasına rağmen)
belgeler), bu durumda harici kesintilerin yanlış tetiklenmesi göz ardı edilemez,
sistemi yeniden başlatarak ve çok güçlü bir müdahaleyle - hatta bellekteki programa zarar vererek -
bu programlar. Öte yandan, programlama sırasında çıkışlar aynı zamanda

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

Çıkış için yapılandırılmış olağan bağlantı noktalarının çoğu ve cihazın kullandığı
enerji tasarrufu modları, "yukarı çekme" dirençlerinin varlığı
gereksiz akım tüketimine (çıkış direnç aracılığıyla mantıksal sıfıra ayarlandığında)
tarafta, akım güç kaynağından MK girişine akacaktır). Eğer yeniden
Enerji tasarrufu modlarını kullanabilmek için devreyi dikkatli bir şekilde analiz etmeniz gerekir.
akımın bu dirençlerden aktığı durumları içerir.
MK pinlerini çalıştırırken daima harici dirençler takmalısınız.
ortak veri yolu, arayüz I'deki gibi

C (veya sadece MK girişini bağlayarak

güç kaynağı monitörleri gibi başka bir açık toplayıcı cihazın çıkışı
açıklanan gelişmeler Bölüm 3), iki pimli düğmelere bağlanırken (özellikle
harici bir kesinti varsa, bkz. 4. Bölüm Ve 5 ). Dahili direnç
direnç (aslında elbette bir alan etkili transistör)
bu gibi durumlarda elektromanyetik girişim için çok büyüktür ("açık-
votka") üzerine etkili bir şekilde "oturdular".
AVR yongaları, yüksek eşikleri nedeniyle herhangi bir CMOS mantığı gibi
Bağlantılar yer veriyolundaki parazitlere karşı etkili bir şekilde korunur. Nasıl davranırlarsa davransınlar
güç veriyoluna müdahale ile çok daha kötü. Bu nedenle, çözmeyi unutmayın.
doğrudan güç kaynağının pinlerine takılması gereken güç kapasitörleri
tania (seramik 0,1–0,5 μF) ve ayrıca ağ redresörlerinin kalitesi ve
stabilizatörler.

BÖLÜM

Genel cihaz
hafıza organizasyonu,
saat ölçümü, sıfırlama

AVR MK'nin iç yapısının genel yapısı Şekil 1'de gösterilmektedir. 2.1. Bunda
şema AVR'nin tüm ana bileşenlerini gösterir (JTAG modülü hariç);
bazı modellerde bazı bileşenler eksik veya farklı olabilir -
özellikleri, yalnızca ortak 8 bit işlemci değişmeden kalır
yeni çekirdek (GPU, Genel İşlem Birimi). En önemli bileşenleri kısaca açıklayalım
çoğunu daha sonra ayrıntılı olarak ele alacağız.
Bellekle başlayalım. AVR yapısında üç tip hafıza bulunmaktadır: flash-
program belleği, geçici veriler için RAM (SRAM) ve kalıcı bellek
sabitlerin ve verilerin uzun süreli depolanması için bellek (EEPROM). Hadi onlara bakalım
ayrı ayrı.

Program belleği

AVR denetleyicilerindeki programların dahili flash belleğinin hacmi
ATtiny11 için 1 KB - ATmega2560 için 256 KB. İsimdeki ilk rakam-
bölüm bu hafızanın şu dizideki değerine karşılık gelir: 1, 2, 4, 8, 16, 32, 64, 128 ve
256 kbayt. Diğer flash bellekler gibi program belleğinin de bir sayfası vardır.
organizasyon (sayfa boyutu modele bağlı olarak 64 ila 64 arasında değişir)
256 bayt). Sayfa yalnızca bir bütün olarak programlanabilir. Döngü sayısı
yeniden programlama 10 bine ulaşıyor.
Bir programcının bakış açısından, program belleğinin şunlardan oluşturulduğu düşünülebilir:
ayrı hücreler - her biri iki baytlık kelimeler. Program hafıza cihazı (ve yalnızca
bu hafıza) çift baytlık kelimelerle - dikkat edilmesi gereken çok önemli bir nokta
iyice kavrayın. Bu organizasyon AVR'deki herhangi bir takımın
tam olarak iki bayt uzunluğundadır. Bunun istisnası takımlardır

ve bazı

başkalarını (örneğin,

), 16 bit ve daha uzun sürümlerle çalışan

adresler, bu komutların uzunluğu dört bayttır ve yalnızca kullanılırlar
program belleği 8 kbyte'tan büyük olan modellerde (daha fazla ayrıntı için bkz. Bölüm 5). İçinde
Diğer tüm durumlarda, bir sonraki yürütüldüğünde komut sayacı kaydırılır.

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

iki bayta (bir kelime) komut verir, böylece gerekli hafıza kapasitesi kolaydır
kullanılan komutların sayısını bilerek sayın. Bellekteki mutlak adresler
gram (örneğin teknikteki kesme vektör tablolarında gösterilir)
MK'nin açıklaması) da kelimelerle sayılır.

Pirinç. 2.1. AVR mikrodenetleyicilerinin genel blok şeması

Z

MARJ HAKKINDA NOTLAR

temsil eden ilginç bir adresleme durumuna örnek verelim.
LPM belleğinden sabitleri okuma komutu (ayrıca program belleği olan MK'deki ELPM)
128

kbayt veya daha fazla). Bu komut şuradan okumayı içerir: bayt belirtilen adres -

nomu en yüksek iki RON'dadır (Z kaydını oluşturur, aşağıya bakın). Ancak yapmamak için
geliştiricilere göre program belleğini düzenleme kavramının "saflığını" ihlal ediyor
Açıklamada LPM komutunu çağırırken eski komutun olduğunu belirterek bu basit soruyu karıştırdınız.
Z kayıt adresinin sonraki 15 biti kelime bellekte ve en az anlamlı basamak seçilir
bunun düşük veya yüksek baytı (bit sırasıyla 0 veya 1'e eşitse)

kelimeler. Bununla birlikte, belleğin bayt ve sözcük organizasyonunun,
com yaklaşımı eşdeğerdir.

Belirli bir model için mevcut program belleğinin son adresi
bir sabit ile gösterilir

Varsayılan olarak tüm AVR denetleyicileri her zaman

$0000 adresinde program yürütmeye başlayın. Programda herhangi bir kesinti yoksa
ny ise uygulama programı bu adresten başlayabilir. Aksi takdirde

Bu adresteki çay sözde. masa kesinti vektörleri, detaylar
bunun hakkında konuşacağız Bölüm 4 Ve 5 . Burada yalnızca şunu belirtmek isteriz ki, ilk
bu tablo (aynı adreste $0000) her zaman bir sıfırlama vektörü içerir

MK sıfırlanırken gerçekleştirilen prosedürü gösterir (dahil
gücü açarken).

P

NOT

AVR derleyicisinde onaltılık sayıları "Pascal" cinsinden temsil edebilirsiniz
stili, önünde $ işareti bulunur; C dili stili (0x00) de geçerlidir, ancak
"Intel" yöntemi (00h) çalışmıyor. Farklı sayıların tanımları hakkında daha fazlasını okuyun
AVR derleyicisindeki sayı sistemleri, bkz. Bölüm 5.

Mega ailesi kontrolörlerin son program hafıza adresleri şunları içerebilir:
sözde yalan yükleyici- yüklemeyi yöneten özel bir program ve
uygulama programlarının ana bellekten kaldırılması. Bu durumda,
sıfırlama vektörünün konumu ve kesme vektör tablosunun tamamı (yani gerçekte açık)
program yürütmesinin başladığı başlangıç ​​adresi) değiştirilebilir
özel konfigürasyon hücreleri kurularak mümkün değildir (bkz. Bölüm 5).

Veri belleği (RAM, SRAM)

Program belleğinden farklı olarak veri belleği adres alanı adreslenir
bayt bayt (kelime kelime değil). Adresleme herhangi bir bölünme olmadan tamamen doğrusaldır
diğer bazı sistemlerde yaygın olduğu gibi sayfalara, bölümlere veya kavanozlara.
Tiny ailesinin Junior MK'leri (Tiny1 dahil) X ve Tiny28) veri belleği gibi
uluma, yapmazlar, yalnızca kayıt dosyası (RON) ve giriş kayıtları ile sınırlıdır
evet çıkışı (RVV). Diğer modellerde yerleşik SRAM miktarı şu aralıklardadır:
Tiny ailesi üyelerinde 128 bayt (örneğin, ATtiny2313) 4–8 kbayta kadar
eski Mega modeller için.
Statik veri belleğinin (SRAM) adres alanı geleneksel olarak aşağıdakilere bölünmüştür:
Şekil 2'de gösterilen birkaç alan 2.2. Gelen kısım
Yerleşik SRAM'ın kendisi ile ilgili, adres sırasına göre yerleştirilmeden önce
ancak kayıtların adres alanı (ilk 32 bayt RON tarafından işgal edilir, diğer 64 bayt -
RVV). Karmaşık yapıya sahip eski Mega modeller için (örneğin ATmega128)
64 G/Ç kaydı yeterli olmayabilir, bu nedenle ek
ek RVV'lere ayrı bir adres alanı tahsis edilir (60 $'dan maks.
bayt adreslemede olası maksimum değer $FF, bu tür kayıtların toplamı
belki sadece 160).

Z

MARJ HAKKINDA NOTLAR

AVR MK mimarisinde “giriş-çıkış” kavramı iki anlamda kullanılmaktadır: birincisi

İlk olarak, aşağıda inceleyeceğimiz “giriş/çıkış bağlantı noktaları” (G/Ç bağlantı noktaları) vardır. Bölüm 3.
İkinci olarak AVR yapısında yer alan “giriş-çıkış yazmaçları” (IO), yazmaçlardır.
harici ek bileşenlere erişim sağlayan

RAM hariç (G/Ç bağlantı noktaları dahil) GPU'ya bağlantı. Böyle bir alt
ayırma, AVR MK'nin yapısını kişisel bir cihazın tanıdık konfigürasyonuna yaklaştırır
merkezi işlemciye herhangi bir harici erişime sahip bilgisayar
Bellek dışındaki bileşenlere G/Ç bağlantı noktaları aracılığıyla erişilir.

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

Bazı Mega modeller için (ATmega8515, ATmega162, ATmega128, ATmega2560)
vb.) harici hafızaya kadar bağlanmak mümkündür
64 kB, herhangi bir statik olabilir
çeşitli (SRAM, Flash veya EEPROM)
paralel arayüz.
RON ve RVV adreslerinin
veri RAM alanı (bağlı olanlar hariç)
eski Mega modeller için beklenen harici bellek,
Maksimum adresi değerle sınırlı olan
$FFFF): yani, eğer belirli bir MK modeli varsa
512 bayt SRAM ve kayıt alanı şu şekilde kaplanıyor:
ilk 96 bayt (60 $ adresine kadar), ardından SRAM adresleri
adres alanını 0060$'dan 025F$'a kadar kaplayacak
(yani 96. hücreden 607. hücreye kadar). Son
dahili veri belleği bir sabit ile gösterilir

Pirinç. 2.2. Adres alanı

statik veri belleği (SRAM)

AVR mikrodenetleyicileri

Bellek okuma/yazma işlemleri, bellekteki tüm adreslerle aynı şekilde çalışır.
künt alan ve SRAM ile çalışırken dikkatli olmanız gerekir:
belleğe yazarak bazı kayıtlara kolayca “girebilirsiniz”. Örneğin,
kayıt değeri yükleme komutu

kayıt defterine

) eşdeğerdir

sıfır adresindeki SRAM'a yazar (

). RON sov- için hafızadaki adres

numarasıyla birlikte düşüyor. Aynı zamanda RVV'ye doğrudan giriş için
Bellekteki adres kayıt numarasına 20 $ eklenmelidir: bu nedenle bayrak kaydı

çoğu model için RVV tablosunun sonunda bulunur.
$3F, hafızasında $5F adresi var. RON ve RVV'yi doğrudan adresleme pa-
Hatırlamak sakıncalıdır: böyle bir kayıt her zaman bir yerine iki ölçü alır, genellikle
diğer komutların çoğuna gidin, ancak bu bazen kısıtlamaları atlayabilir
bazı RVV'leri manipüle etmek için. Ama hazır bir program varsa çalışırım -
SRAM ile işlemci modellerini eski modellerle değiştirirken şunları yapmanız gerekir:
İçlerindeki düşük SRAM adresleri çakışabileceğinden dikkatli olun
ek RVV.

Bölüm 2. Genel yapı, hafıza organizasyonu, saatleme, sıfırlama

Kalıcı veri belleği (EEPROM)

Tüm AVR MK modellerinde (üretilmeyen ATtiny11 hariç) yerleşik bir
Güç kapatıldığında sabitleri ve verileri depolamak için EEPROM.
Farklı modellerde hacmi 64 bayttan (ATtiny1x) 4 kbayta (daha yüksek) kadar değişir.
Mega modeller). EEPROM'un sonu bir sabit ile gösterilir

(bu şunu belirtir:

Bu yalnızca daha sonraki AVR modelleri için tanıtıldı, bu nedenle
bazen bu sabiti kendiniz belirlemeniz gerekebilir). Yeniden başlatma döngüsü sayısı
EEPROM programlama 100 bine ulaşabilir.
EEPROM'un seçici programlama olasılığı açısından Flash'tan farklı olduğunu hatırlayalım.
Bayt bayt programlama (prensipte parça parça bile olsa, ancak bu yöntem mevcut değildir)
kullanıcı). Ancak EEPROM ailesinin eski modellerinde flash bellek gibi
programların bir sayfa organizasyonu vardır, ancak bu sayfalar küçüktür - en fazla
Her biri 4 bayt. Pratikte, EEPROM'u seri olarak programlarken olduğu gibi
vücut kanalı (yani SPI programlama arayüzü aracılığıyla) ve kayıt yaparken ve
Bir programdan EEPROM okurken bu özelliğin bir önemi yoktur ve erişim
bayt bayt görüntülenir.
EEPROM'dan okuma bir makine döngüsünde gerçekleştirilir (her ne kadar
Uygulamada dört döngüye yayılır, ancak programcının bunu takip etmesi gerekir.
gerekli değil). Ancak EEPROM'a yazmak çok daha yavaştır,
üstelik tam olarak tanımlanamayan bir hızda: bir baytlık bir yazma döngüsü
2 ila ~4 ms veya daha fazla sürebilir. Kayıt işlemi yerleşik tarafından düzenlenir R.C.-
frekansı kararsız olan bir jeneratör (daha düşük bir besleme voltajında
kayıt süresinin daha uzun olmasını bekleyebilirsiniz). Böyle bir süre boyunca, normal şartlarda,
Yüksek frekanslarda MK birkaç bin komutu yürütmeyi başarır, böylece program
Kayıt prosedürü özen gerektirir: örneğin, şunları sağlamanız gerekir:
böylece kayıt sırasında kesinti "sıkışmaz" (bununla ilgili daha fazla bilgi için bkz. Gla-
sen 4
Ve 9 ).
EEPROM ile çalışırken asıl zorluk, bileşenlerine zarar verme olasılığıdır.
Besleme voltajı o anda yeterince hızlı düşmediğinde tutulur
kapat Bunun nedeni, besleme voltajının düşürülmesidir.
belirli bir eşik (kararlı çalışma eşiğinin altında, ancak tam performans için yeterli değil)
voltaj dalgalanmaları nedeniyle MK keyfi performans göstermeye başlar
EEPROM'a yazma prosedürünü gerçekleştirme yeteneği de dahil olmak üzere çeşitli komutlar. Eğer
Tipik bir AVR MK komutunun mikrosaniyenin onda biri kadar bir sürede yürütüldüğünü dikkate alın,
o zaman hiçbir gerçek güç kaynağının bir azalma sağlayamayacağı açıktır
gerekli sürede voltajı sıfıra indirir. Yazarın deneyimine göre, sıradan bir güç kaynağıyla çalıştırıldığında
Önerilen kapasitans değerlerine sahip LM7805 tipi stabilizatör
Giriş ve çıkışta EEPROM içeriği kaçınılmaz olarak hasar görecektir.
zamanın yaklaşık yarısı.
Sabitler EEPROM'a yazılırsa bu sorun oluşmamalıdır.
MK'yi programlarken, ancak programda herhangi bir kayıt prosedürü yoktur (yaklaşık
EEPROM için bir veri dosyası nasıl oluşturulur, bkz. "Direktifler ve işlevler" bölümü
Bölüm 5'in "Kullanımı"
). Bu gibi durumlarda daha fazla veri güvenliği, em-

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

pirik gözlemler ve EEPROM'a yazma izninin prosedürle ilgili olduğu gerçeği
ra iki aşamalı (bkz. bölüm 9). Diğer tüm durumlarda (ve açıkçası,
mutlak çoğunluk - kullanıcı ayarları çoğunlukla EEPROM'da saklanır
gücü kapatırken yeni ve mevcut konfigürasyonun kabul edilmesi gerekir
özel önlemler. Bunlardan en önemli ve evrensel olanı kanundur.
MK'yi sıfırlama durumunda tutan yeni harici güç monitörü
besleme gerilimi bir eşik değerinin altına düşer. Aynı amaca hizmet ediyor
dahili voltaj düşüşü dedektörü (Brown-out Detection, BOD), mevcut
hemen hemen tüm Tiny ve Mega modellerinde, ancak teknik belgeler hariç değildir
Aynı zamanda harici bir güç monitörüyle çoğaltmanın güvenilirliğini de sağlamak gerekir.
BOD devresi ve MK sıfırlama modları hakkında daha fazla bilgi için bkz. bu bölümün ilerleyen kısımlarında ve program hakkında
EEPROM kurulumu ve kullanımıyla ilgili önlemler için bkz. bölüm 9.

Saat yöntemleri

Bir MK'yi saatlemenin kanonik yöntemi, bir kuvars rezonatörünü ona bağlamaktır.
karşılık gelen sonuçlar (Şekil 2.3, A). Tipik bir C1 ve C2 kapasitörlerinin kapasitesi
durum 15–22 pF olmalıdır (birinden 33–47 pF'ye yükseltilebilir)
tüketimde geçici artış). Çoğu Tiny ve Mega modelde
Özel bir konfigürasyon biti var

ayarlamanıza olanak tanır

tüketim. Bu bit 1'e ayarlandığında (programlanmamış durum)
jeneratörün salınım aralığı azalır, ancak aynı zamanda mümkün
frekans aralığı ve genel gürültü bağışıklığı olduğundan bu modu kullanın
Tavsiye edilmez. Düşük frekanslı kuvars rezonatörü de seçilebilir
(örneğin, “saatlik” 32.768 Hz), C1 ve C2 kapasitörleri olmayabilir -
KDV, çünkü kurulum sırasında

0 değeri, aşağıdakilere dahil olanları içerir:

36 pF kapasiteli MK dahili kapasitörler.
Kuvars rezonatörü seramik olanla değiştirilebilir. Bu satırların yazarı başardı
MK'yi aynı alt frekansta kuvars yerine standart dışı frekanslarda çalıştırın.
minyatür bir endüktans dahil (4,7 μH değeri ve kapasitansları ile)
91 pF kapasitör, frekans yaklaşık 10 MHz'dir), bu aynı zamanda biraz izin verir
Devrenin boyutlarını azaltın.
Doğal olarak MC, harici bir jeneratörden de zamanlanabilir (Şekil 2.3, B). Oso-
Bu, özellikle MK'yi harici bileşenlerle senkronize etmeniz gerektiğinde kullanışlıdır.
veya uygun olanı seçerek çok hassas bir saat frekansı elde edin.
üfleme jeneratörü (örneğin, Epson SG-8002 serisi).
Aksine, doğruluk gerekmediğinde harici bir cihaz bağlayabilirsiniz. R.C.-zincir
(Şekil 2.3, V). Bu devrede C1 kapasitansı en az 22 pF olmalı ve R1 direnci
3,3–100 kOhm aralığında seçilebilir. Sıklık formülle belirlenir
F= 2/3 R.C.. Günlüğü yazarsanız C1'i kurmanıza hiç gerek yoktur. Yapılandırmada 0-
iyon hücresi

Böylece dahili 36 pF kapasitör bağlanır.

Son olarak, harici bileşenleri tamamen terk edebilir ve yerleşik bileşenlerle idare edebilirsiniz.
isim R.C.-yaklaşık dört hızda çalışabilen bir jeneratör

Bölüm 2. Genel yapı, hafıza organizasyonu, saatleme, sıfırlama

frekans değerleri (1, 2, 4 ve 8 MHz). Bazı modeller bu yeteneği sağlar
bu jeneratörün frekansının ayarlanması (daha fazla ayrıntı için bkz. veya teknik açıklama)
belirli modeller). Bu fırsat en iyi şekilde kullanılır
8 pinli bir pakette üretilen daha genç Tiny modelleri - ardından sonuçlar
bir rezonatörü veya harici bir jeneratörü bağlamak için tasarlanmıştır;
normal G/Ç bağlantı noktaları gibi başka amaçlarla kullanın.

Pirinç. 2.3. Aşağıdakileri kullanarak bir AVR mikro denetleyicisinin saatini ölçme yöntemleri: A- kuvars rezonatörü;

B- harici jeneratör; V - R.C.-zincirler

Klasik Ankastre Aile R.C.-jeneratörü yoktur ancak özel bir konfigürasyona sahiptir-

Bu MK'lerin önemli ölçüde daha az sayıda iyon hücresi vardır ve genel durumda kullanılamazlar.

dikkat etmek. Diğer aileler için durum böyle değil. Varsayılan MK aileleri

Tiny ve Mega yerleşik jeneratörle çalışacak şekilde ayarlandı
frekans 1 MHz (

0001), dolayısıyla diğer modlar için uygun

yapılandırma hücrelerini doğru şekilde yükleyin

(bkz. tablo 2.1). burada

Hücrelerin durumuna dikkat edilmelidir.

0000 (ilişkili olarak yansıtılmıştır)

bir kuvars rezonatörü (1111) için en yaygın kullanılan değer yeniden-

MK'yi harici bir jeneratörden saat moduna geçirir ve aynı zamanda

harici bir frekans sağlamadan bile programlayın. Önerilen ayarlar hakkında

Yapılandırma hücreleri ve bunların programlanma özellikleri için ayrıca bkz.

Bölüm 5.

Tablo 2.1. Yapılandırma hücrelerini yükleme CKSEL

saat modlarına bağlı olarak

CKSEL3...0

Saat kaynağı

Sıklık

Harici frekans

Yerleşik R.C.-jeneratör

Yerleşik R.C.-jeneratör

Yerleşik R.C.-jeneratör

Yerleşik R.C.-jeneratör

Harici R.C.-zincir

Bölüm I. Atmel AVR'nin genel tasarım ve çalışma prensipleri

Tablo 2.1(bitirme)

CKSEL3...0

Saat kaynağı

Sıklık

Harici R.C.-zincir

0,9...3,0 MHz

Harici R.C.-zincir

3,0...8,0 MHz

Harici R.C.-zincir

8.0...12 MHz

Düşük frekanslı rezonatör

Kuvars rezonatör

0,4...0,9 MHz

Kuvars rezonatör

0,9...3,0 MHz

Kuvars rezonatör

3,0...8,0 MHz

1xxx (CKPOT=0)

Kuvars rezonatör

Sıfırla

Sıfırlama (RESET), MK'nin başlangıç ​​çalışma modunun ayarıdır. burada
tüm RVV'ler varsayılan duruma ayarlanmıştır - kural olarak bunlar sıfırlardır
birkaç istisna dışında tüm kategoriler (ancak RON üretimi kabul edebilir)
serbest değerler, dolayısıyla gerekirse belirli bir değerle başlayın
Değişken değerler programın başında zorunlu olarak ayarlanmalıdır).
Sıfırlamanın ardından program başlangıç ​​adresinden çalışmaya başlar (varsayılan olarak
bu adres $0000).
Sıfırlama her zaman güç açıldığında gerçekleşir. Ayrıca sıfırlama kaynakları
Aşağıdaki olaylar meydana gelebilir: donanımın sıfırlanması, yani düşük besleme seviyesi
RESET girişine voltaj (bunu ters çevirme ile belirlemek daha doğrudur: /RESET, çünkü
buradaki aktif seviye düşüktür ve bu kurala sadık kalacağız); bitti
ayarlanan gözlemci zamanlayıcı aralığının geri sayımı; devre tetikleme
BOİ. Durum kaydının en az önemli dört bitinin anlamı

sinyal vermeli

önceki seferde sıfırlamanın yapıldığı kaynak hakkında bilgi (kurulu
1'e yeni bit 0 - açılışta sıfırlama, bit 1 - donanım sıfırlama, bit 2 - itibaren
BOD devreleri, bit 3 - bekçi uygulaması zamanlayıcısından). Uygulamada, yazarın deneyimine göre,
Bu kaydın durumları yalnızca eyaletlerde diğerlerinden güvenilir bir şekilde farklıdır
zamanlayıcı sıfırlama (diğer bayrakların tümü aynı anda ayarlanabilir)
geçici). Bununla birlikte, bu bilgiler örneğin analiz yaparken yararlı olabilir.
24 saat çalışan cihazların çalışmasındaki kesinti nedenlerinin analizi (bkz. bölüm 12).
Tiny ailesinin Junior MK'lerinde (ATtiny28 hariç) yerleşik bir "çekme" özelliği yoktur
/RESET pinindeki direnç bu nedenle güvenilir çalışma için önlemler alınmalıdır.
bu pinden 2–5 kOhm'luk harici bir direncin bağlantısına bakın.
besleme gerilimi. Yazar ayrıca kurulumu şiddetle tavsiye ediyor
Dahili direncin büyük olması nedeniyle herhangi bir AVR modeli için uygun direnç
yüksek nominal değere (100–500 kOhm) ve gürültüye neden olabilir, bu da
öngörülemeyen bir sıfırlamaya neden olur. Ayrıca (teknik açıklamalarda böyle olmasına rağmen)

Bölüm 2. Genel yapı, hafıza organizasyonu, saatleme, sıfırlama

onarılıyor ve içermiyor), 0,1–0,5 µF'lik bir kapasitör takmanın zararı olmaz
/RESET çıkışı toprağa - bu, kaçınılmaz voltaj sıçramasını düzeltir ve
/RESET pinindeki voltajın yükselen kenarı, ile karşılaştırıldığında biraz daha uzundur
artan besleme voltajıyla: devrenin tepki eşiğine ulaşıldığında
sıfırlama, tüm MK'nin besleme voltajı zaten kurulmuş olacaktır.
8 pinli pakette (ATtiny11–ATtiny15) üretilen Tiny modellerinde,
Harici sıfırlama gerekmiyorsa /RESET pini işlevleri normal şekilde gerçekleştirebilir
G/Ç bağlantı noktası. Tek bir uyarıyla: bunu yapılandırırken
çıkışa temas ettiğinde, geleneksel bir çıkış olarak değil, açık kolektör çıkışı olarak çalışır.
son mantıksal öğe (bağlantı noktası pinlerinin yapılandırması için bkz. Bölüm 3).
Açılışta sıfırlamayı organize etmenin en çok tercih edilen yolu aşağıdaki gibidir:
daha önce de belirtildiği gibi - harici bir güç monitörü kurmak. Örneğin, ne zaman
5 voltluk bir güç kaynağı için tetikleme eşiğine sahip popüler MC34064 mikro devresi uygundur.
4,6 V ve yaklaşık 300 µA'lık tipik tüketim veya daha modern
analog (örneğin, 12 μA tüketimli MAX803L). Üç voltluk güç kaynağı için
uygun devre MAX803R (2,6 V) veya karşılık gelen DS1816'nın uygun bir versiyonu
akım voltajı. Listelenen tüm mikro devreler üç pimlidir (güç, toprak
la", kontrol pinini sıfırla) ve açık kolektör çıkışına sahip, yani.
bir çekme direncinin kurulumunu sağlayın. Tipik yanıt süresi
Gerilim düştüğünde bu mikro devrelerin süresi mikrosaniyedir, bu da sağlar
EEPROM'da veri güvenliği. Gerilim arttığında sağlarlar
güvenilir olmasını sağlayan büyük zaman gecikmesi (saniyenin kesirleri mertebesinde)
MK'yi sallanmadan sıfırlayın.
Dahili BOD devresi mikrosaniye mertebesinde yanıt süreleri sağlar
Gerilimin yeniden sağlanmasından sonra çalışma durumuna dönmede gecikme,
sıfırlama gecikmesiyle aynı ayarlarla belirlenir (hücreler

saat frekansı 4 MHz) ve mümkün olan maksimum ~68 ms değeri bile
voltaj düştüğünde oluşan gürültüyü atlamak için yetersiz kalıyor
özerk bir kaynağın güç kaynağı voltajı. BOD çalışma modunu seçmek için şunu kullanın:
üç yapılandırma hücresine basın

aşağıdaki durumlara sahip:

111 (varsayılan ayar) - BOİ devresi devre dışı;

101 - BOD'yi 2,7 V çalışma eşiğinde açar;

100 - 4,0 V'luk bir eşiğe karşılık gelir.

Operasyonel güvenilirlik açısından bakıldığında, arasındaki farkın ne kadar küçük olduğunu unutmayın.
güç monitörünün besleme voltajı ve eşiği (harici veya
dahili BOD devresi, önemli değil), o kadar iyi - küçük güç dalgalanmalarıyla,
Ancak monitöre duyarsız olması her türlü sakıncayı ortaya çıkarabilir.
harici bir kesintinin kendiliğinden ortaya çıkması gibi hoş şeyler. Bir-
Ancak cihaza pillerle güç verilirken bu fark dikkate alınmalıdır: örneğin,
dört adet AA alkalin pil ve bir güç monitörü için hesaplayın
4,7 V'de tannoy, monitör tetiklendikten sonra elemanlarda artık voltaj