Orodha ya maudhui:

Ufuatiliaji wa Kiwango cha Joto na Nuru na Kuonyesha kwenye LCD NOKIA 5110: 4 Hatua
Ufuatiliaji wa Kiwango cha Joto na Nuru na Kuonyesha kwenye LCD NOKIA 5110: 4 Hatua

Video: Ufuatiliaji wa Kiwango cha Joto na Nuru na Kuonyesha kwenye LCD NOKIA 5110: 4 Hatua

Video: Ufuatiliaji wa Kiwango cha Joto na Nuru na Kuonyesha kwenye LCD NOKIA 5110: 4 Hatua
Video: Mshtuko !!! NAFSI ZILIZOKUFA ZILITATWA NA PEPO KATIKA NYUMBA HII YA KUTISHA 2024, Novemba
Anonim
Image
Image

Halo kila mtu!

Katika sehemu hii tunatengeneza kifaa rahisi cha elektroniki kufuatilia kiwango cha joto na mwanga. Vipimo vya vigezo hivi vinaonyeshwa kwenye LCD NOKIA 5110. Kifaa kinategemea microcontroller AVR ATMEGA328P. Kifaa cha ufuatiliaji kina vifaa vya kupima joto vya dijitali ya DS18B20 na picharesistor kupima kiwango cha mwanga.

Hatua ya 1: Maelezo Sehemu

Vipengele vya maelezo
Vipengele vya maelezo
Vipengele vya maelezo
Vipengele vya maelezo

Vipengele vya kimsingi vya kifaa cha ufuatiliaji:

  • Microcontroller AVR «ATMEGA328P»
  • Monochrome Graphic LCD «NOKIA 5110»
  • Azimio linaloweza kupangwa 1-Wire Digital Thermometer «DS18B20»
  • Kizuizi kinachotegemea mwanga
  • Waya

Microcontroller AVR «ATMEGA328P»

Kifaa cha ufuatiliaji hutumia huduma zifuatazo za pembeni za microcontroller:

  1. 16-bit Timer / Counter kukatiza
  2. 8-kituo 10-bit ADC
  3. Kiolesura cha serial cha Mwalimu / mtumwa

Monochrome Graphic LCD «NOKIA 5110»

Maelezo:

  1. Uonyesho wa 48 x 84 Dot LCD
  2. Maingiliano ya Basi ya Bus na kasi kubwa ya juu 4 Mbits / S
  3. Mdhibiti wa ndani / Dereva «PCD8544»
  4. Taa ya nyuma ya LED
  5. Endesha kwa Voltage 2.7-5 Volt
  6. Matumizi ya nguvu ya chini; inafaa kwa matumizi ya betri
  7. Kiwango cha joto kutoka -25˚C hadi + 70˚C
  8. Saini Ingizo la Ishara ya CMOS

Utunzaji wa Anwani ya LCD (Kuhutubia):

Mpangilio wa anwani ya kumbukumbu ambayo imeonyeshwa kwenye Uonyesho wa LCD (DDRAM) ni Matrix ambayo ina safu 6 (Y Anwani) kutoka Y-Anwani 0 hadi Y-Anwani 5 na safu 84 (X Anwani) kutoka X-Anwani 0 hadi X- Anwani ya 83. Ikiwa mtumiaji anataka kufikia msimamo wa kuonyesha matokeo kwenye Uonyesho wa LCD, lazima arejee uhusiano kati ya X-Anwani na Y-Anwani.

Takwimu ambazo zitatumwa kuonyesha ni 8 bit (1 Byte) na itapangwa kama laini ya wima; katika kesi hii, Bit MSB itakuwa chini na Bit LSB itakuwa juu kama inavyoonekana kwenye picha.

Azimio linalopangwa 1-Wire Digital Thermometer DALLAS «DS18B20»

vipengele:

  1. Kiunganisho cha kipekee cha 1-Wire® Inahitaji Pini Moja tu ya Bandari kwa Mawasiliano
  2. Punguza Hesabu ya Vipengele na Sensorer ya Joto Jumuishi na EEPROM
  3. Pima Joto kutoka -55 ° C hadi + 125 ° C (-67 ° F hadi + 257 ° F)
  4. ± 0.5 ° C Usahihi kutoka -10 ° C hadi + 85 ° C
  5. Azimio linalopangwa kutoka 9 Bits hadi 12 Bits
  6. Hakuna vifaa vya nje vinavyohitajika
  7. Njia ya Nguvu ya Vimelea Inahitaji Pini 2 tu za Uendeshaji (DQ na GND)
  8. Inarahisisha Maombi ya Kusambaza Joto-Kusambazwa na Uwezo wa Multidrop
  9. Kila Kifaa kina Msimbo wa kipekee wa 64-Bit Serial uliohifadhiwa kwenye ROM ya On-Board
  10. Mipangilio ya Alarm inayofafanuliwa na mtumiaji isiyoweza kubadilika (NV) na Amri ya Utafutaji wa Kengele hutambua Vifaa vyenye Joto Nje ya Mipaka Iliyopangwa.

Maombi:

  1. Udhibiti wa Thermostatic
  2. Mifumo ya Viwanda
  3. Bidhaa za Watumiaji
  4. Thermometers
  5. Mifumo nyeti ya joto

Kizuizi kinachotegemea mwanga

Resistor ya Kitegemezi cha Nuru (LDR) ni transducer ambayo hubadilisha upinzani wake wakati mwanga unapoanguka juu ya uso wake.

Kawaida LDR itakuwa na kutoka megaOhms moja hadi megaOms mbili wakati wa giza kabisa, kutoka kilo kumi hadi ishiriniOms katika 10 LUX, kutoka kilo mbili hadi tano kwa 100 LUX. Upinzani kati ya mawasiliano mawili ya sensa hupungua kwa nguvu ya mwangaza au mwenendo kati ya mawasiliano mawili ya sensa huongezeka.

Tumia mzunguko wa mgawanyiko wa voltage kubadilisha mabadiliko katika upinzani wa mabadiliko katika voltage.

Hatua ya 2: Msimbo wa Firmware ya Microcontroller

#ifndef F_CPU # fafanua F_CPU 16000000UL // kuwaambia mtiririko wa kioo cha mtawala (16 MHz AVR ATMega328P) #endif

// SPI INTERFACE INAELEZA #fafanua MOSI 3 // MOSI ni PORT B, PIN 3 #fafanua MISO 4 // MISO ni PORT B, PIN 4 #fafanua SCK 5 // SCK ni PORT B, PIN 5 #fafanua SS 2 // SS ni PORT B, PIN 2

// Rudisha UONYESHAJI #fafanua RST 0 // Rudisha ni bandari B, PIN 0

// Onyesha Uteuzi wa Njia - Ingizo kuchagua ama amri / anwani au uingizaji wa data. #fafanua DC 1 // DC ni PORT B, PIN 1

// misimbo ya safu ya ishara hasi ya saini isiyosainiwa char neg [4] = {0x30, 0x30, 0x30, 0x30};

// nambari za nambari [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,, 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}, 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 0x04, 0x06, 0x06, 0x 0, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 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};

// safu safu ya neno "TEMP:" static const unsigned char TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26 Kupakiwa kwenye tovuti: 0 | 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C 0x1E 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// nambari za safu ya neno "LUX:", 0xFC, 0x00, 0x04, 0x8E, 0xDE, 0xFC, 0xF8, 0xFC, 0xDE, 0x8E, 0x04, 0x00, 0x8C, 0x8C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0, 0, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

# pamoja

#jumuisha #jumuisha

// Uanzishaji wa Bandari haina Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); SCK, SS, RST, DC kama pato, ingiza PORTB | = (1 << RST); // Weka pini ya RST kama PORTB kubwa = = (1 << SS); Lemaza DDRC = 0xFFu; // Weka pini zote za PORTC kama pato. DDRC & = ~ (1 << 0); // Hufanya pini ya kwanza ya PORTC kama Pembejeo PORTC = 0x00u; // Weka pini zote za chini za PORTC ambazo huzima. }

