Mikrodenetleyiciler hobinizse veri sayfalarını nasıl ve neden okumalısınız?

Mikrodenetleyiciler hobinizse veri sayfalarını nasıl ve neden okumalısınız?

Mikroelektronik, büyülü Arduino sayesinde son yıllarda moda bir hobi haline geldi. Ancak sorun şu: Yeterli ilgiyle DigitalWrite()'ı hızla aşabilirsiniz, ancak bundan sonra ne yapacağınız tam olarak belli değil. Arduino geliştiricileri ekosistemlerine giriş engelini azaltmak için çok çaba harcadılar, ancak dışarıda hala amatörlerin erişemeyeceği sert devrelerden oluşan karanlık bir orman var.

Örneğin veri sayfaları. Sanki her şeye sahipler, al ve kullan. Ancak yazarlarının mikrodenetleyicileri yaygınlaştırma görevini açıkça üstlenmiyorlar; Bazen görünüyorBasit şeyleri anlatırken, konuya yabancı olanların kafasını olabildiğince karıştırmak için anlaşılmaz terimleri ve kısaltmaları kasıtlı olarak kötüye kullandıklarını. Ama her şey o kadar da kötü değil, istenirse tabut açılıyor.

Bu yazımda bir beşeri bilimler uzmanının hobi amaçlı veri sayfalarıyla iletişim kurma deneyimini paylaşacağım. Metin, Arduino pantolonundan büyümüş amatörlere yöneliktir; mikrodenetleyicilerin çalışma prensiplerinin biraz anlaşıldığını varsayar.

Geleneksel olanla başlayacağım

Arduino'da bir LED'in yanıp sönmesi

Ve hemen kod:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Bu nedir? – Tecrübeli bir okuyucu soracaktır. – PINB giriş kaydına neden bir şeyler yazıyorsunuz? Sadece okumak içindir!” Gerçekten mi, Arduino belgeleriİnternet'teki çoğu eğitici makale gibi, bu kaydın salt okunur olduğunu belirtir. Tekrar okuyana kadar ben de öyle sanıyordum veri Sayfası Atmega328p'ye bu makaleyi hazırlıyorum. Ve orada:

Mikrodenetleyiciler hobinizse veri sayfalarını nasıl ve neden okumalısınız?

Bu nispeten yeni bir işlevsellik, Atmega8'de değildi, herkes bunu bilmiyor veya geriye dönük uyumluluk nedeniyle adı geçmiyor. Ancak çipin az bilinenler de dahil olmak üzere tüm yeteneklerini kullanmak için veri sayfalarının okumaya değer olduğu fikrini göstermek için oldukça uygundur. Ve tek sebep bu değil.

Veri sayfalarını başka neden okumalısınız?

Genellikle LED'ler ve AnalogWrites ile yeterince oynamış olan Arduino mühendisleri, halihazırda yazılı kütüphanelerin bulunduğu karta her türlü modülü ve yongayı bağlamaya başlar. Er ya da geç, olması gerektiği gibi çalışmayan bir kütüphane ortaya çıkar. Sonra amatör düzeltmek için onu karıştırmaya başlar ve sonra...

Ve orada tamamen anlaşılmaz bir şey oluyor, bu yüzden Google'a gitmeniz, çok sayıda öğretici okumanız, birinin uygun kodunun bazı kısımlarını çıkarmanız ve sonunda hedefinize ulaşmanız gerekiyor. Bu, güçlü bir başarı hissi verir, ancak gerçekte süreç, bir motosiklette tersine mühendislik yaparak tekerleği yeniden icat etmeye benzer. Üstelik bu bisikletin nasıl çalıştığına dair anlayış da artmıyor. Biliyorum, çünkü bunu uzun süre kendim yaptım.

Bu heyecan verici aktivite yerine birkaç günümü Atmega328 belgelerini inceleyerek geçirseydim, çok büyük miktarda zaman kazanabilirdim. Sonuçta bu oldukça basit bir mikrodenetleyici.

Bu nedenle mikrodenetleyicinin genel olarak nasıl çalıştığını ve neler yapabileceğini hayal etmek için en azından veri sayfalarını okumanız gerekir. Ve ilerisi:

  • diğer insanların kütüphanelerini kontrol etmek ve optimize etmek. Bunlar genellikle tekerleği yeniden icat eden aynı amatörler tarafından yazılır; veya tam tersine, yazarlar bunları kasıtlı olarak aşırı derecede kusursuz hale getiriyorlar. Üç kat daha büyük ve daha yavaş olmasına izin verin, ama kesinlikle işe yarayacaktır;

  • kimsenin kütüphane yazmadığı bir projede çipleri kullanabilmek;

  • bir MK hattından diğerine geçişinizi kolaylaştırmak için;

  • Arduino'ya uymayan eski kodunuzu nihayet optimize etmek için;

  • herhangi bir çipin, eğer varsa kütüphanelerinin yapısını inceleme zahmetine girmeden, doğrudan kayıtları aracılığıyla nasıl kontrol edileceğini öğrenmek.

HAL ve LL varken neden doğrudan kayıtlara yazalım?

sözlük
HAL, Yüksek Soyutlama Katmanı – yüksek düzeyde soyutlamayla bir mikro denetleyiciyi kontrol etmek için bir kütüphane. SPI1 arayüzünü kullanmanız gerekiyorsa, hangi kayıtların neden sorumlu olduğunu düşünmeden SPI1'i basitçe yapılandırıp etkinleştirirsiniz.
LL, Düşük Seviye API – makroları veya yazmaç adresli yapıları içeren ve bunlara adlarıyla erişmenizi sağlayan bir kitaplık. Atmega'daki DDRx, PORTx, PINx LL'dir.

Habré hakkındaki yorumlarda "HAL, LL veya kayıtlar" konusundaki anlaşmazlıklar düzenli olarak ortaya çıkıyor. Astral bilgiye erişim iddiasında bulunmadan, sadece amatör deneyimimi ve düşüncelerimi paylaşacağım.

Atmega'yı az çok anladıktan ve STM32'nin harikalığı hakkında makaleler okuduktan sonra yarım düzine farklı tahta satın aldım - Discovery ve Blue Pills ve hatta ev yapımı ürünlerim için sadece cips. İki yıl boyunca hepsi bir kutunun içinde toz topladılar. Bazen kendi kendime şöyle diyordum: "işte bu, bu hafta sonundan itibaren STM konusunda uzmanlaşmaya başlıyorum" CubeMX'i başlattım, SPI için bir kurulum oluşturdum, ortaya çıkan, STM telif haklarıyla cömertçe tatlandırılmış metin duvarına baktım ve bunun da bir şekilde olduğuna karar verdim. fazla.

Mikrodenetleyiciler hobinizse veri sayfalarını nasıl ve neden okumalısınız?

Elbette CubeMX'in burada ne yazdığını anlayabilirsiniz. Ancak aynı zamanda tüm ifadeleri hatırlayıp ardından elle yazmanın gerçekçi olmadığı da açıktır. Ve bu hata ayıklamak için, eğer yanlışlıkla Küp'teki bir kutuyu işaretlemeyi unutursam, bu tamamen sorun değil.

İki yıl geçti hala dudaklarımı yalıyorum ST MCU Bulucu her türlü lezzetli için, ama anlayışımın ötesinde, cips ve tesadüfen karşılaştım harika makaleSTM8 hakkında da olsa. VE aniden Bunca zamandır açık bir kapıyı çaldığımı fark ettim: STM'nin kayıtları diğer MK'lerinkilerle aynı şekilde düzenlenmiş ve Küp'ün onlarla çalışmasına gerek yok. Acaba mümkün müydü?..

HAL ve özellikle STM32CubeMX, STM32 çipleriyle yakın çalışan profesyonel mühendislere yönelik bir araçtır. Ana özellik, yüksek düzeyde soyutlama, STM32 hattı içinde kalarak bir MCU'dan diğerine ve hatta bir çekirdekten diğerine hızla geçiş yapabilme yeteneğidir. Hobi meraklıları bu tür sorunlarla nadiren karşılaşırlar - mikrodenetleyici seçimimiz genellikle AliExpress çeşitleriyle sınırlıdır ve sıklıkla tamamen farklı yongalar arasında geçiş yaparız - Atmega'dan STM'ye, STM'den ESP'ye veya Çinli dostlarımız ne olursa olsun yeni bir şeye geçeriz. bize at. HAL'in burada bir faydası olmayacak ve üzerinde çalışmak çok zamanımızı alacak.

LL kalıyor - ancak ondan kayıtlara yarım adım var. Kişisel olarak makrolarımı yazmaç adresleriyle yazmayı faydalı buluyorum: Veri sayfasını daha dikkatli inceliyorum, gelecekte neye ihtiyaç duyacağımı ve neye kesinlikle ihtiyacım olmayacağını düşünüyorum, programlarımı daha iyi yapılandırıyorum ve genel olarak üstesinden gelmek ezberlemeye yardımcı oluyor .

Ek olarak, popüler STM32F103'te bir nüans var - bunun için iki uyumsuz LL sürümü var; biri STM'den, diğeri Leaf Labs'tan STM32duino projesinde kullanılan resmi. Açık kaynaklı bir kütüphane yazarsanız (ve tam olarak böyle bir görev), ya iki versiyon yapmalısınız ya da kayıtlara doğrudan erişmelisiniz.

Son olarak, bence LL'yi ortadan kaldırmak, özellikle projenin en başından itibaren bunu planlıyorsanız, geçişi basitleştirir. Abartılı örnek: Atmel Studio'da LL olmadan Arduino flash yazalım:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Bu kodun STM8'li Çin kartındaki (ST Visual Desktop'tan) LED'i yanıp sönmesi için içindeki iki adresi değiştirmek yeterlidir:

#define DDR_B 0x5007
#define OUT_B 0x5005

Evet, LED'i belirli bir karta bağlama özelliğini kullanıyorum, çok yavaş yanıp sönecek ama olacak!

Ne tür veri sayfaları var?

Hem Rusça hem de İngilizce makalelerde ve forumlarda, "veri sayfaları" çipler için herhangi bir teknik belge anlamına gelir ve ben de bu metinde aynısını yapıyorum. Resmi olarak, bunlar bu tür belgelerin yalnızca bir türüdür:

Veri Sayfası – Performans özellikleri, taktik ve teknik özellikler. Herhangi bir elektronik bileşen için zorunludur. Arka plan bilgisini el altında bulundurmak faydalıdır ancak içinde dikkatle okunacak pek fazla şey yoktur. Ancak daha basit çipler, gereksiz belgeler üretmemek için genellikle bir veri sayfasıyla sınırlıdır; bu durumda Başvuru Kılavuzu buraya dahil edilmiştir.

Başvuru Kılavuzu – talimatların kendisi, 1000'den fazla sayfadan oluşan sağlıklı bir kitap. Çipin içine sıkıştırılan her şeyin işi ayrıntılı olarak anlatılıyor. Mikrodenetleyiciye hakim olmak için ana belge. Farklı veri Sayfası, talimatlar geniş bir MK yelpazesi için yazılmıştır; kendi modelinizde bulunmayan çevre birimleri hakkında birçok bilgi içerirler.

Programlama Kılavuzu veya Komut Seti Kılavuzu – benzersiz mikrodenetleyici komutları için talimatlar. Assembly dilinde programlayanlar için tasarlandı. Derleyici yazarları kodu optimize etmek için bunu aktif olarak kullanırlar, dolayısıyla genel durumda buna ihtiyacımız olmayacak. Ancak buraya bakmak, genel bir anlayış için, bir kesmeden çıkmak gibi bazı özel komutlar için ve ayrıca hata ayıklayıcıyı aktif olarak kullanmak için faydalıdır.

Uygulama notu – belirli sorunları çözmek için genellikle kod örnekleriyle faydalı ipuçları.

Yazım Hatası Sayfası – varsa geçici çözüm seçenekleriyle birlikte standart dışı çip davranışı durumlarının açıklaması.

Veri sayfalarında neler var

doğrudan Veri Sayfası aşağıdaki bölümlere ihtiyacımız olabilir:

Cihaz Özeti – Veri sayfasının ilk sayfası cihazı kısaca açıklamaktadır. Bir yerde bir çip bulduğunuz (bir mağazada gördüğünüz, lehimlediğiniz, bir sözle karşılaştığınız) ve ne olduğunu anlamak istediğiniz durumlarda çok faydalıdır.

Genel açıklama – hattaki çiplerin yeteneklerinin daha ayrıntılı bir açıklaması.

pinouts – tüm olası çip paketleri için pin şeması diyagramları (hangi pin hangi bacaktadır).

Pin Açıklaması – her pinin amacının ve yeteneklerinin açıklaması.

bellek Haritası – bellekte bir adres haritasına ihtiyaç duymamız pek olası değildir, ancak bazen bu aynı zamanda bir kayıt blok adresleri tablosu da içerir.

Kayıt Haritası – kayıt bloklarının adres tablosu kural olarak veri sayfasında bulunur ve Başvuru Kılavuzu – yalnızca vardiyalar (adres ofsetleri).

Elektriksel Özellikler – bu bölümde öncelikle ilgilendiğimiz konular Mutlak Maksimum Puanlar, çip başına maksimum yükleri listeliyor. Yıkılmaz Atmega328p'nin aksine, çoğu MK, pimlere ciddi yükleri bağlamanıza izin vermez, bu da Arduinistler için hoş olmayan bir sürpriz haline gelir.

paket bilgisi – mevcut kasaların çizimleri, panolarınızı tasarlarken kullanışlıdır.

Başvuru Kılavuzu yapısal olarak başlıklarında belirtilen belirli çevre birimlerine ayrılmış bölümlerden oluşur. Her bölüm üç bölüme ayrılabilir:

Genel Bakış, Giriş, Özellikler – çevresel yeteneklere genel bakış;

Fonksiyonel Açıklama, Kullanım kılavuzu veya sadece bölümün ana bloğu - çevresel aygıtın ilkelerinin ve nasıl kullanılacağının ayrıntılı bir metin açıklaması;

Kayıtlar – kontrol kayıtlarının açıklaması. GPIO veya SPI gibi basit durumlarda, çevre birimlerini kullanmaya başlamak için bu yeterli olabilir, ancak çoğu zaman yine de önceki bölümleri okumanız gerekir.

Veri sayfaları nasıl okunur?

Veri sayfaları, alışkanlıktan dolayı, hacimleri ve anlaşılmaz kelimelerin bolluğuyla sizi korkutur. Aslında birkaç hayat tüyosu biliyorsanız her şey o kadar da korkutucu değildir.

Ayarlamak iyi bir PDF okuyucu. Veri sayfaları, kağıt talimatların görkemli geleneğiyle yazılmıştır; çıktı almak, plastik ayraçlarla eklemek ve dikmek harikadır. İçlerindeki hiper metin eser miktarlarda gözlenir. Neyse ki, en azından belgenin yapısı yer imleriyle tasarlanmıştır, bu nedenle kolay gezinme özelliğine sahip uygun bir okuyucu çok gereklidir.

Veri sayfası Stroustrup'un ders kitabı değil; şunları içeriyor: herşeyi okumaya gerek yok. Önceki tavsiyeyi kullandıysanız yer işaretleri çubuğunda istediğiniz bölümü bulmanız yeterlidir.

Veri sayfaları, özellikle Referans Kılavuzları, belirli bir çipin yeteneklerini tanımlayabilir, ancak tüm çizgi. Bu, bilgilerin yarısının, hatta üçte ikisinin çipinizle alakalı olmadığı anlamına gelir. TIM7 kayıtlarını incelemeden önce check-in yapın Genel açıklama, sende var mı?

Bilmek İngilizce için yeterli temel Seviye. Veri sayfalarının yarısı anadili ortalama olan birinin bilmediği terimlerden, yarısı da basit bağlantı yapılarından oluşur. Ayrıca, yarısı aynı zamanda terimlerden ve ikinci yarısı da rastgele kelimelerden oluşan Çince İngilizce dilinde mükemmel Çince veri sayfaları da vardır.

Eğer tanışırsan yabancı kelimeİngilizce-Rusça sözlük kullanarak tercüme etmeye çalışmayın. Eğer kafan karıştıysa gecikme, o zaman "histerezis" çevirisi sizi ısıtmayacaktır. Gerekli konseptin yer alacağı Google, Stack Overflow, Wikipedia, forumları kullanın basit kelimelerle örneklerle anlatıldı.

Okuduğunu anlamanın en iyi yolu eylemde kontrol edin. Bu nedenle, bir şeyi hala yanlış anlamış olmanız ve sihirli bir duman görmeniz ihtimaline karşı, alıştığınız hata ayıklama panosunu veya daha iyisi iki tanesini yanınızda bulundurun.

Veri sayfanızı elinizin altında tutmak iyi bir alışkanlıktır. birinin eğitimini okumak veya başka birinin kütüphanesini incelemek. Sorununuza daha uygun bir çözüm bulmanız oldukça olası. Ve tam tersi - veri sayfasından kaydın gerçekte nasıl çalıştığını anlayamıyorsanız, Google'da arayın: büyük olasılıkla birisi her şeyi zaten basit kelimelerle anlatmış veya GitHub'da açık kod bırakmıştır.

sözlük

Veri sayfalarına hızla alışmanıza yardımcı olacak bazı yararlı kelimeler ve semboller. Son birkaç gündür hatırladıklarım, eklemeler ve düzeltmeler memnuniyetle karşılanır.

elektrik
Vcc, Doğru – “artı”, yiyecek
Vss, v şeklinde – “eksi”, toprak
akım - akım
Voltaj - Gerilim
akımı batırmak – harici yük için “toprak” olarak çalışır
akım kaynağına – harici güç yükü
yüksek lavabo/kaynak pimi – yüklemeye karşı artırılmış “tolerans”a sahip pim

IO
H, Yüksek – Vcc pininde
L,Düşük – Vss pininde
Yüksek Empedans, Merhaba-Z, yüzer – pin üzerinde hiçbir şey yok, “yüksek direnç”, dış dünya tarafından neredeyse görünmez.
zayıf yukarı çekme, zayıf aşağı çekme – dahili çekme/aşağı çekme direnci, yaklaşık olarak 50 kOhm'a eşdeğerdir (veri sayfasına bakın). Örneğin giriş pininin havada asılı kalmasını ve yanlış pozitiflere neden olmasını önlemek için kullanılır. Zayıf - çünkü onu "sözünü kesmek" kolaydır.
itme çekme – arasında geçiş yaptığı pin çıkış modu Yüksek и Düşük – Arduino'dan düzenli ÇIKIŞ.
Açık drenaj – pinin olabileceği çıkış modunun belirlenmesi DüşükVeya Yüksek Empedans/Yüzen. Üstelik bu neredeyse her zaman "gerçek" bir açık drenaj değildir; koruyucu diyotlar, dirençler ve benzeri şeyler vardır. Bu sadece zemin/yok modunun bir tanımıdır.
gerçek açık drenaj - ancak bu gerçek bir açık drenajdır: pim açıksa doğrudan yere gider veya kapalıysa belirsizlik içinde kalır. Bu, gerekirse Vcc'den daha büyük bir voltajın içinden geçebileceği, ancak maksimumun yine de bölümdeki veri sayfasında belirtildiği anlamına gelir. Mutlak Maksimum Değerler/Voltaj.

Arayüzler
seri halinde – seri bağlı
Zincirlemek – çıkış sayısını artırarak, seri bağlantı kullanarak çipleri bir zincir halinde birleştirin.
çalışma – kayma, genellikle biraz kaymayı belirtir. Sırasıyla, geçiş yapmak и dışarı çıkmak – verileri parça parça alın ve iletin.
mandal – bitler kaydırılırken arabelleği kapatan bir mandal. Aktarım tamamlandığında valf açılır ve uçlar çalışmaya başlar.
giriş yapmak – parça parça aktarım gerçekleştirin, tüm bitleri doğru yerlere kaydırın.
çift ​​tampon, gölge kaydı, ön yükleme kaydı – kaydın yeni verileri kabul edebilmesi ancak bunu bir noktaya kadar tutabilmesi gerektiğinde geçmiş atamaları. Örneğin, PWM'nin doğru çalışması için parametrelerinin (görev döngüsü, frekans) mevcut döngü bitene kadar değişmemesi gerekir, ancak yeni parametreler zaten aktarılabilir. Buna göre mevcut olanlar muhafaza edilir. gölge kaydıve yenileri düşüyor ön yükleme kaydı, ilgili çip kaydına yazılıyor.

Her türlü şey
ön ölçekleyici – frekans ön ölçekleyici
biraz ayarlamak – biti 1'e ayarlayın
biraz temizlemek/sıfırlamak için – biti 0'a sıfırlayın (ayarlamak – STM veri sayfası özelliği)

sonra ne

Genel olarak burada, ampuller, SPI, zamanlayıcılar, PWM ve kesintiler içeren veri sayfaları kullanılarak bu makale için özel olarak yapılmış STM32 ve STM8 ile ilgili üç projenin gösterimi ile pratik bir bölüm planlandı:

Mikrodenetleyiciler hobinizse veri sayfalarını nasıl ve neden okumalısınız?

Ancak çok fazla metin olduğu için projeler ikinci kısma gönderiliyor.

Veri sayfalarını okuma becerisi hobinizde size yardımcı olacaktır, ancak forumlarda ve sohbetlerde diğer hobicilerle canlı iletişimin yerini alması pek olası değildir. Bunun için de öncelikle İngilizcenizi geliştirmeniz gerekiyor. Bu nedenle, okumayı bitirenler özel bir ödül alacaklar: kodu kullanarak yapılan ilk ödemeyle birlikte iki ücretsiz Skyeng dersi HABR2.

Kaynak: habr.com

Yorum ekle