Bagaimana dan mengapa membaca lembar data jika mikrokontroler adalah hobi Anda

Bagaimana dan mengapa membaca lembar data jika mikrokontroler adalah hobi Anda

Mikroelektronika adalah hobi yang modis dalam beberapa tahun terakhir berkat Arduino yang ajaib. Namun inilah masalahnya: dengan minat yang cukup, Anda dapat dengan cepat melampaui DigitalWrite(), namun apa yang harus dilakukan selanjutnya masih belum jelas. Pengembang Arduino telah berupaya keras untuk menurunkan hambatan masuk ke ekosistem mereka, namun di luar itu masih ada hutan gelap sirkuit keras yang tidak dapat diakses oleh amatir.

Misalnya saja lembar data. Sepertinya mereka memiliki segalanya, ambil dan gunakan. Namun penulisnya jelas tidak menetapkan tugas untuk mempopulerkan mikrokontroler; Kadang-kadang sepertinyabahwa mereka dengan sengaja menyalahgunakan istilah dan singkatan yang tidak dapat dipahami ketika menjelaskan hal-hal sederhana untuk sebisa mungkin membingungkan orang yang belum tahu. Tapi tidak semuanya buruk, jika diinginkan, peti mati akan terbuka.

Pada artikel ini saya akan berbagi pengalaman seorang spesialis humaniora berkomunikasi dengan datasheet untuk tujuan hobi. Teks ini ditujukan untuk para amatir yang tumbuh dari celana Arduino; teks ini mengasumsikan beberapa pemahaman tentang prinsip-prinsip pengoperasian mikrokontroler.

Saya akan mulai dengan yang tradisional

Memkedipkan LED di Arduino

Dan langsung kodenya:

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

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

"Apa ini? – Pembaca yang mahir akan bertanya. – Mengapa Anda menulis sesuatu ke register masukan PINB? Ini hanya untuk membaca!” Benar-benar, Dokumentasi Arduino, seperti kebanyakan artikel pendidikan di Internet, menyatakan bahwa register ini hanya dapat dibaca. Saya sendiri berpikir demikian sampai saya membacanya kembali lembaran data ke Atmega328p, menyiapkan artikel ini. Dan disana:

Bagaimana dan mengapa membaca lembar data jika mikrokontroler adalah hobi Anda

Ini adalah fungsi yang relatif baru, tidak ada di Atmega8, tidak semua orang mengetahuinya atau tidak disebutkan karena alasan kompatibilitas ke belakang. Namun ini cukup cocok untuk mendemonstrasikan gagasan bahwa lembar data layak dibaca untuk menggunakan semua kemampuan chip, termasuk yang kurang diketahui. Dan ini bukan satu-satunya alasan.

Kenapa lagi membaca lembar data?

Biasanya, para insinyur Arduino, setelah cukup bermain-main dengan LED dan AnalogWrites, mulai menghubungkan semua jenis modul dan chip ke papan, yang sudah terdapat perpustakaan tertulisnya. Cepat atau lambat, akan muncul perpustakaan yang tidak berfungsi sebagaimana mestinya. Kemudian amatir mulai mengambilnya untuk memperbaikinya, dan kemudian...

Dan sesuatu yang benar-benar tidak dapat dipahami terjadi di sana, jadi Anda harus membuka Google, membaca banyak tutorial, mengeluarkan bagian dari kode seseorang yang sesuai, dan akhirnya mencapai tujuan Anda. Hal ini memberikan kesan pencapaian yang luar biasa, namun kenyataannya prosesnya seperti menciptakan kembali roda dengan melakukan rekayasa balik pada sepeda motor. Apalagi pemahaman tentang cara kerja sepeda ini tidak bertambah. Saya tahu, karena saya sendiri sudah melakukan ini dalam waktu yang cukup lama.

Jika alih-alih melakukan aktivitas menarik ini saya menghabiskan beberapa hari mempelajari dokumentasi Atmega328, saya akan menghemat banyak waktu. Bagaimanapun, ini adalah mikrokontroler yang cukup sederhana.

Oleh karena itu, Anda perlu membaca lembar data setidaknya untuk membayangkan cara kerja mikrokontroler secara umum dan apa yang dapat dilakukannya. Dan selanjutnya:

  • untuk memeriksa dan mengoptimalkan perpustakaan orang lain. Seringkali mereka ditulis oleh para amatir yang sama yang menemukan kembali roda; atau, sebaliknya, penulisnya sengaja membuatnya terlalu mudah untuk dibodohi. Biarlah tiga kali lebih besar dan lebih lambat, tapi itu pasti akan berhasil;

  • untuk dapat menggunakan chip dalam proyek yang perpustakaannya belum pernah ditulis oleh siapa pun;

  • untuk memudahkan diri Anda dalam bermigrasi dari satu jalur MK ke jalur MK lainnya;

  • untuk akhirnya mengoptimalkan kode lama Anda yang tidak cocok dengan Arduino;

  • untuk mempelajari cara mengontrol chip apa pun secara langsung melalui registernya, tanpa perlu mempelajari struktur perpustakaannya, jika ada.

Mengapa menulis ke register langsung ketika ada HAL dan LL?

Kamus
HAL, Lapisan Abstraksi Tinggi – perpustakaan untuk mengendalikan mikrokontroler dengan tingkat abstraksi yang tinggi. Jika Anda perlu menggunakan antarmuka SPI1, Anda cukup mengkonfigurasi dan mengaktifkan SPI1 tanpa memikirkan register mana yang bertanggung jawab atas apa.
LL, API Tingkat Rendah – perpustakaan yang berisi makro atau struktur dengan alamat register, memungkinkan Anda mengaksesnya berdasarkan nama. DDRx, PORTx, PINx di Atmega adalah LL.

Perselisihan tentang topik “HAL, LL atau register” sering terjadi di komentar di Habré. Tanpa mengklaim akses terhadap pengetahuan astral, saya hanya akan berbagi pengalaman dan pemikiran amatir saya.

Setelah sedikit banyak memahami Atmega dan membaca artikel tentang kehebatan STM32, saya membeli setengah lusin papan yang berbeda - Discovery, Blue Pills, dan bahkan hanya chip untuk produk buatan saya. Mereka semua mengumpulkan debu di dalam kotak selama dua tahun. Kadang-kadang saya berkata pada diri sendiri: "itu saja, mulai akhir pekan ini saya akan menguasai STM," meluncurkan CubeMX, membuat pengaturan untuk SPI, melihat dinding teks yang dihasilkan, dengan murah hati dibumbui dengan hak cipta STM, dan memutuskan bahwa ini juga banyak.

Bagaimana dan mengapa membaca lembar data jika mikrokontroler adalah hobi Anda

Tentu saja Anda bisa mengetahui apa yang ditulis CubeMX di sini. Tetapi pada saat yang sama jelas bahwa mengingat semua kata dan kemudian menulisnya dengan tangan adalah tidak realistis. Dan untuk men-debug ini, jika saya tidak sengaja lupa mencentang kotak di Cube, tidak apa-apa.

Dua tahun telah berlalu, aku masih menjilat bibirku Pencari ST MCU untuk segala macam yang enak, tetapi di luar pemahaman saya, keripik, dan tidak sengaja saya temui artikel yang bagus, meskipun tentang STM8. DAN tiba-tiba Saya menyadari bahwa selama ini saya telah mengetuk pintu yang terbuka: register STM disusun dengan cara yang sama seperti register MK lainnya, dan Cube tidak diperlukan untuk bekerja dengannya. Apakah itu mungkin?..

HAL dan khususnya STM32CubeMX adalah alat untuk insinyur profesional yang bekerja erat dengan chip STM32. Fitur utamanya adalah abstraksi tingkat tinggi, kemampuan untuk bermigrasi dengan cepat dari satu MCU ke MCU lainnya dan bahkan dari satu inti ke inti lainnya, sambil tetap berada dalam jalur STM32. Penghobi jarang menghadapi masalah seperti itu - pilihan mikrokontroler kami, biasanya, terbatas pada rangkaian AliExpress, dan kami sering bermigrasi di antara chip yang sangat berbeda - kami berpindah dari Atmega ke STM, dari STM ke ESP, atau hal baru apa pun yang dilakukan teman Cina kami. melemparkan pada kami. HAL tidak akan membantu di sini, dan mempelajarinya akan memakan banyak waktu.

LL tetap ada - tetapi dari itu ke register ada setengah langkah. Secara pribadi, menurut saya menulis makro dengan alamat register berguna: Saya mempelajari lembar data dengan lebih hati-hati, saya memikirkan tentang apa yang akan saya perlukan di masa depan dan apa yang pasti tidak akan saya perlukan, saya menyusun program saya dengan lebih baik, dan secara umum, mengatasinya membantu menghafal .

Selain itu, ada nuansa pada STM32F103 yang populer - ada dua versi LL yang tidak kompatibel untuk itu, satu resmi dari STM, yang kedua dari Leaf Labs, digunakan dalam proyek STM32duino. Jika Anda menulis perpustakaan sumber terbuka (dan saya memilikinya tugas seperti itu), Anda harus membuat dua versi, atau mengakses register secara langsung.

Terakhir, menghilangkan LL, menurut saya, menyederhanakan migrasi, terutama jika Anda merencanakannya sejak awal proyek. Contoh yang berlebihan: mari kita tulis Arduino Blink 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++);
    } 
}

Agar kode ini mengedipkan LED pada papan Cina dengan STM8 (dari ST Visual Desktop), cukup dengan mengubah dua alamat di dalamnya:

#define DDR_B 0x5007
#define OUT_B 0x5005

Ya, saya menggunakan fitur menghubungkan LED pada papan tertentu, itu akan berkedip sangat lambat, tetapi itu akan terjadi!

Jenis lembar data apa yang ada?

Dalam artikel dan forum, baik dalam bahasa Rusia dan Inggris, “lembar data” berarti dokumentasi teknis apa pun untuk chip, dan saya melakukan hal yang sama dalam teks ini. Secara formal, ini hanyalah salah satu jenis dokumentasi:

Datasheet – Karakteristik kinerja, karakteristik taktis dan teknis. Wajib untuk semua komponen elektronik. Informasi latar belakang berguna untuk disimpan, tetapi tidak banyak yang bisa dibaca dengan serius. Namun, chip yang lebih sederhana seringkali dibatasi pada lembar data agar tidak menghasilkan dokumen yang tidak perlu; pada kasus ini Manual Referensi disertakan di sini.

Manual Referensi – instruksinya sendiri, buku sehat setebal 1000+ halaman. Pekerjaan segala sesuatu yang dimasukkan ke dalam chip dijelaskan secara rinci. Dokumen utama untuk menguasai mikrokontroler. Berbeda dengan lembaran data, instruksi ditulis untuk berbagai MK, instruksi tersebut berisi banyak informasi tentang periferal yang tidak tersedia dalam model spesifik Anda.

Manual Pemrograman или Panduan Set Instruksi – instruksi untuk perintah mikrokontroler unik. Dirancang untuk mereka yang memprogram dalam bahasa Majelis. Penulis kompiler secara aktif menggunakannya untuk mengoptimalkan kode, jadi secara umum kita tidak memerlukannya. Namun melihat di sini berguna untuk pemahaman umum, untuk beberapa perintah spesifik seperti keluar dari interupsi, serta untuk menggunakan debugger secara aktif.

Catatan Aplikasi – tip berguna untuk memecahkan masalah tertentu, sering kali dengan contoh kode.

Lembar Errata – deskripsi kasus perilaku chip non-standar dengan opsi solusi, jika ada.

Apa yang ada di lembar data

Langsung ke Datasheet kita mungkin memerlukan bagian berikut:

Ringkasan Perangkat – halaman pertama lembar data menjelaskan secara singkat perangkat. Sangat berguna dalam situasi ketika Anda menemukan sebuah chip di suatu tempat (melihatnya di toko, menyoldernya, menemukan sebutan) dan ingin memahami apa itu.

Gambaran umum – penjelasan lebih rinci tentang kemampuan chip dari lini.

Pinout – diagram pinout untuk semua kemungkinan paket chip (pin mana yang ada di kaki mana).

Deskripsi Pin – deskripsi tujuan dan kemampuan setiap pin.

memori Peta – kita tidak memerlukan peta alamat di memori, tapi terkadang peta alamat juga menyertakan tabel alamat blok register.

Daftar Peta – tabel alamat blok register, biasanya, terletak di lembar data, dan di Panduan Referensi – hanya shift (offset alamat).

Karakteristik Listrik – di bagian ini yang paling kami minati peringkat maksimum absolut, mencantumkan beban maksimum per chip. Berbeda dengan Atmega328p yang tidak bisa dihancurkan, sebagian besar MK tidak mengizinkan Anda menghubungkan beban serius ke pin, yang menjadi kejutan yang tidak menyenangkan bagi para Arduino.

Informasi Paket – gambar casing yang tersedia, berguna saat mendesain papan Anda.

Manual Referensi secara struktural terdiri dari bagian-bagian yang dikhususkan untuk periferal tertentu yang ditunjukkan dalam judulnya. Setiap bab dapat dibagi menjadi tiga bagian:

Ringkasan, Pengantar, Fitur – gambaran umum kemampuan periferal;

Deskripsi Fungsional, Panduan Penggunaan atau sekadar blok utama bagian ini - deskripsi teks terperinci tentang prinsip pengoperasian perangkat periferal dan cara menggunakannya;

Daftar – deskripsi register kontrol. Dalam kasus sederhana seperti GPIO atau SPI, ini mungkin cukup untuk mulai menggunakan periferal, namun seringkali Anda masih harus membaca bagian sebelumnya.

Cara membaca lembar data

Lembar data, karena kebiasaan, membuat Anda takut dengan volumenya dan banyaknya kata-kata yang tidak dapat dipahami. Faktanya, segalanya tidak begitu menakutkan jika Anda mengetahui beberapa kiat hidup.

Mengatur pembaca PDF yang bagus. Lembar data ditulis dalam tradisi instruksi kertas yang mulia; sangat bagus untuk dicetak, disisipkan dengan penanda plastik, dan dijahit. Hypertext di dalamnya diamati dalam jumlah kecil. Untungnya, setidaknya struktur dokumen dirancang dengan bookmark, sehingga pembaca yang sesuai dengan navigasi yang mudah sangat diperlukan.

Lembar data ini bukan buku teks Stroustrup; melainkan berisi tidak perlu membaca semuanya. Jika Anda menggunakan saran sebelumnya, temukan saja bagian yang diinginkan di bilah bookmark.

Lembar data, khususnya Referensi Manual, dapat menggambarkan kemampuan bukan chip tertentu, tetapi seluruh lini. Ini berarti setengah, atau bahkan dua pertiga informasinya tidak terkait dengan chip Anda. Sebelum mempelajari register TIM7, check in Gambaran umum, Apakah kamu memilikinya?

Tahu английский cukup untuk level dasar. Lembar data terdiri dari separuh istilah yang asing bagi rata-rata penutur asli, dan separuh lagi terdiri dari struktur penghubung sederhana. Ada juga lembar data bahasa Mandarin yang sangat bagus dalam bahasa Inggris Mandarin, yang separuhnya juga merupakan istilah, dan separuh lainnya merupakan kumpulan kata acak.

Jika Anda bertemu kata asing, jangan mencoba menerjemahkannya menggunakan kamus Inggris-Rusia. Jika Anda bingung histeresis, maka terjemahan “histeresis” tidak akan membuat Anda lebih hangat. Gunakan Google, Stack Overflow, Wikipedia, forum, tempat konsep yang diperlukan berada dijelaskan dengan kata-kata sederhana disertai contoh.

Cara terbaik untuk memahami apa yang Anda baca adalah tindakan check-in. Oleh karena itu, siapkan papan debug yang biasa Anda gunakan, atau lebih baik lagi dua, jika Anda masih salah memahami sesuatu dan melihat asap ajaib.

Merupakan kebiasaan yang baik untuk menyimpan lembar data Anda saat Anda melakukannya membaca tutorial seseorang atau mempelajari perpustakaan orang lain. Bukan tidak mungkin Anda akan menemukan solusi yang lebih optimal atas permasalahan Anda di dalamnya. Dan sebaliknya - jika Anda tidak dapat memahami dari lembar data cara kerja register sebenarnya, cari di Google: kemungkinan besar, seseorang telah menjelaskan semuanya dengan kata-kata sederhana atau meninggalkan kode yang jelas di GitHub.

Kamus

Beberapa kata dan simbol yang berguna untuk membantu Anda cepat terbiasa dengan lembar data. Apa yang saya ingat dalam beberapa hari terakhir, penambahan dan koreksi dipersilahkan.

listrik
VDC, benar – “ditambah”, makanan
Vs, vee – “minus”, bumi
arus - saat ini
tegangan - tegangan
untuk menenggelamkan arus – berfungsi sebagai “ground” untuk beban eksternal
untuk sumber arus – daya beban eksternal
pin wastafel/sumber tinggi – pin dengan peningkatan “toleransi” terhadap beban

IO
H, Tinggi – pada pin Vcc
L, Rendah – pada pin Vss
Impedansi Tinggi, Hai-Z, mengambang – tidak ada apa pun di pin, “resistensi tinggi”, hampir tidak terlihat oleh dunia luar.
tarikan yang lemah, tarikan ke bawah yang lemah – resistor pull-up/pull-down bawaan, kira-kira setara dengan 50 kOhm (lihat lembar data). Hal ini digunakan, misalnya, untuk mencegah pin input menggantung di udara, sehingga menyebabkan positif palsu. Lemah - karena mudah untuk "menginterupsi" dia.
Dorong tarik – mode keluaran pin, di mana ia beralih di antara keduanya High и Rendah – OUTPUT reguler dari Arduino.
saluran pembuangan terbuka – penunjukan mode keluaran di mana pin dapat berupa salah satu RendahAtau Impedansi Tinggi/Mengambang. Terlebih lagi, ini hampir selalu bukan saluran terbuka yang “nyata”; ada dioda pelindung, resistor, dan lainnya. Ini hanyalah sebutan untuk mode ground/none.
saluran terbuka yang sebenarnya - tapi ini benar-benar saluran terbuka: pin mengarah langsung ke tanah jika terbuka, atau tetap dalam keadaan terlantar jika ditutup. Artinya, jika perlu, tegangan yang lebih besar dari Vcc dapat dialirkan melaluinya, namun tegangan maksimum tetap ditentukan dalam lembar data di bagian tersebut. Peringkat/Tegangan Maksimum Mutlak.

Antarmuka
dalam seri – dihubungkan secara seri
untuk rantai – merakit chip menjadi rantai menggunakan koneksi serial, meningkatkan jumlah output.
bergeser – pergeseran, biasanya menunjukkan sedikit pergeseran. Masing-masing, untuk berpindah ke dalam и untuk bergeser keluar – menerima dan mengirimkan data sedikit demi sedikit.
memalangi – kait yang menutupi buffer sementara bit digeser melewatinya. Ketika transfer selesai, katup terbuka dan bit mulai bekerja.
untuk masuk – lakukan transfer sedikit demi sedikit, geser semua bit ke tempat yang tepat.
penyangga ganda, daftar bayangan, mendaftar pramuat – sebutan sejarah, ketika register harus dapat menerima data baru, tetapi menahannya sampai titik tertentu. Misalnya, agar PWM berfungsi dengan benar, parameternya (siklus kerja, frekuensi) tidak boleh berubah hingga siklus saat ini berakhir, namun parameter baru sudah dapat ditransfer. Oleh karena itu, yang ada saat ini dipertahankan daftar bayangan, dan yang baru jatuh ke dalamnya mendaftar pramuat, sedang ditulis ke register chip yang sesuai.

Segala macam hal
prescaler – prescaler frekuensi
untuk mengatur sedikit – setel bit ke 1
untuk menghapus/mengatur ulang sedikit – setel ulang bit ke 0 (ulang – Fitur lembar data STM)

Apa Selanjutnya

Secara umum, bagian praktis direncanakan di sini dengan demonstrasi tiga proyek pada STM32 dan STM8, dibuat khusus untuk artikel ini menggunakan lembar data, dengan bola lampu, SPI, timer, PWM, dan interupsi:

Bagaimana dan mengapa membaca lembar data jika mikrokontroler adalah hobi Anda

Tapi teksnya banyak, jadi proyeknya dikirim ke bagian kedua.

Keterampilan membaca lembar data akan membantu hobi Anda, namun kemungkinan besar tidak akan menggantikan komunikasi langsung dengan sesama penghobi di forum dan obrolan. Untuk tujuan ini, Anda tetap perlu meningkatkan bahasa Inggris Anda terlebih dahulu. Oleh karena itu, mereka yang selesai membaca akan mendapatkan hadiah khusus: dua pelajaran gratis di Skyeng dengan pembayaran pertama menggunakan kode HABR2.

Sumber: www.habr.com

Tambah komentar