// Uanzishaji wa ADC batili ADC_init () {// Wezesha ADC, sampuli freq = osc_freq / 128 set prescaler to max max, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Chagua rejeleo la voltage kwa ADC // Chagua kituo sifuri kwa msingi ukitumia ADC Multiplexer Chagua sajili (ADC0). }

// Kazi ya kusoma matokeo ya analog kwa ubadilishaji wa dijiti uint16_t pata_LightLevel () {_delay_ms (10); // Subiri kwa muda ili kituo kichaguliwe ADCSRA | = (1 << ADSC); // Anza ubadilishaji wa ADC kwa kuweka ADSC kidogo. andika 1 kwa ADSC wakati (ADCSRA & (1 << ADSC)); // subiri ubadilishaji ukamilike // ADSC inakuwa 0 tena hadi wakati huo, endesha kitanzi mfululizo _delay_ms (10); kurudi (ADC); // Rudisha matokeo ya biti 10}

// Uanzishaji wa SPI batili SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Wezesha SPI, Weka kama Mwalimu, Weka Prescaler kama Fosc / 16 katika udhibiti wa SPI kujiandikisha}

// kuanzisha 16 Timer1 kidogo, kukatiza na utupu wa kutofautisha TIMER1_init () {// kuanzisha kipima muda na prescaler = 256 na CTC mode TCCR1B | = (1 << WGM12) | (1 << CS12); // anzisha kaunta TCNT1 = 0; // anzisha thamani ya kulinganisha - sekunde 1 OCR1A = 62500; // kuwezesha kulinganisha usumbufu TIMSK1 | = (1 << OCIE1A); // kuwezesha usumbufu wa ulimwengu sei (); }

// Onyesha Wezesha batili SPI_SS_Iwezesha () {PORTB & = ~ (1 << SS); // Washa pini ya SS kwa mantiki 0}

// Onyesha Lemaza batili SPI_SS_Disable () {PORTB | = (1 << SS); // Lemaza pini ya SS kwa mantiki 1}

// Kazi ya kutuma data kwenye bafa ya kuonyesha batili SPI_Tranceiver (data ya saini isiyosainiwa) {SPDR = data; // Pakia data kwenye bafa wakati (! (SPSR & (1 << SPIF))); // Subiri hadi usafirishaji ukamilike}

// Rudisha Uonyesho mwanzoni mwa uanzishaji batili Display_Reset () {PORTB & = ~ (1 << RST); kuchelewesha (100); PORTB | = (1 << RST); }

// Amri ya kuandika kazi batili Display_Cmnd (data ya saini isiyosainiwa) {PORTB & = ~ (1 << DC); // fanya pini ya DC kwa mantiki 0 kwa operesheni ya amri SPI_Tranceiver (data); // tuma data kwenye rejista ya data PORTB | = (1 << DC); // fanya pini ya DC kuwa na mantiki ya juu kwa utendakazi wa data}

// Uanzishaji wa Onyesha batili Display_init () {Display_Reset (); // weka upya onyesho la kuonyesha_Cmnd (0x21); // amri iliyowekwa katika hali ya nyongeza Display_Cmnd (0xC0); // weka voltage kwa kutuma C0 inamaanisha VOP = 5V Display_Cmnd (0x07); // weka temp. mgawo wa 3 Display_Cmnd (0x13); // kuweka thamani ya Voltage Bias System Display_Cmnd (0x20); // amri iliyowekwa katika hali ya msingi Display_Cmnd (0x0C); // onyesho kwa hali ya kawaida}

// Futa Onyesha Tupu ya Kuonyesha wazi () {PORTB | = (1 << DC); // fanya pini ya DC kuwa na mantiki ya juu kwa operesheni ya data ya (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // fanya pini ya DC kuwa mantiki sifuri kwa operesheni ya amri}

// weka safu na safu kwenye nafasi ya kuonyesha matokeo kwenye Onyesho la batili la LCD Display_SetXY (unsigned char x, unsigned char y) {Display_Cmnd (0x80 | x); // safu (0-83) Display_Cmnd (0x40 | y); // safu (0-5)}

// Kazi ya kuonyesha ishara hasi batili Display_Neg (unsigned char neg) {Display_SetXY (41, 0); // Weka anwani ya msimamo kwenye onyesho la (int index = 0; index0) {SPDR = 0x30;} // Pakia data kwenye bafa ya onyesho (onyesha ishara hasi) mwingine {SPDR = 0x00;} // Pakia data kwenye bafa ya onyesho (ishara wazi hasi) wakati (! (SPSR & (1 << SPIF))); // Subiri hadi usafirishaji ukamilike _delay_ms (100); }}

// Kazi ya kuondoa ishara ya dijiti tupu Off_Dig (unsigned char x, unsigned char y) {Display_SetXY (x, y); // Weka anwani ya msimamo kwenye onyesho (safu ya juu) ya (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Pakia data kwenye bafa ya onyesho (wazi sehemu ya juu ya ishara ya dijiti) y ++; Display_SetXY (x, y); // Weka anwani ya nafasi kwenye onyesho (safu ya chini) kwa (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Pakia data kwenye bafa ya onyesho (wazi sehemu ya chini ya ishara ya dijiti)}

// Kazi ya kuonyesha ishara ya dijiti batili Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Weka anwani ya msimamo kwenye onyesho (safu ya juu) ya (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Weka anwani ya msimamo kwenye onyesho (safu ya chini) SPI_Tranceiver (font6x8 [dig] [index]); // Nambari za kupakia safu ya data ya nambari kwenye bafa ya onyesho _delay_ms (10); }}

// Uzinduzi wa DS18B20 unsigned char DS18B20_init () {DDRD | = (1 << 2); // Weka pini PD2 ya PORTD kama pato PORTD & = ~ (1 << 2); // Weka pini PD2 kama _delay_us ya chini (490); // Muda wa Uzinduzi wa DDRD & = ~ (1 << 2); // Weka pini PD2 ya PORTD kama pembejeo _delay_us (68); // Wakati OK_Flag = (PIND & (1 << 2)); // pata kipigo cha sensorer _delay_us (422); kurudi OK_Flag; // kurudi sensorer 0-ok ni kuziba, sensorer ya kosa 1 imechomwa}

// Kazi kusoma byte kutoka DS18B20 unsigned char read_18b20 () {unsigned char i, data = 0; kwa (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Weka pini PD2 ya PORTD kama pato _delay_us (2); // Muda wa DDRD & = ~ (1 1; // Next bit if (PIND & (1 << 2)) data | = 0x80; // put bit in byte _delay_us (62);} data ya kurudi;}

// Kazi ya kuandika byte kwa DS18B20 batili write_18b20 (unsigned char data) {unsigned char i; kwa (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Weka pini PD2 ya PORTD kama pato _delay_us (2); // Muda ikiwa (data & 0x01) DDRD & = ~ (1 << 2); // ikiwa tunataka kuandika 1, toa laini nyingine DDRD | = (1 1; // Next bit _delay_us (62); // Timing DDRD & = ~ (1 << 2); PORTD kama pembejeo _delay_us (2);}}

// Kazi ya kuonyesha kiwango cha mwanga batili Read_Lux () {uint16_t bafa; uns_ int int_int_1, temp_int_2, temp_int_3, temp_int_0; // nambari moja, nambari mbili, nambari tatu, nambari za robo = get_LightLevel (); // soma matokeo ya analog kwa dijiti kubadilisha kiwango cha nuru temp_int_0 = bafa% 10000/1000; // tarakimu ya robo temp_int_1 = bafa% 1000/100; // tarakimu tatu za temp_int_2 = bafa% 100/10; // tarakimu mbili temp_int_3 = bafa% 10; // nambari moja ikiwa (temp_int_0> 0) // ikiwa matokeo ni nambari ya nambari ya robo {Display_Dig (temp_int_0, 32, 2); // onyesha nambari 1 ya kiwango cha mwanga cha Display_Dig (temp_int_1, 41, 2); // onyesha nambari 2 ya kiwango cha mwanga cha Display_Dig (temp_int_2, 50, 2); // onyesha nambari 3 ya kiwango cha mwanga cha Display_Dig (temp_int_3, 59, 2); // onyesha nambari 4 ya kiwango cha mwanga} kingine {if (temp_int_1> 0) // ikiwa matokeo ni nambari tatu za nambari {Off_Dig (32, 2); // wazi ishara 1 ya nambari Display_Dig (temp_int_1, 41, 2); // onyesha nambari 1 ya kiwango cha mwanga cha Display_Dig (temp_int_2, 50, 2); // onyesha nambari 2 ya kiwango cha mwanga cha Display_Dig (temp_int_3, 59, 2); // onyesha nambari 3 ya kiwango cha mwanga} kingine {if (temp_int_2> 0) // ikiwa matokeo ni nambari mbili za nambari {Off_Dig (32, 2); // wazi ishara 1 ya nambari Off_Dig (41, 2); // wazi ishara 2 ya nambari Display_Dig (temp_int_2, 50, 2); // onyesha nambari 1 ya kiwango cha mwanga cha Display_Dig (temp_int_3, 59, 2); // onyesha nambari 2 ya kiwango cha mwanga} mwingine // ikiwa matokeo ni nambari ya nambari moja {Off_Dig (32, 2); // wazi ishara 1 ya nambari Off_Dig (41, 2); // wazi ishara 2 ya nambari Off_Dig (50, 2); // wazi ishara 3 ya nambari Display_Dig (temp_int_3, 59, 2); // onyesha nambari 1 ya kiwango cha mwanga}}}}

// Kazi kuonyesha joto batili Read_Temp () {unsigned int buffer; uns_ int int_int_1, temp_int_2, temp_int_3; // nambari moja, nambari mbili, nambari tatu, nambari za robo ambazo hazijasainiwa char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Uzinduzi wa DS18B20 write_18b20 (0xCC); // Nambari ya nambari ya sensoandika kuandika_18b20 (0x44); // Anza uongofu wa joto _delay_ms (1000); // Ucheleweshaji wa kupiga kura kwa sensorer DS18B20_init (); // Uzinduzi wa DS18B20 write_18b20 (0xCC); // Nambari ya nambari ya sensoandika kuandika_18b20 (0xBE); // Amri ya kusoma yaliyomo kwenye Sensor RAM Temp_L = read_18b20 (); // Soma baiti mbili za kwanza Temp_H = soma_18b20 (); temp_flag = 1; // 1-chanya joto, 0-hasi joto // Pata joto hasi ikiwa (Temp_H & (1 << 3)) // Sign Sign Check (ikiwa kidogo imewekwa - joto hasi) {saini int temp; temp_flag = 0; // bendera imewekwa 0 - hasi ya joto temp = (Temp_H << 8) | Temp_L; temp = -temp; // Badilisha nambari ya ziada kwa moja kwa moja Temp_L = temp; Temp_H = muda >> 8; } bafa = ((Temp_H 4); temp_int_1 = bafa% 1000/100; // nambari tatu temp_int_2 = bafa% 100/10;

// Ikiwa hali ya joto ni ishara hasi ya kuonyesha joto, ingine wazi

ikiwa (temp_flag == 0) {Display_Neg (1);} mwingine {Display_Neg (0);} ikiwa (temp_int_1> 0) // ikiwa matokeo ni nambari tatu za nambari {Display_Dig (temp_int_1, 45, 0); // onyesha nambari 1 ya joto Display_Dig (temp_int_2, 54, 0); // onyesha nambari 2 ya joto Display_Dig (temp_int_3, 63, 0); // onyesha tarakimu tatu za joto} kingine {if (temp_int_2> 0) // ikiwa matokeo ni nambari mbili za nambari {Off_Dig (45, 0); // wazi ishara 1 ya nambari Display_Dig (temp_int_2, 54, 0); // onyesha nambari 1 ya joto Display_Dig (temp_int_3, 63, 0); // onyesha nambari 2 ya joto} mwingine // ikiwa matokeo ni nambari ya nambari moja {Off_Dig (45, 0); // wazi ishara 1 ya nambari Off_Dig (54, 0); // wazi ishara 2 ya nambari Display_Dig (temp_int_3, 63, 0); // onyesha nambari 1 ya joto}}}

// ISR hii inafyatuliwa wakati wowote mechi inatokea kwa hesabu ya kipima muda na thamani ya kulinganisha (kila sekunde 1) ISR (TIMER1_COMPA_vect) {// Kusoma, kuonyesha joto na kiwango cha mwanga Read_Temp (); Soma_Lux (); }

// Kazi ya kuonyesha maneno "TEMP" na "LUX" batili Display_label () {// Neno "TEMP" Display_SetXY (0, 0); // Weka anwani ya msimamo kwenye onyesho (safu ya juu) ya (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // // Weka anwani ya msimamo kwenye onyesho (safu ya chini) ikiwa (index == 80) {Display_SetXY (72, 0);} // Weka anwani ya msimamo kwenye onyesho (safu ya juu) ikiwa (index == 92) {Display_SetXY (72, 1); } // Weka anwani ya msimamo kwenye onyesho (safu ya chini) SPDR = TEMP_1 [index]; Nambari za kupakia zinaweka data kwenye bafa ya onyesho wakati (! (SPSR & (1 << SPIF))); // Subiri hadi usafirishaji ukamilike _delay_ms (10); } // Neno "LUX" Display_SetXY (0, 2); // Weka anwani ya msimamo kwenye onyesho (safu ya juu) ya (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // // Weka anwani ya msimamo kwenye onyesho (safu ya chini) SPDR = TEMP_2 [index]; Nambari za kupakia zinaweka data kwenye bafa ya onyesho wakati (! (SPSR & (1 << SPIF))); // Subiri hadi usafirishaji ukamilike _delay_ms (10); }}

kuu (batili)

{Port_Init (); // Uzinduzi wa Bandari ADC_init (); // Uanzishaji wa ADC SPI_Init (); // Uanzishaji wa SPI SPI_SS_Iwezesha (); // Onyesha Wezesha DS18B20_init (); // Uzinduzi wa DS18B20 Display_init (); // Kuonyesha uanzishaji wa Display_Clear (); // Onyesha Kielelezo_cha wazi (); // Onyesha maneno "TEMP" na "LUX" TIMER1_init (); // Uanzishaji wa Timer1. Anza ufuatiliaji. Kupata vigezo kila sekunde moja. // Kitanzi cha infinity wakati (1) {}}

Hatua ya 3: Flashing Firmware kwa Microcontroller

Inapakia faili ya HEX kwenye kumbukumbu ndogo ya microcontroller. Tazama video hiyo na maelezo ya kina juu ya kuungua kwa kumbukumbu ya microcontroller: kumbukumbu ndogo ya Microcontroller inawaka…

Hatua ya 4: Ufuatiliaji Mkutano wa Mzunguko wa Kifaa

Ufuatiliaji Mkutano wa Mzunguko wa Kifaa
Ufuatiliaji Mkutano wa Mzunguko wa Kifaa
Ufuatiliaji Mkutano wa Mzunguko wa Kifaa
Ufuatiliaji Mkutano wa Mzunguko wa Kifaa

Unganisha vifaa kulingana na mchoro wa skimu.

Chomeka nguvu na inafanya kazi!

Ilipendekeza: