Isi kandungan:

ATtiny84 / 85 SPI Pin Interface Reuse: 6 Langkah
ATtiny84 / 85 SPI Pin Interface Reuse: 6 Langkah

Video: ATtiny84 / 85 SPI Pin Interface Reuse: 6 Langkah

Video: ATtiny84 / 85 SPI Pin Interface Reuse: 6 Langkah
Video: Electronic Basics #36: SPI and how to use it 2024, Julai
Anonim
ATtiny84 / 85 SPI Pin Interface Digunakan Semula
ATtiny84 / 85 SPI Pin Interface Digunakan Semula

Instruksional ini merupakan tindak lanjut dari "ATtiny84 / 85 In-circuit Debugging with Serial Output" yang diperintahkan dan memperluas konfigurasi perkakasan dan perisian untuk mengatasi masalah penggunaan semula pin muat turun pengaturcaraan oleh program aplikasi. Secara keseluruhan, antara ini dan bahagian 1 yang diperintahkan, topik berikut dibincangkan / ditunjukkan:

Topik ATtiny84 ATtiny85
Komunikasi Bersiri menggunakan kelas SoftwareSerial X X
Berkongsi pin peranti antara aplikasi dan muat turun X X
Pin Change mengganggu X
Gangguan luaran X
Tidur dalam mod POWER_DOWN; bangun mengganggu X
Selesaikan ralat pautan vektor gangguan "didefinisikan berganda" yang berkaitan dengan SoftwareSerial X
Dalam litar mengubah, memuat turun, men-debug, … kitaran pengembangan untuk peranti ATtiny X X

Menambah komponen I / O perkakasan ke salah satu pin yang dikhaskan untuk antara muka pengaturcaraan SPI kadang-kadang OK, kadang-kadang tidak. Sebagai contoh, menambahkan LED ke MISO hanya menyebabkan LED berkelip semasa memuat turun dan kemudian tersedia untuk aplikasi. Walau bagaimanapun, menambahkan piezo buzzer ke MISO akan menghasilkan bunyi jeritan yang mengerikan diikuti dengan kegagalan muat turun.

Instruksional ini menerangkan bagaimana menggunakan multiplexer 4x2: 1 untuk "memulihkan" penggunaan pin yang diberikan pada isyarat SPI antara muka MISO, MOSI, dan SCK dengan melindunginya semasa memuat turun. Penggunaan semula pin RESET memerlukan perubahan sekering dan tidak dilindungi oleh pendekatan ini. Penugasan dua pin dilakukan dengan menggunakan multiplexer untuk menukar antara input aplikasi dan pengaturcaraan bergantung pada sama ada muat turun sedang dijalankan. Kod dan skema disertakan untuk kedua ATtiny84 dan ATtiny85. Konfigurasi ATiny84 ditangani terlebih dahulu kerana mempunyai dua port I / O dan dapat digunakan untuk menggambarkan beberapa masalah / penyelesaian tambahan. Setelah perbincangan small84, senario yang sama dibincangkan untuk ATtiny85.

Langkah 1: Perkakasan yang Diperlukan

Imej
Imej

Sebilangan besar perkakasan yang diperlukan disenaraikan di bahagian 1 yang diarahkan, jadi hanya perkakasan baru yang disenaraikan di bawah.

Nama Sumber Berkemungkinan Bagaimana Digunakan
Multiplexer 4x2: 1 Penggoda Mengandungi empat suis 2-input; 1-output yang merupakan mekanisme di mana isyarat antara muka SPI dan I / O aplikasi dikongsi.
Suis SPST Mana-mana jenis suis (sesaat atau terkunci) akan berfungsi. Suis digunakan untuk menggambarkan perkongsian pin untuk input aplikasi.
Perintang 10K Perintang tarik ke bawah untuk suis SPST untuk mengelakkan input terapung
Imej
Imej
Imej
Imej

