Sadržaj:

Monitor temperature i nivoa svjetlosti sa prikazom na LCD -u NOKIA 5110: 4 koraka
Monitor temperature i nivoa svjetlosti sa prikazom na LCD -u NOKIA 5110: 4 koraka

Video: Monitor temperature i nivoa svjetlosti sa prikazom na LCD -u NOKIA 5110: 4 koraka

Video: Monitor temperature i nivoa svjetlosti sa prikazom na LCD -u NOKIA 5110: 4 koraka
Video: Zigbee датчик освещенности, температуры и влажности с экраном на электронных чернилах Moes 2024, Juli
Anonim
Image
Image

Zdravo svima!

U ovom odjeljku izrađujemo jednostavne elektroničke uređaje za praćenje temperature i razine svjetlosti. Mjerenja ovih parametara prikazana su na LCD -u NOKIA 5110. Uređaj je zasnovan na mikrokontroleru AVR ATMEGA328P. Uređaj za nadzor opremljen je digitalnim termometrom DS18B20 i fotootpornikom za mjerenje nivoa svjetlosti.

Korak 1: Opis komponenti

Opis Komponente
Opis Komponente
Opis Komponente
Opis Komponente

Osnovne komponente uređaja za nadzor:

  • Mikrokontroler AVR «ATMEGA328P»
  • Jednobojni grafički LCD «NOKIA 5110»
  • Programabilni rezolucija 1-žični digitalni termometar «DS18B20»
  • Otpornik ovisan o svjetlu
  • Žice

Mikrokontroler AVR «ATMEGA328P»

Uređaj za nadzor koristi sljedeće periferne značajke mikrokontrolera:

  1. 16-bitni prekid brojača vremena/brojača
  2. 8-kanalni 10-bitni ADC
  3. Master/slave SPI serijsko sučelje

Jednobojni grafički LCD «NOKIA 5110»

Specifikacije:

  1. 48 x 84 tačkasti LCD ekran
  2. Sučelje serijske sabirnice s maksimalnom velikom brzinom od 4 Mbit/S
  3. Interni kontroler/upravljački program «PCD8544»
  4. LED pozadinsko osvetljenje
  5. Radi pri naponu 2,7-5 volti
  6. Mala potrošnja energije; pogodan je za primjenu na baterijama
  7. Raspon temperature od -25˚C do +70˚C
  8. Podrška Signal CMOS ulaz

Rukovanje LCD adresom (adresiranje):

Raspored adresa memorije koji je prikazan na LCD ekranu (DDRAM) je matrica koja se sastoji od 6 redova (Y adresa) od Y-adrese 0 do Y-adrese 5 i 84 kolone (X adresa) od X-adrese 0 do X- Adresa 83. Ako korisnik želi pristupiti položaju prikaza rezultata na LCD ekranu, mora se pozvati na odnos između X-adrese i Y-adrese.

Podaci koji će biti poslani na prikaz su 8 bita (1 bajt) i bit će raspoređeni kao okomita linija; u ovom slučaju Bit MSB će biti niži, a Bit LSB gornji kao što je prikazano na slici.

Programabilni rezolucija 1-žični digitalni termometar DALLAS «DS18B20»

Karakteristike:

  1. Jedinstveno 1-Wire® sučelje zahtijeva samo jedan priključak za komunikaciju
  2. Smanjite broj komponenti s integriranim senzorom temperature i EEPROM -om
  3. Mjeri temperature od -55 ° C do +125 ° C (-67 ° F do +257 ° F)
  4. ± 0,5 ° C Tačnost od -10 ° C do +85 ° C
  5. Programabilna rezolucija od 9 bita do 12 bita
  6. Nisu potrebne vanjske komponente
  7. Način parazitskog napajanja zahtijeva samo 2 pina za rad (DQ i GND)
  8. Pojednostavljuje distribuirane aplikacije za osjetljivost temperature s mogućnošću višestrukih kapi
  9. Svaki uređaj ima jedinstveni 64-bitni serijski kod pohranjen u ugrađenom ROM-u
  10. Fleksibilne korisnički definisane nehlapljive (NV) postavke alarma s naredbom za pretraživanje alarma identificiraju uređaje s temperaturama izvan programiranih granica

Prijave:

  1. Termostatske kontrole
  2. Industrijski sistemi
  3. Potrošački proizvodi
  4. Termometri
  5. Termički osjetljivi sistemi

Otpornik ovisan o svjetlu

Otpornik ovisan o svjetlosti (LDR) je pretvarač koji mijenja svoj otpor pri promjeni svjetlosti na njegovu površinu.

Obično će LDR imati od jednog megaOhma do dva megaOhma pri potpunoj tami, od deset do dvadeset kiloOhma pri deset LUX -a, od dva do pet kilooma pri 100 LUX -a. Otpor između dva kontakta senzora opada s intenzitetom svjetlosti ili se povećava vodljivost između dva kontakta senzora.

Upotrijebite krug razdjelnika napona za pretvaranje promjene otpora u promjenu napona.

Korak 2: Kôd firmvera mikrokontrolera

#ifndef F_CPU #define F_CPU 16000000UL // Kazivač frekvencije kristala kontrolera (16 MHz AVR ATMega328P) #endif

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

// RESETUJEMO ZASLON #define RST 0 // RESETUJEM PORT B, PIN 0

// DISPLAY MODE SELECT - Unos za odabir naredbe/adrese ili unosa podataka. #define DC 1 // DC to je PORT B, PIN 1

// kodira niz negativnih predznakastatic const unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30};

// kodira niz cifara [0..9] statički const bez znaka 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, 0xD,, 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, 0xEE, 0xEx, 0xEx, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// kodira niz riječi "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, 0x7C, 0x3, 0x7E, 0x7C, 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, 0x01 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x00, 0xF8, 0x00, 0x00, 0x00 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// kodira niz riječi "LUX:" const unsigned char TEMP_2 [60] = {0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE., 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#include

#include #include

// Inicijalizacija portavoid Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Postavi MOSI, SCK, SS, RST, DC kao izlaz, svi ostali ulazi PORTB | = (1 << RST); // Postavi RST pin kao visok PORTB | = (1 << SS); // Postavi SS pin kao visok - Prikaz je Onemogući DDRC = 0xFFu; // Postavite sve pinove PORTC -a kao izlaz. DDRC & = ~ (1 << 0); // Pravi prvi pin PORTC -a kao ulaz PORTC = 0x00u; // Sve pinove PORTC -a postavite na nisko što ga isključuje. }

// ADC Initialization void ADC_init () {// Omogući ADC, uzorkovanje freq = osc_freq/128 postavi predskaler na maksimalnu vrijednost, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Odabir reference napona za ADC // Odabir nule kanala prema zadanim postavkama pomoću registra za odabir ADC multipleksera (ADC0). }

// Funkcija čitanja rezultata analogno -digitalne konverzije uint16_t get_LightLevel () {_delay_ms (10); // Pričekajte neko vrijeme da kanal odabere ADCSRA | = (1 << ADSC); // Pokretanje ADC konverzije postavljanjem ADSC bita. upišite 1 u ADSC dok (ADCSRA & (1 << ADSC)); // čekamo da se konverzija dovrši // ADSC do tada opet postaje 0, kontinuirano radi petlja _delay_ms (10); povrat (ADC); // Vraća 10-bitni rezultat}

// SPI Initialization void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Omogući SPI, Postavi kao master, Postavi predskaler kao Fosc/16 u SPI kontroli registriraj}

// inicijalizira 16 -bitni Timer1, prekid i varijablu void TIMER1_init () {// postavljanje tajmera s predskalerom = 256 i CTC načinom TCCR1B | = (1 << WGM12) | (1 << CS12); // inicijalizira brojač TCNT1 = 0; // inicijalizira vrijednost usporedbe - 1 sek. OCR1A = 62500; // omogući usporedi prekid TIMSK1 | = (1 << OCIE1A); // omogući globalne prekide sei (); }

// Prikaz Enable void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Omogući SS pin za logiku 0}

// Prikaz Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // Onemogući SS pin na logiku 1}

// Funkcija slanja podataka u međuspremnik za prikaz voi SPI_Tranceiver (nepotpisani char podaci) {SPDR = data; // Učitavanje podataka u međuspremnik while (! (SPSR & (1 << SPIF))); // Pričekajte da se prijenos završi}

// Vraćanje prikaza na početak inicijalizacije void Display_Reset () {PORTB & = ~ (1 << RST); _dey_ms (100); PORTB | = (1 << RST); }

// Funkcija pisanja naredbe void Display_Cmnd (nepotpisani char podaci) {PORTB & = ~ (1 << DC); // učinimo istosmjerni pin logičkom 0 za naredbenu operaciju SPI_Tranceiver (podaci); // šalje podatke u registar podataka PORTB | = (1 << DC); // postavi DC pin na logiku visoko za rad s podacima}

// Inicijalizacija Display void Display_init () {Display_Reset (); // resetiranje prikaza Display_Cmnd (0x21); // skup naredbi u načinu dodavanja Display_Cmnd (0xC0); // postavljanje napona slanjem C0 znači VOP = 5V Display_Cmnd (0x07); // postavljanje temp. koeficijent do 3 Display_Cmnd (0x13); // postavljena vrijednost Voltage Bias System Display_Cmnd (0x20); // komanda postavljena u osnovnom modu Display_Cmnd (0x0C); // prikaz rezultata u normalnom načinu rada}

// Obriši Display void Display_Clear () {PORTB | = (1 << DC); // učinimo istosmjerni pin na logiku visokim za rad podataka za (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // postavimo istosmjerni pin na logiku nula za komandnu operaciju}

// postavljamo stupac i red na poziciju za prikaz rezultata na LCD zaslonu void Display_SetXY (bez znaka x, bez znaka y) {Display_Cmnd (0x80 | x); // stupac (0-83) Display_Cmnd (0x40 | y); // red (0-5)}

// Funkcija za prikaz negativnog predznaka void Display_Neg (nepotpisani znak) {Display_SetXY (41, 0); // Postavljanje adrese pozicije na ekranu za (int index = 0; index0) {SPDR = 0x30;} // Učitavanje podataka u bafer prikaza (negativni znak prikaza) else {SPDR = 0x00;} // Učitavanje podataka u bafer prikaza (jasan negativni predznak) while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne završi _delay_ms (100); }}

// Funkcija brisanja digitalnog znaka void Off_Dig (nepotpisani znak x, nepotpisani znak y) {Display_SetXY (x, y); // Podesite adresu pozicije na ekranu (gornji red) za (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Učitajte podatke u bafer ekrana (očistite gornji dio digitalnog znaka) y ++; Display_SetXY (x, y); // Postavi adresu pozicije na ekranu (donji red) za (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Učitaj podatke u bafer ekrana (očisti donji dio digitalnog znaka)}

// Funkcija prikaza digitalnog znaka void Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Podesite adresu pozicije na ekranu (gornji red) za (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Podesite adresu pozicije na ekranu (donji red) SPI_Tranceiver (font6x8 [dig] [index]); // Učitavanje koda niza znamenki u bafer prikaza _delay_ms (10); }}

// Inicijalizacija DS18B20 nepotpisanog znaka DS18B20_init () {DDRD | = (1 << 2); // Postavimo PD2 pin PORTD -a kao izlaz PORTD & = ~ (1 << 2); // Postavimo pin PD2 na nisko _delay_us (490); // Vrijeme inicijalizacije DDRD & = ~ (1 << 2); // Postavimo PD2 pin PORTD -a kao ulaz _delay_us (68); // Vrijeme OK_Flag = (PIND & (1 << 2)); // dobivanje impulsa senzora _delay_us (422); return OK_Flag; // senzor za povratak 0-ok je uključen, senzor za jednu grešku je isključen}

// Funkcija čitanja bajta iz DS18B20 unsigned char read_18b20 () {unsigned char i, data = 0; za (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Postavite PD2 pin PORTD -a kao izlaz _delay_us (2); // Mjerenje vremena DDRD & = ~ (1 1; // Sljedeći bit ako (PIND & (1 << 2)) podaci | = 0x80; // stavi bit u bajt _delay_us (62);} vrati podatke;}

// Funkcija pisanja bajta u DS18B20 void write_18b20 (podaci bez znakova) {unsigned char i; za (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Postavite PD2 pin PORTD -a kao izlaz _delay_us (2); // Mjerenje vremena if (podaci & 0x01) DDRD & = ~ (1 << 2); // ako želimo napisati 1, otpustimo red else DDRD | = (1 1; // Sljedeći bit _delay_us (62); // Mjerenje vremena DDRD & = ~ (1 << 2); // Postavljanje PD2 pina PORTD kao ulaz _delay_us (2);}}

// Funkcija za prikaz razine svjetlosti void Read_Lux () {uint16_t bafer; nepotpisani int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // jednocifrene, dvocifrene, trocifrene, četvrtocifrene bafer = get_LightLevel (); // očitavanje rezultata analogno -digitalnog pretvaranja nivoa svjetlosti temp_int_0 = tampon % 10000 /1000; // četvrt-znamenkasta temp_int_1 = međuspremnik % 1000 /100; // trocifrena temp_int_2 = bafer % 100 /10; // dvocifrena temp_int_3 = bafer % 10; // jednocifreni if (temp_int_0> 0) // ako je rezultat četverocifreni broj {Display_Dig (temp_int_0, 32, 2); // prikazuje 1 znamenku razine svjetlosti Display_Dig (temp_int_1, 41, 2); // prikazuje 2 znamenke nivoa svjetlosti Display_Dig (temp_int_2, 50, 2); // prikazuje 3 znamenke nivoa svjetlosti Display_Dig (temp_int_3, 59, 2); // prikazuje 4 znamenke razine svjetlosti} else {if (temp_int_1> 0) // ako je rezultat troznamenkasti broj {Off_Dig (32, 2); // briše 1 znak broja Display_Dig (temp_int_1, 41, 2); // prikazuje 1 znamenku razine svjetlosti Display_Dig (temp_int_2, 50, 2); // prikazuje 2 znamenke nivoa svjetlosti Display_Dig (temp_int_3, 59, 2); // prikazuje 3 znamenke nivoa svjetlosti} else {if (temp_int_2> 0) // ako je rezultat dvocifreni broj {Off_Dig (32, 2); // briše 1 znak broja Off_Dig (41, 2); // briše 2 znak broja Display_Dig (temp_int_2, 50, 2); // prikazuje 1 znamenku razine svjetlosti Display_Dig (temp_int_3, 59, 2); // prikazuje 2 znamenke razine svjetlosti} else // ako je rezultat jednoznamenkasti broj {Off_Dig (32, 2); // briše 1 znak broja Off_Dig (41, 2); // briše 2 znak broja Off_Dig (50, 2); // brisanje 3 znaka broja Display_Dig (temp_int_3, 59, 2); // prikazuje 1 znamenku nivoa svjetlosti}}}}

// Funkcija za prikaz temperature void Read_Temp () {unsigned int baffer; nepotpisani int temp_int_1, temp_int_2, temp_int_3; // jednocifrene, dvocifrene, trocifrene, četvrtine znamenke bez znaka Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Inicijalizacija DS18B20 write_18b20 (0xCC); // Provjera senzorskog koda write_18b20 (0x44); // Pretvorba početne temperature _delay_ms (1000); // Kašnjenje ispitivanja senzora DS18B20_init (); // Inicijalizacija DS18B20 write_18b20 (0xCC); // Provjera senzorskog koda write_18b20 (0xBE); // Naredba za čitanje sadržaja senzora RAM Temp_L = read_18b20 (); // Čitanje prva dva bajta Temp_H = read_18b20 (); temp_flag = 1; // 1-pozitivna temperatura, 0-negativna temperatura // Dobijte negativnu temperaturu ako (Temp_H & (1 << 3)) // Potpišite provjeru bita (ako je bit postavljen-negativna temperatura) {potpisana int temp; temp_flag = 0; // zastava je postavljena 0 - negativna temperatura temp = (Temp_H << 8) | Temp_L; temp = -temp; // Pretvorimo dodatni kod u direktni Temp_L = temp; Temp_H = temp >> 8; } bafer = ((Temp_H 4); temp_int_1 = bafer % 1000 /100; // trocifrena temp_int_2 = bafer % 100 /10; // dvocifrena temp_int_3 = bafer % 10; // jednocifren

// Ako je temperatura negativna, pokažite temperaturni znak temperature, inače je jasno

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // ako je rezultat trocifreni broj {Display_Dig (temp_int_1, 45, 0); // prikazuje 1 znamenku temperature Display_Dig (temp_int_2, 54, 0); // prikazuje 2 znamenke temperature Display_Dig (temp_int_3, 63, 0); // prikazuje trocifrenu temperaturu} else {if (temp_int_2> 0) // ako je rezultat dvocifreni broj {Off_Dig (45, 0); // briše 1 znak broja Display_Dig (temp_int_2, 54, 0); // prikazuje 1 znamenku temperature Display_Dig (temp_int_3, 63, 0); // prikazuje 2 znamenke temperature} else // ako je rezultat jednoznamenkasti broj {Off_Dig (45, 0); // briše 1 znak broja Off_Dig (54, 0); // brisanje 2 znaka broja Display_Dig (temp_int_3, 63, 0); // prikazuje 1 znamenku temperature}}}

// Ovaj ISR se aktivira kad god se dogodi podudaranje brojača vremena s vrijednošću uspoređivanja (svake 1 sekunde) ISR (TIMER1_COMPA_vect) {// Očitavanje, prikaz temperature i razine svjetlosti Read_Temp (); Read_Lux (); }

// Funkcija za prikaz riječi "TEMP" i "LUX" void Display_label () {// Riječ "TEMP" Display_SetXY (0, 0); // Postavljanje adrese prikazane pozicije (gornji red) za (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Postavljanje adrese pozicije na ekranu (donji red) if (index == 80) {Display_SetXY (72, 0);} // Podesite adresu pozicije na ekranu (gornji red) if (index == 92) {Display_SetXY (72, 1); } // Postavi adresu pozicije na ekranu (donji red) SPDR = TEMP_1 [indeks]; // Učitavanje podataka matrice kodova u bafer prikaza while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne završi _delay_ms (10); } // Riječ "LUX" Display_SetXY (0, 2); // Postavljanje adrese prikazane pozicije (gornji red) za (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Postavljanje adrese pozicije na ekranu (donji red) SPDR = TEMP_2 [indeks]; // Učitavanje podataka matrice kodova u bafer prikaza while (! (SPSR & (1 << SPIF))); // Pričekajte dok se prijenos ne završi _delay_ms (10); }}

int main (void)

{Port_Init (); // Inicijalizacija portova ADC_init (); // ADC inicijalizacija SPI_Init (); // SPI inicijalizacija SPI_SS_Enable (); // Omogući prikaz DS18B20_init (); // Inicijalizacija DS18B20 Display_init (); // Inicijalizacija prikaza Display_Clear (); // Jasan prikaz Display_label (); // Prikaz riječi "TEMP" i "LUX" TIMER1_init (); // Timer1 Inicijalizacija. Započni praćenje. Dobivanje parametara svake sekunde. // Beskonačna petlja while (1) {}}

Korak 3: Prebacivanje firmvera na mikrokontroler

Otpremanje HEX datoteke u fleš memoriju mikrokontrolera. Pogledajte video zapis sa detaljnim opisom snimanja fleš memorije mikrokontrolera: Flash memorija mikrokontrolera gori …

Korak 4: Nadgledanje sklopa sklopa uređaja

Nadzor sklopa sklopa uređaja
Nadzor sklopa sklopa uređaja
Nadzor sklopa sklopa uređaja
Nadzor sklopa sklopa uređaja

Spojite komponente u skladu sa shematskim dijagramom.

Uključite napajanje i radi!

Preporučuje se: