Isi kandungan:
- Bekalan
- Langkah 1: Circut
- Langkah 2: Rajah Masa
- Langkah 3: Pengaturcaraan. Makro dan Definisi
- Langkah 4: Pengaturcaraan. Gelung Utama
- Langkah 5: Pengaturcaraan. Fungsi Bantu
- Langkah 6: Pengaturcaraan. Rutin Protothread
- Langkah 7: Internals
Video: Pengaturcaraan Serentak Attiny85 atau Labu Dengan Mata Berwarna: 7 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
Oleh jumbleviewJumbleview.infoMengikuti Lagi oleh pengarang:
Tentang: Saya bekerja sebagai jurutera perisian di salah satu syarikat Bay Area (California). Setiap kali saya mempunyai masa, saya ingin memprogram pengawal mikro, membina mainan mekanikal, dan membuat beberapa projek pembaikan rumah. Lebih Lanjut Mengenai jumbleview »
Projek ini menunjukkan cara mengendalikan dua LED anoda biasa 10mm tiga warna (mata berwarna-warni Pumpkin Halloween Glitter) dengan cip Attiny85. Matlamat projek ini adalah untuk memperkenalkan pembaca ke dalam seni pengaturcaraan serentak dan penggunaan perpustakaan prototreads Adam Dunkels. Projek ini mengandaikan bahawa pembaca mengetahui mengenai pengawal 8-bit AVR, dapat menulis beberapa program C dan mempunyai pengalaman dengan studio Atmel.
Kod projek diterbitkan di GitHub:
Bekalan
Sebelum memprogram seseorang masih perlu membina litar. Berikut adalah komponen:
- Pengawal Attiny85 (mana-mana pembekal elektronik).
- Dua LED 10mm warna tiga dengan anod biasa. LED Adafruit
- Perintang 100 Ohm, 120 Ohm, 150 Ohm 0.125 atau 0.250 Wt (mana-mana pembekal elektronik).
- Header Six Pin untuk antara muka AVR ISP. Boleh dibuat dari tajuk Adafruit ini
- Beberapa papan roti atau papan templat bercetak. Saya menggunakan yang ini
- Antaramuka AVR ISP MKII dan Atmel Studio 6.1 (Versi kemudiannya juga berfungsi).
Langkah 1: Circut
Reka bentuk menggunakan lima pin cip:
- Dua pin digunakan untuk mengawal anod: masing-masing anod LED dilekatkan pada pin khusus.
- Tiga pin dilampirkan (melalui perintang) ke katod LED (katod warna yang sama dari setiap led yang dipasang pada pin yang sama)
Seseorang akan bertanya: mengapa tidak menggunakan semua enam pin masuk / keluar cip sehingga anod LED akan dihubungkan terus ke +5 v dan setiap katod akan mempunyai pin khusus? Itu akan menjadikan pengaturcaraan menjadi mudah. Malangnya, ada masalah: pin PB5 (RESET) adalah pin lemah yang mampu memberikan hanya ~ 2 mA arus, sementara perlu ada ~ 20 mA.
Sudah tentu seseorang boleh membina penguat transistor untuk pin lemah ini, tetapi saya sendiri seboleh-bolehnya lebih suka menyelesaikan masalah melalui kodnya.
Langkah 2: Rajah Masa
Gambarajah masa membantu kita memahami apa yang perlu kita atur.
Dua baris teratas pada rajah menunjukkan perubahan voltan pada anod LED. Voltan pada pin yang disambungkan ke anod LED berayun dengan frekuensi ~ 250 Hz. Pengayunan voltan untuk LED kiri ini bertentangan dengan ayunan LED kanan. Apabila voltan pada anod tinggi, LED sepadan boleh menjadi terang. Apabila rendah, LED sepadan gelap. Ini bermaksud setiap LED mungkin terang selama selang 2 milisaat dan gelap selama 2 milisaat. Oleh kerana mata manusia mempunyai sedikit inersia, 250 Hz berkedip tidak dapat dilihat oleh pemerhati. Di bawah tiga baris pada rajah menunjukkan perubahan voltan pada pin yang disambungkan ke katod LED. Mari kita lihat pada lajur rajah pertama. Ini menunjukkan kes apabila LED kiri berwarna merah dan LED kanan berwarna hijau. Di sini katod MERAH tetap rendah sementara anod kiri tinggi, katod HIJAU tetap rendah sementara anod kanan tinggi, dan katod BIRU tetap rendah sepanjang masa. Lajur lain pada rajah menunjukkan kombinasi katod dan voltan anod untuk pelbagai warna.
Seperti yang kita lihat terdapat saling bergantung pada keadaan pin. Tanpa beberapa kerangka tidak akan mudah diselesaikan. Dan di situlah perpustakaan protothread sangat berguna.
Langkah 3: Pengaturcaraan. Makro dan Definisi
Contoh dalam langkah pengaturcaraan mewakili versi yang sedikit dipermudahkan. Program dipendekkan, dan beberapa definisi simbolik digantikan dengan pemalar eksplisit.
Mari kita mulakan dari awal. Program merangkumi fail yang dilengkapi dengan Atmel Studio dan juga tajuk utama perpustakaan. Seterusnya terdapat dua makro untuk memanipulasi tahap pin dan beberapa definisi untuk memberikan nama logik untuk menyematkan isyarat. Setakat ini tidak ada yang istimewa.
Langkah 4: Pengaturcaraan. Gelung Utama
Kemudian mari kita lihat pada akhir untuk melihat prosedur utama apa yang terkandung di dalamnya.
Fungsi utama setelah melakukan beberapa inisialasi tetap dalam selamanya. Dalam gelung itu membuat langkah seterusnya:
- Memohon rutin prototread untuk LED sebelah kiri. Ia mengubah voltan beberapa pin.
- Buat kelewatan dua milisaat. Tidak ada perubahan voltan pin.
- Memohon prototread untuk LED yang betul. Ia mengubah beberapa voltan pin.
- Buat kelewatan 2 MS. Tidak ada perubahan voltan pin.
Langkah 5: Pengaturcaraan. Fungsi Bantu
Sebelum kita mula membincangkan prototreads, kita perlu melihat beberapa fungsi pembantu. Pertama terdapat fungsi untuk menetapkan warna tertentu. Mereka berterus terang. Terdapat banyak fungsi seperti jumlah warna yang disokong (tujuh) dan satu lagi fungsi untuk mengatur LED gelap (NoColor).
Dan ada satu fungsi lagi yang secara langsung akan dipanggil oleh rutin prototread. Namanya adalah DoAndCountdown ().
Secara teknikal penggunaan fungsi seperti itu tidak wajib tetapi saya rasa senang. Ia mempunyai tiga hujah:
- Pointer berfungsi menetapkan warna LED (seperti RedColor atau GreenColor atau lain-lain)
- Nilai awal pembilang terbalik: berapa kali fungsi ini mesti digunakan pada tahap prototread tertentu.
- Penunjuk untuk membalikkan pembilang. Diasumsikan bahawa apabila terdapat perubahan warna yang membalikkan kaunter adalah 0, maka pada mulanya kod lelaran akan memberikan nilai awal kaunter tersebut. Selepas setiap kaunter lelaran dikurangkan.
Fungsi DoAndCountdown () mengembalikan nilai pembilang terbalik.
Langkah 6: Pengaturcaraan. Rutin Protothread
Dan inilah inti rangka: rutin prototread. Demi kesederhanaan, contohnya hanya terhad kepada tiga langkah: untuk perubahan warna menjadi MERAH, HIJAU, dan BIRU.
Fungsi dipanggil dengan dua argumen:
- Pointer ke struktur prototread. Struktur itu dimulakan oleh utama sebelum gelung utama dimulakan.
- Penunjuk untuk membalikkan pembilang. Ia ditetapkan ke 0 oleh utama sebelum gelung utama dimulakan.
Fungsi menetapkan voltan untuk menjadikan LED kiri aktif dan kemudian memulakan segmen prototread. Segmen ini berada di antara makro PT_BEGIN dan PT_END. Di dalamnya terdapat beberapa kod yang dalam kes kami hanya mengulangi makro PT_WAIT_UNTIL. Makro ini dilakukan seterusnya:
- Permintaan fungsi DoAndCountdown. Itu menetapkan voltan pada katod LED untuk mengeluarkan warna tertentu.
- Hasil dikembalikan berbanding dengan 0. Sekiranya keadaan 'prototread' fungsi palsu segera kembali dan memberikan kawalan ke gelung utama.
- Apabila protothread dipanggil pada kali berikutnya ia kembali menjalankan kod sebelum PT_BEGIN, kemudian melompat langsung ke dalam makro PT_WAIT_UNTIL dari mana ia kembali terakhir kali.
- Tindakan seperti itu berulang sehingga hasil DoAndCountdown adalah 0. Sekiranya tidak ada pengembalian, program tetap dalam prototread dan melaksanakan baris seterusnya kod. Dalam kes kami, ini adalah PT_WAIT_UNTIL seterusnya tetapi secara amnya ia boleh menjadi hampir semua kod C.
- Pada pelaksanaan awal pembalikan terbalik PT_WAIT_UNTIL kedua adalah 0, jadi prosedur DoAndCountdown () menetapkannya ke nilai awal. Makro kedua sekali lagi akan dilaksanakan 250 kali sehingga pembalikan terbalik mencapai 0.
- Keadaan struktur pt ditetapkan semula sebaik sahaja kawalan mencapai makro PT_END. Apabila fungsi protothread dipanggil lain kali segmen protothread mula melaksanakan garis kod tepat selepas PT_BEGIN.
Terdapat rutin prototread serupa untuk LED yang betul. Dalam contoh kami, ia hanya menetapkan susunan warna yang berbeza, tetapi jika kita melakukannya dengan cara yang sama sekali berbeza: tidak ada gandingan ketat antara rutin LED kiri dan kanan.
Langkah 7: Internals
Seluruh program kurang daripada 200 baris kod (dengan komen dan baris kosong) dan mengambil kurang dari 20% memori kod Attiny85. Sekiranya diperlukan adalah mungkin untuk menggunakan beberapa rutin prototread di sini dan memberikan logik yang lebih rumit kepada mereka.
Perpustakaan Protothreads adalah bentuk pengaturcaraan serentak komputer yang paling mudah. Pengaturcaraan serentak adalah pendekatan yang memungkinkan untuk membagi program menjadi bahagian yang logik: kadang-kadang mereka disebut coroutine, kadang-kadang thread, kadang-kadang tugas. Prinsipnya adalah bahawa setiap tugas tersebut dapat berkongsi daya pemproses yang sama sambil menjaga kod lebih kurang linear dan tidak bergantung pada bahagian lain. Tugas dari sudut pandangan logik dapat dilaksanakan secara serentak.
Untuk sistem lanjutan, kawalan tugas-tugas seperti itu dilakukan sama ada dengan kernel sistem operasi atau oleh runtime bahasa yang disisipkan ke dalam pelaksanaan oleh penyusun. Tetapi sekiranya pengaturcara aplikasi prototreads mengendalikannya secara manual dengan menggunakan perpustakaan makro protothreads dalam rutin tugas dan memanggil rutin seperti itu (biasanya keluar dari gelung utama).
Anda mungkin ingin tahu bagaimana protothread sebenarnya berfungsi? Di mana sihir itu tersembunyi? Protothreads bergantung pada ciri bahasa C khas: kenyataan bahawa pernyataan kes suis C mungkin disertakan dalam atau beberapa blok lain (seperti sementara atau untuk). Perincian yang mungkin anda dapati di laman Adam Dunkels
Dalaman elektronik projek ini sangat mudah. Foto di atas memberi anda petunjuk. Saya yakin anda boleh melakukan yang lebih baik.
Disyorkan:
Labu Halloween Dengan Mata Animatronik Bergerak - Labu Ini Dapat Melancarkan Mata !: 10 Langkah (dengan Gambar)
Labu Halloween Dengan Mata Animatronik Bergerak | Labu Ini Dapat Melancarkan Mata !: Dalam Instruksional ini, anda akan belajar bagaimana membuat labu Halloween yang menakutkan semua orang ketika matanya bergerak. Sesuaikan jarak pemicu sensor ultrasonik ke nilai yang tepat (langkah 9), dan labu anda akan membatu siapa sahaja yang berani mengambil cand
Jam Tangan Pengaturcaraan ATtiny85 Aktiviti Bergetar yang Boleh Dipakai & Pengaturcaraan ATtiny85 Dengan Arduino Uno: 4 Langkah (dengan Gambar)
Jam Tangan Pengaturcaraan & Pengaturcaraan Aktiviti Getaran ATtiny85 ATtiny85 Dengan Arduino Uno: Bagaimana membuat jam tangan aktiviti yang boleh dipakai? Ini adalah alat yang boleh dipakai yang direka untuk bergetar ketika mengesan genangan. Adakah anda menghabiskan sebahagian besar masa anda di komputer seperti saya? Adakah anda duduk berjam-jam tanpa menyedarinya? Maka peranti ini adalah
Penjaga Mata: Perlindungan Mata yang Dipicu oleh Suara: 9 Langkah (dengan Gambar)
Penjaga Mata: Perlindungan Mata yang Dipicu oleh Suara: Eye Guardian adalah suara berterusan Arduino, High-Decibel yang memicu keausan pelindung mata. Ia mengesan bunyi alat berat dan menurunkan kacamata pelindung semasa peralatan sedang digunakan. Garis Besar Pada langkah pertama, saya akan menerangkan Inspirati
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Pengawal Mikro: 4 Langkah
Bagaimana Mengukur Kitaran Frekuensi dan Tugas Tinggi, Serentak, Menggunakan Pengawal Mikro: Saya tahu pendapat anda: " Hah? Terdapat banyak Arahan tentang cara menggunakan pengawal mikro untuk mengukur frekuensi isyarat. Menguap. &Quot; Tetapi tunggu, ada yang baru dalam ini: Saya menerangkan kaedah mengukur frekuensi yang jauh lebih tinggi daripada mikro
Mata Labu Spooky Animasi: 9 Langkah (dengan Gambar)
Animated Spooky Pumpkin Eyes: Beberapa tahun yang lalu semasa mencari inspirasi untuk alat penyokong Halloween animasi baru, kami menemui video dari penyumbang YouTube 68percentwater yang disebut Arduino Servo Pumpkin. Video ini betul-betul seperti yang kami cari, namun, beberapa