Daftar Isi:

Monitor Suhu dan Tingkat Cahaya Dengan Tampilan pada LCD NOKIA 5110: 4 Langkah
Monitor Suhu dan Tingkat Cahaya Dengan Tampilan pada LCD NOKIA 5110: 4 Langkah

Video: Monitor Suhu dan Tingkat Cahaya Dengan Tampilan pada LCD NOKIA 5110: 4 Langkah

Video: Monitor Suhu dan Tingkat Cahaya Dengan Tampilan pada LCD NOKIA 5110: 4 Langkah
Video: Bmp280 sensor suhu dan tekanan arduino dengan lcd 5110 (pcd8544) | arduino nano | lcd nokia 5110 2024, Juli
Anonim
Image
Image

Halo semuanya!

Pada bagian ini kami membuat perangkat elektronik sederhana untuk memantau suhu dan tingkat cahaya. Pengukuran parameter tersebut ditampilkan pada LCD NOKIA 5110. Perangkat ini berbasis mikrokontroler AVR ATMEGA328P. Alat pemantau ini dilengkapi termometer digital DS18B20 dan photoresistor untuk mengukur tingkat cahaya.

Langkah 1: Deskripsi Komponen

Deskripsi Komponen
Deskripsi Komponen
Deskripsi Komponen
Deskripsi Komponen

Komponen dasar perangkat pemantauan:

  • Mikrokontroler AVR «ATMEGA328P»
  • LCD Grafis Monokrom «NOKIA 5110»
  • Resolusi Termometer Digital 1-Kabel yang Dapat Diprogram «DS18B20»
  • Resistor tergantung cahaya
  • kabel

Mikrokontroler AVR «ATMEGA328P»

Perangkat pemantauan menggunakan fitur periferal mikrokontroler berikut:

  1. Interupsi Timer/Penghitung 16-bit
  2. 8-channel 10-bit ADC
  3. Antarmuka serial SPI master/slave

LCD Grafis Monokrom «NOKIA 5110»

Spesifikasi:

  1. Layar LCD 48 x 84 Dot
  2. Serial Bus Interface dengan kecepatan tinggi maksimum 4 Mbits/S
  3. Pengendali/Driver Internal «PCD8544»
  4. Lampu Belakang LED
  5. Jalankan pada Tegangan 2,7-5 Volt
  6. Konsumsi daya rendah; sangat cocok untuk aplikasi baterai
  7. Kisaran suhu dari -25˚C hingga +70˚C
  8. Dukungan Sinyal CMOS Input

Penanganan LCD Address (Pengalamatan):

Susunan alamat memori yang ditampilkan pada LCD Display (DDRAM) adalah Matrix yang terdiri dari 6 baris (Y Address) dari Y-Address 0 hingga Y-Address 5 dan 84 kolom (X Address) dari X-Address 0 hingga X- Alamat 83. Jika pengguna ingin mengakses posisi tampilan hasil pada LCD Display, harus mengacu pada hubungan antara X-Address dan Y-Address.

Data yang akan dikirim untuk ditampilkan adalah 8 bit (1 Byte) dan akan diatur sebagai garis vertikal; dalam hal ini, Bit MSB akan lebih rendah dan Bit LSB akan menjadi atas seperti yang ditunjukkan pada gambar.

Resolusi Termometer Digital 1-Kabel yang Dapat Diprogram DALLAS «DS18B20»

Fitur:

  1. Antarmuka 1-Wire® Unik Hanya Membutuhkan Satu Pin Port untuk Komunikasi
  2. Kurangi Jumlah Komponen dengan Sensor Suhu Terintegrasi dan EEPROM
  3. Mengukur Suhu dari -55 °C hingga +125°C (-67°F hingga +257°F)
  4. ±0,5°C Akurasi dari -10 °C hingga +85 °C
  5. Resolusi yang Dapat Diprogram dari 9 Bit hingga 12 Bit
  6. Tidak Ada Komponen Eksternal yang Diperlukan
  7. Mode Daya Parasit Hanya Membutuhkan 2 Pin untuk Pengoperasian (DQ dan GND)
  8. Menyederhanakan Aplikasi Penginderaan Suhu Terdistribusi dengan Kemampuan Multidrop
  9. Setiap Perangkat Memiliki Kode Serial 64-Bit Unik yang Disimpan di ROM On-Board
  10. Pengaturan Alarm Nonvolatil (NV) yang Dapat Ditentukan Pengguna Fleksibel dengan Perintah Pencarian Alarm Mengidentifikasi Perangkat dengan Suhu Di Luar Batas Terprogram

