İçeri gel
Yeni başlayanlar ve profesyoneller için tüm bilgisayar sırları
  • Python yorumlanırsa nedir?
  • RW2 dosya uzantısı nedir?
  • VID dosya uzantısı nedir?
  • Android Cihazda SD Kart Nasıl Kullanılır MicroSD Recovery Transcend
  • JSON dosya uzantısı nedir?
  • Eğitim programı: gezgin için harita seçimi
  • Algorithm Builder yazılım ortamında Assembly dilindeki program. Daha sonra tasarlanan cihazın performansı proteinus yazılım ortamında test edilmiştir. Avr için Algoritma Oluşturucu, Başlarken Grafiksel birleştirici Avr zamanlayıcılarını programlama

    Algorithm Builder yazılım ortamında Assembly dilindeki program.  Daha sonra tasarlanan cihazın performansı proteinus yazılım ortamında test edilmiştir.  Avr için Algoritma Oluşturucu, Başlarken Grafiksel birleştirici Avr zamanlayıcılarını programlama

    Zamanımızda mikrodenetleyicilerle tanışmamış hiçbir radyo amatörünün olmadığını düşünüyorum. Er ya da geç, ama bu olur. Mikrodenetleyicili bir devreyi ilk gördüğümde, "Ah, hala birleştiremiyorum" düşüncesiyle tarayıcı sayfasını hemen kapattım. Ancak zaman geçtikçe mikrodenetleyicilerin kullanıldığı devrelerin sayısı giderek arttı ve sonunda başlamaya karar verdim. Aslında her şeyin sandığım kadar zor olmadığı ortaya çıktı.

    Öncelikle şunu çözelim: Mikrodenetleyici (MK) nedir? Temel olarak basit görevleri gerçekleştirmek için tasarlanmış minyatür bir bilgisayardır. Mikrodenetleyicinin çalışması için gerekli olan her şey tek bir muhafazada bulunur. Mikrodenetleyicinin çeşitli çevre birimleri vardır: giriş/çıkış bağlantı noktaları, zamanlayıcılar, iletişim arayüzleri vb. Mikrodenetleyicinin üç tür belleği vardır: RAM (rasgele erişim belleği), FlashROM (program belleği), EEPROM (kalıcı olmayan bellek).

    Bir mikro denetleyici ile geleneksel bir mikro devre arasındaki temel fark, mikro denetleyicinin fabrikada kurulan katı mantığa göre çalışmaması, programlanmış olmasıdır. Program klasik olarak bilgisayarda özel bir ortamda programlama dillerinden birinde yazılır, daha sonra makine diline çevrilir (derlenir) ve kontrolörün belleğine yazılır. Bu kursta her şey biraz farklı olacak - program yazılmayacak, tam anlamıyla bir akış şeması şeklinde çizilecek. Bu yaklaşım sayesinde program daha net görünür ve program geliştirme süresi klasik programlama tekniklerine göre 3-5 kat azalır.

    Algoritma Oluşturucu - programlama ortamı

    Algorithm Builder, algoritmaya girişten başlayarak, hata ayıklama sürecini de içeren ve programın belleğe yazılmasıyla biten tam bir geliştirme döngüsü gerçekleştirir.

    Program arayüzüne kısa bir genel bakışla başlayalım

    Ana menü

    • Dosya. Projeleri ve bireysel algoritmaları açmaya, kaydetmeye, kapatmaya ve programdan çıkmaya yarar.
    • Düzenlemek. Bir algoritmanın düzenlenmesiyle ilgili eylemler: kesme, kopyalama, vurgulama vb.
    • Görüntülemek. Algoritmayı/tabloyu değişkenlerle değiştirme (bununla ilgili daha fazla bilgi aşağıdadır) + işlem ve koşul şablonları.
    • Aramak. Burada açıklamaya gerek yok.
    • Elementler. Algoritma özel unsurlardan alınmıştır: Metin, Köşe Noktası, Alan, Etiket, Koşul, Kullanılan (koşulsuz) geçiş vektörü, Özelleştirici. Hepsini eğitim sürecinde tanıyacağız. Menüde birkaç önemli öğe daha var: Devre Dışı Bırak, Makro, Kesintiler. Devre dışı bırakmak- bu bileşen derlenmeyecek. Makro- makrolar oluşturmak için. Kesintiler- tüm mikrodenetleyici kesintilerinin adlarının bir listesini içerir. İlerleyen derslerde bu fonksiyonu öğreneceksiniz ama şimdi bunun iş için son derece önemli ve gerekli bir şey olduğunu söyleyeceğim.
    • Programı. Programla ilgili eylemler - derleme (makine diline çeviri), programın simülasyonu, denetleyici belleğinin okunması (Flash ve EEPROM), vb.
    • Seçenekler. Proje ve ortam ayarları.
    • ?. Algoritma Oluşturucu bilgileri ve yardımı.

    Araç Çubuğu

    Açıklamaya gerek yok. Panel öğelerinin üzerine geldiğinizde araç ipuçları görünür.

    Projeyi aç

    Burada bir tuhaflık var. Aynı anda iki proje açamazsınız.Yeni bir proje açmak/oluşturmak için eski projeyi kapatmanız gerekir. Bir projeyi açtıktan sonra yalnızca ayrı bir algoritma dosyası açabilir/oluşturabilirsiniz. Proje dosyası .alp uzantısına sahiptir ve ayrı algoritma dosyası .alg uzantısına sahiptir.

    Değişkenler ve Sabitlerle Çalışmak

    Özel bir tablo şeklinde düzenlenmiştir (menüden F12 tuşunu kullanarak veya araç çubuğundaki bir tuşu kullanarak değiştirebilirsiniz). Böylece algoritmanın kendisi gereksiz girişlerden kurtulur.

    Programın bir bölümünden diğerine geçişin mümkün olduğu çok sayıda etiket, kodu büyük ölçüde karmaşıklaştırır ve programın netliği kaybolur. Algoritma Oluşturucu'da geçişler çok daha kolay hale getirilir - bir okla (vektör). Ancak adlandırılmış etiketler boyunca geçişler de mümkündür.

    Program işleminin simülasyonu

    Simülatör, sanal mikro denetleyicinin içinde meydana gelen tüm değişiklikleri gösterir. Programın çalışmasını kontrol etmek için mikrodenetleyici satın almanıza bile gerek yok! Simülasyon adım adım (fonksiyonlar girilerek veya girilmeden), ayarlanmış bir kesme noktasına veya seçilen bir alana gerçekleştirilebilir.

    Hata ayıklama

    Algorithm Builder, gerçek bir mikrodenetleyicinin belleğinin içeriğini belirtilen noktalarda gözlemlemenizi sağlayan bir çip üzerinde hata ayıklama sistemine (Çip Üzerinde Hata Ayıklama) sahiptir. Bu durumda, kullanıcının tercihine bağlı olarak, bilgisayarla iletişim kurmak için mikrodenetleyicinin yalnızca bir ayağı kullanılır. Monitör hata ayıklaması hemen hemen her mikrodenetleyiciye uygulanabilir. Bu, debugWIRE protokolünün bir yazılım sürümüdür.

    Peki Algorithm Builder radyo amatörleri arasında neden az tanınıyor?İlk olarak 2010 yılına kadar program ücretliydi. Bugün yazılım tamamen ücretsiz olarak dağıtılmaktadır. İkincisi, programın resmi desteğinin olmaması. Builder'ı kullanan tek bir üreticinin apnotunu bulamazsınız. Bu programa ayrılmış İnternet kaynakları bir yandan sayılabilir.

    Biraz bahsetmeye değer gerekli malzemeler ve araçlar

    İhtiyacınız olan ilk şey havya. Bir radyo amatörünün ana aracı. Havyanın gücü 30-60 W aralığında olmalıdır. Neden daha fazlası olamıyor? Güçlü bir havya daha fazla ısınır ve levha izlerine ve kullanılmış parçalara zarar verir. Ve lehimleme için o kadar da uygun değil - böyle bir havya çok daha büyük ve daha ağırdır.

    Programı mikrodenetleyiciye yüklemek için ihtiyacınız olan şey programcı- en basit versiyonda yalnızca birkaç direnç ve diyottan oluşur (LPT ve COM bağlantı noktası başına). Bilgisayarınızda COM veya LPT bağlantı noktası yoksa DealExtreme veya (Arama sorgusu) adresinden bir USB programlayıcı sipariş edilebilir. "avr programcısı"; maliyeti yaklaşık 4-6$). Bir sonraki derste programcı seçimi ve montajı hakkında yazacağım.

    Ayırt edici özellikleri:

    • Desteklenen işletim sistemleri: Windows 95/98/2000/NT/ME/XP
    • Lisans: Ücretsiz
    • Arayüz dili: İngilizce, Rusça
    • Programlama dilleri: grafiksel birleştirici
    • Ana işlevler:
      • grafiksel program kodu düzenleyicisi
      • derleyici
      • tanıtılan algoritmanın hatalarını ayıklamak için simülatör
      • Basit bir adaptör kullanarak COM portu üzerinden programlama (7 direnç, 3 diyot; diyagramın belgelerine bakın)
      • daha basit bir adaptör (1 veya 2 diyot, 2 veya 4 direnç; diyagramın belgelerine bakın) kullanarak bir çip üzerinde algoritmanın hatalarını ayıklamak
    • İnternet destek adresi: http://algrom.net/russian.html

    Tanım:

    Algorithm Builder, AVR MK için tam bir ürün yazılımı geliştirme döngüsü sağlayan ücretsiz bir ortamdır (ücretsiz dağıtım koşulları). Algoritma girişi, hata ayıklama ve devre içi programlama gibi aşamalar. Program geliştirme, hem montajcı düzeyinde hem de isteğe bağlı uzunluklarda değişen miktarlarda çalışmanın mümkün olduğu makro düzeyde gerçekleştirilebilir. Bu, programlama yeteneklerini yüksek seviyeli bir dile yaklaştırır.

    Algorithm Builder'ın ayırt edici bir özelliği, bir programa ağaç yapısına sahip bir algoritma biçiminde grafiksel olarak girme yeteneğidir. Sonuç olarak programın tüm mantıksal yapısı tamamen netleşir. Bu programlama yöntemi insan algısının doğasına mümkün olduğu kadar yakındır ve bu nedenle klasik çeviriciyle karşılaştırıldığında öğrenilmesi çok daha kolaydır. Firmware oluşturma süresinde klasik montajcıya kıyasla beklenen azalma 3-5 kattır.

    Ortam, Windows 95/98/2000/NT/ME/XP altında çalışacak şekilde tasarlanmıştır. Editörün normal çalışması için "Courier" yazı tipi gereklidir.

    İndirilecek dosyalar:

    • AT90 Serisi
      • AT90CAN128, AT90PWM3, AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90USB64, AT90USB82, AT 90USB 128, AT90USB162
    • ATmega serisi
      • ATmega8, ATmega16, ATmega32, ATmega48, ATmega64, ATmega88, ATmega103, ATmega128, ATmega161, ATmega162, ATmega163, ATmega164P, ATmega165, ATmega168, ATmega323, ATmega324P, ATmega325, ATmega328P, ATme ga603, ATmega640, ATmega644, ATmega644P, ATmega645, ATmega1280, ATmega1281 , ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega6450, ATmega8515, ATmega8535
    • ATtiny
      • ATtiny10, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny24, ATtiny25, ATtiny26, ATtiny28, ATtiny44, ATtiny45, ATtiny84, ATtiny85, ATtiny261, ATtiny461, ATtiny861, ATtiny2313

    4.Teknik gereksinimler.

    Bu mikroelektronik rölenin belirli teknik verileri vardır.

    Bu mikroelektronik röle, iki darbeli akım yükünü anahtarlamak için bir normalde kapalı (arka) ve bir normalde açık (ön) kontağa sahiptir.

    25, 50 ve 75 Hz frekanslı harici alternatif voltaj uygulandığında 0,8V ila 10V aralığında çalışma sağlanır.

    25, 50 ve 75 Hz frekanslı alternatif akımda çalışma voltajı (2,9-3,2) V, düşme voltajı (2,1-2,3) V'dir.

    Not: Tetikleme - arka kontağın açılması ve ön kontağın kapanması. Bırakma – ön kontağın açılması ve arka kontağın kapanması.

    Giriş voltajı hakkındaki bilgileri görüntülemek için ortak anotlu bir gösterge kullanılır.

    Kontaklar 30V'a kadar voltajları değiştirir.

    Göstergedeki bilgi güncelleme hızı her 12,8 ms'de bir gerçekleşir.

    Giriş voltajını düzeltmek için orta nokta doğrultucu kullanılır.

    5.Elektronik rölenin fonksiyonel diyagramı.

    Bir darbe mikroelektronik rölesi birkaç işlevsel birime bölünebilir. Bu rölenin fonksiyonel şeması Şekil 5'te gösterilmektedir. Diyagramdaki fonksiyonel amaca göre şunları ayırt edebiliriz:


    • Doğrultucu ortak noktalı bir devreye göre yapılmıştır.

    • Mikroişlemci (MP).

    • Gösterge bilgileri görüntülemek için tasarlanmıştır.

    • Optokuplör çifti.
    Doğrultucu, girişine gelen analog sinyali düzeltmek için tasarlanmıştır. Buna karşılık analog sinyal, koruyucu bir filtre bloğundan veya başka bir analog elemandan gelir ve 25, 50 veya 75 Hz frekanslı bir alternatif voltajdır. Doğrultucunun çıkışından mikroişlemciye sağlanan düzeltilmiş voltajı elde ederiz.

    Mikroişlemci programda belirtilen işlevleri yerine getirir. Doğrultucunun çıkışından mikroişlemcinin girişine ulaşıldığında, düzeltilmiş voltaj, mikroişlemcinin içindeki yerleşik ADC kullanılarak analiz edilmeye başlanır. Daha sonra mikroişlemci ölçülen voltajın ortalama değerini hesaplar ve bunu göstergede görüntüler. Optokuplör çiftleri de çıkışlardan birine bağlanır. Bunlar benzer

    Şekil 5. Mikroelektronik otomatik kilitleme rölesinin fonksiyonel diyagramı

    Röle kontakları. Yanıt eşiğine bağlı olarak sinyal, optokuplör çiftlerinden birinde görünür.

    Gösterge, mikroelektronik röleye gelen voltajı izlemenizi sağlar. Bu, bakım personelinin mikroelektronik rölenin çalışmasını ölçmesine ve gözlemlemesine olanak tanır.

    Arsenik-galyum-alüminyum bileşiğine dayanan yayan bir diyot ve bir kompozit silikon fototransistörden oluşan transistör optokuplörleri. Radyoelektronik ekipmanın galvanik olarak izole edilmiş elektrik devrelerinde anahtar olarak kullanılmak üzere tasarlanmıştır. Metal kasada mevcuttur. Cihazın ağırlığı 1,5 gramdan fazla değildir.

    6.Çalışma algoritması.

    Mikroelektronik bir röle oluşturmak için ana görevi belirlemek gerekir. Öncelikle mikroişlemciyi yapılandırmanız, tüm giriş-çıkış bağlantı noktalarını yapılandırmanız, zamanlayıcıyı ve ADC'yi ayarlamanız gerekir. Bundan sonra, bir ADC kullanarak bilgi toplamak olan ana görev tamamlanmaya başlar, ardından alınan verileri analiz edip görüntüleriz. Ekranda giriş voltajının ondalık değeri gösterilmelidir. Daha ayrıntılı bir çalışma algoritması Şekil 6'da sunulmaktadır.

    Program algoritması beş alt programdan oluşur:


    • Mikroişlemci kurulumu

    • ADC alt programı

    • Zamanlayıcı rutini

    • Alt yordamı görüntüle

    • Bölme alt programı
    Mikroişlemci ayarlarının nasıl çalıştığına bakalım. Öncelikle yığının başlangıç ​​değerini belirliyoruz. Bundan sonra ADC'yi yapılandırıyoruz. Burada SK/128 ön ölçekleyiciyi kuruyoruz ve dönüşümler belirli zaman aralıklarında sürekli olarak başlatıldığında sürekli dönüşüm modunu ayarlıyoruz. Daha sonra zamanlayıcıyı ayarlıyoruz. STS'nin çalışma modunu ayarlıyoruz (tesadüf üzerine sıfırlanır). Bu modda karşılaştırma kaydında yazılan değere ulaşıldıktan sonra “$00” değerinden itibaren saymaya devam edilir. Aynı döngüde değerler sıfırlandığında zamanlayıcı kesintisi meydana gelir. Daha sonra taşma tarafından tetiklenen bir kesme ayarlıyoruz. Bundan sonra giriş/çıkış bağlantı noktaları yapılandırılır. Daha sonra tüm bayrak değerlerini, gösterge konumunu, toplamın değerini, böleni ve bölüm sıfır değerini ayarlıyoruz. Ve i bayrağını bire ayarladığımız global kesmeyi etkinleştiriyoruz. Mikroişlemcimizi kurduktan sonra programımız başlıyor. Bunu yapmak için t=1 koşulunu ayarladık. T'nin değeri bire eşit olmadığında bir döngü meydana gelir, bir değeri olur olmaz program sağa giderek gösterge altyordamına gider ve çalıştırıldıktan sonra t bayrağını sıfıra ayarlar ve tekrar döngüde tekrar kapanır. Sonraki tüm altprogramlar kesmede çıkacak ve t bayrağını kontrol ederek bu döngüye geri dönecektir.

    Şimdi ADC altprogramına bakalım. Yukarıda ADC'yi yapılandırdığımızdan ve ADC alt rutinine geçişin belirli bir saat darbesi değeri aracılığıyla kesinti ile gerçekleştirildiğini söylediğimizden beri. Mikroişlemciyi kurduktan sonra programımız t bayrağının değerinin kontrol edildiği bir döngüde döndürüldü ve bununla birlikte mikroişlemci üreteci saat çevrimlerinin değerleri de sayıldı. Saat darbelerinin belirli bir değerine ulaşıldığında bir kesme meydana gelir ve program ADC alt programına geçer. Geçiş yapar yapmaz giriş voltaj değerini ölçtük. Bu değeri saklamak için, düşük baytları saklamak için Yl (düşük) ve yüksek baytları saklamak için Yh (yüksek) olmak üzere iki yazmaç kullanırız. Bundan sonra t bayrağının değerini kontrol ediyoruz, sıfıra eşitse değerin görüntülenmesi gerekir, t bayrağı bir ise bu ADC değerini ondalık sayıya dönüştürmenin mümkün olduğu anlamına gelir biçim. Daha sonra ölçülen voltajın eşik değerini karşılaştırıyoruz, eğer bu değer 0,8V eşiğinin üzerindeyse bu değeri kaydediciye yazıp sonraki ölçümlerle ekliyoruz. ADC değerlerini her eklediğimizde bölen değerini bir artırıyoruz. Daha sonra bölenin değerini kontrol ediyoruz ve değeri 255 ise toplam bölenin değerini sıfırlamak gerekiyor ancak bölen 255 değerine ulaşmadıysa ADC alt programından çıkılıyor.

    Ancak karşılaştırma sonrasında ADC değeri 0,8V eşiğinin altındaysa program sağa gider ve ardından ADC'yi kapatırız. Bu, voltaj değerinin göstergede görüntülenebilmesi için gereklidir. Daha sonra bölenin değerini analiz ediyoruz ve sıfıra eşit değilse ADC değerlerini toplayıp böleni bir artırıyoruz. Daha sonra bölme altprogramına geçiyoruz. Bu, ortalama voltaj değerini hesaplamak için gereklidir. Ancak bölenin değeri sıfırsa program bölme altprogramından hemen sonra atlar. Bundan sonra ADC yanıt eşiği değerini karşılaştırıyoruz ve eşikten yüksekse ön kontağın çalışmasına ve kapanmasına karşılık gelen bir değerini giriş-çıkış portuna çıktılıyoruz ve eğer değer yanıt eşiğinden küçükse, arka kontağın kapanmasına karşılık gelen porta sıfır değeri verilir. Daha sonra bölen değerini ve t bayrağını sıfıra ayarlıyoruz. Ayrıca ADC değerini de sıfırlayıp açıp ADC alt rutininden çıkıyoruz.

    Daha sonra, geçişi ADC alt yordamında bulunan bölme alt yordamını düşünün. Ölçülen voltajın ortalama değerini hesaplamak için bölme rutinine ihtiyaç vardır. Bölme programı, bölen değerinin tüm ADC değerlerinin toplamından sıralı olarak çıkarılmasıdır. Bu çıkarma işleminin kaç kez gerçekleştiği, ortalamanın, yani bölümün değeri olacaktır. Bu operasyonun algoritmasını ele alalım. Alt programa gittikten sonra bölümün değerini sıfırlıyoruz, ardından C bayrağını kontrol ediyoruz. Değeri bire eşit değilse bölümün değerini bir artırıyoruz ve bölenin değerini hepsinin toplamından çıkarıyoruz ADC değerleri. 1 değeri ancak toplam değer bölen değerinden küçük olduğunda C bayrağına yazılır. C bayrağına bir birim yazıldığı anda program döngüden çıkar. Ortaya çıkan bölümün değerini X kaydına giriyoruz ve toplamın değerini sıfırlıyoruz. Bu, bölme programını sonlandırır ve programdan çıkar.

    Tıpkı bir ADC alt yordamında olduğu gibi, bir zamanlayıcı alt yordamına geçiş, belirli bir saat darbesi değeriyle gerçekleşir. Doğal olarak, zamanlayıcı alt rutinine kesinti yoluyla geçiş, ADC alt rutininin kesintiye uğramasıyla farklı zamanlarda gerçekleştirilir. Buna göre birbirlerine karışmazlar. Zamanlayıcı alt yordamında, göstergeye ilişkin bilgileri kademeli olarak görüntüleriz. Elimizde dört rakam olduğu için rakamların değerlerini arka arkaya göstermemiz gerekiyor. Bunu yapmak için her basamağa karşılık gelen 0'dan 3'e kadar bir değer yazdığımız n var. Kesinti geçişinden sonra program başlar. Öncelikle n değerini kontrol ediyoruz ve eğer bu değer sıfır ise devam ediyoruz ve sıfır uygulayarak dördüncü aşinalığı kapatıyoruz. B portuna bir sayı çıktısı veriyoruz. Bundan sonra ilk aşinalığı aydınlatmak için üniteyi tedarik ediyoruz. Sonuç olarak göstergede ilk rakam yanar. Daha sonra etiket boyunca geçiş gerçekleşir. Daha sonra n değerini birer birer arttırıp alt programdan çıkıyoruz. Belirli bir süre sonra başka bir zamanlayıcı kesintisi meydana gelir ve program zamanlayıcı altprogramına gider, burada tekrar n'nin değerini karşılaştırırız.Bir artırdığımız için n bire eşit olduğunda geçiş buna göre gerçekleşir. Daha sonra, birinci aşinalık kapatılır, ikinci sayının değeri B portuna gönderilir ve ikinci aşinalık açılır. Daha sonra yine etiket boyunca geçiş meydana gelir ve n'nin değeri bir artar. Üçüncü ve dördüncü hanelerin değeri de aynı şekilde görüntüleniyor ancak dördüncü hanenin çıktısını alırken n değerini sıfıra ayarlıyoruz, böylece ilk hanenin çıkışı gelecekte tekrar başlayacaktır. Ayrıca burada t bayrağına 1 değerini yazıyoruz. Göstergede dördüncü rakam görüntülendikten sonra programdan çıkar ve t bayrağının değerini kontrol etme döngüsüne girer.

    Bayrak t bire ayarlandığından, bayrak kontrol döngüsünden bir geçiş meydana gelir ve ardından gösterge alt rutinine bir geçiş meydana gelir. Bu alt programda binlerin, yüzlerin, onların ve birlerin değerini belirliyoruz ve ayrıca elde edilen rakamın değerini B portuna çıktı olarak belirliyoruz. Görüntüleme alt rutinine geçtikten sonra, global kesmeye bir yasak koyuyoruz. Daha sonra temp yazmacının değerini sıfırlıyoruz. Daha sonra Z kaydında bulunan ortalama ADC değerini karşılaştırıyoruz, binden fazla ise Z kaydından 1000 çıkarıyoruz, çıkardıktan sonra temp kaydına bir giriyoruz. Z'den her 1000 çıkarıldığında bir birim eklenir. Geçici kaydın içeriği binlik değere karşılık gelir. Z kaydı 1000'in altına düştüğünde program devam eder. Geçiş sonrasında temp yazmacının değerini r0 yazmacına yeniden yazıp sıfırlıyoruz. Daha sonra Z kaydının değerini tekrar karşılaştırıyoruz ve 100'den büyükse tekrar 100 çıkarıyoruz, her çıkarmada geçici kayıt defterine bir giriyoruz. Z yazmacının değeri 100'ün altına düştüğünde program devam eder. Bundan sonra yüzlerin değerini r1 yazmacına yeniden yazıyoruz. Daha sonra temp yazmacının değerini sıfırlıyoruz. Daha sonra Z kaydının değerini karşılaştırıyoruz ve 10'dan büyükse Z kaydından 10 çıkarıyoruz, her çıkarmada temp kaydına bir giriyoruz. Z yazmacının değeri 10'un altına düştüğünde program devam eder. Daha sonra, r2 yazmacındaki onlukların değerini hatırlayın. Z kaydında kalan değer, birlerin değerini tanımlayan değerdir. Bu değer r3 yazmacına yazılır. Artık binler, yüzler, onlar ve birlerin değerleri sırasıyla r0, r1, r2 ve r3 kayıtlarındadır. Bundan sonra görüntülenecek sayıların anlamlarını içeren kod tablosunun adresini Z kaydına giriyoruz. Ölçüm sırasında binlik değeri sıfır ise en anlamlı basamaktaki sıfır değerinin gizlenmesi gerekir. Bundan sonra r0 saklayıcısına ilk hanenin değerini, ardından r1'e ikinci hanenin değerini, ardından r2'ye üçüncü hanenin değerini ve r3 saklayıcısına son hanenin değerini giriyoruz. Bundan sonra global kesmeyi etkinleştiriyoruz. Bu, programı sonlandırır ve görüntüleme alt yordamından çıkar. Bundan sonra t bayrağını 0'a ayarlıyoruz ve her şey tekrar etmeye başlıyor. Mikroişlemcinin program algoritmasının bittiği yer burasıdır.

    7.Yazılım.

    Bir program yazmadan önce bir mikroişlemci seçmeniz ve gerçekleştirdiği işlevleri dikkate almanız gerekir. Eldeki görev için ATmega48 mikroişlemcisini almanız tavsiye edilir. Ayırt edici özellikleri şunlardır:


    • Yüksek kaliteli, düşük güçlü 8 bit AVR mikro denetleyici

    • Gelişmiş RISC mimarisi
    - Çoğu tek bir saat döngüsünde yürütülen 130 talimat

    32 adet 8 bitlik genel amaçlı çalışma kayıtları

    Tamamen statik mimari

    16 MHz'de 16 MIPS'ye kadar performans

    Dahili iki döngülü çarpan


    • Kalıcı program ve veri belleği
    - 10.000 yazma/silme döngüsüne dayanabilen 4KB sistem içi programlanabilir Flash program belleği

    Bağımsız koruma bitine sahip yardımcı önyükleme programı bölümü


    • Yerleşik önyükleyici programıyla sistem içi programlama

    • Programlama sırasında gerçek okuma fonksiyonu
    - 100.000 yazma/silme döngüsüne dayanabilen 256 bayt EEPROM

    512 bayt dahili SRAM belleği (statik RAM)

    Programlanabilir okuma koruması


    • Çevresel özellikler
    - Ayrı ön ölçekleyici ve karşılaştırma moduna sahip iki adet 8 bitlik zamanlayıcı/sayaç

    Ayrı ön ölçekleyici ve karşılaştırma ve yakalama modlarına sahip bir adet 16 bit zamanlayıcı/sayıcı

    Ayrı jeneratörlü gerçek zamanlı sayaç

    Beş PWM kanalı

    6 adet 10 bit kanal

    2 8 bit kanal

    PDIP paketindeki cihazlar için 6 kanallı ADC

    4 adet 10 bit kanal

    2 8 bit kanal

    Programlanabilir Seri USART

    Master/slave SPI arayüzü

    Bayt odaklı seri 2 kablolu arayüz

    Dahili osilatörlü programlanabilir watchdog zamanlayıcısı

    Dahili analog karşılaştırıcı

    Pin durumu değiştiğinde kesintiye uğrayın ve uyanın


    • Mikrodenetleyici Özel Nitelikleri
    - Açılışta sıfırlama ve anlık güç kaybı dedektörü

    Dahili kalibre edilmiş osilatör - Harici ve dahili kesme kaynakları

    Beş düşük tüketim modu: Boşta, ADC Gürültü Azaltma, Güç Tasarrufu, Güç Kapatma ve Bekleme


    • G/Ç bağlantı noktaları ve muhafaza tasarımı
    - 23 programlanabilir I/O bağlantı noktası hattı

    32 pinli TQFP ve MFL paketleri


    • Besleme voltajı aralığı
    - ATMega48V için 1,8'den 5,5 V'a

    ATMega48L için 2,7'den 5,5 V'a

    ATMega48 için 4,5'ten 5,5 V'a


    • Çeşitli çalışma saat hızı aralıkları
    - ATMega48V için 0'dan 1 MHz'e

    ATMega48L için 0'dan 8 MHz'e

    ATMega48 için 0'dan 16 MHz'e


    • Ultra düşük tüketim
    - Aktif mod:

    1 MHz ve 1,8 V besleme voltajında ​​300 µA

    32 kHz'de 20 µA ve 1,8 V besleme voltajı

    Düşük tüketim modu

    1,8 V besleme voltajında ​​0,5 µA

    ATMega48, AVR RISC mimarisine sahip düşük güçlü 8 bitlik bir CMOS mikro denetleyicisidir. Talimatları tek bir döngüde yürüterek ATMega48, 1 MHz saat hızında 1 MIPS performansına ulaşarak tasarımcının güç-performans oranını optimize etmesine olanak tanır.

    AVR çekirdeği, zengin bir talimat setini ve 32 genel amaçlı çalışma kaydını birleştirir. 32 kaydın tümü doğrudan Aritmetik Mantık Birimi'ne (ALU) bağlıdır ve tek bir talimatı yürütürken iki bağımsız kayda erişime izin verir. Sonuç olarak bu mimari, standart CISC mimarisine göre onlarca kat daha fazla performans sağlar.

    ATMega48 aşağıdaki özelliklere sahiptir: 4 KB sistem içi programlanabilir Flash program belleği, 256 bayt EEPROM veri belleği, 512 bayt SRAM (statik RAM), 23 genel amaçlı I/O hattı, 32 genel amaçlı çalışma kaydı, üç esnek zamanlayıcı /karşılaştırma devreli sayaçlar, dahili ve harici kesme kaynakları, seri programlanabilir USART, bayt odaklı seri 2 telli arayüz, 6 kanallı ADC, 4 kanalı 10 bit çözünürlüğe ve 2 - 8 bit çözünürlüğe sahip, programlanabilir watchdog zamanlayıcısı yerleşik osilatör, SPI bağlantı noktası ve beş yazılımla başlatılan düşük tüketim modu ile. Bekleme modunda çekirdek durur, SRAM, zamanlayıcılar/sayaçlar, SPI bağlantı noktası ve kesme sistemi çalışmaya devam eder. Güç kapatma modunda, kayıtların içeriği korunur, ancak ana osilatör durdurulur ve mikroişlemcinin tüm dahili işlevleri, bir kesinti veya donanım sıfırlaması gerçekleşene kadar devre dışı bırakılır. Güç tasarrufu modunda, asenkron zamanlayıcılar çalışmaya devam ederek, mikroişlemci uyku modundayken zaman aralıklarının sayılmasına olanak tanır. ADC Gürültü Azaltma modu, analogdan dijitale dönüştürme sırasında gürültüyü en aza indiren asenkron zamanlayıcı ve ADC'nin kendisi hariç, bilgi işlem çekirdeğini ve tüm G/Ç modüllerini durdurur. Bekleme modunda, cihazın geri kalanı boştayken ana osilatör çalışır. Bu, tüketimi azaltırken cihazları hızlı bir şekilde başlatma yeteneğinizi hızlı bir şekilde korumanıza olanak tanır.

    Cihaz, Atmel'in yüksek yoğunluklu, kalıcı bellek teknolojisi kullanılarak üretilmiştir. Yerleşik ISP Flash, AVR çekirdeğinde çalışan bir önyükleyici programı veya geleneksel bir kalıcı bellek programlayıcısını kullanarak seri SPI arayüzü aracılığıyla sistemdeki program belleğini yeniden programlamanıza olanak tanır. Bootloader programı, mikrodenetleyici üzerinde bulunan herhangi bir arayüz aracılığıyla veri yükleme yeteneğine sahiptir. Önyükleme sektöründeki program, uygulama bellek alanı yüklendiğinde bile çalışmaya devam ederek gerçek yazma üzerine okuma davranışı sağlar. Atmel, 8 bitlik RISK çekirdeğini dahili olarak programlanabilir Flash bellekle birleştirerek, ATMega48 cihazlarını çok çeşitli kontrol cihazlarına daha fazla esneklik ve maliyet verimliliği sağlayan güçlü mikro denetleyiciler haline getirdi.

    ATMega48, C derleyicileri, makro birleştiriciler, yazılım hata ayıklayıcıları/simülatörleri, devre içi emülatörler ve değerlendirme kitleri gibi çeşitli yazılım ve entegre geliştirme araçları tarafından desteklenir.

    7.1. ATMega48 pin düzeni:

    Şekil 7.1. ATmega48 mikroişlemci sözleşmelerinin konumu

    Şekil 7.1'de. Mikroişlemci pinlerinin kullanım amacı verilmiştir ancak biz bunların sadece bir kısmını kullanacağız. Bu nedenle, B bağlantı noktasının tamamını çıkış için yapılandırıyoruz ve sayıların anlamını görüntülemek için ona bir gösterge bağlıyoruz. Bağlantı noktası D0-D3 de çıkış için yapılandırılmıştır ve göstergenin dört tanıdıklarını aydınlatmak için ona bir gösterge bağlarız. D4-D5 portunun pinleri çıkış olarak yapılandırılmıştır ve ön kontakların kapanmasını ve arka kontakların açılmasını ve ön ve arka kontakların kapanmasını göstermek için LED'ler ona bağlanmıştır. C0 portunun çıkışı ADC için kullanılır. AREF pinine harici bir referans voltaj kaynağı bağlanır ve gürültü bağışıklığını geliştirmek için AVCC pinine bir filtre kapasitörü bağlanır.

    Mikroişlemci seçimine ve işletim algoritmasının tasarımına karar verdikten sonra, bu algoritmayı kullanarak onun için bir program yazmanız gerekir.

    Programı yazmak için Algorithm Builder adlı bir yazılım kullanacağım. Ancak programı yazmadan önce bu yazılıma bir göz atalım.

    7.2. Algoritma Oluşturucu geliştirme ortamı

    Algorithm Builder yazılımı Rus programcı Gennady Gromov tarafından yazılmıştır. Bu ortam, hata ayıklama dahil olmak üzere algoritmanın girişinden başlayıp kristalin devre içi programlanmasıyla biten tam bir geliştirme döngüsü sağlar. Hem montajcı düzeyinde hem de isteğe bağlı uzunluklarda değişen miktarlarda çalışmanın mümkün olduğu makro düzeyde programlar geliştirme fırsatına sahip olacaksınız. Bu, programlama yeteneklerini yüksek seviyeli bir dile yaklaştırır. Algorithm Builder'ın en son sürümünü yazarın web sitesinden indirebilirsiniz. http://algrom.net/russian.html.

    Klasik çeviriciden farklı olarak program, ağaç benzeri dallanmaya sahip bir algoritma biçiminde girilir ve bir düzlem üzerinde iki boyutlu olarak görüntülenir. Koşullu ve koşulsuz geçişlerin ağı, uygun bir vektör biçiminde grafiksel olarak görüntülenir. Bu aynı zamanda programı, klasik montajcıda kaçınılmaz ağırlık olan sayısız etiket adından da kurtarır. Programın tüm mantıksal yapısı netleşiyor.

    Program oluşturmaya yönelik grafik teknolojileri programcılar için yeni fırsatlar yaratıyor. Ağaç yapısına sahip algoritma şeklinde programlara bir düzlemde girmenizi sağlar. Sonuç olarak programın tüm mantıksal yapısı tamamen netleşir. Bu tür teknolojilerin temel amacı, geliştirme arayüzünü insan algısının doğasına mümkün olduğunca yaklaştırmaktır. Böyle bir ortama hakim olmak, klasik montajcıya hakim olmaktan çok daha kolaydır. Daha kullanıcı dostu bir arayüz, yeni geliştirme fırsatlarının önünü açar. Kullanıcılara göre yazılım oluşturma süresi klasiklere göre 3 ila 5 kat kısalıyor

    Pirinç. 7.2.1. Algoritma Oluşturucu yazılım penceresi.

    Montajcı.

    Ortam, Windows 95/98/2000/NT/ME/XP altında çalışacak şekilde tasarlanmıştır.

    Editörün normal çalışması için “Courier” yazı tipi gereklidir.

    Şekil 7.2.1'de. "Algoritma Oluşturucu" programının ana panelinin nasıl göründüğünü gösterir.

    Algoritma tasarımı

    Herhangi bir yazılım ayrı, mantıksal olarak tamamlanmış parçalara bölünebilir. Kural olarak, bu parçaların son ifadesi, koşulsuz atlama veya bir alt programdan geri dönüş gibi ifadelerdir; sonrasında programın doğrusal yürütülmesinin kesinlikle durduğu ifadeler. Algorithm Builder ortamında yazılım geliştirme, bu tür blokların oluşturulması, bunların bir düzleme yerleştirilmesi ve aralarında koşullu ve koşulsuz geçişlerden vektör bağlantılarının kurulmasına dayanır.

    Algoritma öğeleri

    Algoritma Oluşturucu, bir algoritma oluşturmak için yedi öğe sağlar:

    ALAN – Alan;

    ETİKET – Etiket;

    VERTEX – Bloğun tepesi;

    KOŞUL – Koşullu geçiş;

    JMP Vector – Göreceli koşulsuz atlama;

    SETTER – Çevresel cihaz kurulumu;

    TEXT – Yerel metin düzenleyici dizesi.

    "ALAN" öğesi - alan

    Blok merkezli bir çizgiyi temsil eder. Nesnenin çoğu mikrodenetleyici operatörünü kaydetmesi amaçlanmıştır. Bir alan eklemek için “Elements\Field” menü öğesini seçin veya araç çubuğundaki düğmeye, “Alt+F” tuşuna veya “Enter” tuşuna (imleç yerel metin düzenleyicinin dışındaysa) tıklayın. .

    Aşağıda sunulan algoritma örneğinde “Alan” elemanları ovallerle daire içine alınmıştır.

    “LABEL” öğesi - etiket

    Bu, bir ifade bloğunun içinde yer alan dikey bir vuruştur ve konturun solunda veya sağında yer alan isteğe bağlı bir addır. Etiketin, algoritmada koşullu ve koşulsuz geçişlerin mümkün olduğu yerleri belirtmesi amaçlanmıştır. Bir bloğa etiket eklemek için “Elements\Label” menü öğesini seçin, “Alt+L” tuşlarına veya araç çubuğundaki butona basın. Gerekirse belirli bir program adresi atayabilirsiniz. Bunu yapmak için adın önüne (varsa) bu adresi tanımlayan bir sabit veya cebirsel ifade yazmanız gerekir.

    Etiket adının konumunu tersine çevirmek için “Sekme” tuşuna basın.

    Aşağıdaki örnekte "Etiket" öğesi oval bir çerçeveyle özetlenmiştir.

    Kural olarak, geçiş vektörlerinden biri (sonunda bir ok bulunan) etikete bitişik olmalıdır. Şöyle

    Kılıfın etiketine bir isim verilmesine gerek yoktur. Ancak Algoritma Oluşturucu, etiket adlarını kullanarak klasik geçiş adreslemesine izin verir. Bu durumda etikete bir isim vermeniz gerekir. Örneğin:

    Ayrıca algoritma ifadelerinde etiket adı, program belleğinde karşılık gelen konumun adresini içeren bir sabit olarak kullanılabilir.

    "VERTEX" öğesi - bloğun üstü

    Görünümü ve amacı itibarıyla etiketle tamamen aynıdır ancak ondan farklı olarak şunları belirtir:

    Bloğun çalışma düzlemindeki konumu her zaman başlangıcıdır. Yeni bir köşe eklemek için “Elements\Vertex” menü öğesini seçin, “Alt+V” tuşlarına basın, araç çubuğundaki butona tıklayın veya farenin sol tuşuna basarak istenilen yere tıklayın. çalışma alanını "Alt+Ctl+Shift" tuşlarıyla birlikte kullanabilirsiniz.

    Aşağıdaki örnekte "Vertex" öğeleri ovallerle özetlenmiştir:

    Tipik olarak bir köşe yalnızca bir altyordamın veya makronun başlangıcıysa adlandırılır.

    “DURUM” öğesi - koşullu geçiş

    Bu öğe yapısal olarak en karmaşık olanıdır ve koşullu geçişleri uygulamak için tasarlanmıştır. İçinde geçiş koşulunun ve olası bir vektörün, sonunda bir ok bulunan kesikli çizgi şeklinde yazıldığı, yanında isteğe bağlı bir vektör adının bulunduğu oval bir taslaktır.

    Bir vektörün sonu ya bir etikette ya da tepe noktasında ya da başka bir vektörün bir bölümünde bitmeli ya da adreslenen etiketin adını taşımalıdır.

    Vektörü istenilen konuma taşımak için “Alt” tuşunu basılı tutarken farenin sol tuşuna basın. Bir vektörü düzenlemek için yön tuşlarını “Alt” tuşuyla birlikte kullanın. Bir koşulu düzenlemekten bir vektör adını düzenlemeye geçmek için "Sekme" tuşuna basın. “Sekme” tuşuna daha sonra basıldığında vektör adının konumu tersine çevrilecektir. Yeni bir nesne girmek için “Elements\Condition” menü öğesini seçin veya “Alt+C” tuşlarına veya araç çubuğundaki düğmesine basın.

    Aşağıdaki örnekte "Koşul" öğeleri ovallerle gösterilmiştir:

    "JMP Vector" öğesi - koşulsuz atlama

    Bu eleman kısa koşulsuz atlamaları gerçekleştirmek için tasarlanmıştır (temel montajcıda bu "RJMP" operatörüdür). “Koşul” nesnesinin vektörüne benzer şekilde, bloğun ortasından çıkan ve sonunda bir ok bulunan bir sürekli çizgidir. Yeni bir koşulsuz atlama eklemek için “Elements\JMP Vector” menü öğesini seçin veya “Alt+J” tuşlarına veya araç çubuğundaki düğmesine basın.

    Aşağıdaki örnekte “JMP Vector” öğesi bir çizgiyle özetlenmiştir.

    "SETTER" öğesi - kişiselleştirici

    Bu nesne, içinde zamanlayıcı, ADC, kesme maskesi kaydı vb. gibi mikro denetleyicinin özelleştirilebilir bir çevresel bileşeninin adının yazılı olduğu gri bir dikdörtgendir. Özelleştirici, yüklemeyi sağlayan bir dizi mikro denetleyici işlemi oluşturmak üzere tasarlanmıştır. gerekli sabitleri seçilen özelliklere uygun olarak karşılık gelen G/Ç kontrol kayıtlarına aktarır.

    Bu elemanı kullanmadan önce mikrodenetleyicinin tipi belirlenmelidir (“Seçenekler\Proje seçenekleri” menü öğesi, “Çip” sekmesi)

    Algoritmaya özelleştirici eklemek için “Elements\Setter” menü öğesini seçin veya “Alt+S” tuşlarına veya araç çubuğundaki düğmesine basın. Önceden girilmiş bir özelleştiriciyi düzenlemek için, düzenleyiciyi çift tıklayarak veya “Shift+Enter” tuşlarını kullanarak etkinleştirin.

    “Ayarlayıcı” nesnesi bir makro operatörüdür. Derlemeden sonra, gerekli sabitlerin uygun kontrol kayıtlarına yüklenmesini sağlayacak bir dizi mikro denetleyici komutuna dönüştürülür. Bu işlemlerde r16 ara kaydının kullanılacağı unutulmamalıdır.

    ADC gibi bazı bileşenler için, özelleştirici çeşitli kontrol kayıtları üzerinde işlem yapabilir. Bu durumda, gerekirse her bir kayıt üzerindeki etki engellenebilir.

    Aşağıdaki örnekte "Ayarlayıcı" elemanları oval bir çizgiyle özetlenmiştir.

    “TEXT” öğesi yerel bir metin düzenleyici dizesidir

    Bu öğe, algoritma alanının sol kenarında başlayan bir metin dizesidir. Bu tür birkaç satırdan oluşan bir koleksiyon, noktalı çizgilerle çevrelenen yerel bir metin düzenleyiciyi oluşturur. İçinde çalışmanın kuralları diğer metin editörlerine benzer.

    Satırların bir dizi derleyici direktifini kaydetmenin yanı sıra yorumları da kaydetmesi amaçlanmıştır. Yeni bir yerel metin düzenleyici eklemek için “Elements\Text” menü öğesini seçin veya “Alt+T” tuşlarına veya araç çubuğundaki düğmesine basın.

    Yorumlar iki eğik çizgiyle başlamalıdır: “//”.

    Aşağıdaki örnekte “Metin” öğeleri oval bir çizgiyle özetlenmiştir.

    Algorithm Builder yazılımının temel unsurlarına aşina olduktan sonra programı oluşturmaya başlayacağız. Yeni bir proje oluşturmak için “Dosya\Yeni” menü öğesini seçin. Bu durumda, ilk sekme görünecek ve çalışma alanında “TEXT”, “VERTEX” öğesi ve ona boş bir operatörle eklenmiş bir “FIELD” öğesi görünecektir (Şekil 7.2.2.) “NOP”:

    Pirinç. 7.2.2. Yeni proje penceresi.

    Daha sonra mikroişlemci tipini ayarlıyoruz, bizim durumumuzda ATmega48. Mikroişlemci tipini ayarlamak için “Seçenekler\Proje seçenekleri...” menü öğesini seçin (Şekil 7.2.3):

    Pirinç. 7.2.3. Proje seçenekleri penceresi.

    Burada mikroişlemcimizi seçiyoruz ve uygula butonuna tıklıyoruz.

    Bundan sonra işletim algoritmasına göre bir program derliyoruz. Buradaki programın bir algoritma şeklinde sunulması nedeniyle, yukarıda derlenmiş ve açıklanan algoritmadan pek bir farkı olmayacaktır.

    Programın yapısını ele alalım. Öncelikle yığın adresi sayacını son SRAM hücresine ayarlamanız gerekir. Bunu yapmak çok kolay; bunun için Stack Point'i seçeceğimiz SETTER elemanını seçin.

    Ayarladığımız Kontrol Kaydı Ayarı penceresi ne görünür (Şekil 7.2.4)

    Pirinç. 7.2.4 Yığın ayarları penceresi.

    Kutuyu işaretleyin ve Tamam düğmesine basın. Çalışma alanında gri bir dikdörtgen SP belirir. Daha sonra Analog-Dijit Dönüştürücüyü (ADC) seçtiğimiz SETTER öğesini seçtiğimiz ADC değerlerini yapılandırıyoruz, ardından ADC'nin yapılandırıldığı Kontrol Kayıt Ayarı penceresi beliriyor (Şekil 7.2.4.). Burada ön ölçekleyiciyi CK/128 ayarladık. ADC değerini vereceğimiz mikroişlemci pinini seçiyoruz. Burada mikroişlemcinin çalışma modunu seçiyoruz.

    Pirinç. 7.2.4. ADC kurulum penceresi.

    AVCC'yi AREF pinine harici kapasitörle takın. Bu, ADC kurulumunu tamamlar.

    Şimdi zamanlayıcıyı/sayacı ayarladık. Yapılandırmak için tekrar SETTER öğesine gidin, burada Zamanlayıcı/Sayaç 0'ı seçiyoruz, ardından zamanlayıcı/sayaç ayarlarının bulunduğu bir pencere beliriyor (Şekil 7.2.5). Burada CK/1024 ön ölçekleyicinin değerini belirliyoruz ve çalışma modlarından birini seçiyoruz. Bu durumda CTC modunu seçiyoruz yani eşleşme varsa sıfırlıyoruz. Bu modda, sayma kaydı aynı zamanda clk T 0 saat sinyalinin her darbesiyle artan düzenli bir toplama sayacı olarak da işlev görür. Ancak sayaç kaydının mümkün olan maksimum değeri ve dolayısıyla sayacın çözünürlüğü, karşılaştırma kaydı OCRO tarafından belirlenir. Karşılaştırma kaydında yazılan değere ulaşıldıktan sonra “$00” değerinden itibaren saymaya devam edilir. Aynı sinyal saatinde

    Pirinç. 7.2.5. Zamanlayıcı/sayaç ayarlarının bulunduğu pencere.

    Sayma kaydının sıfırlandığı Clk T 0, TIFR kaydının kesme bayrağı TOV0 ayarlanır. OCRO kaydına 100 değerini yazıyoruz, ulaşıldığında bir kesinti meydana gelecek ve program Timer_0_Compare_Match_A etiketine geçecektir.

    .

    Şekil 7.2.6. Kesinti ayarları penceresi.

    Daha sonra kesmeyi yapılandırıyoruz ve taşma kesmesini seçiyoruz. Bunun için Timer/Counter Interrupt Mask (TIMSK) seçeneğini seçtiğimiz AYAR öğesini tekrar seçin. Görüntülenen pencerede Zamanlayıcı/Sayaç alanında Çıkış karşılaştırma A eşleşmesi kutusunu işaretleyin (Şek. 7.2.6). Bu, kesme yapılandırmasını tamamlar. Şimdi giriş-çıkış portlarını yapılandırıyoruz, çünkü çıkış için B portunun tamamını yapılandırmamız gerekiyor, 255 değerini yazıp bir olarak ayarlıyoruz. D portunu da yapılandırıyoruz ancak burada sadece ilk 6 pin D0 - D5'i kullanıyoruz, bunun için içine 127 değerini yazıyoruz.Daha sonra bu pin üzerinde mantıksal 0 değerini ayarlıyoruz.C portunu giriş olarak yapılandırıyoruz. içine 0 yazıyoruz.Port ayarları giriş-çıkış burada bitiyor. Şimdi t bayrağını 0'a ayarlıyoruz. Daha sonra göstergenin ilk işaretini ayarlayıp n'ye 0 yazıyoruz. Daha sonra bunun toplamdaki değerini sıfırlayıp 0 yazıyoruz. Ayrıca bölenin değerini de yazarak ayarlıyoruz. m cinsinden 0. Özel chast'ın değerini içine 0 yazarak sıfırlıyoruz. Bunu yapmak için flag i'yi 1'e ayarlayarak global kesmeyi etkinleştiriyoruz. Bu, belirli bir saat darbesi değerinden sonra programın kesilmesine ve programın kesilmesine olanak tanır. ADC'ye veya zamanlayıcı/sayaç alt programına gidin.

    Daha sonra LABEL elemanını kullanarak etiketi ayarlayıp ona start adını atadık. Daha sonra CONDITION elemanına (koşullu atlama) tıklayıp geçişin koşulunu içeriye girerek bu koşul t bayrağını 1'e ayarlayacaktır. Eğer t bayrağı 1'e eşit değilse program aşağıya iner ve sonra devam eder. JMP Vector elemanının (koşulsuz atlama) start etiketine geçiyoruz. Böylece programın t bayrağı 1 oluncaya kadar döndüğü bir döngü oluşturuyoruz. t bayrağı 1’e eşit olduğu anda program ok yönünde çıkıyor. Aşağıda, bir ikili sayıyı ondalık sayıya dönüştürmek için alt yordamın girişi bulunmaktadır; bu, Z_to_Digits yazıtına karşılık gelir. Aşağıda ele alacağımız ikili sayıyı ondalık sayıya dönüştürmek için alt yordamı yürüttükten sonra, program Z_to_Digits yazıtından sonra geri döner, burada t bayrağına tekrar 0 girilir.Sonra tekrar JMP Vector öğesini seçip şuraya gideriz: etiketi başlatın.

    Şimdi ADC kesme rutinine bakalım. ADC alt rutinine geçiş belirli bir süre sonra gerçekleştirilir. ADC ölçüm yapar yapmaz verileri adcl ve adch'a yazar. Bu iki kayıttan gelen verilerin daha fazla dönüşüm için başka bir kayda yazılması gerekir. Bu kayıtlar zl ve zh olacaktır. Nüfus sayımı için sırasıyla adcl → zl satırını kullanacağız, sonraki satır ise adch → zh olacaktır. Daha sonra CONDITION öğesini (koşullu geçiş) t=1 koşuluyla kullanırız. Bu koşul, sayı ondalık sayıya dönüştürülene kadar sayının değiştirilmesini yasaklamak için gereklidir. Eğer t=0 ise program x → z satırının yazıldığı yerin altına gider, bu z kaydında saklanan sayının ancak sayı görüntülendikten sonra değişeceği anlamına gelir. Daha sonra CONDITION öğesini (koşullu geçiş) kullanarak y koşulunu yaratırız.
    Daha sonra, y adc_max koşulunu göz önünde bulundurun ve koşul doğruysa program oku takip eder. Daha sonra bilgileri D.5 ve D.4 bağlantı noktalarına göndeririz. Bu 1 → D.5 olarak yazılır. Bu yazı, mantıksal olanın değerinin D.5 portunun pininde görüntülendiğini göstermektedir. Sonraki satır 0 → D.4'te mantıksal sıfır değerini D.4 portuna çıktılıyoruz. Daha sonra program ok yönünde ilerler. X adc_max durumunun kontrol edilmesi. Daha sonra birbirini takip eden üç satır 0 → m, 0 → t, 0 → y yazılır. Bunlarda, temettü (m), t bayrağı ve ölçülen ADC değerinin saklandığı y kaydının içeriğini sıfırlıyoruz. Daha sonra ADC'yi tekrar başlatıyoruz ve ardından ADC alt yordamından çıkıyoruz. Bu, giriş voltajı ölçüm alt programını tamamlar.

    Bölme alt yordamının girişi ADC alt yordamındadır. Program div32_8 ile bölme alt rutinine geçtikten sonra ölçülen tüm ADC değerlerinin ortalama değeri hesaplanır. Öncelikle özel içeriğin değerini sıfırlıyoruz. Bunu yapmak için 0 → chast yazın. Daha sonra C = 1 bayrağının olduğu durumu tanıtıyoruz. Bir birim ancak toplamın içeriği bölenden küçük olduğunda C bayrağına girilecektir. Ancak C bayrağı hala 0 içerdiğinden program aşağıya iner. Aşağıda bölümün değerini bir artırdığımız chast++ satırı bulunmaktadır. Daha sonra ADC değerlerinin toplamını içeren kayıttan bölen değerini çıkarıyoruz. Daha sonra JMP Vector elemanını (koşulsuz atlama) kullanarak C bayrağının kontrol edildiği koşuldan önce gelen bir döngü oluşturuyoruz ve toplamın değeri C bayrağındaki bölenden küçük olduğunda bir yazılacak ve program oku takip edecektir. Daha sonra bölümün değerini x yazmacına yeniden yazarız. Bu, chast → x çizgisine karşılık gelir. Aşağıda toplamın değerini 0 → toplamı sıfırladığımız bir satır bulunmaktadır. Burası bölme altprogramının bittiği ve programın ondan çıktığı, div32_8 satırından sonra ADC altprogramında son bulduğu yerdir.

    Dört gösterge noktasının aydınlatmasının belirlendiği bir zamanlayıcı kesme alt yordamını ele alalım. Zamanlayıcıda bir kesinti meydana geldikten ve program Timer_0_Compare_Match_A etiketine taşındıktan sonra, gösterge aşinalık değerinin koşullarını kontrol etmeye başlar. Bunu yapmak için CONDITION öğesini (koşullu atlama) kullanarak n=0 koşulunu kontrol ederiz ve eğer doğruysa program ok boyunca hareket eder. Bundan sonra 0 → portd.3 komutu ile D.3 portuna 0 değerini yazıyoruz. Daha sonra rakam_0'ın içerdiği sayıyı yazının tamamında görüntüleyeceğiz.Bunu yapmak için rakam_0→ portb yazın. Ve göstergenin ilk işaretini yakmak için D.0 portuna bir tane yazıyoruz; programda 1 → portd.0 gibi görünecektir. Daha sonra JMP Vector öğesini (koşulsuz atlama) kullanarak m0 etiketine atlıyoruz. m0 etiketi tüm içerik koşulları n'den sonra gelir. Daha sonra n'nin değerini artırıyoruz, böylece bir sonraki sayı göstergenin ikinci yerinde görüntüleniyor. Bundan sonra zamanlayıcı alt yordamından çıkıyoruz. Bir dahaki sefere bir zamanlayıcı kesintisi meydana geldiğinde, program ona geri dönecek, ancak göstergenin ikinci işaretiyle ilgili bilgilerin görüntülenmesi gerektiğinden biraz farklı ilerleyecektir. Bu, n kaydının ilk rakam çıktıktan sonra yazılan bir birimi içermesi gerektiği koşulu kontrol edildikten ve n'nin değeri birer birer artırıldıktan sonra gerçekleşecektir. n bir tane içerdiğinden program n=1 koşuluna göre ilerler. Bu koşulu geçtikten sonra ilk aşinalığı kapatmak gerekiyor ve bunun için D.0 portuna sıfır değerini yazıyoruz. Programda bu, 0 → portd.0 satırına karşılık gelir. Daha sonra rakam_1'in içerdiği sayıyı da tüm porta çıktılıyoruz.Bunu yapmak için rakam_1→ portb yazın. Ve ilk gösterge sembolünü yakmak için D.1 portuna bir tane yazın; programda 1 → portd.1 gibi görünecektir. Daha sonra m0 etiketine giderek n değerini yukarıda anlatıldığı gibi birer birer artırıyoruz. Göstergedeki üçüncü ve dördüncü hanelerin çıktısı ilk ikisinin çıkışına benzer ancak dördüncü hane çıktıktan sonra n kaydının içeriğinin değerini sıfırlarız. Bunu yapmak için 0→n yazın. Ve t bayrağının değerini 1 olarak ayarlıyoruz, bu da sayının gösteriminin sonunu gösteriyor. Bunu yapmak için 1→t yazın. Bu, göstergede bir sayının görüntülenmesinin tam döngüsünü tamamlar.

    Geriye yalnızca ana programdaki t=1 bayrağının durumu kontrol edildikten sonra geçiş yapılan gösterge alt yordamının dikkate alınması kalır. T bayrağı göstergede son rakamdan sonra bir tane içerdiğinden, göstergede görüntülenir. Bir koşulu yoklarken, program ok boyunca hareket eder ve ardından Z_to_Digits'e ulaşır; bu, gösterge alt yordamına geçmenin koşuludur. Program etiketi takip eder ve Z_to_Digits alt yordamında sona erer. Geçiş sonrasında yaptığımız ilk şey global kesmeyi devre dışı bırakmaktır, bunun için flag i'ye 0 değerini girin. Bu 0→i olarak yazılır. Aşağıda geçici çalışma kaydına sıfır giriyoruz. programda 0→temp gibi görünüyor. Şimdi, CONDITION öğesini kullanarak, Z kaydının 1000 ile karşılaştırıldığı bir koşul yaratıyoruz ve Z kaydının değeri 1000'den küçük olduğunda program oku izleyecektir. Bu arada Z kaydı artık koşulu yerine getirmez ve program düşer. Burada Z kaydedicisinden bin çıkarıp Z – 1000 olarak yazıyoruz. Daha sonra temp kaydedicinin değerini bir artırıyoruz. JMP Vector öğesini kullanarak, Z kaydını karşılaştırma koşulundan önce gelen bir döngü oluştururuz.Koşul karşılandığı anda ve Z kaydı binden küçük olduğunda program bir ok şeklinde ayrılır. Şimdi temp yazmacının içeriğini r0 yazmacına yeniden yazıyoruz ve o artık binlerce sayının değerini saklıyor. Giriş temp→r0 gibi görünüyor. Bundan sonra temp yazmacının değerini içine 0 yazarak sıfırlıyoruz.Şimdi program binleri hesaplarken olduğu gibi tekrarlanıyor ancak şimdi yüzlerin değerini hesaplamak gerekiyor. Yine Z koşulunu belirledik
    Bir program yazdıktan sonra Algorithm Builder yazılım ortamının sağladığı simülatörde test edebilirsiniz. Algoritmayı simülatörde çalıştırmak için “F9” tuşuna veya araç çubuğundaki düğmeye basın.

    Bu durumda derleme başlangıçta gerçekleşecek ve herhangi bir hata yoksa simülatör başlayacaktır. Gerekli mikrodenetleyici bileşen pencerelerinin açılması “Görünüm...” menü öğesi aracılığıyla yapılır. Tanıtılan algoritmadaki süreçleri gözlemlemek için “İşlemci”, “PortD”, “Çalışma kayıtları”, “ADC”, “Zamanlayıcı/Sayaç 0” ve “İşlem süresi #0” pencerelerini açmak yeterlidir (Şekil 7.2). .7).

    Şekil.7.2.7.Algorithm Builder simülatörünün viyo'su.

    Operatörün yanındaki işaret program sayacının mevcut konumunu gösterir. Etiket, bir sonraki adımda yürütülmesi gereken ifadenin önüne yerleştirilir. Lansmandan hemen sonra, programın ilk bildiriminde, $0000 adresinde bulunur. Simülatör başlatıldığında, çalışma kayıtlarının ve SRAM'in içerikleri her zaman rastgele değerlerle doldurulur, çünkü gerçek bir mikro denetleyicide içerikleri güç uygulandıktan sonra tahmin edilemez. Algoritmanın alt rutinlere girişle adım adım yürütülmesi, "F7" düğmesi veya araç çubuğundaki bir düğme kullanılarak gerçekleştirilir. Alt programlara girmeden adım adım yürütme - “F8” tuşunu veya düğmesini kullanarak

    Şekil 7.2.8 Kristal programlama penceresi.

    Bu yazılım mikroişlemciyi programlama özelliğine sahiptir. Algoritma Oluşturucu, mikro devrelerin sıralı programlanmasını sağlayan yerleşik bir devre programlayıcı içerir. “Program\Run with Chip” menü noktası seçildiğinde veya “Ctrl+Shift+F9” tuşlarına basıldığında veya araç çubuğundaki butona tıklandığında algoritmanın derlenmesi başlatılır ve herhangi bir hata yoksa programlama penceresi açılır (Şekil 7.2). .8).

    Mikroişlemci COM portu üzerinden programlanır.

    AVR mimarisine sahip mikrodenetleyicilere yönelik uygulama geliştirmeye yönelik grafik programlama ortamı.

    Algorithm Builder, program kodunu oluşturma ve kontrol etme döngüsünün tamamını gerçekleştirmenize olanak tanıyan güçlü bir araçtır. Ortam şunları içerir: bir grafik düzenleyici, algoritmanın hatalarını ayıklamak için bir mikroçip simülatörü, bir derleyici ve kodu çipe yüklemek için bir devre içi programcı. Program, Assembler'ın yerli bir analogudur ve hem deneyimli geliştiriciler hem de cihaz donanım yazılımında ustalaşmaya yeni başlayanlar için uygundur.

    Algoritmaların oluşturulması, işaret dikkate alınarak çok baytlı değerlerle çalışmaya dayalı olarak montaj düzeyinde veya makro düzeyde gerçekleşebilir. Ayrıca makro operatörleri en yaygın komut kümelerini içerir.

    Geliştirilen tüm programlar dallanan ağaç blok diyagramları şeklinde sunulur, geçiş ağları vektör biçiminde grafiksel olarak görüntülenir. Koşula göre program kodunda bir yere gitmek gerekiyorsa oraya bir vektör çizmek yeterlidir. Bu sayede yazılım birden fazla etiket adından kurtulur. Şubenin çok uzun olması durumunda, şubeyi her zaman etiket adına yönlendirme seçeneği mevcuttur. Geliştiricilere göre böyle bir mantıksal yapının netliği, kod yazma süresini önemli ölçüde azaltır ve hata sayısını azaltır.

    Ana pencere, herhangi bir grafik düzenleyicide olduğu gibi gerekli nesneleri yerleştirmenize ve değiştirmenize, eklemenize, taşımanıza vb. olanak tanır. Ekranın ayrı bir bölümünde, tüm sabitlerin ve değişkenlerin listesini içeren bir pencere tablo şeklinde oluşturularak algoritmayı ek girişlerden kurtarır. Çevresel aygıtların (UART, SPI, ADC, zamanlayıcılar) parametrelerini yapılandırmak için açılır pencere arayüzüne sahip özel bir öğe sağlanır. Derleyici bağımsız olarak seçilen cihazın çalışma parametrelerini sağlayan bir dizi talimat oluşturur. Ayrıca, Windows ANSI kodlarının Rusça alfasayısal LCD kodlarına otomatik olarak dönüştürülmesi desteklenmektedir. Program çok çeşitli mikrodenetleyici ailelerini destekler: ATtiny, ATmega, AT90.

    Simülatör, çeşitli kayıtlarda, hafıza hücrelerinde ve zamanlayıcılarda meydana gelen tüm değişiklikleri gösterir. Simülasyon adım adım (fonksiyonlara girilerek veya girilmeden), bir kesme noktasına veya seçilen bir alana gerçekleştirilebilir.
    Devre içi programlayıcıyı çalıştırmak için, mikro denetleyicinin bilgisayarın COM bağlantı noktasına bağlandığı basit bir adaptörü bağımsız olarak monte etmeniz gerekir. Ayrıca bir USB konektörü aracılığıyla bağlanmak da mümkündür. Programcı, çekirdek yeniden programlarının sayısını sayar ve sayacı çipin kendisinde saklar.

    Başka bir adaptör kullanarak çekirdekteki hata ayıklama modunu izleyin (tüm diyagramlar yazılım belgelerinde mevcuttur), herhangi bir kesme noktasında gerçek bir kristalin iç durumunu izlemenize olanak tanır. Kontrolör ile bilgisayar arasındaki iletişim için kullanıcının takdirine bağlı olarak yalnızca bir çıkış tahsis edilir. Çipte hata ayıklama, SRAM belleği olan her türlü çip için geçerlidir.

    Bariz avantajlarına rağmen Algorithm Builder amatör radyo camiasında çok az tanınıyor. Bunun nedeni kısmen, 2010 yılına kadar görsel programlama ortamının ücretli olması, ücretsiz demo sürümünün kodu iki kilobayt ile sınırlandırmasıdır. Bugün yazılım tamamen ücretsiz olarak dağıtılmaktadır. Yüklü programın bulunduğu klasör diğer ortamlara kopyalanabilir ve taşınabilir olarak çalışabilir. Yazılım bir kullanım kılavuzuyla birlikte gelir. Makale bir dizi basit çalışmayı tartışıyor ve USB ve COM bağlantı noktaları için programlayıcıların şemalarını sunuyor.

    Algoritma Oluşturucu programının yazarları, Nizhny Novgorod'dan halk ustası Gennady Leonidovich Gromov'un liderliğindeki bir grup yerli programcıdır. Program bugüne kadar gelişmeye devam ediyor, yeni işlevler ekleniyor ve yazarın web sitesinde küçük bir kütüphane seçkisi ortaya çıktı.

    Algorithm Builder program arayüzü ve kullanım kılavuzu Rusça ve İngilizce olarak sunulmaktadır.

    Yazılım Microsoft Windows 95, 98, 2000, NT, ME, XP, Vista ve 7 işletim sistemleriyle uyumludur.

    Program dağıtımı:özgür

    Makalenin materyalleri Moskova Devlet Endüstri Üniversitesi'nin (GOU MGIU) Otomasyon, Bilişim ve Kontrol Sistemleri Bölümü'nde (AIiSU) hazırlandı.
    (2011'den bu yana MGIU, Federal Devlet Bütçe Yüksek Mesleki Eğitim Kurumu "MGIU" olarak anılmaktadır).
    Yazarlar: Kryukov A.I., Shubnikova I.S., Troikov S.M.

    AI&CS Bölümü, 35 yılı aşkın bir süredir otomotiv ve havacılık teknolojisi, makine mühendisliği ve işletmeye yönelik elektronik, mikroişlemci, bilgisayar, robotik, mekatronik ve bilgi kontrol sistemlerinin geliştirilmesi ve işletilmesi alanında profesyonellere eğitim vermektedir. Departman çalışanlarının araştırma çalışmaları, yapay zeka teknolojilerine dayalı karar destek sistemlerinin geliştirilmesi, karmaşık sistemlerin yönetilmesine yönelik süreçlerin analizi ve sentezi, ekipman arızalarının izlenmesi ve akıllı tespiti ile ilgili alanlarda yürütülmektedir. Bölümün önemli bir bilimsel faaliyet alanı, araçların otomatik ve elektronik sistemleri alanında araştırmalar yapmaktır.
    Atmel MK'ler için kontrol programları yazmak için çok sayıda çeşitli uygulama vardır - bunlar düşük seviyeli dillerdeki geliştirme ve hata ayıklama ortamlarıdır (örneğin, AVR Assembler dilinde program geliştirmek için ücretsiz AVR Studio paketi), geliştirme ortamları üst düzey dillerde (C benzeri bir dilde program geliştirmek için WinAVR ortamı gibi) ve hatta "Algorithm Builder" adı verilen grafiksel yazılım geliştirme ve hata ayıklama ortamı bile vardır.

    Algorithm Builder diğer tüm ortamlardan ayrıdır ve biz de buna odaklanacağız. Bu uygulamanın öne çıkan özelliği, ücretsiz olması değil, içindeki kodun yazılmaması, algoritmaların akış şemaları şeklinde çizilmesidir, bu da uygulamanın geliştirme süresini önemli ölçüde azaltır. Bu ortam, hata ayıklama dahil olmak üzere algoritmanın girişinden başlayıp kristalin devre içi programlanmasıyla biten tam bir geliştirme döngüsü sağlar. Sonuç olarak programın tüm mantıksal yapısı tamamen netleşir.

    Algorithm Builder ortamında yazılım geliştirme, bu tür görev bloklarının oluşturulması, bunların bir düzleme yerleştirilmesi ve aralarında koşullu ve koşulsuz geçişlerden bağlantılar kurulmasına dayanır.

    Algorithm Builder ortamı ile çalışma kılavuzunun tamamını yeniden yazmamak için, özellikle uygulama yerli olarak üretildiği ve içerdiği için kendiniz okumanızı tavsiye ederim. örneklere dayalı olarak Rusça ayrıntılı açıklama onunla çalışmaya dair. Kişisel deneyime dayanarak, bu kılavuzun (bu arada, hacimli olmaktan uzak - yalnızca 20-30 dakikalık çalışma) bu yazılım ürününü tam olarak anlamak ve anlamak için oldukça yeterli olduğunu güvenle söyleyebiliriz.

    Algorithm Builder'ı http://algrom.net/russian.html adresinden indirebilirsiniz. Ve bir kontrol programı geliştirme süreci şu adreste görülebilir: bağlantı. Böylece, artık bitmiş programı, açıklanan geliştirme ortamında ayrıntılı yorumlarla birlikte sunacağız.

    Öncelikle Seçenekler/Proje Seçenekleri menüsünde kristal tipini (bizim durumumuzda Atmega8) seçmeniz ve burada saat frekansını 8.000.000 Hz (8 MHz) olarak ayarlamanız gerekir. Daha sonra, başlangıçta kristali sıfırlıyoruz (Elements/Interrupts/Reset). Daha sonra Elements/Customer…/Stack Pointer (SP) seçeneğini seçerek yığını başlatıyoruz, “Tamam”a tıklayarak kabul etmeniz gereken bir pencere açılacaktır (Şekil 2).

    Pirinç. 2. Yığın Özelleştirici

    Bir sonraki adım, USART alıcı-vericisini başlatmaktır (kısaltmada “S” harfinin görünmesine şaşırmayın - bu, UART'ın daha modern bir versiyonudur ve ondan veri iletme/alma yeteneği bakımından farklılık gösterir. yalnızca eşzamansız modda, aynı zamanda eşzamanlı modda da) Öğeler / Özelleştirici menüsünü seçerek... /USART. Açılan pencerede (Şekil 3), Alıcı bölümünde Etkinleştir (veri alıcısını aç) ve Tam kesme etkinleştirme (veri alındığında kesintileri etkinleştir) yanındaki kutuları işaretleyin, ardından Çift Hız'ın yanındaki kutuyu işaretleyin. karakter boyutunu Karakter Boyutu: 8 – bit olarak ayarlayın ve veri aktarım hızını Baud Rate = 9615 bps olarak ayarlayın (menüde veri aktarım hızını seçerek tıkladığınızda 9600 bps seçmelisiniz, 9615 bps elde edilir) saat frekansının 8 MHz'e yeniden hesaplanması).


    Pirinç. 3. USART Yapılandırıcı

    Programın ana gövdesi, bir dizi kontrol kodu kontrolünden oluşacaktır (Liste No. 1). Buradaki fikir, bilgisayarın UART aracılığıyla bir işlem kodu göndermesi ve MK'nin bunu alıp fan bıçağı sürücüsü ve servo sürücüsü üzerinde uygun kontrol eylemlerini oluşturmasıdır. Toplamda bu tür üç kod olacaktır (kesinlikle herhangi bir kod bulabilirsiniz):

  • 31 $ - fan bıçağı sürücüsünü açın;
  • 20 $ - fan bıçağı sürücüsünü kapatın;
  • $A1 - servo sürücüye erişim.

  • İlk iki kodda her şey açıksa, üçüncüde o kadar basit değildir - $A1 yalnızca servo sürücüye erişim komutudur, o zaman dönüş açısı kodunu almanız gerekir. Deneysel olarak 05AF ile 154F$ arasında değiştiği bulundu. Üstelik PC'den göndereceğiz ve buna göre düşük bayttan başlayarak MK'den alacağız. Komutun yürütülmesi süresince USART aracılığıyla veri alımına ilişkin kesintileri de devre dışı bırakacağız - aksi takdirde bu, bir veri "karmaşasına" dönüşebilir.

    Liste #1

    Liste No. 2, gecikme alt rutininin (Gecikme) kodunu gösterir. Zaman gecikmesi, komutun doğru ve eksiksiz işlenmesi için gereklidir ve programın N döngü boyunca döngülenmesiyle oluşturulur (deneme yanılma yoluyla, bizim durumumuzda en başarılı döngü sayısının onaltılık sayı sisteminde 84FF olduğunu hesapladık).

    2 Numaralı İlan

    UART aracılığıyla veri almanın sona ermesi, Elements/Interrupts/USART_Receive_Complete menüsü aracılığıyla kodda ayarlanabilen USART_Receive_Complete kesintisine neden olur (eğer programın ana gövdesinde şu anda devre dışı bırakılmamışsa). İşleyicinin gövdesinde, içinde kullanılan tüm kayıtları yığına kaydetmeniz ve işleyicinin sonunda bunları yığından geri yüklemeniz gerekir. Ayrıca bu işleyicide, verileri hatalara karşı kontrol etmek için durum baytını (UCSRA kaydı) ve tabii ki UDR kaydındaki verilerin kendisini (Liste No. 3) alabilirsiniz.

    Liste #3

    Servo sürücünün dönüş açısı, periyodu sabit tutarken kendisine sağlanan darbenin genişliğine bağlıdır (periyod 20 ms'dir ve kontrol darbesinin süresi 0,8 ila 2,2 ms arasındadır, ancak farklı servolar için bu değerler ​​biraz farklılık gösterebilir) bunun için bir alt programa ihtiyacımız var: servo sürücü dönüş açısı (Liste No. 4). Kontrol darbe süresi ve duraklatma süresi, gecikme alt rutinine benzer şekilde ayarlanacaktır. Yukarıda yazdığımız gibi, deneysel olarak 8 MHz'lik bir kristal frekansı için darbe süresinin $05AF ile $154F aralığındaki kodla belirtildiğini belirledik. Böylece, tüm periyodun süresini bilerek - $9E3C (yine deneysel olarak belirlendi), periyodun süresi ile darbenin süresi arasındaki fark olarak duraklama süresini hesaplayabiliriz. Geriye kalan tek şey, gecikme altyordamına benzer şekilde darbe süresini ve duraklama süresini sırayla hesaplamak ve ardından böyle bir sinyali birkaç kez tekrarlamak (bizim durumumuzda, $ sinyalini 10 kez, yani ondalık gösterim sisteminde 16 kez tekrarladık) )

    Liste #4

    Kontrol programının kodunu yazdıktan (algoritmayı çizdikten) sonra onu derleyip mikrodenetleyiciye flaşlamak gerekir. Program, Ctrl+F9 tuşlarına basılarak veya Program/Derleme menüsü aracılığıyla derlenebilir. Derleme başarılı olursa, MK'nin işgal edilen hafıza miktarının gösterileceği bir bilgi penceresi görünecektir.

    Daha sonra, derleme sonucunu (program kaynağıyla aynı klasörde bulunan, başında “EE_” öneki olmayan *.hex uzantılı bir dosya) denetleyiciye flaşlamanız gerekir. Bu, aynı zamanda ücretsiz AVR Studio paketinde bulunan ücretsiz AvrProg yardımcı programı kullanılarak yapılabilir. Mymcu.ru sitesinden veya atmel.com'dan (İngilizce site) indirebilirsiniz.

    MK donanım yazılımını flaş etme yardımcı programına ek olarak, bir programlayıcıya da ihtiyacınız olacak. Ya satın alabilirsiniz (basit versiyonlar nispeten ucuzdur) ya da kendiniz lehimleyebilirsiniz.

    Pirinç. 4. LPT programlayıcı devresi
    Bildiğim en basit programcı bir LPT programcısıdır, ancak bu nedenle bilgisayarda bir LPT bağlantı noktası gerektirecektir ve bu şu anda nadir hale gelmektedir. Programcının fikri basittir ve LPT bağlantı noktasını ISP arayüzüne ve denetleyicinin Sıfırlama hattına doğrudan bağlamaktan oluşur (Şekil 4).

    Kendi kendine montaj için bir programcı için başka bir seçenek de bir USB programlayıcıdır (şema Şekil 5'te gösterilmektedir), elbette daha karmaşıktır, ancak gelecekte çok daha uygun hale gelebilir. Ancak, bir "ama" var - onu birleştirmek için yalnızca bir kez de olsa yine de bir LPT programcısına ihtiyacınız olacak. FUSE bitlerinin yanıp sönmesi için programlayıcının kontrol denetleyicisinin yanıp sönmesi gerekli olacaktır. SPIEN, CKOPT ve SUT0 bitlerinin programlanması (“0”a ayarlanması) gereklidir. Genellikle MK'ler fabrikadan gelir, ör. yenilerinde SPIEN biti zaten programlanmıştır. BODEN bitinin programlanması (“0”a ayarlanması) da arzu edilir (fakat gerekli değildir). Kalan bitlerin programlanmamış olması gerekir (“1”e ayarlanmalıdır). Bu, Codevision AVR V2.03.4 uygulamasını gerektirebilir. USB programlayıcının montajına ilişkin ayrıntılı bir açıklama burada okunabilir.