- Apa itu TIMER dalam Embedded Electronics?
- Daftar Pemasa Arduino
- Pemasa Arduino Selang
- Komponen Diperlukan
- Rajah Litar
- Memprogram Arduino Pemasa UNO
Platform Pembangunan Arduino pada mulanya dikembangkan pada tahun 2005 sebagai alat yang dapat diprogramkan dengan mudah untuk projek reka bentuk seni. Tujuannya adalah untuk membantu bukan jurutera bekerja dengan elektronik dan mikrokontroler asas tanpa banyak pengetahuan pengaturcaraan. Tetapi kemudian, kerana sifatnya yang mudah digunakan, ia segera disesuaikan oleh pemula dan penggemar elektronik di seluruh dunia dan hari ini malah lebih disukai untuk pengembangan prototaip dan pengembangan POC.
Walaupun tidak mustahil untuk memulakan dengan Arduino, penting untuk perlahan-lahan beralih ke mikrokontroler teras seperti AVR, ARM, PIC, STM dll dan memprogramkannya menggunakan aplikasi asli mereka. Ini kerana bahasa Pengaturcaraan Arduino sangat mudah difahami kerana kebanyakan kerja dilakukan oleh fungsi pra-binaan seperti digitalWrite (), AnalogWrite (), Delay () dll sementara bahasa mesin tahap rendah tersembunyi di belakangnya. Program Arduino tidak serupa dengan pengekodan Embedded C yang lain di mana kami menangani bit pendaftaran dan menjadikannya tinggi atau rendah berdasarkan logik program kami.
Pemasa Arduino tanpa berlengah:
Oleh itu, untuk memahami apa yang berlaku di dalam fungsi yang telah dibina, kita perlu menggali syarat-syarat ini. Sebagai contoh apabila fungsi delay () digunakan, ia sebenarnya menetapkan bit Timer and Counter Register dari mikrokontroler ATmega.
Dalam tutorial pemasa arduino ini kita akan mengelakkan penggunaan fungsi kelewatan ini () dan sebaliknya berurusan dengan Pendaftar itu sendiri. Perkara yang baik adalah anda boleh menggunakan Arduino IDE yang sama untuk ini. Kami akan menetapkan bit register Pemasa kami dan menggunakan Timer Overflow Interrupt untuk menukar LED setiap kali gangguan berlaku. Nilai pramuat dari bit Timer juga dapat disesuaikan dengan menggunakan butang tekan untuk mengawal jangka masa gangguan berlaku.
Apa itu TIMER dalam Embedded Electronics?
Pemasa jenis mengganggu. Ia seperti jam sederhana yang dapat mengukur selang waktu suatu peristiwa. Setiap mikrokontroler mempunyai jam (pengayun), katakan di Arduino Uno ia adalah 16Mhz. Ini bertanggungjawab untuk kepantasan. Semakin tinggi frekuensi jam semakin tinggi kelajuan pemprosesan. Pemasa menggunakan pembilang yang mengira pada kelajuan tertentu bergantung pada frekuensi jam. Dalam Arduino Uno memerlukan 1/16000000 saat atau 62nano saat untuk membuat satu kiraan. Bermakna Arduino beralih dari satu arahan ke arahan lain untuk setiap 62 nano saat.
Pemasa di Arduino UNO:
Di Arduino UNO terdapat tiga pemasa yang digunakan untuk fungsi yang berbeza.
Pemasa0:
Ia adalah pemasa 8-Bit dan digunakan dalam fungsi pemasa seperti delay (), millis ().
Pemasa1:
Ini adalah pemasa 16-bit dan digunakan di perpustakaan servo.
Pemasa2:
Ini adalah Pemasa 8-Bit dan digunakan dalam fungsi nada ().
Daftar Pemasa Arduino
Untuk mengubah konfigurasi pemasa, register pemasa digunakan.
1. Daftar Kawalan Pemasa / Kaunter (TCCRnA / B):
Daftar ini menyimpan bit kawalan utama pemasa dan digunakan untuk mengawal pemasa pemasa. Ia juga memungkinkan untuk mengawal mod pemasa menggunakan bit WGM.
Format Bingkai:
TCCR1A | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
COM1A1 | COM1A0 | COM1B1 | COM1B0 | COM1C1 | COM1C0 | WGM11 | WGM10 |
TCCR1B | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICNC1 | ICES1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 |
Prescaler:
Bit CS12, CS11, CS10 dalam TCCR1B menetapkan nilai prescaler. Prescaler digunakan untuk mengatur kelajuan jam pemasa. Arduino Uno mempunyai preskala 1, 8, 64, 256, 1024.
CS12 | CS11 | CS10 | PENGGUNAAN |
0 | 0 | 0 | Tiada Jam Pemasa BERHENTI |
0 | 0 | 1 | CLCK i / o / 1 Tiada Prescaling |
0 | 1 | 0 | CLK i / o / 8 (Dari Prescaler) |
0 | 1 | 1 | CLK i / o / 64 (Dari Prescaler) |
1 | 0 | 0 | CLK i / o / 256 (Dari Prescaler) |
1 | 0 | 1 | CLK i / o / 1024 (Dari Prescaler) |
1 | 1 | 0 | Sumber jam luaran pada T1 Pin. Jam di tepi jatuh |
1 | 1 | 1 | Sumber Jam Luaran pada pin T1. Jam di tepi yang semakin meningkat. |
2. Daftar Pemasa / Kaunter (TCNTn)
Daftar ini digunakan untuk mengawal nilai pembilang dan untuk menetapkan nilai pramuat.
Formula untuk nilai pramuat untuk masa yang diperlukan dalam detik:
TCNTn = 65535 - (16x10 10 x Waktu dalam saat / Nilai Penambah)
Untuk mengira nilai pramuat untuk pemasa1 untuk masa 2 saat:
TCNT1 = 65535 - (16x10 10 x2 / 1024) = 34285
Pemasa Arduino Selang
Kami sebelum ini mengetahui tentang Arduino Interrupts dan melihat bahawa gangguan Timer adalah jenis gangguan perisian. Terdapat pelbagai gangguan pemasa di Arduino yang dijelaskan di bawah.Selang Overflow Pemasa:
Setiap kali pemasa mencapai nilai maksimumnya, katakanlah (16 Bit-65535) Timer Overflow Interrupt berlaku. Oleh itu, rutin perkhidmatan gangguan ISR dipanggil apabila Timer Overflow Interrupt bit diaktifkan dalam TOIEx yang ada dalam masker interrupt timer mendaftar TIMSKx.
Format ISR:
ISR (TIMERx_OVF_vect) { }
Daftar Perbandingan Keluaran (OCRnA / B):
Di sini apabila Output Bandingkan Match Interrupt berlaku maka perkhidmatan gangguan ISR (TIMERx_COMPy_vect) dipanggil dan juga bit flag OCFxy akan ditetapkan dalam daftar TIFRx. ISR ini diaktifkan dengan menetapkan bit aktif di OCIExy yang terdapat dalam daftar TIMSKx. Tempat TIMSKx adalah Timer Interrupt Mask Register.
Rakaman Input Pemasa:
Selanjutnya apabila pemasa Input Capture Interrupt berlaku maka perkhidmatan gangguan ISR (TIMERx_CAPT_vect) dipanggil dan juga bit bendera ICFx akan ditetapkan dalam TIFRx (Timer Interrupt Flag Register). ISR ini diaktifkan dengan menetapkan bit aktif dalam ICIEx yang terdapat dalam daftar TIMSKx.
Komponen Diperlukan
- Arduino UNO
- Tombol Tekan (2)
- LED (Sebarang Warna)
- Perintang 10k (2), 2.2k (1)
- Paparan LCD 16x2
Rajah Litar
Sambungan Litar antara paparan LCD Arduino UNO dan 16x2:
LCD 16x2 |
Arduino UNO |
VSS |
GND |
VDD |
+ 5V |
V0 |
Ke pin pusat potensiometer untuk kawalan kontras LCD |
RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5V |
K |
GND |
Dua butang Push dengan perintang tarik 10K disambungkan dengan pin Arduino 2 & 4 dan LED disambungkan ke PIN 7 Arduino melalui perintang 2.2K.
Penyediaan akan seperti gambar di bawah.
Memprogram Arduino Pemasa UNO
Dalam tutorial ini kita akan menggunakan TIMER OVERFLOW INTERRUPT dan menggunakannya untuk mengedipkan LED ON dan OFF untuk jangka masa tertentu dengan menyesuaikan nilai preloader (TCNT1) menggunakan butang tekan. Kod lengkap untuk Arduino Timer diberikan pada akhir. Di sini kita menerangkan kod baris demi baris:
Sebagai 16x2 LCD digunakan dalam proyek untuk menampilkan nilai pramuat, maka perpustakaan kristal cair digunakan
#sertakan
Pin anod LED yang dihubungkan dengan pin Arduino 7 ditakrifkan sebagai ledPin .
#define ledPin 7
Seterusnya objek untuk mengakses kelas Liquid Crystal dinyatakan dengan pin LCD (RS, E, D4, D5, D6, D7) yang dihubungkan dengan Arduino UNO.
LiquidCrystal lcd (8,9,10,11,12,13);
Kemudian tetapkan nilai pramuat 3035 selama 4 saat. Periksa formula di atas untuk mengira nilai pramuat.
nilai apungan = 3035;
Seterusnya dalam persediaan kosong (), tetapkan LCD pertama dalam mod 16x2 dan paparkan mesej selamat datang selama beberapa saat.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("ARDUINO TIMERS"); kelewatan (2000); lcd.clear ();
Seterusnya tetapkan pin LED sebagai pin OUTPUT dan butang Push ditetapkan sebagai pin INPUT
pinMode (ledPin, OUTPUT); pinMode (2, INPUT); pinMode (4, INPUT);
Seterusnya lumpuhkan semua gangguan:
noInterrupts ();
Seterusnya Timer1 dimulakan.
TCCR1A = 0; TCCR1B = 0;
Nilai pemasa pramuat ditetapkan (Pada mulanya sebagai 3035).
TCNT1 = nilai;
Kemudian nilai Pre scaler 1024 ditetapkan dalam daftar TCCR1B.
TCCR1B - = (1 << CS10) - (1 << CS12);
Timer overflow interrupt diaktifkan dalam daftar Timer Interrupt Mask sehingga ISR dapat digunakan.
TIMSK1 - = (1 << TOIE1);
Akhirnya semua gangguan diaktifkan.
mengganggu ();
Sekarang tulis ISR untuk Timer Overflow Interrupt yang bertanggungjawab menghidupkan dan mematikan LED menggunakan digitalWrite . Keadaan berubah setiap kali berlaku interupsi pemasa.
ISR (TIMER1_OVF_vect) { TCNT1 = nilai; digitalWrite (ledPin, digitalRead (ledPin) ^ 1); }
Dalam gelung void () nilai preloader ditingkatkan atau dikurangkan dengan menggunakan input butang tekan dan juga nilainya ditampilkan pada LCD 16x2.
jika (digitalRead (2) == TINGGI) { nilai = nilai + 10; // Incement preload value } if (digitalRead (4) == TINGGI) { nilai = nilai-10; // Penurunan nilai pramuat } lcd.setCursor (0,0); lcd.print (nilai); }
Jadi ini adalah bagaimana pemasa dapat digunakan untuk menghasilkan kelewatan dalam program Arduino. Lihat video di bawah ini di mana kami telah menunjukkan perubahan kelewatan dengan meningkatkan dan menurunkan nilai pramuat menggunakan butang Push.