Obsah:

Monitor teploty a úrovně světla se zobrazením na LCD NOKIA 5110: 4 kroky
Monitor teploty a úrovně světla se zobrazením na LCD NOKIA 5110: 4 kroky

Video: Monitor teploty a úrovně světla se zobrazením na LCD NOKIA 5110: 4 kroky

Video: Monitor teploty a úrovně světla se zobrazením na LCD NOKIA 5110: 4 kroky
Video: САМЫЙ БЫСТРЫЙ ТРЕХКОЛЕСНЫЙ ЭЛЕКТРОСКУТЕР 72v 62км/ч CITYCOCO 3000w электротрицикл 72v citycoco trike 2024, Červenec
Anonim
Image
Image

Ahoj všichni!

V této sekci vyrábíme jednoduché elektronické zařízení pro sledování teploty a úrovně světla. Měření těchto parametrů je zobrazeno na LCD NOKIA 5110. Zařízení je založeno na mikrokontroléru AVR ATMEGA328P. Monitorovací zařízení je vybaveno digitálním teploměrem DS18B20 a fotorezistorem pro měření úrovně světla.

Krok 1: Popis součásti

Popis Komponenty
Popis Komponenty
Popis Komponenty
Popis Komponenty

Základní součásti monitorovacího zařízení:

  • Mikrokontrolér AVR «ATMEGA328P»
  • Monochromatický grafický LCD «NOKIA 5110»
  • 1vodičový digitální teploměr s programovatelným rozlišením «DS18B20»
  • Odpor závislý na světle
  • Dráty

Mikrokontrolér AVR «ATMEGA328P»

Monitorovací zařízení využívá následující periferní funkce mikrokontroléru:

  1. 16bitový časovač/přerušení čítače
  2. 8kanálový 10bitový ADC
  3. Sériové rozhraní Master/slave SPI

Monochromatický grafický LCD «NOKIA 5110»

Specifikace:

  1. 48 x 84 bodový LCD displej
  2. Rozhraní sériové sběrnice s maximální vysokou rychlostí 4 Mbit/s
  3. Interní ovladač/ovladač «PCD8544»
  4. LED podsvícení
  5. Běží na napětí 2,7-5 voltů
  6. Nízká spotřeba energie; je vhodný pro bateriové aplikace
  7. Teplotní rozsah od -25 ° C do +70 ° C
  8. Podpora vstupu CMOS signálu

Zpracování adresy LCD (adresování):

Uspořádání adresy paměti zobrazené na displeji LCD (DDRAM) je matice, která se skládá ze 6 řádků (adresa Y) od adresy Y 0 do adresy Y 5 a 84 sloupců (adresa X) od adresy X od 0 do X- Adresa 83. Pokud chce uživatel získat přístup k poloze zobrazení výsledku na LCD displeji, musí se odkazovat na vztah mezi adresou X a adresou Y.

Data, která budou odeslána na displej, mají 8 bitů (1 bajt) a budou uspořádána jako svislá čára; v tomto případě bude bit MSB nižší a bit LSB bude vyšší, jak je znázorněno na obrázku.

Programovatelné rozlišení 1vodičový digitální teploměr DALLAS «DS18B20»

Funkce:

  1. Unikátní rozhraní 1-Wire® vyžaduje ke komunikaci pouze jeden portový kolík
  2. Snižte počet součástí pomocí integrovaného teplotního senzoru a EEPROM
  3. Měří teploty od -55 ° C do +125 ° C (-67 ° F do +257 ° F)
  4. ± 0,5 ° C Přesnost od -10 ° C do +85 ° C
  5. Programovatelné rozlišení od 9 bitů do 12 bitů
  6. Nejsou vyžadovány žádné externí součásti
  7. Režim parazitického napájení vyžaduje k provozu pouze 2 piny (DQ a GND)
  8. Zjednodušuje distribuované aplikace pro snímání teploty s funkcí Multidrop
  9. Každé zařízení má jedinečný 64bitový sériový kód uložený v integrované paměti ROM
  10. Flexibilní uživatelsky definovatelná energeticky nezávislá (NV) nastavení alarmu pomocí příkazu pro hledání alarmu identifikuje zařízení s teplotami mimo naprogramované limity

Aplikace:

  1. Termostatické ovládání
  2. Průmyslové systémy
  3. Spotřební zboží
  4. Teploměry
  5. Tepelně citlivé systémy

Odpor závislý na světle

Light Dependent Resistor (LDR) je snímač, který mění svůj odpor, když světlo dopadá na jeho povrch.

Typicky bude mít LDR od jednoho megaOhmu do dvou megaOhmů při úplné tmě, od deseti do dvaceti kiloohmů při deseti LUX, od dvou do pěti kiloohmů při 100 LUX. Odpor mezi dvěma kontakty senzoru klesá s intenzitou světla nebo se zvyšuje vodivost mezi dvěma kontakty senzoru.

K převodu změny odporu na změnu napětí použijte obvod děliče napětí.

Krok 2: Kód firmwaru mikrokontroléru

#ifndef F_CPU #definovat F_CPU 16000000UL // sdělující krystalovou frekvenci ovladače (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

// RESETUJTE DISPLEJ #definujte RST 0 // RESETUJTE PORT B, PIN 0

// VÝBĚR REŽIMU ZOBRAZENÍ - Vstup pro výběr buď příkazu/adresy nebo vstupu dat. #define DC 1 // DC to je PORT B, PIN 1

// kódy pole záporných znaménkových konstant bez znaménka 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, 0x0x, 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 pole 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, 0x8 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// pole kódů slova „LUX:“konstantní znak bez znaménka 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, 0x0x, 0x03, 0x0, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

#zahrnout

#include #include

// Inicializace portu SCK, SS, RST, DC jako výstup, všechny ostatní vstup PORTB | = (1 << RST); // Nastavit pin RST jako vysoký PORTB | = (1 << SS); // Nastavit SS pin jako vysoký - displej je Zakázat DDRC = 0xFFu; // Nastavit všechny piny PORTC jako výstup. DDRC & = ~ (1 << 0); // Vytvoří první pin PORTC jako vstup PORTC = 0x00u; // Nastaví všechny piny PORTC low, čímž se vypne. }

// Inicializace ADC neplatná ADC_init () {// Povolit ADC, vzorkování freq = osc_freq/128 nastavit prescaler na maximální hodnotu, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Vyberte referenci napětí pro ADC // Standardně vyberte nulu kanálu pomocí registru ADC Multiplexer Select (ADC0). }

// Funkce pro čtení výsledku převodu z analogového na digitální uint16_t get_LightLevel () {_delay_ms (10); // Chvíli počkejte, než bude kanál vybrán ADCSRA | = (1 << ADSC); // Spusťte převod ADC nastavením bitu ADSC. zapište 1 do ADSC while (ADCSRA & (1 << ADSC)); // počkejte na dokončení převodu // ADSC bude do té doby opět 0, spouštějte smyčku nepřetržitě _delay_ms (10); návrat (ADC); // Vrátit 10bitový výsledek}

// SPI Inicializace neplatná SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Povolit SPI, Nastavit jako hlavní, Nastavit předčíslí jako Fosc/16 v ovládání SPI Registrovat }

// inicializace 16bitového Timer1, přerušení a proměnná neplatná TIMER1_init () {// nastavení časovače s prescalerem = 256 a režimem CTC TCCR1B | = (1 << WGM12) | (1 << CS12); // inicializace čítače TCNT1 = 0; // inicializace porovnávací hodnoty - 1 s OCR1A = 62500; // povolit porovnání přerušení TIMSK1 | = (1 << OCIE1A); // povolit globální přerušení sei (); }

// Zobrazení Povolit neplatné SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Povolení logiky pinu SS 0}

// Disable Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // Deaktivace pinu SS na logiku 1}

// Funkce pro odesílání dat do vyrovnávací paměti displeje neplatné SPI_Tranceiver (nepodepsaná char data) {SPDR = data; // Načíst data do vyrovnávací paměti while (! (SPSR & (1 << SPIF))); // Počkejte na dokončení přenosu}

// Reset displeje na začátku inicializace neplatný Display_Reset () {PORTB & = ~ (1 << RST); _delay_ms (100); PORTB | = (1 << RST); }

// Funkce zápisu příkazu neplatná Display_Cmnd (data znaku bez znaménka) {PORTB & = ~ (1 << DC); // vytvoření DC pinu na logiku 0 pro příkazovou operaci SPI_Tranceiver (data); // odeslání dat na datový registr PORTB | = (1 << DC); // nastavení DC pinu na logickou hodnotu pro provoz dat}

// Inicializace Display void Display_init () {Display_Reset (); // reset displeje Display_Cmnd (0x21); // sada příkazů v režimu přidání Display_Cmnd (0xC0); // nastavení napětí odesláním C0 znamená VOP = 5V Display_Cmnd (0x07); // nastavení teploty. koeficient na 3 Display_Cmnd (0x13); // nastavená hodnota systému předpětí napětí Display_Cmnd (0x20); // příkaz nastavený v základním režimu Display_Cmnd (0x0C); // zobrazení výsledku v normálním režimu}

// Vymažte prázdné zobrazení Display_Clear () {PORTB | = (1 << DC); // nastavení DC pin na logiku high pro datový provoz pro (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // make DC pin to logic nula pro příkazovou operaci}

// nastavení sloupce a řádku na pozici zobrazení výsledku na LCD displeji neplatné Display_SetXY (znak bez znaménka, znak bez znaménka) {Display_Cmnd (0x80 | x); // sloupec (0-83) Display_Cmnd (0x40 | y); // řádek (0-5)}

// Funkce pro zobrazení záporného znaménka neplatná Display_Neg (znak bez znaménka) {Display_SetXY (41, 0); // Nastavte adresu pozice na displeji pro (int index = 0; index0) {SPDR = 0x30;} // Načtěte data do vyrovnávací paměti displeje (zobrazte záporné znaménko) else {SPDR = 0x00;} // Načtěte data do vyrovnávací paměť zobrazení (jasné záporné znaménko) while (! (SPSR & (1 << SPIF))); // Počkejte na dokončení přenosu _delay_ms (100); }}

// Funkce pro vymazání digitálního znaku neplatná Off_Dig (znak bez znaménka, znak bez znaménka) {Display_SetXY (x, y); // Nastavte adresu pozice na displeji (horní řádek) pro (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Načtěte data do vyrovnávací paměti displeje (vymazat horní část digitálního znaku) y ++; Display_SetXY (x, y); // Nastavení adresy pozice na displeji (spodní řádek) pro (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Načtení dat do bufferu displeje (vymazat spodní část digitálního znaku)}

// Funkce pro zobrazení digitálního 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);} // Nastavení adresy pozice na displeji (spodní řádek) SPI_Tranceiver (font6x8 [dig] [index]); // Načte pole kódů dat číslic do vyrovnávací paměti displeje _delay_ms (10); }}

// Inicializace DS18B20 nepodepsaného znaku DS18B20_init () {DDRD | = (1 << 2); // Nastavit pin PD2 PORTD jako výstupní PORTD & = ~ (1 << 2); // Nastavit pin PD2 jako nízký _delay_us (490); // Časování inicializace DDRD & = ~ (1 << 2); // Nastavit pin PD2 PORTD jako vstup _delay_us (68); // Časování OK_Flag = (PIND & (1 << 2)); // získejte impuls senzoru _delay_us (422); vrátit OK_Flag; // návrat 0-ok senzor je zapojen, 1-chybový senzor je odpojen}

// Funkce pro čtení bajtu z DS18B20 unsigned char read_18b20 () {unsigned char i, data = 0; pro (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Nastavit pin PD2 PORTD jako výstup _delay_us (2); // Časování DDRD & = ~ (1 1; // Další bit if (PIND & (1 << 2)) data | = 0x80; // vložení bitu do bajtu _delay_us (62);} návrat dat;}

// Funkce pro zápis bajtu do DS18B20 void write_18b20 (data bez znaménka) {unsigned char i; pro (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Nastavit pin PD2 PORTD jako výstup _delay_us (2); // Časování if (data & 0x01) DDRD & = ~ (1 << 2); // pokud chceme zapsat 1, uvolníme řádek jinak DDRD | = (1 1; // Další bit _delay_us (62); // Časování DDRD & = ~ (1 << 2); // Nastavíme pin PD2 PORTD jako vstup _delay_us (2);}}

// Funkce pro zobrazení úrovně světla neplatné Read_Lux () {uint16_t buffer; nepodepsané int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // jednociferné, dvouciferné, trojciferné, čtvrtciferné buffer = get_LightLevel (); // přečtěte výsledek převodu světla z analogového na digitální úroveň temp_int_0 = vyrovnávací paměť % 10 000/1 000; // čtvrtciferný temp_int_1 = vyrovnávací paměť % 1000 /100; // triciferné temp_int_2 = vyrovnávací paměť % 100/10; // dvouciferné temp_int_3 = vyrovnávací paměť % 10; // jednociferné if (temp_int_0> 0) // if result is quarter-digit number {Display_Dig (temp_int_0, 32, 2); // zobrazení 1 číslice úrovně osvětlení Display_Dig (temp_int_1, 41, 2); // zobrazení 2 číslic úrovně osvětlení Display_Dig (temp_int_2, 50, 2); // zobrazení 3 číslic úrovně osvětlení Display_Dig (temp_int_3, 59, 2); // zobrazení 4 číslic úrovně světla} else {if (temp_int_1> 0) // pokud je výsledkem trojciferné číslo {Off_Dig (32, 2); // vymazat 1 znak čísla Display_Dig (temp_int_1, 41, 2); // zobrazení 1 číslice úrovně osvětlení Display_Dig (temp_int_2, 50, 2); // zobrazení 2 číslic úrovně osvětlení Display_Dig (temp_int_3, 59, 2); // zobrazení 3 číslic úrovně světla} else {if (temp_int_2> 0) // pokud je výsledkem dvouciferné číslo {Off_Dig (32, 2); // vymazat 1 znak čísla Off_Dig (41, 2); // vymazat 2 znak čísla Display_Dig (temp_int_2, 50, 2); // zobrazení 1 číslice úrovně osvětlení Display_Dig (temp_int_3, 59, 2); // zobrazení 2 číslic úrovně světla} else // pokud je výsledkem jednociferné číslo {Off_Dig (32, 2); // vymazat 1 znak čísla Off_Dig (41, 2); // vymazat 2 znak čísla Off_Dig (50, 2); // vymazání 3 znaku čísla Display_Dig (temp_int_3, 59, 2); // zobrazení 1 číslice úrovně světla}}}}

// Funkce pro zobrazení teploty neplatné Read_Temp () {unsigned int buffer; nepodepsané int temp_int_1, temp_int_2, temp_int_3; // jednociferné, dvouciferné, trojčíselné, čtvrtčíselné znaky bez znaménka Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Inicializace DS18B20 write_18b20 (0xCC); // kontrola kódu senzoru write_18b20 (0x44); // Zahájení převodu teploty _delay_ms (1000); // Zpoždění dotazování senzoru DS18B20_init (); // Inicializace DS18B20 write_18b20 (0xCC); // Kontrola kódu senzoru write_18b20 (0xBE); // Příkaz ke čtení obsahu RAM senzoru Temp_L = read_18b20 (); // Přečíst první dva bajty Temp_H = read_18b20 (); temp_flag = 1; // 1-kladná teplota, 0-záporná teplota // Získá zápornou teplotu, pokud (Temp_H & (1 << 3)) // Podepíše bitovou kontrolu (pokud je nastaven bit-záporná teplota) {signed int temp; temp_flag = 0; // příznak je nastaven na 0 - negativní teplota temp = (Temp_H << 8) | Temp_L; temp = -temp; // Převést dodatečný kód přímo Temp_L = temp; Teplota_H = teplota >> 8; } buffer = ((Temp_H 4); temp_int_1 = buffer % 1000 /100; // triciferný temp_int_2 = buffer % 100 /10; // dvouciferný temp_int_3 = buffer % 10; // single-digit

// Pokud je teplota záporná, zobrazí se znak teploty, jinak zrušte

if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // if result is tricici number number {Display_Dig (temp_int_1, 45, 0); // zobrazení 1 číslice teploty Display_Dig (temp_int_2, 54, 0); // zobrazení 2 číslic teploty Display_Dig (temp_int_3, 63, 0); // zobrazení 3 číslic teploty} else {if (temp_int_2> 0) // if result is double-digit number {Off_Dig (45, 0); // vymazat 1 znak čísla Display_Dig (temp_int_2, 54, 0); // zobrazení 1 číslice teploty Display_Dig (temp_int_3, 63, 0); // zobrazení 2 číslic teploty} else // pokud je výsledkem jednociferné číslo {Off_Dig (45, 0); // vymazat 1 znak čísla Off_Dig (54, 0); // vymazání 2 znaku čísla Display_Dig (temp_int_3, 63, 0); // zobrazení 1 číslice teploty}}}

// Tento ISR se spustí vždy, když dojde k shodě počtu časovačů s porovnávací hodnotou (každou 1 sekundu) ISR (TIMER1_COMPA_vect) {// Čtení, zobrazení teploty a úrovně světla Read_Temp (); Read_Lux (); }

// Funkce pro zobrazení slov "TEMP" a "LUX" neplatná Display_label () {// Slovo "TEMP" Display_SetXY (0, 0); // Nastavte adresu pozice na displeji (v horním řádku) pro (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Nastavte adresu pozice na displeji (spodní řádek) if (index == 80) {Display_SetXY (72, 0);} // Nastavte adresu pozice na displeji (o řádek výše) if (index == 92) {Display_SetXY (72, 1); } // Nastavit adresu pozice na displeji (spodní řádek) SPDR = TEMP_1 [index]; // Načtení dat pole kódů do vyrovnávací paměti displeje while (! (SPSR & (1 << SPIF))); // Počkejte na dokončení přenosu _delay_ms (10); } // Slovo "LUX" Display_SetXY (0, 2); // Nastavte adresu pozice na displeji (v horním řádku) pro (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Nastavte adresu pozice na displeji (spodní řádek) SPDR = TEMP_2 [index]; // Načtení dat pole kódů do vyrovnávací paměti displeje while (! (SPSR & (1 << SPIF))); // Počkejte na dokončení přenosu _delay_ms (10); }}

int main (neplatné)

{Port_Init (); // Inicializace portu ADC_init (); // Inicializace ADC SPI_Init (); // SPI inicializace SPI_SS_Enable (); // Povolení zobrazení DS18B20_init (); // Inicializace DS18B20 Display_init (); // Inicializace displeje Display_Clear (); // Zobrazit jasné Display_label (); // Zobrazit slova "TEMP" a "LUX" TIMER1_init (); // Inicializace časovače1. Začněte monitorovat. Získávání parametrů každou sekundu. // Nekonečná smyčka while (1) {}}

Krok 3: Přenesení firmwaru do mikrokontroléru

Odeslání souboru HEX do flash paměti mikrokontroléru. Podívejte se na video s podrobným popisem vypalování flash paměti mikrokontroléru: Vypalování flash paměti mikrokontroléru…

Krok 4: Sestava obvodu monitorovacího zařízení

Sestava obvodu monitorovacího zařízení
Sestava obvodu monitorovacího zařízení
Sestava obvodu monitorovacího zařízení
Sestava obvodu monitorovacího zařízení

Připojte komponenty podle schématu.

Připojte napájení a funguje to!

Doporučuje: