Teman saya dan saya ingin merancang pengendali jarak jauh pembelajaran universal, seperti ini , untuk tujuan pembelajaran. Apa yang ingin kita lakukan pada dasarnya adalah menyimpan dan memutar ulang pulsa inframerah.
Kami ingin mendeteksi sinyal 36kHz, 38kHz, dan 40kHz. Sinyal 40kHz akan memiliki periode 25 s.
Kami ingin menggunakan mikrokontroler PIC 8-bit, untuk saat ini kami telah memilih PIC16F616, yang akan berjalan pada osilator kristal berkecepatan tinggi 20MHz. Kami memiliki dua opsi yang tersedia:
- Gunakan
Interrupt On Change
modul. - Gunakan mode tangkap modul CCP.
Opsi pertama adalah sebagai berikut:
Asumsikan register diatur sebagai: unsigned char _10_us = 0;
. Daftar ini akan menahan waktu. Modul TMR2 dengan register periode diatur untuk membuat interupsi setiap 10 detik. Ketika interupsi terjadi, itu akan menambah register dan keluar. Ini akan memberikan waktu maksimum 2,55 msec. Jika pengukuran waktu lebih banyak diperlukan, register tambahan seperti dapat didefinisikan dan ditambahkan sesuai kebutuhan._10_us
_1_ms
Sekarang, setiap kali interupsi dihasilkan oleh segala jenis perubahan (tinggi ke rendah atau rendah ke tinggi), program akan mencatat waktu saat ini, yaitu nilai _10_us
register. Setelah beberapa saat, ketika interupsi berikutnya dihasilkan, program akan mengurangi nilai yang disimpan dari _10_us
register, dan dengan demikian sekarang akan waktu yang diambil untuk sementara, dengan unit 10 detik.
Opsi ini membuat saya menggaruk kepala; Gangguan TMR2 akan muncul setiap 50 instruksi. Penanganan interupsi akan membutuhkan sekitar 20 instruksi. Saya memiliki 30 instruksi untuk menghitung dan menyimpan periode ke array. Akankah metode ini berhasil?
Opsi kedua adalah sebagai berikut:
Atur mode tangkap modul CCP sehingga akan menghasilkan interupsi ketika suatu peristiwa (tinggi ke rendah) terjadi pada pin CCP1. Dalam rutin interupsi, itu akan menetapkan bendera sehingga tugas dalam program dapat menghitung (jika perlu) dan menyimpan nilai CCPR1H (mungkin tidak akan diperlukan) dan CCPR1L. Kemudian kita akan mengubah konfigurasi mode pengambilan sehingga akan memicu interupsi ketika tepi rendah ke tinggi terjadi. Dan kemudian akan menunggu acara berikutnya. Saya tidak dapat memperkirakan kinerja metode ini karena saya belum pernah menggunakannya.
Pilihan lain?
Kita dapat menggunakan IC demodulator inframerah seperti seri TSOP17xx . Itu akan menyelesaikan masalah kita sepenuhnya. Namun beberapa pertanyaan muncul di benak saya.
Persyaratan jarak baca kami tidak banyak; 1 meter (~ 3 kaki). Jika kita memilih TSOP1738 yang dimaksudkan untuk bekerja dalam 38kHz, seberapa baik ini akan bekerja dengan sinyal 36kHz dan 40kHz?
Halaman 4 dari lembar data seri TSOP17xx menunjukkan grafik "Frekuensi Ketergantungan Tanggung Jawab". Sejauh yang kami mengerti;
- 40kHz, yaitu ~ 1,053 dari 38kHz, akan memberikan respons relatif ~ ~ 0,6.
- 36kHz, yaitu ~ 0,95 dari 38kHz, akan memberikan respons relatif relatif ~ 0,65.
Apa arti nilai-nilai ini? Bisakah kita menggunakan TSOP1738 dan baik-baik saja?