Obsah:

Monitor teploty a úrovne svetla so zobrazením na LCD displeji NOKIA 5110: 4 kroky
Monitor teploty a úrovne svetla so zobrazením na LCD displeji NOKIA 5110: 4 kroky

Video: Monitor teploty a úrovne svetla so zobrazením na LCD displeji NOKIA 5110: 4 kroky

Video: Monitor teploty a úrovne svetla so zobrazením na LCD displeji NOKIA 5110: 4 kroky
Video: Zigbee датчик освещенности, температуры и влажности с экраном на электронных чернилах Moes 2024, Júl
Anonim
Image
Image

Ahojte všetci!

V tejto časti vyrábame jednoduché elektronické zariadenie na monitorovanie teploty a úrovne svetla. Merania týchto parametrov sú zobrazené na LCD NOKIA 5110. Zariadenie je založené na mikrokontroléri AVR ATMEGA328P. Monitorovacie zariadenie je vybavené digitálnym teplomerom DS18B20 a fotoodporom na meranie úrovne svetla.

Krok 1: Popis komponentov

Popis Komponenty
Popis Komponenty
Popis Komponenty
Popis Komponenty

Základné komponenty monitorovacieho zariadenia:

  • Mikrokontrolér AVR «ATMEGA328P»
  • Monochromatický grafický LCD displej «NOKIA 5110»
  • 1-vodičový digitálny teplomer s programovateľným rozlíšením «DS18B20»
  • Odpor závislý na svetle
  • Drôty

Mikrokontrolér AVR «ATMEGA328P»

Monitorovacie zariadenie používa nasledujúce periférne funkcie mikrokontroléra:

  1. 16-bitové prerušenie časovača/počítadla
  2. 8-kanálový 10-bitový ADC
  3. Sériové rozhranie Master/slave SPI

Monochromatický grafický LCD displej «NOKIA 5110»

Technické údaje:

  1. 48 x 84 bodový LCD displej
  2. Rozhranie sériovej zbernice s maximálnou vysokou rýchlosťou 4 Mbit/s
  3. Interný ovládač/ovládač «PCD8544»
  4. LED podsvietenie
  5. Beží na napätí 2,7-5 voltov
  6. Nízka spotreba energie; je vhodný pre batériové aplikácie
  7. Teplotný rozsah od -25 ° C do +70 ° C
  8. Podpora vstupného signálu CMOS

Manipulácia s LCD adresou (adresovanie):

Adresové usporiadanie pamäte, ktoré je zobrazené na displeji LCD (DDRAM), je maticová, ktorá pozostáva zo 6 riadkov (adresa Y) od adresy Y 0 do adresy Y 5 a 84 stĺpcov (adresa X) od adresy X od 0 do X- Adresa 83. Ak chce užívateľ získať prístup k pozícii zobrazenia výsledku na LCD displeji, musí sa zaoberať vzťahom medzi adresou X a adresou Y.

Údaje, ktoré budú odoslané na zobrazenie, sú 8 bitové (1 bajt) a budú usporiadané ako zvislá čiara; v tomto prípade bude bit MSB nižší a bit LSB bude vyšší, ako je znázornené na obrázku.

1-vodičový digitálny teplomer s programovateľným rozlíšením DALLAS «DS18B20»

Vlastnosti:

  1. Jedinečné 1-Wire® rozhranie vyžaduje na komunikáciu iba jeden portový kolík
  2. Znížte počet komponentov pomocou integrovaného teplotného senzora a pamäte EEPROM
  3. Meria teploty od -55 ° C do +125 ° C (-67 ° F do +257 ° F)
  4. ± 0,5 ° C Presnosť od -10 ° C do +85 ° C
  5. Programovateľné rozlíšenie od 9 bitov do 12 bitov
  6. Nevyžadujú sa žiadne externé komponenty
  7. Režim parazitickej energie vyžaduje na prevádzku iba 2 piny (DQ a GND)
  8. Zjednodušuje distribuované aplikácie na snímanie teploty s funkciou Multidrop
  9. Každé zariadenie má jedinečný 64-bitový sériový kód uložený v integrovanej pamäti ROM
  10. Flexibilné užívateľsky definovateľné neprchavé (NV) nastavenia alarmu pomocou príkazu na vyhľadávanie alarmov identifikujú zariadenia s teplotami mimo naprogramované limity

Aplikácie:

  1. Termostatické ovládače
  2. Priemyselné systémy
  3. Spotrebiteľské produkty
  4. Teplomery
  5. Tepelne citlivé systémy

Odpor závislý na svetle

Svetlo závislý odpor (LDR) je prevodník, ktorý mení svoj odpor, keď sa svetlo dopadajúce na jeho povrch zmení.

Typicky bude mať LDR od jedného megaOhmu do dvoch megaOhmov pri úplnej tme, od desať do dvadsať kiloOhmov pri desiatich LUX, od dvoch do piatich kiloohmov pri 100 LUX. Odpor medzi dvoma kontaktmi senzora klesá s intenzitou svetla alebo sa zvyšuje vodivosť medzi dvoma kontaktmi senzora.

Na premenu zmeny odporu na zmenu napätia použite obvod deliča napätia.

Krok 2: Kód firmvéru mikrokontroléra

#ifndef F_CPU #define F_CPU 16000000UL // informujúci o kryštálovej frekvencii ovládača (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 // SS, je to PORT B, PIN 2

// VYNULUJTE DISPLEJ #define RST 0 // RESETUJTE PORT B, PIN 0

// VÝBER REŽIMU ZOBRAZENIA - Vstup na výber príkazu/adresy alebo vstupu údajov. #define DC 1 // DC, je to PORT B, PIN 1

// kódy pole záporných signatických statických konštant bez znamienka char neg [4] = {0x30, 0x30, 0x30, 0x30};

// kódy pole číslic [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, 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, 0xE6, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x0 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// kódy poľa slova „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 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x0, 0xF 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// pole kódov slova „LUX:“konštantný znak bez znamienka 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, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#zahrnúť

#include #include

// Inicializácia portu Vyhnite sa Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Nastavte MOSI, SCK, SS, RST, DC ako výstup, všetky ostatné vstup PORTB | = (1 << RST); // Nastaviť pin RST ako vysoký PORTB | = (1 << SS); // Nastaviť pin SS ako vysoký - displej je Zakázať DDRC = 0xFFu; // Nastaviť všetky piny PORTC ako výstup. DDRC & = ~ (1 << 0); // Vytvorí prvý pin PORTC ako vstup PORTC = 0x00u; // Nastavte všetky piny PORTC na minimum, čím sa vypne. }

// Inicializácia ADC neplatná ADC_init () {// Povoliť ADC, vzorkovanie freq = osc_freq/128 nastaviť prescaler na maximálnu hodnotu, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Vyberte referenciu napätia pre ADC // Predvolene vyberte kanál nula pomocou registra ADC Multiplexer Select Register (ADC0). }

// Funkcia na čítanie výsledku analógovo -digitálneho prevodu uint16_t get_LightLevel () {_delay_ms (10); // Chvíľu počkajte, kým bude kanál vybraný ADCSRA | = (1 << ADSC); // Spustite prevod ADC nastavením bitu ADSC. napísať 1 do ADSC while (ADCSRA & (1 << ADSC)); // počkajte na dokončenie konverzie // ADSC sa do tej doby opäť zmení na 0, spustite slučku nepretržite _delay_ms (10); návrat (ADC); // Vrátiť 10-bitový výsledok}

// Inicializácia SPI neplatná SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Povoliť SPI, nastaviť ako hlavný, nastaviť prescaler ako Fosc/16 v ovládači SPI Registrovať }

// inicializácia 16 bitového časovača 1, prerušenia a premennej neplatné TIMER1_init () {// nastavenie časovača s predzosilňovačom = 256 a režimom CTC TCCR1B | = (1 << WGM12) | (1 << CS12); // inicializácia počítadla TCNT1 = 0; // inicializácia porovnávacej hodnoty - 1 s OCR1A = 62500; // povoliť porovnanie prerušenia TIMSK1 | = (1 << OCIE1A); // povoliť globálne prerušenia sei (); }

// Povolenie zobrazenia neplatné SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Povoliť logiku pinu SS 0}

// Disable Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // Zakázať pin SS na logiku 1}

// Funkcia na odosielanie údajov do vyrovnávacej pamäte displeja neplatná SPI_Tranceiver (nepodpísané údaje znaku) {SPDR = data; // Načítanie údajov do vyrovnávacej pamäte while (! (SPSR & (1 << SPIF))); // Počkajte na dokončenie prenosu}

// Reset displeja na začiatku inicializácie neplatný Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }

// Funkcia zápisu príkazu neplatná Display_Cmnd (nepodpísané údaje char) {PORTB & = ~ (1 << DC); // urobte DC pin do logiky 0 pre príkazovú operáciu SPI_Tranceiver (data); // odoslanie údajov do dátového registra PORTB | = (1 << DC); // aby bol DC pin na logickej úrovni pre dátovú prevádzku}

// Inicializácia zobrazenia neplatná Display_init () {Display_Reset (); // reset displeja Display_Cmnd (0x21); // príkaz nastavený v režime pridávania Display_Cmnd (0xC0); // nastavenie napätia odoslaním C0 znamená VOP = 5V Display_Cmnd (0x07); // nastavenie teploty. koeficient do 3 Display_Cmnd (0x13); // nastavená hodnota systému predpätia napätia Display_Cmnd (0x20); // príkaz nastavený v základnom režime Display_Cmnd (0x0C); // zobrazenie výsledku v normálnom režime}

// Vymažte prázdnu obrazovku Display_Clear () {PORTB | = (1 << DC); // nastavenie DC pinu na logiku na vysokú hodnotu pre dátové operácie pre (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // prevedenie DC pinu na logiku nula pre príkazovú operáciu}

// nastavenie stĺpca a riadka na pozíciu zobrazenia výsledku na LCD displeji neplatné Display_SetXY (znak bez znamienka, znak bez znamienka) {Display_Cmnd (0x80 | x); // stlpec (0-83) Display_Cmnd (0x40 | y); // riadok (0-5)}

// Funkcia na zobrazenie záporného znamienka neplatná Display_Neg (znak bez znamienka) {Display_SetXY (41, 0); // Nastavte adresu polohy na displeji pre (int index = 0; index0) {SPDR = 0x30;} // Načítanie údajov do vyrovnávacej pamäte displeja (zobrazenie záporného znamienka) else {SPDR = 0x00;} // Načítanie údajov do vyrovnávacia pamäť displeja (jasné znamienko mínus) while (! (SPSR & (1 << SPIF))); // Počkajte na dokončenie prenosu _delay_ms (100); }}

// Funkcia na vymazanie digitálneho znaku neplatná Off_Dig (znak bez znamienka, znak bez znamienka) {Display_SetXY (x, y); // Nastavenie adresy polohy na displeji (horný riadok) pre (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Načítanie údajov do vyrovnávacej pamäte displeja (vymazať hornú časť digitálneho znaku) y ++; Display_SetXY (x, y); // Nastavte adresu polohy na displeji (dolný riadok) pre (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Načítanie údajov do vyrovnávacej pamäte displeja (vyčistiť spodnú časť digitálneho znaku)}

// Funkcia na zobrazenie digitálneho znaku neplatná Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Set the address of position on display (top row) for (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Nastavenie adresy polohy na displeji (dolný riadok) SPI_Tranceiver (font6x8 [dig] [index]); // Načítanie kódov pole číslic údajov do vyrovnávacej pamäte displeja _delay_ms (10); }}

// Inicializácia DS18B20 nepodpísaného znaku DS18B20_init () {DDRD | = (1 << 2); // Nastaviť pin PD2 portu PORTD ako výstup PORTD & = ~ (1 << 2); // Nastaviť pin PD2 ako nízky _delay_us (490); // Časovanie inicializácie DDRD & = ~ (1 << 2); // Nastaviť pin PD2 portu PORTD ako vstup _delay_us (68); // Časovanie OK_Flag = (PIND & (1 << 2)); // získajte impulz senzora _delay_us (422); vrátiť OK_Flag; // návrat 0-ok senzor je zapojený, 1-chybový senzor je odpojený}

// Funkcia na čítanie bajtu z DS18B20 nepodpísaný znak read_18b20 () {unsigned char i, data = 0; pre (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Nastaviť pin PD2 portu PORTD ako výstup _delay_us (2); // Časovanie DDRD & = ~ (1 1; // Ďalší bit, ak (PIND & (1 << 2)) dáta | = 0x80; // vloží bit do bajtu _delay_us (62);} vráti údaje;}

// Funkcia zápisu bajtu do DS18B20 neplatné write_18b20 (nepodpísané údaje znaku) {unsigned char i; pre (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Nastaviť pin PD2 portu PORTD ako výstup _delay_us (2); // Časovanie if (údaje & 0x01) DDRD & = ~ (1 << 2); // ak chceme zapísať 1, uvoľnite riadok inak DDRD | = (1 1; // Ďalší bit _delay_us (62); // Časovanie DDRD & = ~ (1 << 2); // Nastavte pin PD2 PORTD ako vstup _delay_us (2);}}

// Funkcia na zobrazenie úrovne svetla prázdna Read_Lux () {uint16_t buffer; bez znamienka int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // jednociferné, dvojciferné, trojciferné, štvrťciferné buffer = get_LightLevel (); // prečítajte výsledok analógovo -digitálneho prevodu úroveň svetla temp_int_0 = vyrovnávacia pamäť % 10000 /1000; // štvrťciferné temp_int_1 = vyrovnávacia pamäť % 1000 /100; // trojciferný temp_int_2 = buffer % 100 /10; // dvojciferné temp_int_3 = vyrovnávacia pamäť % 10; // jednociferné if (temp_int_0> 0) // ak je výsledok štvrťciferné číslo {Display_Dig (temp_int_0, 32, 2); // zobrazenie 1 číslice úrovne osvetlenia Display_Dig (temp_int_1, 41, 2); // zobrazenie 2 číslic úrovne svetla Display_Dig (temp_int_2, 50, 2); // zobrazenie 3 číslic úrovne svetla Display_Dig (temp_int_3, 59, 2); // zobrazenie 4 číslic úrovne svetla} else {if (temp_int_1> 0) // ak je výsledok trojciferné číslo {Off_Dig (32, 2); // vymazanie 1 znaku čísla Display_Dig (temp_int_1, 41, 2); // zobrazenie 1 číslice úrovne osvetlenia Display_Dig (temp_int_2, 50, 2); // zobrazenie 2 číslic úrovne svetla Display_Dig (temp_int_3, 59, 2); // zobrazenie 3 číslic úrovne osvetlenia} else {if (temp_int_2> 0) // if result is double-digit number {Off_Dig (32, 2); // vymazať 1 znak čísla Off_Dig (41, 2); // vymazanie 2 znaku čísla Display_Dig (temp_int_2, 50, 2); // zobrazenie 1 číslice úrovne svetla Display_Dig (temp_int_3, 59, 2); // zobrazenie 2 číslic úrovne svetla} else // ak je výsledkom jednociferné číslo {Off_Dig (32, 2); // vymazať 1 znak čísla Off_Dig (41, 2); // vymazanie 2 znamienka cisla Off_Dig (50, 2); // vymazanie 3 znaku čísla Display_Dig (temp_int_3, 59, 2); // zobrazenie 1 číslice úrovne svetla}}}}

// Funkcia na zobrazenie teploty neplatná Read_Temp () {unsigned int buffer; bez znamienka int temp_int_1, temp_int_2, temp_int_3; // jednociferné, dvojciferné, trojciferné, štvrťciferné znaky bez znamienka Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Inicializácia DS18B20 write_18b20 (0xCC); // kontrola kódu senzora write_18b20 (0x44); // Spustenie prevodu teploty _delay_ms (1000); // Oneskorenie pollingu senzora DS18B20_init (); // Inicializácia DS18B20 write_18b20 (0xCC); // kontrola kódu senzora write_18b20 (0xBE); // Príkaz na prečítanie obsahu pamäte RAM Temp_L = read_18b20 (); // Prečítanie prvých dvoch bajtov Temp_H = read_18b20 (); temp_flag = 1; // 1-pozitívna teplota, 0-negatívna teplota // Získať negatívnu teplotu, ak (Temp_H & (1 << 3)) // Sign Bit Check (ak je bit nastavený-negatívna teplota) {signed int temp; temp_flag = 0; // príznak je nastavený na 0 - negatívna teplota teplota = (Temp_H << 8) | Temp_L; temp = -temp; // Previesť dodatočný kód priamo Temp_L = temp; Teplota_H = teplota >> 8; } buffer = ((Temp_H 4); temp_int_1 = buffer % 1000 /100; // trojmiestne temp_int_2 = buffer % 100 /10; // dvojciferné temp_int_3 = buffer % 10; // jednociferné

// Ak je teplota záporná, zobrazí sa znak teploty, inak sa zruší

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // if result is trojcifer number number {Display_Dig (temp_int_1, 45, 0); // zobrazenie 1 číslice teploty Display_Dig (temp_int_2, 54, 0); // zobrazenie 2 číslic teploty Display_Dig (temp_int_3, 63, 0); // zobrazenie 3 číslic teploty} else {if (temp_int_2> 0) // ak je výsledok dvojciferné číslo {Off_Dig (45, 0); // vymazanie 1 znaku čísla Display_Dig (temp_int_2, 54, 0); // zobrazenie 1 číslice teploty Display_Dig (temp_int_3, 63, 0); // zobrazenie 2 číslic teploty} else // ak je výsledkom jednociferné číslo {Off_Dig (45, 0); // vymazať 1 znak čísla Off_Dig (54, 0); // vymazanie 2 znaku čísla Display_Dig (temp_int_3, 63, 0); // zobrazenie 1 číslice teploty}}}

// Tento ISR sa spustí vždy, keď dôjde k zhode počtu časovačov s porovnávacou hodnotou (každú 1 sekundu) ISR (TIMER1_COMPA_vect) {// Čítanie, zobrazenie teploty a úrovne svetla Read_Temp (); Read_Lux (); }

// Funkcia na zobrazenie slov "TEMP" a "LUX" neplatná Display_label () {// Slovo "TEMP" Display_SetXY (0, 0); // Nastavte adresu polohy na displeji (v hornom riadku) pre (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Nastavte adresu polohy na displeji (spodný riadok) if (index == 80) {Display_SetXY (72, 0);} // Nastavte adresu polohy na displeji (v hornom riadku) if (index == 92) {Display_SetXY (72, 1); } // Nastaviť adresu polohy na displeji (spodný riadok) SPDR = TEMP_1 [index]; // Načítanie údajov poľa kódov do vyrovnávacej pamäte displeja while (! (SPSR & (1 << SPIF))); // Počkajte na dokončenie prenosu _delay_ms (10); } // Word "LUX" Display_SetXY (0, 2); // Nastavte adresu polohy na displeji (v hornom riadku) pre (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Nastavte adresu polohy na displeji (spodný riadok) SPDR = TEMP_2 [index]; // Načítanie údajov poľa kódov do vyrovnávacej pamäte displeja while (! (SPSR & (1 << SPIF))); // Počkajte na dokončenie prenosu _delay_ms (10); }}

int main (prázdny)

{Port_Init (); // Inicializácia portu ADC_init (); // Inicializácia ADC SPI_Init (); // Inicializácia SPI SPI_SS_Enable (); // Povolenie zobrazovania DS18B20_init (); // Inicializácia DS18B20 Display_init (); // Inicializácia displeja Display_Clear (); // Display clear Display_label (); // Zobrazenie slov "TEMP" a "LUX" TIMER1_init (); // Inicializácia časovača 1. Začnite monitorovať. Získavanie parametrov každú jednu sekundu. // Nekonečná slučka while (1) {}}

Krok 3: Blikanie firmvéru do mikrokontroléra

Odovzdanie súboru HEX do pamäte flash mikrokontroléra. Pozrite si video s podrobným popisom napaľovania pamäte flash mikrokontroléra: napaľovanie pamäte flash mikrokontroléra …

Krok 4: Zostava obvodu monitorovacieho zariadenia

Zostava obvodu monitorovacieho zariadenia
Zostava obvodu monitorovacieho zariadenia
Zostava obvodu monitorovacieho zariadenia
Zostava obvodu monitorovacieho zariadenia

Pripojte komponenty podľa schematického diagramu.

Pripojte napájanie a funguje to!

Odporúča: