Bagaimana dan mengapa membaca lembaran data jika mikropengawal adalah hobi anda

Bagaimana dan mengapa membaca lembaran data jika mikropengawal adalah hobi anda

Mikroelektronik adalah trend hangat dalam beberapa tahun kebelakangan ini terima kasih kepada Arduino ajaib. Tetapi inilah masalahnya: dengan minat yang sewajarnya, DigitalWrite() yang semakin meningkat ternyata dengan cepat, dan perkara yang perlu dilakukan seterusnya tidak sepenuhnya jelas. Pembangun Arduino telah meletakkan banyak usaha untuk menurunkan halangan untuk masuk ke dalam ekosistem mereka, tetapi di luar sempadannya, hutan gelap litar yang keras masih bergoyang, tidak boleh diakses oleh seorang amatur.

Contohnya, lembaran data. Nampaknya mereka mempunyai segala-galanya, ambil dan gunakannya. Tetapi hanya pengarang mereka yang jelas tidak menetapkan sendiri tugas mempopularkan mikropengawal; Kadang-kadang nampaknyabahawa mereka sengaja menyalahgunakan istilah dan singkatan yang tidak dapat difahami apabila menerangkan perkara mudah untuk mengelirukan mereka yang tidak tahu sebanyak mungkin. Tetapi tidak semuanya sangat buruk, jika dikehendaki, dada terbuka.

Dalam artikel ini, saya akan berkongsi pengalaman komunikasi antara seorang humanis dan lembaran data untuk tujuan hobi. Teks ini bertujuan untuk amatur yang dibesarkan dari seluar Arduino, ia menganggap beberapa pemahaman tentang prinsip pengendalian mikropengawal.

Saya akan mulakan dengan tradisional

LED berkelip pada Arduino

Dan segera kod:

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

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

"Apakah ini? - Pembaca yang canggih akan bertanya. β€œMengapa anda menulis sesuatu pada daftar input PINB?” Ia baca sahaja!" sungguh, Dokumentasi Arduino, seperti kebanyakan artikel tutorial di internet, menyatakan bahawa daftar ini adalah baca sahaja. Saya fikir begitu sendiri sehingga saya membacanya. Lembaran data ke Atmega328p semasa menyediakan artikel ini. Dan di sana:

Bagaimana dan mengapa membaca lembaran data jika mikropengawal adalah hobi anda

Ini adalah fungsi yang agak baru, ia tidak terdapat pada Atmega8, tidak semua orang tahu mengenainya atau tidak menyebutnya atas sebab keserasian ke belakang. Tetapi ia agak sesuai untuk menunjukkan idea bahawa lembaran data patut dibaca untuk menggunakan semua ciri cip, termasuk yang kurang diketahui. Dan ini bukan satu-satunya sebab.

Mengapa lagi membaca lembaran data

Biasanya, selepas bermain dengan LED dan AnalogWrites, pembangun arduino mula menyambungkan semua jenis modul dan cip ke papan, yang mana sudah ada perpustakaan bertulis. Lambat laun, perpustakaan kelihatan tidak berfungsi sebagaimana mestinya. Kemudian amatur mula memilihnya untuk memperbaikinya, dan di sana ...

Dan sesuatu yang sangat tidak dapat difahami berlaku di sana, jadi anda perlu pergi ke Google, membaca banyak tutorial, tarik kod seseorang yang sesuai di bahagian dan akhirnya mencapai matlamat anda. Ia memberikan rasa pencapaian yang kuat, tetapi pada hakikatnya prosesnya adalah seperti mencipta semula basikal dengan kejuruteraan terbalik motosikal. Selain itu, pemahaman cara basikal ini berfungsi tidak ditambah. Saya tahu kerana saya telah melakukan ini sendiri untuk masa yang lama.

Jika saya telah menghabiskan beberapa hari mempelajari dokumentasi Atmega328 dan bukannya aktiviti yang menarik ini, saya akan menjimatkan banyak masa. Lagipun, ini adalah mikropengawal yang agak mudah.

Oleh itu, adalah perlu untuk membaca lembaran data sekurang-kurangnya untuk membayangkan bagaimana mikropengawal berfungsi secara umum dan apa yang boleh dilakukannya. Dan selanjutnya:

  • untuk menyemak dan mengoptimumkan perpustakaan orang lain. Mereka sering ditulis oleh amatur yang sama yang mencipta semula roda; atau, sebaliknya, pengarang sengaja menjadikan mereka perlindungan berlebihan daripada orang bodoh. Biarkan ia menjadi tiga kali lebih besar dan lebih perlahan, tetapi ia pasti akan berfungsi;

  • untuk dapat menggunakan cip dalam projek yang tiada siapa yang menulis perpustakaan;

  • untuk memudahkan tugas berhijrah dari satu barisan MK ke yang lain;

  • untuk akhirnya mengoptimumkan kod lama anda, yang tidak sesuai dengan Arduino;

  • untuk mempelajari cara mengawal sebarang cip secara langsung melalui daftarnya, tanpa perlu bersusah payah mengkaji struktur perpustakaannya, jika ada.

Mengapa menulis terus ke daftar apabila terdapat HAL dan LL?

Kamus
HAL, Lapisan Abstraksi Tinggi - perpustakaan untuk mengawal mikropengawal dengan tahap abstraksi yang tinggi. Jika anda perlu menggunakan antara muka SPI1, hanya konfigurasi dan dayakan SPI1 tanpa memikirkan daftar mana yang bertanggungjawab untuk apa.
LL, API Tahap Rendah - perpustakaan yang mengandungi makro atau struktur dengan alamat daftar, membolehkan anda mengaksesnya mengikut nama. DDRx, PORTx, PINx pada Atmega ialah LL.

Pertikaian mengenai topik "HAL, LL atau daftar" kerap berlaku dalam ulasan tentang HabrΓ©. Tanpa mendakwa mempunyai akses kepada pengetahuan astral, saya hanya akan berkongsi pengalaman dan pemikiran amatur saya.

Setelah lebih kurang berurusan dengan Atmega dan membaca artikel tentang keindahan STM32, saya membeli setengah dozen papan yang berbeza - kedua-dua Discovery dan Pil Biru, malah hanya kerepek untuk produk buatan sendiri. Kesemua mereka telah mengumpul habuk dalam kotak selama dua tahun. Kadang-kadang saya berkata kepada diri sendiri: "itu sahaja, saya menguasai STM hujung minggu ini", saya melancarkan CubeMX, menghasilkan persediaan untuk SPI, melihat dinding teks yang terhasil, berperisa dengan hak cipta STM, dan memutuskan bahawa ini entah bagaimana terlalu banyak.

Bagaimana dan mengapa membaca lembaran data jika mikropengawal adalah hobi anda

Sudah tentu, anda boleh mengetahui apa yang CubeMX tulis di sini. Tetapi pada masa yang sama adalah jelas bahawa tidak realistik untuk mengingati semua rumusan, supaya kemudian anda boleh menulisnya dengan tangan anda. Dan untuk menyahpepijat ini, jika saya secara tidak sengaja terlupa untuk meletakkan beberapa jenis tanda semak di Cuba, - hello.

Sudah dua tahun, saya masih menjilat saya Pencari ST MCU pada semua jenis lazat, tetapi tidak boleh diakses oleh cip pemahaman saya, dan secara tidak sengaja terjumpa artikel yang hebat, walaupun kira-kira STM8. DAN tiba-tiba Saya menyedari bahawa selama ini saya mengetuk pintu yang terbuka: daftar STM disusun dengan cara yang sama seperti mana-mana MK lain, dan Cube tidak perlu bekerja dengan mereka. Dan apa, jadi mungkin? ..

HAL dan khususnya STM32CubeMX ialah alat untuk jurutera profesional yang bekerja rapat dengan cip STM32. Ciri utama ialah tahap abstraksi yang tinggi, keupayaan untuk berhijrah dengan cepat dari satu MK ke MK yang lain malah dari satu teras ke teras yang lain, sambil kekal dalam barisan STM32. Peminat jarang menghadapi tugas sedemikian - pilihan MK kami biasanya terhad oleh pelbagai jenis AliExpress, dan kami sering berhijrah antara cip yang sangat berbeza - kami berpindah dari Atmega ke STM, dari STM ke ESP, atau apa sahaja yang dilemparkan oleh rakan Cina baharu kepada kami. HAL tidak akan membantu di sini, dan mempelajarinya akan memakan banyak masa.

Ia kekal LL - tetapi separuh langkah daripadanya ke daftar. Secara peribadi, saya mendapati menulis makro saya dengan alamat daftar berguna: Saya mengkaji lembaran data dengan lebih teliti, berfikir tentang perkara yang saya perlukan pada masa hadapan dan perkara yang pasti tidak saya lakukan, menstruktur program saya dengan lebih baik, dan, secara amnya, mengatasi membantu menghafal.

Di samping itu, terdapat nuansa dengan STM32F103 yang popular - terdapat dua versi LL yang tidak serasi untuknya, satu rasmi dari STM, yang kedua dari Leaf Labs, digunakan dalam projek STM32duino. Jika anda menulis perpustakaan sumber terbuka (dan saya betul-betul tugas sebegitu), anda mesti sama ada membuat dua versi, atau mengakses daftar secara terus.

Akhirnya, penolakan LL, pada pendapat saya, memudahkan penghijrahan, terutamanya jika anda bergantung padanya dari awal projek. Contoh yang dibesar-besarkan: mari tulis Arduino berkelip di Atmel Studio tanpa LL:

#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++);
    } 
}

Untuk membolehkan kod ini berkelip LED pada selendang Cina dengan STM8 (dari ST Visual Desktop), cukup untuk menukar dua alamat di dalamnya:

#define DDR_B 0x5007
#define OUT_B 0x5005

Ya, saya menggunakan ciri sambungan LED pada papan tertentu, ia akan berkelip dengan sangat perlahan, tetapi ia akan menjadi sama!

Apakah lembaran data

Dalam artikel dan forum, kedua-dua bahasa Rusia dan Inggeris, "helaian data" bermaksud sebarang dokumentasi teknikal untuk cip, dan saya melakukan perkara yang sama dalam teks ini. Secara rasmi, mereka hanyalah salah satu daripada jenis dokumentasi tersebut:

Helai - TTX, ciri taktikal dan teknikal. Satu kemestian untuk mana-mana komponen elektronik. Maklumat rujukan, adalah berguna untuk disimpan di tangan, tetapi tidak ada yang istimewa untuk dibaca dengan teliti. Walau bagaimanapun, cip yang lebih ringkas selalunya terhad kepada lembaran data supaya tidak menghasilkan dokumen yang tidak diperlukan; dalam kes ini Manual rujukan disertakan di sini.

Manual rujukan - arahan sebenar, buku yang sihat dengan 1000+ halaman. Kerja semua yang disumbat ke dalam cip ditandatangani secara terperinci. Dokumen utama untuk pembangunan mikropengawal. Tidak seperti Lembaran data, arahan ditulis untuk pelbagai MK, ia mengandungi banyak maklumat tentang peranti yang tidak tersedia dalam model tertentu anda.

Manual Pengaturcaraan atau Manual Set Arahan - arahan untuk arahan unik mikropengawal. Direka untuk mereka yang berprogram dalam Assembler. Pengarang pengkompil secara aktif menggunakannya untuk mengoptimumkan kod, jadi dalam kes umum kami tidak memerlukannya. Tetapi melihat di sini berguna untuk pemahaman umum, untuk beberapa arahan khusus seperti keluar dari gangguan, serta semasa menggunakan penyahpepijat secara aktif.

Nota Permohonan - petua berguna untuk menyelesaikan masalah tertentu, selalunya dengan contoh kod.

Lembaran Errata – perihalan kes tingkah laku bukan standard cip dengan pilihan pintasan, jika ada.

Apa yang ada dalam lembaran data

Terus masuk Helai kita mungkin memerlukan bahagian seperti ini:

Ringkasan Peranti - halaman pertama lembaran data bercakap secara ringkas tentang peranti. Ia sangat berguna dalam situasi apabila anda telah menemui cip di suatu tempat (melihatnya di kedai, mematerinya, menemui sebutan) dan ingin memahami apa itu.

Ketua Penerangan – penerangan yang lebih terperinci tentang keupayaan cip dari talian.

Pinouts - skema pinout untuk semua pakej cip yang mungkin (di kaki mana yang dipin).

Huraian Pin - penerangan tentang tujuan dan keupayaan setiap pin.

Peta Memory - kita tidak mungkin memerlukan peta alamat dalam ingatan, tetapi kadangkala ia juga termasuk jadual alamat blok daftar.

Daftar Peta - jadual alamat blok daftar, sebagai peraturan, terletak dalam lembaran data, dan dalam Ruj Manual – hanya syif (offset alamat).

Ciri-ciri elektrik Dalam bahagian ini, kami amat berminat penilaian maksimum mutlak, menyenaraikan beban maksimum pada cip. Tidak seperti Atmega328p yang tidak boleh dihancurkan, kebanyakan mikropengawal tidak membenarkan beban serius disambungkan ke pin, yang menjadi kejutan yang tidak menyenangkan untuk arduino.

Maklumat Pakej - lukisan pakej yang tersedia, berguna semasa mereka bentuk papan anda.

Manual rujukan secara struktur terdiri daripada bahagian yang dikhaskan untuk persisian tertentu yang ditunjukkan dalam tajuknya. Setiap bab boleh dibahagikan secara kasar kepada tiga bahagian:

Gambaran Keseluruhan, Pengenalan, Ciri-ciri – gambaran keseluruhan keupayaan pinggiran;

Huraian fungsi, Panduan Penggunaan atau hanya blok utama bahagian - penerangan teks terperinci tentang prinsip peranti pinggir dan cara menggunakannya;

Daftar – perihalan daftar kawalan. Dalam kes mudah seperti GPIO atau SPI, ini mungkin cukup untuk mula menggunakan peranti, tetapi selalunya anda masih perlu membaca bahagian sebelumnya.

Cara membaca lembaran data

Helaian data di luar kebiasaan menakutkan dengan kelantangannya dan banyak perkataan yang tidak dapat difahami. Sebenarnya, segala-galanya tidak begitu menakutkan jika anda mengetahui beberapa hack kehidupan.

Tetapkan pembaca PDF yang baik. Helaian data ditulis dalam tradisi arahan kertas yang mulia dan bagus untuk dicetak, digariskan dengan penanda buku plastik dan dicantum bersama. Hiperteks di dalamnya diperhatikan dalam jumlah surih. Nasib baik, sekurang-kurangnya struktur dokumen ditandakan, jadi pembaca yang sesuai dengan navigasi yang mudah sangat diperlukan.

Lembaran data bukan buku teks Stroustrup, ia mengandungi tak perlu baca semua. Jika anda menggunakan nasihat sebelumnya, cari sahaja bahagian yang dikehendaki dalam bar penanda halaman.

lembaran data, terutamanya Manual Rujukan, boleh menerangkan keupayaan bukan cip tertentu, tetapi keseluruhan baris. Ini bermakna separuh, atau bahkan dua pertiga daripada maklumat tidak berkaitan dengan cip anda. Sebelum mempelajari daftar TIM7, daftar masuk Ketua Penerangansama ada anda memilikinya.

Untuk mengetahui английский cukup untuk peringkat asas. Helaian data ialah separuh terdiri daripada istilah yang tidak biasa kepada penutur asli biasa dan separuh terdiri daripada binaan pautan yang mudah. Terdapat juga lembaran data Cina yang sangat baik dalam bahasa Inggeris Cina, di mana separuh juga merupakan istilah, dan separuh kedua ialah set perkataan rawak.

Kalau jumpa perkataan yang tidak dikenali, jangan cuba menterjemahkannya dengan kamus Inggeris-Rusia. Jika ia mengelirukan anda histerisis, maka dari terjemahan "histeresis" anda tidak akan menjadi lebih panas. Gunakan Google, Stack Overflow, Wikipedia, forum di mana konsep yang dikehendaki dijelaskan secara ringkas dengan contoh.

Cara terbaik untuk memahami apa yang anda baca ialah tindakan daftar masuk. Oleh itu, simpan di tangan papan nyahpepijat yang anda kenali, dan sebaik-baiknya dua - sekiranya anda masih salah faham sesuatu dan melihat asap ajaib.

Adalah satu tabiat yang baik untuk menyimpan lembaran data berguna apabila anda membaca tutorial seseorang atau belajar perpustakaan orang lain. Ada kemungkinan bahawa anda akan menemui penyelesaian yang lebih baik untuk masalah anda di dalamnya. Dan sebaliknya - jika anda tidak dapat memahami dari lembaran data bagaimana pendaftaran masih berfungsi, google: kemungkinan besar, seseorang telah menerangkan segala-galanya dalam perkataan yang mudah atau meninggalkan kod yang boleh difahami di GitHub.

Kamus

Beberapa perkataan dan notasi berguna yang membantu anda membiasakan diri dengan cepat dengan lembaran data. Apa yang saya ingat dalam beberapa hari lepas, penambahan dan pembetulan adalah dialu-alukan.

elektrik
VDC, Betul - "tambah", makanan
Vss, Vee - "tolak", bumi
semasa – semasa
voltan - voltan
arus tenggelam - berfungsi sebagai "tanah" untuk beban luaran
kepada sumber arus - kuasakan beban luaran
sinki tinggi/pin sumber - pin dengan peningkatan "toleransi" kepada beban

IO
H, Tinggi - pada pin Vcc
L, Rendah – pada pin Vss
Impedansi Tinggi, Hai-Z, terapung - tidak ada apa-apa pada pin, "rintangan tinggi", ia sebenarnya tidak dapat dilihat oleh dunia luar.
lemah tarik ke atas, lemah tarik ke bawah - perintang pull-up / pull-down terbina dalam, analog anggaran 50 kOhm (lihat lembaran data). Ia digunakan, sebagai contoh, supaya pin input tidak tergantung di udara, menyebabkan positif palsu. Lemah - kerana mudah untuk "menyampuk".
tolak tarik – mod output pin, di mana ia bertukar antara Tinggi ΠΈ Rendah - OUTPUT biasa dengan Arduino.
longkang terbuka – penetapan mod output, di mana pin boleh sama ada RendahAtau Impedans Tinggi / Terapung. Pada masa yang sama, ini hampir selalu bukan longkang terbuka "sebenar", terdapat diod pelindung, perintang, dan lain-lain. Ia hanya sebutan mod tanah/tiada apa-apa.
longkang terbuka benar - dan ini sudah menjadi longkang terbuka yang sebenar: pin menghala terus ke tanah jika ia terbuka, atau berada dalam limbo jika ia ditutup. Ini bermakna, jika perlu, adalah mungkin untuk menjalankan voltan yang lebih besar daripada Vcc melaluinya, tetapi maksimum masih dinyatakan dalam lembaran data dalam bahagian Penilaian Maksimum Mutlak / Voltan.

Antara muka
secara bersiri - disambung secara bersiri
kepada rantai - memasang cip dalam rantai melalui sambungan bersiri, meningkatkan bilangan output.
peralihan – anjakan, biasanya menunjukkan sedikit anjakan. Masing-masing, untuk beralih masuk ΠΈ untuk beralih keluar - menerima dan menghantar data sedikit demi sedikit.
selak - selak yang menutup penimbal semasa bit sedang dialihkan melaluinya. Apabila pemindahan selesai, pengatup terbuka, bit mula berfungsi.
untuk masuk jam – lakukan pemindahan bit demi bit, alihkan semua bit ke tempat yang betul.
penampan berganda, daftar bayangan, daftar pramuat - sebutan sejarah, apabila daftar mesti dapat menerima data baru, tetapi menahannya sehingga saat tertentu. Contohnya, untuk PWM berfungsi dengan betul, parameternya (kitaran tugas, kekerapan) tidak seharusnya berubah sehingga kitaran semasa tamat, tetapi parameter baharu sudah boleh dipindahkan. Sehubungan itu, yang semasa diadakan daftar bayangan, dan yang baharu jatuh ke dalam daftar pramuat, sedang ditulis pada daftar cip yang sepadan.

apa-apa sahaja
prescaler – praskala frekuensi
untuk menetapkan sedikit - tetapkan bit kepada 1
untuk mengosongkan/set semula sedikit - set semula bit kepada 0 (menetapkan semula - cip lembaran data STM)

Apa yang Seterusnya

Secara umum, bahagian praktikal telah dirancang di sini dengan demonstrasi tiga projek pada STM32 dan STM8, dibuat khusus untuk artikel ini menggunakan lembaran data, dengan mentol lampu, SPI, pemasa, PWM dan gangguan:

Bagaimana dan mengapa membaca lembaran data jika mikropengawal adalah hobi anda

Tetapi teks terlalu banyak, jadi projek dihantar ke bahagian kedua.

Keupayaan untuk membaca lembaran data akan membantu anda dengan hobi anda, tetapi ia tidak akan menggantikan komunikasi langsung dengan rakan penggemar di forum dan sembang. Baginya, anda masih perlu meningkatkan bahasa Inggeris anda terlebih dahulu. Oleh itu, mereka yang telah membacanya akan menerima hadiah istimewa: dua pelajaran percuma di Skyeng dengan bayaran pertama melalui kod HABR2.

Sumber: www.habr.com

Tambah komen