Operácie

Vzorové riešenie MIPS 2026

Zo stránky SensorWiki

Verzia z 06:47, 9. jún 2026, ktorú vytvoril Balogh (diskusia | príspevky) (Vytvorená stránka „Vzorové riešenie MIPS 2026 Praktická časť skúšky z predmetu MIPS / LS2026 - '''Richard Balogh''' == Zadanie == Dostali ste neznámu elektronickú súčiastku spolu s jej datasheet-om. Vašou úlohou je z datasheetu zistiť, o aký snímač ide, identifikovať jeho vývody a navrhnúť zapojenie k mikroprocesoru ATmega328P. Analógový výstup snímača pripojte na vstup ADC0 (pin PC0). Na LCD displeji EA-DOGM163 zobrazte aktuálnu teplotu podľa predpís…“)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)

Vzorové riešenie MIPS 2026

Praktická časť skúšky z predmetu MIPS / LS2026 - Richard Balogh


Zadanie

Dostali ste neznámu elektronickú súčiastku spolu s jej datasheet-om. Vašou úlohou je z datasheetu zistiť, o aký snímač ide, identifikovať jeho vývody a navrhnúť zapojenie k mikroprocesoru ATmega328P. Analógový výstup snímača pripojte na vstup ADC0 (pin PC0). Na LCD displeji EA-DOGM163 zobrazte aktuálnu teplotu podľa predpísaného formátu.

+----------------+
| Snimac teploty |
| T = 25.3 °C    |
| Meno Priezvisk |
+----------------+

K dispozícii máte:

  • Rozširujúci modul s displejom EA-DOGM163
  • Knižnice lcd.h / lcd.c a uart.h / uart.c z cvičení
  • Datasheet obvodu LM35


Analýza a opis riešenia

Z datasheetu zistíme, že súčiastka LM35DZ je analógový snímač teploty v puzdre TO-92 s lineárnym výstupom 10 mV/°C. Má tri vývody — pri pohľade spredu (plochá strana k nám, nožičky smerujú dole) sú zľava: +Vs (napájanie), Vout (analógový výstup) a GND (zem). Napájací rozsah je 4–30 V, takže 5 V z dosky Acrob vyhovuje.

Zapojenie je jednoduché — napájanie na 5V, zem na GND a výstup Vout priamo na pin PC0 (ADC0). Nie je potrebný žiadny prídavný rezistor ani kondenzátor.

Súbor:MIPS2026-LM35DZ-schema.svg

Schéma zapojenia LM35DZ k ATmega328P.

Ak sa zo schémy zapojenia neviete celkom zorientovať, možno vám pomôže fotografia zapojenia priamo na doštičke.

Zapojenie na doštičke.

Prepočet ADC na teplotu

ATmega328P má 10-bitový ADC prevodník (rozsah 0–1023). S referenčným napätím AVcc = 5 V je rozlíšenie jedného kroku:

5000 mV / 1024 = 4,88 mV/krok

Keďže LM35 dáva 10 mV/°C, rozlíšenie merania je približne 0,5 °C. Prepočet na teplotu v desatinách stupňa (celočíselná aritmetika):

t_x10 = adc_val × 5000 / 1024

Pozor na pretečenie — hodnota 1023 × 5000 = 5 115 000, čo sa nezmestí do 16-bitového typu (max 65 535). Preto je nutné pretypovanie na uint32_t:

uint16_t t_x10 = (uint32_t)adc_val * 5000 / 1024;
uint8_t  cele     = t_x10 / 10;    // celá časť
uint8_t  desatiny = t_x10 % 10;    // desatinná časť

Algoritmus a program

Program najprv inicializuje UART (pre ladenie cez printf), LCD displej a ADC prevodník. V hlavnej slučke periodicky číta hodnotu z ADC0, prepočíta ju na teplotu a zobrazí na displej.

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "uart.h"
#include "adc.h"
#include "lcd.h"

FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);


int main(void)
{
    uart_init();
    stdout = &mystdout;

    lcd_init();
    lcd_bklt(1);
    lcd_command(0x0C);

    adc_init();

    char riadok[17];

    while (1)
    {
        uint16_t adc_val = adc_read(0);
        uint16_t t_x10   = (uint32_t)adc_val * 5000 / 1024;
        uint8_t  cele     = t_x10 / 10;
        uint8_t  desatiny = t_x10 % 10;

        printf("ADC=%4u  T=%2u.%1u C\r\n", adc_val, cele, desatiny);

        lcd_setCursor(1, 0);
        lcd_puts(" Snimac teploty ");

        sprintf(riadok, " T = %2u.%1u oC    ", cele, desatiny);
        lcd_setCursor(2, 0);
        lcd_puts(riadok);

        lcd_setCursor(3, 0);
        lcd_puts(" Meno Priezvisko ");

        _delay_ms(100);
    }
    return 0;
}

Overenie

Program fungoval na prvý pokus. Na videu je vidieť aktuálnu teplotu na displeji, ktorá reaguje na dotyk prsta (zahriatie).