Aplikasi:

  1. Kontrol Termostatik
  2. Sistem Industri
  3. Produk konsumer
  4. Termometer
  5. Sistem Sensitif Termal

Resistor tergantung cahaya

Light Dependent Resistor (LDR) adalah transduser yang berubah resistansinya ketika cahaya jatuh pada permukaannya berubah.

Biasanya LDR akan memiliki dari satu megaOhm hingga dua megaOhm pada kegelapan total, dari sepuluh hingga dua puluh kiloOhm pada sepuluh LUX, dari dua hingga lima kiloohm pada 100 LUX. Resistansi antara dua kontak sensor berkurang dengan intensitas cahaya atau konduktansi antara dua kontak sensor meningkat.

Gunakan rangkaian pembagi tegangan untuk mengubah perubahan resistansi menjadi perubahan tegangan.

Langkah 2: Kode Firmware Mikrokontroler

#ifndef F_CPU#define F_CPU 16000000UL // memberitahukan frekuensi kristal pengontrol (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE DEFINES #define MOSI 3 // MOSI itu PORT B, PIN 3 #define MISO 4 // MISO itu PORT B, PIN 4 #define SCK 5 // SCK itu PORT B, PIN 5 #define SS 2 // SS itu PORT B, PIN 2

// RESET THE DISPLAY #define RST 0 // RESET PORT B, PIN 0

//PILIH MODE DISPLAY - Input untuk memilih perintah/alamat atau input data. #define DC 1 // DC itu PORT B, PIN 1

// kode array dari tanda negatif const unsigned char neg[4] = {0x30, 0x30, 0x30, 0x30};

// mengkode array angka [0..9] static const unsigned char font6x8[10][16] = { { 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 0 { 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00}, // 1 { 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 { 0x00, 0x04, 0x06, 0x26, 0x76, 0xFE, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 { 0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01}, // 4 { 0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 5 { 0xFC, 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 { 0x04, 0x06, 0x06, 0x86, 0xE6, 0xFE, 0x1C7E, 0x1C7E, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 { 0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0 3, 0x01}, // 8 { 0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9 };

// mengkode larik kata "TEMP:" static const unsigned char TEMP_1[165] = { 0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7E, 0x7E, 0x3C, 0x00 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x00, 0xF8, 0xFC, 08x 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01, };

// mengkode larik kata "LUX:" const unsigned char TEMP_2[60] = { 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x04, 0x8E, 0xDE, 0xFC, 0xF8, 0xFC, 0xDE, 0x8E, 0x04, 0x00, 0x8C, 0x8C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01 };

#termasuk

#sertakan #sertakan

// Inisialisasi Portvoid Port_Init() { DDRB = (1<<MOSI)|(1<<SCK)|(1<<SS)|(1<<RST)|(1<<DC);// Setel MOSI, SCK, SS, RST, DC sebagai output, semua input lainnya PORTB |= (1<<RST);// Setel pin RST setinggi PORTB |= (1<<SS);// Setel pin SS setinggi - Tampilan adalah Nonaktifkan DDRC=0xFFu; // Atur semua pin PORTC sebagai output. DDRC &= ~(1<<0);//Membuat pin pertama PORTC sebagai Input PORTC=0x00u; // Atur semua pin PORTC rendah yang mematikannya. }

// Inisialisasi ADC void ADC_init() { // Aktifkan ADC, sampling freq=osc_freq/128 set prescaler ke nilai maksimal, 128 ADCSRA |= (1<<ADEN) | (1<<ADPS2)| (1<<ADPS1)| (1<<ADPS0); ADMUX = (1<<REFS0); // Pilih referensi tegangan untuk ADC // Pilih saluran nol secara default menggunakan register ADC Multiplexer Select (ADC0). }

// Berfungsi untuk membaca hasil konversi analog ke digital uint16_t get_LightLevel() { _delay_ms(10); // Tunggu beberapa saat sampai channel terpilih ADCSRA |= (1<<ADSC); // Mulai konversi ADC dengan menyetel bit ADSC. tulis 1 ke ADSC while(ADCSRA & (1<<ADSC)); // tunggu konversi selesai // ADSC menjadi 0 lagi sampai saat itu, jalankan loop terus menerus _delay_ms(10); kembali (ADC); // Mengembalikan hasil 10-bit }

// Inisialisasi SPI void SPI_Init() { SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//Aktifkan SPI, Tetapkan sebagai Master, Tetapkan Prescaler sebagai Fosc/16 dalam kontrol SPI daftar }

// menginisialisasi Timer1 16 bit, interupsi dan variabel void TIMER1_init() { // mengatur timer dengan prescaler = 256 dan mode CTC TCCR1B |= (1 << WGM12)|(1 << CS12); // inisialisasi penghitung TCNT1 = 0; // inisialisasi nilai perbandingan - 1 detik OCR1A = 62500; // aktifkan bandingkan interupsi TIMSK1 |= (1 << OCIE1A); // aktifkan interupsi global sei(); }

//Display Enable void SPI_SS_Enable() { PORTB &= ~(1<<SS); // Aktifkan pin SS ke logika 0 }

//Display Disable void SPI_SS_Disable() { PORTB |= (1<<SS); // Nonaktifkan pin SS ke logika 1 }

//Fungsi untuk mengirim data ke buffer tampilan void SPI_Tranceiver (data unsigned char) { SPDR = data; //Muat data ke dalam buffer while(!(SPSR & (1<<SPIF))); //Tunggu sampai transmisi selesai }

// Reset Tampilan di awal inisialisasi void Display_Reset() { PORTB &= ~(1<<RST); _delay_ms(100); PORTB |= (1<<RST); }

//Fungsi penulisan perintah void Display_Cmnd(data karakter yang tidak ditandatangani) { PORTB &= ~(1<<DC); // jadikan pin DC ke logika 0 untuk operasi perintah SPI_Tranceiver(data); // kirim data pada register data PORTB |= (1<<DC); // membuat pin DC ke logika tinggi untuk operasi data }

//Inisialisasi Tampilan void Display_init() { Display_Reset(); // reset tampilan Display_Cmnd(0x21); // set perintah dalam mode tambahan Display_Cmnd(0xC0); // atur tegangan dengan mengirimkan C0 berarti VOP = 5V Display_Cmnd(0x07); // mengatur suhu. koefisien ke 3 Display_Cmnd(0x13); // atur nilai Bias Tegangan Sistem Display_Cmnd(0x20); // perintah diatur dalam mode dasar Display_Cmnd(0x0C); // menampilkan hasil dalam mode normal }

// Hapus Tampilan void Display_Clear() { PORTB |= (1<<DC); // jadikan pin DC ke logika tinggi untuk operasi data untuk (int k=0; k<=503; k++){SPI_Tranceiver(0x00);} PORTB &= ~(1<<DC);// buat pin DC ke logika nol untuk operasi perintah }

// atur kolom dan baris ke posisi tampilan hasil pada LCD Display void Display_SetXY(unsigned char x, unsigned char y) { Display_Cmnd(0x80|x); // kolom (0-83) Display_Cmnd(0x40|y); // baris (0-5) }

// Berfungsi untuk menampilkan tanda negatif void Display_Neg(unsigned char neg) { Display_SetXY(41, 0); // Mengatur alamat posisi pada tampilan untuk (int index=0; index0) {SPDR = 0x30;} //Memuat data ke dalam buffer tampilan (menampilkan tanda negatif) else {SPDR = 0x00;} //Memuat data ke buffer tampilan (hapus tanda negatif) while(!(SPSR & (1<<SPIF)))); //Tunggu sampai transmisi selesai _delay_ms(100); } }

// Berfungsi untuk menghapus tanda digital void Off_Dig(unsigned char x, unsigned char y) { Display_SetXY(x, y); // Atur alamat posisi pada tampilan (baris atas) untuk (int index=0; index<8; index++) {SPI_Tranceiver(0);} //Muat data ke dalam buffer tampilan (hapus bagian atas tanda digital) y++; Display_SetXY(x, y);// Atur alamat posisi pada tampilan (baris bawah) untuk (int index=0; index<8; index++) {SPI_Tranceiver(0);}// Muat data ke dalam buffer tampilan (bersihkan bagian bawah tanda digital) }

// Berfungsi untuk menampilkan tanda digital void Display_Dig(int dig, unsigned char x, unsigned char y) { Display_SetXY(x, y);// Mengatur alamat posisi pada tampilan (baris atas) untuk (int index=0; index <16; indeks++) { if (indeks==8){y++;Display_SetXY(x, y);} // Mengatur alamat posisi yang ditampilkan (baris bawah) SPI_Tranceiver(font6x8[dig][index]); // Muat kode array data digit ke dalam buffer tampilan _delay_ms(10); } }

// Inisialisasi DS18B20 unsigned char DS18B20_init() { DDRD |= (1 << 2); // Set pin PD2 dari PORTD sebagai output PORTD &= ~(1 << 2); // Setel pin PD2 serendah _delay_us(490); // Inisialisasi Waktu DDRD &= ~(1 << 2); // Set pin PD2 dari PORTD sebagai input _delay_us(68); // Waktu OK_Flag = (PIND & (1 << 2)); // dapatkan pulsa sensor _delay_us(422); kembali OK_Flag; // kembalikan sensor 0-ok dicolokkan, sensor 1-kesalahan dicabut }

// Berfungsi untuk membaca byte dari DS18B20 unsigned char read_18b20() { unsigned char i, data = 0; for(i = 0; i < 8; i++) { DDRD |= (1 << 2); // Set pin PD2 dari PORTD sebagai output _delay_us(2); // Waktu DDRD &= ~(1 1; // Bit berikutnya if(PIND & (1 << 2)) data |= 0x80; // masukkan bit ke dalam byte _delay_us(62); } kembalikan data; }

// Berfungsi untuk menulis byte ke DS18B20 void write_18b20(data unsigned char) { unsigned char i; for(i = 0; i < 8; i++) { DDRD |= (1 << 2); // Set pin PD2 dari PORTD sebagai output _delay_us(2); // Waktu jika(data & 0x01) DDRD &= ~(1 << 2); //jika kita ingin menulis 1, lepaskan baris else DDRD |= (1 1; // Next bit _delay_us(62); // Timing DDRD &= ~(1 << 2); // Set pin PD2 dari PORTD sebagai input _delay_us(2); } }

// Berfungsi untuk menampilkan tingkat cahaya void Read_Lux() { buffer uint16_t; unsigned int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // satu digit, dua digit, tiga digit, seperempat digit buffer = get_LightLevel(); // membaca hasil konversi analog ke digital tingkat cahaya temp_int_0 = buffer % 10000 / 1000; // seperempat digit temp_int_1 = buffer % 1000 / 100; // tiga digit temp_int_2 = buffer % 100 / 10; // dua digit temp_int_3 = buffer % 10; // satu digit if(temp_int_0 > 0) // jika hasilnya adalah angka seperempat digit { Display_Dig(temp_int_0, 32, 2); // menampilkan 1 digit tingkat cahaya Display_Dig(temp_int_1, 41, 2); // menampilkan 2 digit tingkat cahaya Display_Dig(temp_int_2, 50, 2); // menampilkan 3 digit tingkat cahaya Display_Dig(temp_int_3, 59, 2); // menampilkan 4 digit tingkat cahaya } else { if(temp_int_1 > 0) // jika hasilnya adalah bilangan tiga digit { Off_Dig(32, 2); // hapus 1 tanda angka Display_Dig(temp_int_1, 41, 2); // menampilkan 1 digit tingkat cahaya Display_Dig(temp_int_2, 50, 2); // menampilkan 2 digit tingkat cahaya Display_Dig(temp_int_3, 59, 2); // menampilkan 3 digit tingkat cahaya } else { if(temp_int_2 > 0) // jika hasilnya adalah angka dua digit { Off_Dig(32, 2); // hapus 1 tanda angka Off_Dig(41, 2); // hapus 2 tanda angka Display_Dig(temp_int_2, 50, 2); // menampilkan 1 digit tingkat cahaya Display_Dig(temp_int_3, 59, 2); // tampilkan 2 digit tingkat cahaya } else // jika hasilnya adalah angka satu digit { Off_Dig(32, 2); // hapus 1 tanda angka Off_Dig(41, 2); // hapus 2 tanda angka Off_Dig(50, 2); // hapus 3 tanda angka Display_Dig(temp_int_3, 59, 2); // menampilkan 1 digit tingkat cahaya } } } }

// Berfungsi untuk menampilkan temperatur void Read_Temp() { unsigned int buffer; unsigned int temp_int_1, temp_int_2, temp_int_3; // satu digit, dua digit, tiga digit, seperempat digit unsigned char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init(); // Inisialisasi DS18B20 write_18b20(0xCC); // Cek kode sensor write_18b20(0x44); // Mulai konversi suhu _delay_ms(1000); // Penundaan polling sensor DS18B20_init(); // Inisialisasi DS18B20 write_18b20(0xCC); // Cek kode sensor write_18b20(0xBE); // Perintah untuk membaca isi dari Sensor RAM Temp_L = read_18b20(); // Baca dua byte pertama Temp_H = read_18b20(); temp_flag = 1; // Suhu 1-positif, suhu 0-negatif // Dapatkan suhu negatif if(Temp_H &(1 << 3)) // Tanda Bit Periksa (jika bit disetel - suhu negatif) { ditandatangani int temp; temp_flag = 0; // flag disetel 0 - suhu negatif temp = (Temp_H <<8)|Temp_L; suhu = -suhu; // Konversi kode tambahan dalam direct Temp_L = temp; Temp_H = suhu>> 8; } buffer = ((Temp_H 4); temp_int_1 = buffer % 1000 / 100; // tiga digit temp_int_2 = buffer % 100 / 10; // dua digit temp_int_3 = buffer % 10; // satu digit

// Jika suhu adalah tanda tampilan suhu negatif, jika tidak, hapus

if(temp_flag == 0) {Display_Neg(1);} else {Display_Neg(0);} if(temp_int_1 > 0) // jika hasilnya adalah bilangan tiga digit { Display_Dig(temp_int_1, 45, 0); // menampilkan 1 digit suhu Display_Dig(temp_int_2, 54, 0); // menampilkan 2 digit suhu Display_Dig(temp_int_3, 63, 0); // menampilkan 3 digit suhu } else { if(temp_int_2 > 0) // jika hasilnya adalah angka dua digit { Off_Dig(45, 0); // hapus 1 tanda angka Display_Dig(temp_int_2, 54, 0); // menampilkan 1 digit suhu Display_Dig(temp_int_3, 63, 0); // menampilkan 2 digit suhu } else // jika hasilnya adalah angka satu digit { Off_Dig(45, 0); // hapus 1 tanda angka Off_Dig(54, 0); // hapus 2 tanda angka Display_Dig(temp_int_3, 63, 0); // menampilkan 1 digit suhu } } }

// ISR ini diaktifkan setiap kali terjadi kecocokan hitungan timer dengan nilai perbandingan (setiap 1 detik) ISR (TIMER1_COMPA_vect) { // Membaca, menampilkan suhu dan tingkat cahaya Read_Temp(); Baca_Lux(); }

// Berfungsi untuk menampilkan kata "TEMP" dan "LUX" void Display_label() { // Word "TEMP" Display_SetXY(0, 0); // Atur alamat posisi yang ditampilkan (baris atas) for (int index=0; index<105; index++) { if (index==40){Display_SetXY(0, 1);} // Atur alamat posisi pada tampilan (baris bawah) if (indeks==80){Display_SetXY(72, 0);} // Mengatur alamat posisi pada tampilan (baris atas) if (indeks==92){Display_SetXY(72, 1); } // Atur alamat posisi pada tampilan (baris bawah) SPDR = TEMP_1[indeks]; // Memuat data array kode ke dalam buffer tampilan while(!(SPSR & (1<<SPIF))); // Tunggu sampai transmisi selesai _delay_ms(10); } // Kata "LUX" Display_SetXY(0, 2); // Atur alamat posisi yang ditampilkan (baris atas) for (int index=0; index<60; index++) { if (index==30){Display_SetXY(0, 3);} // Atur alamat posisi pada tampilan (baris bawah) SPDR = TEMP_2[indeks]; // Memuat data array kode ke dalam buffer tampilan while(!(SPSR & (1<<SPIF))); // Tunggu sampai transmisi selesai _delay_ms(10); } }

int utama (kosong)

{ Port_Init(); // Inisialisasi Port ADC_init(); // Inisialisasi ADC SPI_Init(); // Inisialisasi SPI SPI_SS_Enable(); // Tampilan Aktifkan DS18B20_init(); // Inisialisasi DS18B20 Display_init(); // Menampilkan inisialisasi Display_Clear(); // Tampilan jelas Display_label(); // Menampilkan kata "TEMP" dan "LUX" TIMER1_init(); // Inisialisasi Timer1. Mulai pemantauan. Mendapatkan parameter setiap satu detik. // Perulangan tak terhingga sementara (1) {} }

Langkah 3: Mem-flash Firmware ke Mikrokontroler

Mengunggah file HEX ke dalam memori flash mikrokontroler. Tonton video dengan deskripsi terperinci tentang pembakaran memori flash mikrokontroler: Pembakaran memori flash mikrokontroler…

Langkah 4: Memantau Perakitan Sirkuit Perangkat

Rakitan Sirkuit Perangkat Pemantauan
Rakitan Sirkuit Perangkat Pemantauan
Rakitan Sirkuit Perangkat Pemantauan
Rakitan Sirkuit Perangkat Pemantauan

Hubungkan komponen sesuai dengan diagram skematik.

Pasang daya dan berfungsi!

Direkomendasikan: