INHOUDSOPGAWE:

Temperatuur- en ligvlakmonitor met vertoning op LCD NOKIA 5110: 4 stappe
Temperatuur- en ligvlakmonitor met vertoning op LCD NOKIA 5110: 4 stappe

Video: Temperatuur- en ligvlakmonitor met vertoning op LCD NOKIA 5110: 4 stappe

Video: Temperatuur- en ligvlakmonitor met vertoning op LCD NOKIA 5110: 4 stappe
Video: Multimeter Mastech MS8229. Unboxing, korte review en test. 2024, Julie
Anonim
Image
Image

Hallo almal!

In hierdie afdeling maak ons 'n eenvoudige elektroniese toestel om die temperatuur en ligvlak te monitor. Metings van hierdie parameters word op LCD NOKIA 5110 vertoon. Die toestel is gebaseer op die mikrokontroleur AVR ATMEGA328P. Die moniteringsapparaat is toegerus met DS18B20 digitale termometer en fotoresistor om die ligvlak te meet.

Stap 1: Beskrywingskomponente

Beskrywing Komponente
Beskrywing Komponente
Beskrywing Komponente
Beskrywing Komponente

Basiese komponente van die moniteringstoestel:

  • Mikrokontroleur AVR «ATMEGA328P»
  • Monochroom grafiese LCD «NOKIA 5110»
  • Programmeerbare resolusie 1-draads digitale termometer «DS18B20»
  • Weerstand wat lig afhanklik is
  • Drade

Mikrokontroleur AVR «ATMEGA328P»

Moniteringstoestel gebruik die volgende perifere funksies van mikrobeheerder:

  1. 16-bis-timer/telleronderbreking
  2. 8-kanaals 10-bis ADC
  3. Master/slave SPI seriële koppelvlak

Monochroom grafiese LCD «NOKIA 5110»

Spesifikasies:

  1. 48 x 84 kolletjies LCD -skerm
  2. Seriële bus -koppelvlak met maksimum hoë snelheid 4 Mbits/S
  3. Interne beheerder/bestuurder «PCD8544»
  4. LED-agterlig
  5. Draai op spanning 2,7-5 volt
  6. Lae kragverbruik; dit is geskik vir batterytoepassings
  7. Temperatuur wissel van -25˚C tot +70˚C
  8. Ondersteun Signal CMOS -invoer

Hantering van LCD -adres (adressering):

Die adresreëling van geheue wat op LCD-skerm (DDRAM) getoon word, is Matrix wat bestaan uit 6 rye (Y-adres) van Y-adres 0 tot Y-adres 5 en 84 kolomme (X-adres) van X-adres 0 tot X- Adres 83. As die gebruiker toegang wil hê tot die posisie waarop die resultaat op die LCD-skerm verskyn, moet dit verwys na die verhouding tussen X-adres en Y-adres.

Data wat na die vertoning gestuur sal word, is 8 bis (1 Byte) en dit sal as 'n vertikale lyn gerangskik word; in hierdie geval is Bit MSB laer en Bit LSB bo, soos in die prentjie gewys word.

Programmeerbare resolusie 1-draads digitale termometer DALLAS «DS18B20»

Kenmerke:

  1. Unieke 1-Wire®-koppelvlak benodig slegs een poortpen vir kommunikasie
  2. Verminder komponenttelling met geïntegreerde temperatuursensor en EEPROM
  3. Meet temperature van -55 ° C tot +125 ° C (-67 ° F tot +257 ° F)
  4. ± 0,5 ° C Akkuraatheid van -10 ° C tot +85 ° C
  5. Programmeerbare resolusie van 9 bis tot 12 bits
  6. Geen eksterne komponente word benodig nie
  7. Parasitiese kragmodus benodig slegs 2 penne vir werking (DQ en GND)
  8. Vereenvoudig verspreide temperatuurwaarnemende toepassings met multidrop-vermoë
  9. Elke toestel het 'n unieke 64-bis-reekskode wat in die ingeboude ROM gestoor is
  10. Buigsame gebruiker-definieerbare nie-vlugtige (NV) alarminstellings met alarmsoekopdrag identifiseer toestelle met temperature buite geprogrammeerde perke

Aansoeke:

  1. Termostatiese kontroles
  2. Industriële stelsels
  3. Verbruikersprodukte
  4. Termometers
  5. Termies sensitiewe stelsels

Weerstand wat lig afhanklik is

Ligafhanklike weerstand (LDR) is 'n transducer wat sy weerstand verander wanneer lig op die oppervlak val.

Gewoonlik sal 'n LDR van een megaOhms tot twee megaOhms in totale duisternis hê, van tien tot twintig kiloOhms by tien LUX, van twee tot vyf kiloohms by 100 LUX. Die weerstand tussen die twee kontakpunte van die sensor neem af met die ligintensiteit of die geleiding tussen die twee kontakte van die sensor neem toe.

Gebruik 'n spanningsverdelerkring om die verandering in weerstand na verandering in spanning om te skakel.

Stap 2: Firmware -kode vir mikrobeheerder

#ifndef F_CPU #definieer F_CPU 16000000UL // vertel die kristalfrekwensie van die beheerder (16 MHz AVR ATMega328P) #endif

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

// HERSTEL DIE SKERM #definieer RST 0 // RESET dit is PORT B, PIN 0

// DISPLAY MODE SELECT - Invoer om óf opdrag/adres óf data -invoer te kies. #definieer DC 1 // DC dis PORT B, PIN 1

// kodes -reeks negatiewe tekenstatus const unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30};

// kodes reeks syfers [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, 0x6, 0x6, 0x6, 0x6, 0x6, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x3, 0x0, 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// kodesreeks van woord "TEMP:" statiese 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, 0x7, 0x8, 0x8, 0x8 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, 0x0, 0x8 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// kodesreeks van woord "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,, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#insluit

#include #include

// Portinitialiseringvoid Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Stel MOSI in, SCK, SS, RST, DC as uitset, alle ander invoer PORTB | = (1 << RST); // Stel RST -pen so hoog PORTB | = (1 << SS); // Stel SS -pen so hoog - Display is Deaktiveer DDRC = 0xFFu; // Stel alle penne van die PORTC as uitvoer. DDRC & = ~ (1 << 0); // Maak die eerste pen van PORTC as invoer PORTC = 0x00u; // Stel alle penne van PORTC laag, wat dit uitskakel. }

// ADC Initialization void ADC_init () {// Aktiveer ADC, monsterneming freq = osc_freq/128 stel prescaler op maksimum waarde, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Kies die spanningsverwysing vir die ADC // Kies standaard kanaal nul met behulp van die ADC Multiplexer Select register (ADC0). }

// Funksie om die resultaat van analoog na digitaal om te lees uint16_t get_LightLevel () {_delay_ms (10); // Wag 'n rukkie totdat die kanaal die gekose ADCSRA | = (1 << ADSC) kry; // Begin die ADC -omskakeling deur die ADSC -bit in te stel. skryf 1 aan ADSC terwyl (ADCSRA & (1 << ADSC)); // wag totdat die omskakeling voltooi is // ADSC word weer 0 tot dan, loop lus voortdurend _delay_ms (10); terugkeer (ADC); // Wys die 10-bis-resultaat}

// SPI Initialization void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Aktiveer SPI, Stel in as Master, Stel Prescaler in as Fosc/16 in SPI -beheer registreer}

// initialiseer 16 bit Timer1, interrupt en veranderlike leegte TIMER1_init () {// stel timer op met prescaler = 256 en CTC -modus TCCR1B | = (1 << WGM12) | (1 << CS12); // initialiseer teller TCNT1 = 0; // initialiseer vergelyk waarde - 1 sek. OCR1A = 62500; // aktiveer vergelyk onderbreek TIMSK1 | = (1 << OCIE1A); // maak globale onderbrekings moontlik (); }

// Vertoon Aktiveer leemte SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Aktiveer die SS -pen vir logika 0}

// Vertoon Deaktiveer leemte SPI_SS_Disable () {PORTB | = (1 << SS); // Skakel die SS -pen uit na logika 1}

// Funksie om data na die vertoonbuffer leemte te stuur SPI_Tranceiver (ongetekende char data) {SPDR = data; // Laai data in die buffer terwyl (! (SPSR & (1 << SPIF))); // Wag totdat die oordrag voltooi is}

// Stel die skerm weer aan die begin van die inisialisering leemte Display_Reset () {PORTB & = ~ (1 << RST); _vertraging_ms (100); PORTB | = (1 << RST); }

// Opdrag skryf funksie leeg Display_Cmnd (ongetekende char data) {PORTB & = ~ (1 << DC); // maak DC -pen na logika 0 vir opdragbewerking SPI_Tranceiver (data); // stuur data oor dataregister PORTB | = (1 << DC); // maak DC -pen tot logika hoog vir data -werking}

// Initialisering van Display leegte Display_init () {Display_Reset (); // stel die skerm Display_Cmnd (0x21) terug; // opdrag gestel in byvoegingsmodus Display_Cmnd (0xC0); // stel die spanning in deur C0 te stuur beteken VOP = 5V Display_Cmnd (0x07); // stel die temperatuur in. koëffisiënt tot 3 Display_Cmnd (0x13); // stel waarde van Voltage Bias System Display_Cmnd (0x20); // opdrag gestel in basiese modus Display_Cmnd (0x0C); // vertoon resultaat in normale modus}

// Maak die vertoonleegte Display_Clear () {PORTB | = (1 << DC) leeg; // maak DC pin tot logika hoog vir data operasie vir (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // maak DC pin na logika nul vir opdragbewerking}

// stel die kolom en die ry in die posisie van die vertoning van die resultaat op die LCD -skerm leeg Display_SetXY (ongetekende teken x, ongetekende teken y) {Display_Cmnd (0x80 | x); // kolom (0-83) Display_Cmnd (0x40 | y); // ry (0-5)}

// Funksie om die negatiewe teken leeg te stel Display_Neg (ongetekende naam) {Display_SetXY (41, 0); // Stel die posisioneringsadres in vir (int index = 0; index0) {SPDR = 0x30;} // Laai data in die buffer van die vertoning (vertoon negatiewe teken) anders {SPDR = 0x00;} // Laai data in die buffer van vertoning (duidelike negatiewe teken) terwyl (! (SPSR & (1 << SPIF))); // Wag totdat die oordrag voltooi is _delay_ms (100); }}

// Funksie om die digitale teken leeg te maak Off_Dig (ongetekende teken x, ongetekende teken) {Display_SetXY (x, y); // Stel die posisioneringsadres in (boonste ry) in vir (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Laai data in die buffer van die skerm (duidelik boonste gedeelte van digitale teken) y ++; Display_SetXY (x, y); // Stel die posisioneringsadres in (onderste ry) vir (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Laai data in die buffer van die skerm (maak die onderste deel van die digitale teken skoon)}

// Funksie om die digitale teken leeg te vertoon Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Stel die adres van die posisie op die skerm (boonste ry) in vir (int index = 0; index <16; indeks ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Stel die posisiesadres in (onderste ry) SPI_Tranceiver (font6x8 [dig] [index]); // Laai kodes -reeks syfers -data in die buffer van vertoning _delay_ms (10); }}

// Initialisering van DS18B20 ongetekende char DS18B20_init () {DDRD | = (1 << 2); // Stel PD2 -pen van die PORTD as uitvoer PORTD & = ~ (1 << 2); // Stel PD2 -pen as laag _vertraging_us (490); // Initialiseringstydsberekening DDRD & = ~ (1 << 2); // Stel PD2 -pen van die PORTD as invoer _delay_us (68); // Tydsberekening OK_Flag = (PIND & (1 << 2)); // kry sensorpuls _delay_us (422); gee OK_Flag terug; // terugkeer 0-ok sensor is prop, 1-fout sensor trek uit}

// Funksie om greep te lees van DS18B20 ongetekende char read_18b20 () {ongetekende char i, data = 0; vir (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Stel PD2 -pen van die PORTD as uitvoer _delay_us (2); // Tydsberekening van DDRD & = ~ (1 1; // Volgende bietjie as (PIND & (1 << 2)) data | = 0x80; // sit bietjie in byte _delay_us (62);} gee data terug;}

// Funksie om byte na DS18B20 te skryf void write_18b20 (ongetekende char -data) {unsigned char i; vir (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Stel PD2 -pen van die PORTD as uitvoer _delay_us (2); // Tydsberekening as (data & 0x01) DDRD & = ~ (1 << 2); // as ons 1 wil skryf, los die reël anders DDRD | = (1 1; // Volgende bietjie _delay_us (62); // Timing DDRD & = ~ (1 << 2); // Stel PD2 -pen van die PORTD as invoer _delay_us (2);}}

// Funksie om die leegheid van die ligvlak Read_Lux () {uint16_t buffer; ongetekende int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // enkelsyfers, dubbelsyfers, driedubbele syfers, kwartsyfers buffer = get_LightLevel (); // lees die resultaat van analoog na digitaal omskakel ligvlak temp_int_0 = buffer % 10000 /1000; // kwart-syfer temp_int_1 = buffer % 1000 /100; // drie-syfer temp_int_2 = buffer % 100 /10; // dubbelsyfer temp_int_3 = buffer % 10; // enkelsyfer as (temp_int_0> 0) // as die resultaat kwartsyfergetal is {Display_Dig (temp_int_0, 32, 2); // vertoon 1 syfer ligvlak Display_Dig (temp_int_1, 41, 2); // vertoon 2 syfer ligvlak Display_Dig (temp_int_2, 50, 2); // vertoon 3 syfer ligvlak Display_Dig (temp_int_3, 59, 2); // vertoon 4 syfer ligvlak} anders {if (temp_int_1> 0) // as die resultaat driesyfergetal is {Off_Dig (32, 2); // maak 1 teken van die getal Display_Dig (temp_int_1, 41, 2) skoon; // vertoon 1 syfer ligvlak Display_Dig (temp_int_2, 50, 2); // vertoon 2 syfer ligvlak Display_Dig (temp_int_3, 59, 2); // vertoon 3 syfer ligvlak} anders {if (temp_int_2> 0) // as die resultaat 'n dubbelsyfergetal is {Off_Dig (32, 2); // maak 1 teken van die getal Off_Dig (41, 2) skoon; // duidelik 2 tekens van die getal Display_Dig (temp_int_2, 50, 2); // vertoon 1 syfer ligvlak Display_Dig (temp_int_3, 59, 2); // vertoon 2 syfer ligvlak} anders // as die resultaat 'n enkelsyfergetal is {Off_Dig (32, 2); // maak 1 teken van die getal Off_Dig (41, 2) skoon; // duidelik 2 teken van getal Off_Dig (50, 2); // duidelik 3 teken van getal Display_Dig (temp_int_3, 59, 2); // wys 1 syfer ligvlak}}}}

// Funksie om temperatuur leeg te maak Read_Temp () {unsigned int buffer; ongetekende int temp_int_1, temp_int_2, temp_int_3; // enkelsyfers, dubbelsyfers, driedubbele syfers, kwartsyfers ongetekende char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Initialisering van DS18B20 skryf_18b20 (0xCC); // Sensorkode kontrole skryf_18b20 (0x44); // Begin temperatuuromskakeling _vertraging_ms (1000); // Vertraging van sensoropnames DS18B20_init (); // Initialisering van DS18B20 skryf_18b20 (0xCC); // Sensorkode kontrole skryf_18b20 (0xBE); // Opdrag om die inhoud van die sensor RAM Temp_L = read_18b20 () te lees; // Lees die eerste twee grepe Temp_H = read_18b20 (); temp_flag = 1; // 1-positiewe temperatuur, 0-negatiewe temperatuur // Kry negatiewe temperatuur as (Temp_H & (1 << 3)) // Sign Bit Check (as bietjie is ingestel-negatiewe temperatuur) {ondertekende int temp; temp_flag = 0; // vlag is 0 - negatiewe temperatuur temp = (Temp_H << 8) | Temp_L; temp = -temp; // Skakel die bykomende kode om in direkte Temp_L = temp; Temp_H = temp >> 8; } buffer = ((Temp_H 4); temp_int_1 = buffer % 1000 /100; // driesyfer temp_int_2 = buffer % 100 /10; // dubbelsyfer temp_int_3 = buffer % 10; // enkelsyfer

// As die temperatuur 'n negatiewe teken is, dui dit anders aan

if (temp_flag == 0) {Display_Neg (1);} anders {Display_Neg (0);} if (temp_int_1> 0) // as die resultaat driesyfergetal {Display_Dig (temp_int_1, 45, 0) is; // vertoon 1 syfer temperatuur Display_Dig (temp_int_2, 54, 0); // vertoon 2 syfers van temperatuur Display_Dig (temp_int_3, 63, 0); // vertoon 3 syfers van temperatuur} anders {if (temp_int_2> 0) // as die resultaat 'n dubbelsyfergetal is {Off_Dig (45, 0); // maak 1 teken van die getal Display_Dig (temp_int_2, 54, 0) skoon; // vertoon 1 syfer temperatuur Display_Dig (temp_int_3, 63, 0); // vertoon 2 syfers van temperatuur} anders // as die resultaat 'n enkelsyfergetal is {Off_Dig (45, 0); // maak 1 teken van die getal Off_Dig (54, 0) skoon; // duidelik 2 teken van getal Display_Dig (temp_int_3, 63, 0); // wys 1 syfer temperatuur}}}

// Hierdie ISR word afgeskakel elke keer as daar 'n ooreenstemming plaasvind van die tydteller met die vergelykingswaarde (elke 1 sekonde) ISR (TIMER1_COMPA_vect) {// Lees, vertoon van temperatuur en ligvlak Read_Temp (); Lees_Lux (); }

// Funksie om woorde "TEMP" en "LUX" leeg te maak Display_label () {// Word "TEMP" Display_SetXY (0, 0); // Stel die posisiesadres wat vertoon word (ry bo) vir (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Stel die adres van posisie te sien (onderste ry) as (indeks == 80) {Display_SetXY (72, 0);} // Stel die adres van die posisie op die skerm (ry op) as (index == 92) {Display_SetXY (72, 1); } // Stel die posisioneringsadres in (onderste ry) SPDR = TEMP_1 [indeks]; // Laai kodes skikking data in die buffer van die vertoning terwyl (! (SPSR & (1 << SPIF))); // Wag totdat die oordrag voltooi is _delay_ms (10); } // Woord "LUX" Display_SetXY (0, 2); // Stel die posisiesadres wat vertoon word (ry bo) vir (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Stel die adres van posisie te sien (onderste ry) SPDR = TEMP_2 [indeks]; // Laai kodes skikking data in die buffer van die vertoning terwyl (! (SPSR & (1 << SPIF))); // Wag totdat die oordrag voltooi is _delay_ms (10); }}

int main (leeg)

{Port_Init (); // Poortinisialisering ADC_init (); // ADC -inisialisering SPI_Init (); // SPI -inisialisering SPI_SS_Enable (); // Wys Aktiveer DS18B20_init (); // Initialisering van DS18B20 Display_init (); // Vertoon inisialisering Display_Clear (); // Wys duidelike Display_label (); // Wys woorde "TEMP" en "LUX" TIMER1_init (); // Timer1 -inisialisering. Begin monitor. Kry elke sekonde parameters. // Oneindige lus terwyl (1) {}}

Stap 3: Flitsende firmware na mikrobeheerder

Laai HEX -lêer op na die mikrobeheerder se flitsgeheue. Kyk na die video met 'n gedetailleerde beskrywing van die verbranding van die flitsgeheue van die mikrobeheerder: die flitsgeheue van die mikrobeheerder …

Stap 4: Monitering van die stroombaan van die toestel

Monitering van toestelle se stroombaan
Monitering van toestelle se stroombaan
Monitering van toestelle se stroombaan
Monitering van toestelle se stroombaan

Verbind komponente volgens die skematiese diagram.

Sluit die krag aan en dit werk!

Aanbeveel: