Tulis bitwise ke PIN analog
Saya baru mulai belajar operan bitwise dan inilah pertanyaan saya. Untuk melakukan ini:
pinMode (13, OUTPUT);
digitalWrite (13, HIGH);
bitwise saya bisa melakukan seperti ini:
DDRB |= B00100000; //set PIN13 as OUTPUT
PORTB |= B00100000; //set PIN13 HIGH
tapi bagaimana saya bisa melakukan ini:
analogWrite(9, 200);
Saya tahu cara mengubah nomor DEC ke BIN, tetapi bagaimana cara mengirim nomor ini ke PIN PWM? Saya tidak dapat menemukan contoh yang baik di web .. Terima kasih!
Jawaban
Catatan, Anda belum menentukan, Arduino mana yang Anda gunakan. Saya mengasumsikan Arduino berbasis Atmega328p (Uno, Nano, Mini) di sini, meskipun prinsipnya bekerja dengan setiap mikrokontroler AVR, yang memiliki perangkat keras ini).
With analogWrite()
tidak mengirimkan data bitwise keluar dari pin. Ini mengkonfigurasi Timer perangkat keras untuk mengatur pin itu pada frekuensi tertentu dan dengan siklus tugas tertentu. Jadi analogWrite()
mengaktifkan perangkat keras yang sama sekali berbeda di dalam mikrokontroler.
Untuk melakukan ini tanpa fungsi Arduino analogWrite()
, Anda harus terlebih dahulu memutuskan, ke mana harus pergi:
- Anda dapat menghasilkan interupsi melalui Timer perangkat keras dan kemudian mengatur pin yang diinginkan dengan perangkat lunak di dalam ISR (yang memberi Anda pilihan pin secara bebas, tetapi juga menyebabkan beberapa jitter pada sinyal)
- atau Anda dapat membiarkan Timer perangkat keras itu sendiri mengaktifkan pin, yang tidak melibatkan perangkat lunak apa pun untuk berjalan (itu berarti Anda hanya dapat menggunakan salah satu dari 2 pin, yang terkait dengan Timer yang sesuai, tetapi Anda akan mendapatkan sinyal yang jauh lebih stabil )
Ada banyak tutorial di web tentang cara melakukannya. Pencarian untuk "arduino timer register pwm" memberi saya beberapa hasil yang menjanjikan, misalnya yang ini , di mana mereka menjelaskan, cara mendapatkan PWM dengan register Timer1 dan bebas memilih frekuensi. (Itu adalah rangkaian 3 bagian, satu bagian untuk setiap Pewaktu. Bagian 1 untuk Pewaktu 0 ada di sini , meskipun Anda mungkin ingin membiarkan Pewaktu 0 apa adanya, sehingga berfungsi seperti delay()
dan millis()
tetap bekerja seperti biasa). Ada juga banyak pertanyaan seperti itu di situs ini, misalnya yang ini .
Sumber lain yang sangat penting untuk perangkat keras apa pun yang terkait adalah lembar data dari mikrokontroler yang sesuai. Untuk Uno, Nano atau Mini yaitu Atmega328p, datasheetnya bisa dilihat di situs microchip disini (atau saat googling nama mikrokontrolernya)