Multiplexer adalah kunci untuk mengasingkan penggunaan muat turun pin dari penggunaan aplikasi. Keseluruhan fungsi multiplexer 4x2: 1 agak lurus ke hadapan yang terdiri daripada 2 isyarat kawalan dan 4 suis berfungsi sama. Tingkah laku setiap pin multiplexer dibincangkan di bawah:

Sematkan Nama Fungsi
15 G Seperti yang ditunjukkan dalam jadual kebenaran, multiplexer hanya berfungsi apabila pin memungkinkan G rendah. Oleh kerana kita tidak pernah mahu mematikan multiplexer sepenuhnya, pin 15 akan disambungkan terus ke tanah.
2-4; 5-7; 9-11;12-14 A (input), B (input), Y (output) Terdapat empat input 2; Suis 1-output dengan setiap kumpulan 3 pin diberi nombor berturut-turut mengikut urutan A (input), B (input), Y (output) mis. untuk suis 1; pin 2 = 1A; pin 3 = 1B; pin 4 = 1Y.
1 Pilih Apabila Pilih rendah, input suis A disambungkan ke pin output suis yang berkaitan, Y. Apabila pilih tinggi, input suis B disambungkan ke output. Suis dikendalikan secara serentak oleh isyarat Pilih dan berfungsi sama.
8 GND tanah IC multiplexer
16 VCC kuasa IC multiplexer

Langkah 2: Gambaran Keseluruhan Kes Ujian

Imej
Imej
Imej
Imej

Dua senario untuk penggunaan semula pin didasarkan pada apakah pin tersebut adalah input atau output aplikasi. Prosedur untuk mengendalikan input sentiasa sama; juga prosedur untuk output aplikasi adalah sama tanpa mengira komponen perkakasan. Walaupun begitu, penjelasannya lebih mudah, dan semoga lebih jelas, jika ada contoh khusus yang diberikan. Susun atur minimalis untuk dua kes ditunjukkan di atas. Untuk penyediaan terperinci di kemudian hari, sambungan menjadi sedikit sarang tupai jadi mungkin berguna untuk merujuk kembali gambarajah yang lebih bersih ini.

RESET adalah pilihan yang tepat untuk isyarat Select multiplexer kerana rendah semasa muat turun tetapi kembali tinggi apabila muat turun selesai. Perhatikan bahawa mana-mana suis multiplexer dapat digunakan untuk kedua-dua kes kerana semua suis berperilaku sama. Juga, kedua-dua contoh itu tidak "realistik"; mereka dipilih sebagai kaedah paling mudah untuk menggambarkan teknik pengasingan

  1. Kes Output: Output LED dari ATtiny84 pin 4 (SCK) diasingkan menggunakan suis multiplexer 2

    • sambungkan pin multiplexer 2A ke arde
    • sambungkan pin multiplexer 2B ke ATtiny85 pin 4
    • sambungkan output 2Y ke anod LED

      • Keputusan yang dijangka:

        • LED mati semasa muat turun kerana disambungkan ke tanah 2A
        • LED terpasang pada pin output aplikasi 4 setelah dimuat turun melalui 2B dan mula berkelip
  2. Kes Input: SPST menukar input ke ATtiny84 pin 6 (MOSI) diasingkan menggunakan suis multiplexer 3

    • Kawat plumbum MOSI dari header AVR Programmer dipindahkan ke 3A
    • input suis 3B disambungkan ke output SPST
    • output 3Y disambungkan ke ATtiny84 pin 6

      • 3A, MOSI, disambungkan ke pin 6 semasa memuat turun
      • 3B, output SPST, disambungkan ke pin 6 selepas muat turun

Kes 1 berjaya jika LED tidak berkedip semasa muat turun program dan kemudian berkelip setiap dua saat setelah memuat turun seperti yang diharapkan di bawah kawalan program. Tanpa pengasingan, LED akan berkelip semasa memuat turun kerana disambungkan terus ke isyarat SCK, yang mengubah keadaan menjadi jam penerimaan / penghantaran data.

Kes 2 berjaya jika isyarat MOSI diteruskan ke ATtiny84 semasa muat turun, iaitu muat turun tidak gagal, dan LED bertindak balas terhadap pengaktifan / pemutus SPST setelah muat turun. Kes 2 mencegah kegagalan muat turun yang tidak mungkin berlaku. Tanpa pengasingan, suis SPST akan menyebabkan kegagalan jika 1) suis terkunci digunakan dan 2) suis dibiarkan dalam posisi hidup semasa muat turun. Apabila diasingkan oleh multiplexer, suis tidak dapat menyebabkan kegagalan muat turun dalam keadaan apa pun. Sedikit regangan tetapi selesa bagi kita orang-orang tua.

Salah satu akibat penggunaan multiplexer ialah komponen perkakasan tidak lagi dapat dihubungkan terus ke pin I / O mikrokontroler. Ini agak tidak selesa tetapi membiarkan komponen tersebut tetap berada di papan roti semasa ujian bersama dengan perkakasan aplikasi lain, dan dapat dipindahkan kembali ke lokasi yang betul apabila ujian selesai.

Langkah 3: Kes Attiny84 1 - Mengasingkan Hasil Aplikasi

Imej
Imej

Langkah ini menerangkan persediaan untuk berkongsi pin output aplikasi dengan isyarat muat turun. Contoh yang digunakan ialah LED yang dipasang pada pin 4 (SCK). Menggunakan LED yang ada sebagai contoh membolehkan penekanan pada penambahan multiplexer ke bahagian perkakasan dan perisian bahagian 1.

  • Perkakasan

    • Tambahkan multiplexer ke papan roti di lokasi relatif yang ditunjukkan dalam rajah fritzing di atas. Multiplexer diposisikan ke arah tengah untuk memberi ruang untuk suis SPST yang diperlukan dalam Kes 2.
    • Panjangkan isyarat RESET ke multiplexer dengan menambahkan wayar plumbum (sarankan kuning) dari ATtiny84 pin 11 ke pin multiplexer 1.
    • Penyediaan perkakasan yang selebihnya adalah seperti yang diberikan dalam Langkah 2

      • sambungkan pin multiplexer 2A terus ke tanah
      • sambungkan pin 2B ke ATtiny84 pin 4
      • sambungkan output 2Y ke anod LED

        • Keputusan yang dijangka:

          • semasa muat turun 2Y disambungkan ke tanah (2A) sehingga LED tetap padam
          • Selepas muat turun 2Y disambungkan ke ATtiny84 pin 4 - kawalan LED aplikasi
  • Perisian

    • Kod bahagian 1 digunakan semula; boleh didapati dari bahagian 1 yang diperintahkan daripada digandakan di sini
    • Muat dan susun program bahagian 1 di Arduino IDE
    • Pasang pengaturcara Tiny AVR ke port USB PC
    • Pasang kabel Adafruit USB ke Serial ke port USB kedua
      • Port COM dibuat dan secara automatik tersedia dalam senarai port IDE
      • Lancarkan tetingkap COM
    • Muat turun kod yang disusun ke ATtiny84

Hasil program aplikasi adalah sama seperti pada bahagian 1 kerana satu-satunya perubahan adalah memindahkan LED ke lokasi "dilindungi": LED berkelip pada selang 2 detik; output bersiri adalah sama. Satu perbezaan yang harus berlaku adalah bahawa LED tidak lagi berkedip semasa memuat turun kerana, pada masa itu, ia disambungkan ke tanah melalui pin multiplexer 2A.

Imej
Imej

Langkah 4: Kes Attiny84 2 - Isolasi Isi Aplikasi

Imej
Imej

Langkah ini membina persediaan untuk kes pengasingan output sebelumnya. Perubahan perkakasan terdiri daripada melampirkan suis SPST ke ATtiny84 pin 6 (MOSI) melalui multiplexer. Jadi perubahan perkakasan adalah minimum tetapi terdapat beberapa perubahan perisian untuk membolehkan suis SPST mengawal LED menggunakan interupsi perubahan pin. Kod yang dikemas kini disertakan di bahagian bawah bahagian ini. Kod tersebut harus disalin ke dalam Arduino IDE; cadangkan simpan di bawah nama Multiplexer_Input. (Saya minta maaf untuk panjang bahagian ini tetapi ini adalah inti dari tujuan yang dapat dipesan dan menganggapnya lebih baik sebagai monolit daripada memasukkan jeda buatan.)

Kemas kini Lokasi Tujuan
sertakan kelas SoftwareSerial "digodam" sertakan bahagian LED kini dikendalikan oleh suis SPST melalui interrupt pertukaran pin. Kelas SoftwareSerial mesti diubahsuai kerana jika tidak, ia memperuntukkan SEMUA vektor interupsi perubahan pin. Ini menyebabkan ralat pautan "pelbagai definisi" untuk vektor (port 0) yang diberikan ke suis SPST. Versi SoftwareSerial yang diretas harus diletakkan di direktori yang sama dengan program sehingga hanya mempengaruhi aplikasi ini.
Definisi pin input SPST sertakan / bahagian definisi penugasan input SPST ke pin peranti. Pin ini khusus untuk peranti sehingga ditambahkan ke bahagian #ifdef ATtiny8x.
Mod pin input SPST fungsi persediaan Pin SPST dikonfigurasi sebagai INPUT
Konfigurasikan gangguan pin SPST fungsi persediaan Vektor interrupt ditugaskan ke pin input SPST sehingga perubahan keadaan suis menyebabkan gangguan. Daftar konfigurasi dan jenis gangguan adalah khusus peranti. Untuk menjadikan kodnya sehalus mungkin, perbezaan ditangani dalam bahagian #if yang ditentukan
Sediakan mesej bersiri yang lengkap fungsi persediaan Mesej output siri penyiapan yang lengkap diubah untuk menggambarkan aplikasi Multiplexer Input
Tambah fungsi ISR suis SPST bahagian kod ISR untuk gangguan perubahan pin SPST ditambahkan. Kodnya biasa tetapi vektor yang digunakan khusus peranti dan ditentukan di bahagian bergantung pada peranti di bahagian atas program. Untuk mengesahkan ISR diaktifkan, keadaan LED diubah. Walaupun tidak ada dalam aplikasi nyata, mesej output bersiri dihasilkan mencerminkan keadaan LED baru.
Ubah suai pemprosesan gelung fungsi gelung ISR kini mengawal menghidupkan dan mematikan LED sehingga fungsi dikeluarkan dari rutin gelung. Panggilan untuk rutin tidur ditambahkan untuk ATtiny84 sebagai "tambahan". Untuk aplikasi ini, tidur ATtiny85 tidak berfungsi; mungkin disebabkan oleh gangguan kelas Software Serial kerana ia berfungsi dengan SoftwareSerial dikeluarkan.
Tambahkan rutin tidur bahagian kod Fungsi tidur tidak diperlukan untuk menunjukkan penggunaan multiplexer. Hanya ditambahkan kerana biasanya ingin menunggu input dalam mod POWER_DOWN untuk menjimatkan kuasa daripada terus berjalan melalui gelung program tanpa melakukan apa-apa sehingga input berlaku.

Ubahsuai Kod kelas SoftwareSerial

Kelas SoftwareSerial perlu diubah agar tidak memonopoli semua pin penggantian perubahan pin. Kod kelas SoftwareSerial terletak di

C: / Program Files (x86) Arduino / hardware / arduino / avr / libraries / SoftwareSerial / src

Cari di PCINT0_vect di SoftwareSerial.cpp untuk mencari lokasi permulaan perubahan kod. Tambahkan kod berikut tepat sebelum pernyataan #if yang ditentukan (PCINT0_vect) yang ada.

#jika ditakrifkan (_ AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif ditentukan (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }

Sekarang komen blok kod yang ada yang memperuntukkan vektor gangguan port seperti yang ditunjukkan di bawah (hanya tambahkan simbol komen blok awal dan akhir / * dan * /):

/*

#jika didefinisikan (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if ditentukan (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if ditentukan (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if ditentukan (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif * /

Konfigurasikan Perkakasan

Suis SPST dipasang pada ATtiny84 pin 6 (MOSI) seperti yang digariskan dalam Langkah 2. Prosedur ini digandakan di sini untuk kemudahan.

  • sambungkan input suis 3A ke plumbum MOSI pengepala Tiny AVR Programmer
  • sambungkan 3B ke pin output SPST suis ON
  • sambungkan 3Y ke pin ATtiny84 6

    • KEPUTUSAN:

      • 3A, MOSI, akan dihantarkan ke ATtiny84 pin 6 semasa memuat turun
      • 3B, output SPST, akan dipagar ke pin 6 setelah muat turun

Jalankan program

Sebelum berjalan, letakkan suis SPST pada kedudukan mati. Jika tidak, LED akan menyala apabila suis dimatikan dan sebaliknya. Ikuti prosedur untuk langkah 3 memuat, menyusun, dan memuat turun program input aplikasi menggunakan Arduino IDE. Seperti sebelumnya, LED tidak boleh berkelip semasa memuat turun jadi satu-satunya petunjuk bahawa program ini sedang berjalan dan berjalan adalah mesej bersiri pada akhir rutin persediaan: SETUP Lengkap - Contoh Input

Pada ketika ini program sedang menunggu input dari suis SPST. Meletakkan suis pada posisi ON akan menyebabkan LED menyala; menukar kembali ke posisi mati mematikan LED. Mesej keluaran mengesahkan bahawa ISR dipanggil (ISR: Led HIGH, ISR: Led LOW). Perhatikan urutan mesej bersiri adalah GO TO SLEEP pertama kali menunggu perubahan keadaan suis; apabila mendapat input suis, ISR dipanggil, menukar LED, dan mendokumentasikan perubahannya; kemudian memproses pengambilan mengikuti panggilan tidur sejak gangguan membangunkan pemproses.

Imej
Imej

PROGRAM UNTUK INSTRUCTABEL INI:

//************************************************************************

// BAHAGIAN 2: Aplikasi / muat turun perkongsian pin peranti //. Mengubah kod Bahagian 1 untuk menyokong penggunaan semula pin // yang diberikan ke antara muka pengaturcaraan SPI //. Kod "Comon" untuk ATtiny85 dan ATtiny84 // **************************************** ******************************** #include "SoftwareSerial.h" // Modified Arduino SoftwareSerial class #include // While kod pemprosesan adalah biasa, pin yang digunakan adalah # khusus peranti jika ditentukan (_ AVR_ATtiny84_) || didefinisikan (_ AVR_ATtiny84A_) #define ledPin 4 // Diganti untuk menghidupkan / mematikan Led yang disambungkan #define rxPin 9 // Pin digunakan untuk Serial menerima #define txPin 10 // Pin digunakan untuk penghantaran Serial #define SpstPin 6 // Input dari suis SPST (MOSI) # tentukan ISR_VECT PCINT0_vect // SPST suis Pin ubah vektor gangguan #elif ditentukan (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Input dari suis SPST (INT0_VT // Suis SPST Pin ganti vektor gangguan #else #error Hanya ATiny84 dan ATtiny85 yang Disokong oleh Projek ini #endif // Buat contoh kelas Serial Perisian yang menentukan peranti // pin mana yang akan digunakan untuk menerima dan menghantar SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Memulakan sumber pemprosesan // ------------------- -------------------------------------------------- --- persediaan tidak sah () {mySerial.begin (9600); // Mulakan kelewatan pemprosesan bersiri (2000); // Beri masa port Serial Com untuk memulakan permulaan. // jika tidak, output pertama mungkin hilang atau rosak pinMode (ledPin, OUTPUT); // Konfigurasikan pin led untuk OUTPUT pinMode (SpstPin, INPUT); // Konfigurasikan pin suis SPST sebagai INPUT #jika ditentukan (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // sediakan interupsi perubahan pin untuk menangani input suis pada pin 6 (MOSI) GIMSK | = (1 <

Langkah 5: Kes ATtiny85 1 - Mengasingkan Hasil Aplikasi

Imej
Imej

Daripada membina persediaan perkakasan pendua untuk ATtiny85, mungkin lebih mudah untuk memulakan dengan konfigurasi yang sudah siap untuk ATtiny84 dari Langkah 4 dan menggantikan cip tiny84 dengan tiny85. Semua perkakasan yang diperlukan sudah tersedia. Sekiranya menggunakan pendekatan ini, cari small85 sehingga pin 3 dan 4 sejajar dengan kabel bersiri tx dan terima wayar. Ini hanya masalah untuk menukar wayar plumbum antara muka SPI agar sesuai dengan lokasi yang diperlukan untuk ATtiny85.

Sekiranya bermula dari awal, ikuti langkah umum dari Langkah 3 dan rajah fritzing di atas. Kodnya sama seperti yang digunakan untuk ATtiny84 pada Langkah 3 dengan hasil yang sama diharapkan - tidak ada kerlipan semasa memuat turun; semasa menjalankan LED berkelip pada selang 2 saat dan mesej output bersiri mengikuti keadaan LED.

Imej
Imej

Langkah 6: Kes Attiny85 2 - Isolasi Isi Aplikasi

Imej
Imej

Untuk penyediaan perkakasan, mulakan dengan konfigurasi dari Langkah 5 dan tambahkan suis SPST seperti yang ditunjukkan dalam rajah fritzing di atas. Saya sebenarnya menggunakan suis seketika untuk versi tiny85 dan ini membuat pengesahan sedikit lebih mudah. Perhatikan bahawa output suis diputar 180 darjah dari konfigurasi ATtiny84. Perubahan ini menjadikan laluan wayar penyambungan lebih mudah kerana ketiga-tiga isyarat SPI berada di sisi yang sama untuk ATtiny85.

Gunakan program yang sama dengan ATtiny84 Langkah 4. Hasil umum yang sama diharapkan - LED berubah keadaan apabila suis SPST dihidupkan / dimatikan dan mesej output bersiri mendokumentasikan perubahan. Mesej GO TO SLEEP hilang kerana fungsi tidur tidak digunakan untuk ATtiny85. Walaupun program yang sama digunakan, terdapat perbezaan yang signifikan dalam pelaksanaan untuk menjelaskan fakta bahawa ATtiny85 hanya memiliki satu daftar port (Port 0):

  1. SoftwareSerial kini memperuntukkan penggantian perubahan pin 0 pin untuk komunikasi bersiri (Ingat bahawa kami dapat menggunakan port 1 untuk ATtiny84.)
  2. Gangguan suis SPST mesti dilaksanakan dengan gangguan luaran 0 (INT0) kerana satu-satunya gangguan perubahan pin diperuntukkan oleh SoftwareSerial. Ini menggambarkan titik bahawa gangguan perubahan pin dan gangguan luaran secara logiknya bebas dan boleh digunakan dalam daftar port yang sama.
  3. Tidak ada yang diperoleh dengan menggunakan versi SoftwareSerial yang diubah - hanya ada satu port dan kelas SoftwareSerial AKAN merebutnya. Walau bagaimanapun, kelas yang diubah masih digunakan hanya untuk mengelakkan perubahan yang tidak berkaitan langsung dengan matlamat langkah ini.

Disyorkan: