Talaan ng mga Nilalaman:
- Hakbang 1: Mga Bahagi ng Paglalarawan
- Hakbang 2: Microcontroller Firmware Code
- Hakbang 3: Flashing Firmware sa Microcontroller
- Hakbang 4: Pagsubaybay sa Assembly Circuit ng Device
Video: Temperatura at Banayad na Antas ng Monitor Sa Pagpapakita sa LCD NOKIA 5110: 4 na Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Kamusta po kayo lahat!
Sa seksyong ito gumawa kami ng simpleng elektronikong aparato upang masubaybayan ang temperatura at antas ng ilaw. Ang mga sukat ng mga parameter na ito ay ipinapakita sa LCD NOKIA 5110. Ang aparato ay batay sa microcontroller AVR ATMEGA328P. Ang aparato sa pagsubaybay ay nilagyan ng DS18B20 digital thermometer at photoresistor upang masukat ang antas ng ilaw.
Hakbang 1: Mga Bahagi ng Paglalarawan
Mga pangunahing bahagi ng aparato sa pagsubaybay:
- Microcontroller AVR «ATMEGA328P»
- Monochrome Graphic LCD «NOKIA 5110»
- Programmable Resolution 1-Wire Digital Thermometer «DS18B20»
- Banayad na nakasalalay na risistor
- Mga wire
Microcontroller AVR «ATMEGA328P»
Ang aparato sa pagsubaybay ay gumagamit ng mga sumusunod na tampok sa paligid ng microcontroller:
- 16-bit na Timer / Counter makagambala
- 8-channel na 10-bit ADC
- Serial / master SPI serial interface
Monochrome Graphic LCD «NOKIA 5110»
Mga pagtutukoy:
- 48 x 84 Dot LCD Display
- Serial Bus Interface na may maximum na bilis na 4 Mbits / S
- Panloob na Controller / Driver «PCD8544»
- LED Back-Light
- Patakbuhin sa Boltahe 2.7-5 Boltahe
- Mababang pagkonsumo ng kuryente; angkop ito para sa mga aplikasyon ng baterya
- Saklaw ng temperatura mula -25˚C hanggang + 70˚C
- Suporta ng Signal CMOS Input
Pangangasiwa ng LCD Address (Addressing):
Ang pag-aayos ng memorya na ipinapakita sa LCD Display (DDRAM) ay Matrix na binubuo ng 6 na mga hilera (Y Address) mula sa Y-Address 0 hanggang Y-Address 5 at 84 na mga haligi (X Address) mula sa X-Address 0 hanggang X- Address 83. Kung nais ng gumagamit na mag-access sa posisyon ng pagpapakita ng resulta sa LCD Display, dapat na sumangguni sa ugnayan sa pagitan ng X-Address at Y-Address.
Ang data na ipapadala upang ipakita ay 8 bit (1 Byte) at isasaayos ito bilang patayong linya; sa kasong ito, ang Bit MSB ay magiging mas mababa at ang Bit LSB ay nasa itaas tulad ng ipinakita sa larawan.
Programmable Resolution 1-Wire Digital Thermometer DALLAS «DS18B20»
Mga Tampok:
- Natatanging 1-Wire® Interface Nangangailangan ng Isang Port Pin lamang para sa Komunikasyon
- Bawasan ang Bilang ng Component na may Integrated Temperature Sensor at EEPROM
- Mga Sukat ng Temperatura mula -55 ° C hanggang + 125 ° C (-67 ° F hanggang + 257 ° F)
- ± 0.5 ° C Ganap na kawastuhan mula -10 ° C hanggang + 85 ° C
- Programmable Resolution mula 9 Bits hanggang 12 Bits
- Walang Kinakailangan na Panlabas na Mga Bahagi
- Ang Parasitic Power Mode ay Nangangailangan ng 2 Pins lamang para sa Operation (DQ at GND)
- Pinapasimple ang mga Ipinamahaging Mga Application ng Temperatura-Sensing na may Multidrop na Kakayahan
- Ang bawat Device ay May Natatanging 64-Bit Serial Code na Nakaimbak sa On-Board ROM
- Ang Mga Flexible User-Definable Nonvolatile (NV) Mga Setting ng Alarm na may Alarm Search Command ay Nakikilala ang Mga Device na may Temperatura sa Labas ng Programmed Limit
Mga Aplikasyon:
- Mga Kontrol na Thermostatic
- Mga Sistema ng Pang-industriya
- Mga Produkto ng Consumer
- Thermometers
- Thermally Sensitive System
Banayad na nakasalalay na risistor
Ang Light Dependent Resistor (LDR) ay isang transducer na nagbabago ng paglaban nito kapag bumagsak ang ilaw sa mga pagbabago sa ibabaw nito.
Karaniwan ang isang LDR ay magkakaroon mula sa isang megaOhms hanggang dalawang megaOhms sa kabuuang kadiliman, mula sampu hanggang dalawampung kiloOhms sa sampung LUX, mula dalawa hanggang limang kiloohm sa 100 LUX. Ang paglaban sa pagitan ng dalawang contact ng sensor ay nababawasan ng light intensity o pagtaas ng conductance sa pagitan ng dalawang contact ng sensor.
Gumamit ng boltahe divider circuit upang i-convert ang pagbabago sa paglaban sa pagbabago ng boltahe.
Hakbang 2: Microcontroller Firmware Code
#ifndef F_CPU # tukuyin ang F_CPU 16000000UL // sinasabi sa dalas ng kristal ng controller (16 MHz AVR ATMega328P) #endif
// SPI INTERFACE DEFINES #define MOSI 3 // MOSI it's PORT B, PIN 3 #define MISO 4 // MISO it's PORT B, PIN 4 #define SCK 5 // SCK it's PORT B, PIN 5 #define SS 2 // Ang SS ay PORT B, PIN 2
// RESET THE DISPLAY #define RST 0 // RESET it's PORT B, PIN 0
// DISPLAY MODE SELECT - Input upang piliin ang alinman sa utos / address o input ng data. # tukuyin ang DC 1 // DC ito ay PORT B, PIN 1
// code array of negative signstatic const unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30};
// code array of digit [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, 0x26, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 {0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 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 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x86, 0xE6, 0xE1, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x0, 0x0, 0x03, 0x03, 0x0 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};
// code array of word "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, 0x3, 0x3 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};
// code array of word "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, 0x0, 0x0, 0x0, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};
# isama
# isama ang # isama
// Port Initializationvoid Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Itakda ang MOSI, SCK, SS, RST, DC bilang output, lahat ng iba ay nag-input ng PORTB | = (1 << RST); // Itakda ang RST pin bilang mataas na PORTB | = (1 << SS); // Itakda ang SS pin bilang mataas - Ang display ay Huwag paganahin ang DDRC = 0xFFu; // Itakda ang lahat ng mga pin ng PORTC bilang output. DDRC & = ~ (1 << 0); // Gumagawa ng unang pin ng PORTC bilang Input PORTC = 0x00u; // Itakda ang lahat ng mga pin ng PORTC mababa na papatayin. }
// ADC Initialization void ADC_init () {// Enable ADC, sampling freq = osc_freq / 128 set prescaler to max value, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Piliin ang sanggunian ng boltahe para sa ADC // Piliin ang zero na channel sa pamamagitan ng default gamit ang rehistro na ADC Multiplexer Select (ADC0). }
// Function upang mabasa ang resulta ng analog sa digital convert uint16_t get_LightLevel () {_delay_ms (10); // Maghintay ng kaunting oras para makakuha ng napiling ADCSRA | = (1 << ADSC) ang channel; // Start the ADC conversion by setting ADSC bit. isulat ang 1 sa ADSC habang (ADCSRA & (1 << ADSC)); // maghintay para makumpleto ang conversion // ADSC nagiging 0 muli hanggang sa pagkatapos, patuloy na magpatakbo ng loop _delay_ms (10); bumalik (ADC); // Ibalik ang 10-bit na resulta}
// SPI Initialization void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Paganahin ang SPI, Itakda bilang Master, Itakda ang Prescaler bilang Fosc / 16 sa kontrol ng SPI magparehistro}
// initialize 16 bit Timer1, makagambala at variable na walang bisa TIMER1_init () {// set up timer na may prescaler = 256 at CTC mode TCCR1B | = (1 << WGM12) | (1 << CS12); // initialize counter TCNT1 = 0; // ipasimula ang halaga ng paghahambing - 1 sec OCR1A = 62500; // paganahin ang ihambing ang makagambala TIMSK1 | = (1 << OCIE1A); // paganahin ang mga pandaigdigang nakakagambala sei (); }
// Display Paganahin ang walang bisa SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Paganahin ang SS pin sa lohika 0}
// Display Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // Huwag paganahin ang SS pin sa lohika 1}
// Function to send data into the display buffer void SPI_Tranceiver (unsigned char data) {SPDR = data; // Load data sa buffer habang (! (SPSR & (1 << SPIF))); // Maghintay hanggang sa makumpleto ang paghahatid}
// I-reset ang Display sa simula ng pagsisimula ng walang bisa sa Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }
// Command function function void Display_Cmnd (unsigned char data) {PORTB & = ~ (1 << DC); // make DC pin to logic 0 para sa pagpapatakbo ng utos SPI_Tranceiver (data); // send data on data register PORTB | = (1 << DC); // make DC pin to high logika para sa pagpapatakbo ng data}
// Initialization of Display void Display_init () {Display_Reset (); // reset the display Display_Cmnd (0x21); // command na itinakda sa karagdagan mode na Display_Cmnd (0xC0); // itakda ang boltahe sa pamamagitan ng pagpapadala ng C0 ay nangangahulugang VOP = 5V Display_Cmnd (0x07); // itakda ang temp koepisyent sa 3 Display_Cmnd (0x13); // itinakda ang halaga ng Voltage Bias System Display_Cmnd (0x20); // command na nakatakda sa pangunahing mode na Display_Cmnd (0x0C); // resulta ng pagpapakita sa normal na mode}
// Clear the Display void Display_Clear () {PORTB | = (1 << DC); // make DC pin to logic high for data operation for (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // make DC pin to logic zero para sa pagpapatakbo ng utos}
// itakda ang haligi at hilera sa posisyon ng pagpapakita ng resulta sa LCD Display void Display_SetXY (unsigned char x, unsigned char y) {Display_Cmnd (0x80 | x); // haligi (0-83) Display_Cmnd (0x40 | y); // row (0-5)}
// Function upang maipakita ang negatibong pag-sign void sa Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // Itakda ang address ng posisyon na ipinapakita para sa (int index = 0; index0) {SPDR = 0x30;} // Mag-load ng data sa buffer ng display (ipakita ang negatibong pag-sign) iba pa {SPDR = 0x00;} // Mag-load ng data sa ang buffer ng display (malinaw na negatibong pag-sign) habang (! (SPSR & (1 << SPIF))); // Maghintay hanggang makumpleto ang paghahatid _delay_ms (100); }}
// Function to clear the digital sign void Off_Dig (unsigned char x, unsigned char y) {Display_SetXY (x, y); // Itakda ang address ng posisyon sa display (itaas na hilera) para sa (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Mag-load ng data sa buffer ng display (malinaw na tuktok na bahagi ng digital sign) y ++; Display_SetXY (x, y); // Itakda ang address ng posisyon sa display (ilalim na hilera) para sa (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Mag-load ng data sa buffer ng display (malinaw na ilalim na bahagi ng digital sign)}
// Function to display digital sign void Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Itakda ang address ng posisyon sa display (itaas na hilera) para sa (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Itakda ang address ng posisyon sa display (ilalim na hilera) SPI_Tranceiver (font6x8 [dig] [index]); // Load code array of digit data sa buffer ng display _delay_ms (10); }}
// Initialization of DS18B20 unsigned char DS18B20_init () {DDRD | = (1 << 2); // Itakda ang PD2 pin ng PORTD bilang output PORTD & = ~ (1 << 2); // Itakda ang PD2 pin bilang mababang _delay_us (490); // Initialization Timing DDRD & = ~ (1 << 2); // Itakda ang PD2 pin ng PORTD bilang input _delay_us (68); // Timing OK_Flag = (PIND & (1 << 2)); // get sensor pulse _delay_us (422); ibalik ang OK_Flag; // return 0-ok sensor ay plug, 1-error sensor ay i-unplug}
// Function to read byte from DS18B20 unsigned char read_18b20 () {unsigned char i, data = 0; para sa (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Itakda ang PD2 pin ng PORTD bilang output _delay_us (2); // Timing DDRD & = ~ (1 1; // Susunod na bit kung (PIND & (1 << 2)) data | = 0x80; // ilagay ang bit sa byte _delay_us (62);} ibalik ang data;}
// Function upang magsulat byte sa DS18B20 walang bisa sulat_18b20 (unsigned char data) {unsigned char i; para sa (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Itakda ang PD2 pin ng PORTD bilang output _delay_us (2); // Timing if (data & 0x01) DDRD & = ~ (1 << 2); // kung nais naming sumulat ng 1, bitawan ang linya DDRD | = (1 1; // Susunod na bit _delay_us (62); // Timing DDRD & = ~ (1 << 2); // Itakda ang PD2 pin ng PORTD bilang input _delay_us (2);}}
// Function upang ipakita ang antas ng ilaw na walang bisa Read_Lux () {uint16_t buffer; unsigned int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // single digit, double digit, triple digit, quarter digit buffer = get_LightLevel (); // basahin ang resulta ng analog sa digital na pag-convert ng antas ng ilaw temp_int_0 = buffer% 10000/1000; // quarter-digit temp_int_1 = buffer% 1000/100; // triple-digit temp_int_2 = buffer% 100/10; // double-digit temp_int_3 = buffer% 10; // single-digit kung (temp_int_0> 0) // kung ang resulta ay quarter-digit na numero {Display_Dig (temp_int_0, 32, 2); // display 1 digit ng light level Display_Dig (temp_int_1, 41, 2); // display 2 digit ng light level Display_Dig (temp_int_2, 50, 2); // display 3 digit ng light level Display_Dig (temp_int_3, 59, 2); // display 4 digit ng light level} iba pa {kung (temp_int_1> 0) // kung ang resulta ay triple-digit na numero na {Off_Dig (32, 2); // clear 1 sign of number Display_Dig (temp_int_1, 41, 2); // display 1 digit ng light level Display_Dig (temp_int_2, 50, 2); // display 2 digit ng light level Display_Dig (temp_int_3, 59, 2); // display 3 digit ng light level} iba pa {kung (temp_int_2> 0) // kung ang resulta ay dobleng digit na numero {Off_Dig (32, 2); // clear 1 sign of number Off_Dig (41, 2); // clear 2 sign of number Display_Dig (temp_int_2, 50, 2); // display 1 digit ng light level Display_Dig (temp_int_3, 59, 2); // display 2 digit ng light level} iba // kung ang resulta ay solong-digit na numero {Off_Dig (32, 2); // clear 1 sign of number Off_Dig (41, 2); // clear 2 sign of number Off_Dig (50, 2); // clear 3 sign of number Display_Dig (temp_int_3, 59, 2); // display 1 digit ng light level}}}}
// Function upang ipakita ang temperatura na walang bisa Read_Temp () {unsigned int buffer; unsigned int temp_int_1, temp_int_2, temp_int_3; // solong mga digit, dobleng digit, triple digit, quarter digit na hindi naka-sign char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Initialization of DS18B20 write_18b20 (0xCC); // Sensor code check write_18b20 (0x44); // Start temperatura ng conversion _delay_ms (1000); // Sensor polling delay DS18B20_init (); // Initialization of DS18B20 write_18b20 (0xCC); // Sensor code check write_18b20 (0xBE); // Command na basahin ang mga nilalaman ng Sensor RAM Temp_L = read_18b20 (); // Basahin ang unang dalawang byte Temp_H = read_18b20 (); temp_flag = 1; // 1-positibong temperatura, 0-negatibong temperatura // Kumuha ng negatibong temperatura kung (Temp_H & (1 << 3)) // Sign Bit Check (kung nakatakda ang bit - negatibong temperatura) {sign int temp; temp_flag = 0; // flag ay nakatakda 0 - negatibong temperatura temp = (Temp_H << 8) | Temp_L; temp = -temp; // I-convert ang karagdagang code sa direktang Temp_L = temp; Temp_H = temp >> 8; } buffer = ((Temp_H 4); temp_int_1 = buffer% 1000/100; // triple-digit temp_int_2 = buffer% 100/10; // double-digit temp_int_3 = buffer% 10; // single-digit
// Kung ang temperatura ay negatibong display sign ng temperatura, iba pa ang malinaw
kung (temp_flag == 0) {Display_Neg (1);} iba pa {Display_Neg (0);} kung (temp_int_1> 0) // kung ang resulta ay triple-digit na numero {Display_Dig (temp_int_1, 45, 0); // display 1 digit ng temperatura Display_Dig (temp_int_2, 54, 0); // display 2 digit ng temperatura Display_Dig (temp_int_3, 63, 0); // display 3 digit ng temperatura} iba pa {kung (temp_int_2> 0) // kung ang resulta ay dobleng digit na numero {Off_Dig (45, 0); // clear 1 sign of number Display_Dig (temp_int_2, 54, 0); // display 1 digit ng temperatura Display_Dig (temp_int_3, 63, 0); // display 2 digit ng temperatura} iba // kung ang resulta ay solong-digit na numero {Off_Dig (45, 0); // clear 1 sign of number Off_Dig (54, 0); // clear 2 sign of number Display_Dig (temp_int_3, 63, 0); // display 1 digit ng temperatura}}}
// Ang ISR na ito ay pinaputok tuwing nangyayari ang isang tugma ng bilang ng timer na may ihambing na halaga (bawat 1 segundo) ISR (TIMER1_COMPA_vect) {// Pagbasa, pagpapakita ng temperatura at antas ng ilaw na Read_Temp (); Read_Lux (); }
// Function to display words "TEMP" and "LUX" void Display_label () {// Word "TEMP" Display_SetXY (0, 0); // Itakda ang address ng posisyon sa display (itaas na hilera) para sa (int index = 0; index <105; index ++) {kung (index == 40) {Display_SetXY (0, 1);} // Itakda ang address ng posisyon sa display (hilera sa ibaba) kung (index == 80) {Display_SetXY (72, 0);} // Itakda ang address ng posisyon sa display (itaas na hilera) kung (index == 92) {Display_SetXY (72, 1); } // Itakda ang address ng posisyon sa display (hilera sa ibaba) SPDR = TEMP_1 [index]; // Load code array data sa buffer ng display habang (! (SPSR & (1 << SPIF))); // Maghintay hanggang makumpleto ang paghahatid _delay_ms (10); } // Word "LUX" Display_SetXY (0, 2); // Itakda ang address ng posisyon sa display (itaas na hilera) para sa (int index = 0; index <60; index ++) {kung (index == 30) {Display_SetXY (0, 3);} // Itakda ang address ng posisyon sa display (hilera sa ibaba) SPDR = TEMP_2 [index]; // Load code array data sa buffer ng display habang (! (SPSR & (1 << SPIF))); // Maghintay hanggang makumpleto ang paghahatid _delay_ms (10); }}
int main (walang bisa)
{Port_Init (); // Port Initialization ADC_init (); // ADC Initialization SPI_Init (); // SPI Initialization SPI_SS_Enable (); // Display Paganahin ang DS18B20_init (); // Initialization of DS18B20 Display_init (); // Display initialization Display_Clear (); // Ipakita ang malinaw na Display_label (); // Ipakita ang mga salitang "TEMP" at "LUX" TIMER1_init (); // Timer1 Initialization. Simulan ang pagsubaybay. Pagkuha ng mga parameter bawat isang segundo. // Infinity loop habang (1) {}}
Hakbang 3: Flashing Firmware sa Microcontroller
Ang pag-upload ng HEX file sa memory ng microcontroller flash. Panoorin ang video na may detalyadong paglalarawan ng microcontroller flash memory burn: Microcontroller flash memory burn…
Hakbang 4: Pagsubaybay sa Assembly Circuit ng Device
Ikonekta ang mga sangkap alinsunod sa diagram ng eskematiko.
Plug power at ito ay gumagana!
Inirerekumendang:
Mga Banayad na DIY Banayad na Wall: 9 Mga Hakbang
DIY Ambient Wall Lights: Kumusta. Ako ay Anonymous na Hipon, maligayang pagdating sa unang tutorial ng Mga Tagubilin mula sa channel na ito. Kung nais mong makita ang higit pa dito, tingnan ang aking Youtube channel dito: https://bit.ly/3hNivF3Now, sa tutorial. Ang mga ilaw sa dingding ay kinokontrol ng isang lon
Banayad na antas ng timbang: 6 na mga hakbang
Light Up Weight Scale: Sa tutorial na ito matututunan mo kung paano gumawa ng isang scale ng pagtimbang na nakikita ang kasalukuyang timbang nito sa pamamagitan ng paggamit ng isang LED RGB strip. Bilang isang koponan nais namin ng isang paraan upang turuan ang publiko tungkol sa pag-recycle at bigyan ng insentibo ang mga ito upang mag-recycle pa, at bilang kapalit
Monitor ng PC Hardware Sa Arduino at Nokia 5110 LCD: 3 Mga Hakbang
PC Hardware Monitor Sa Arduino at Nokia 5110 LCD: Arduino based PC monitor na nagpapakita ng temperatura ng CPU, pagkarga, orasan at ginamit na pag-load ng RAMCPU o mga halaga ng orasan ay maaari ding iguhit bilang isang graph. Mga Bahagi: Arduino Nano o Arduino Pro Mini na may USB sa serial adapter Nokia 5110 84x48 LCD
Paano Gumawa ng Antas ng Antas ng Audio: 4 na Mga Hakbang
Paano Gumawa ng Antas ng Antas ng Audio: Ang Tagapagpahiwatig ng Antas ng Audio ay isang aparato na ipinapakita ang antas ng audio sa pamamagitan ng pag-iilaw ng mga leds na may paggalang sa audio amplitude. Sa Instructable na ito, Magtuturo ako na gumawa ng iyong sariling tagapagpahiwatig ng antas ng Audio sa LM3915 IC at ilang mga LED. Maaari kaming gumamit ng mga makukulay na LED upang
Pagpapakita ng Banayad na CD PLayer: 3 Mga Hakbang
CD PLayer Light Show: Mayroon akong isang lumang CD player na nakahiga at isang LED at naisipang pagsamahin ang dalawa. Ang nagresulta ay isang simpleng mini light show, kung mayroon akong iba't ibang mga may kulay na LED kung gayon maaaring mukhang mas mahusay ito. Ang nag-iisang LED na mayroon ako ay isang pula, ngunit gumana pa rin ito