Operácie

Monitor kapacity batérie: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
Riadok 36: Riadok 36:
<tabs>
<tabs>
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#ifndef F_CPU
#ifndef F_CPU
#define F_CPU 16000000UL
#define F_CPU 16000000UL

Verzia z 11:43, 7. jún 2026

Záverečný projekt predmetu MIPS / LS2026 - Meno Priezvisko


Zadanie

Môj semestrálny projekt spočíval z vytvorenia vstavaného systému s využitím mikrokontroléra ATmega328P,ktorý slúži ako trojúrovňový indikátor kapacity batérie. Systém neustále monitoruje jednosmerné napätie na analógovom vstupe pomocou integrovaného ADC prevodníka. Na základe nameranej hodnoty systém vyhodnocuje stav batérie a vizuálne ho indikuje pomocou troch LED diód:

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.

Celkový pohľad na zariadenie.

Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Schéma zapojenia.


Algoritmus a program

Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...


<tabs> <tab name="AVR C-code"><syntaxhighlight lang="c++" style="background: LightYellow;">

  1. ifndef F_CPU
  2. define F_CPU 16000000UL
  3. endif
  1. include <avr/io.h>
  2. include <util/delay.h>
  1. define LED_FULL PD2 // Zelená LED
  2. define LED_MID PD3 // Žltá/oranžová LED
  3. define LED_LOW PD4 // Červená LED
  1. define ADC_FULL_LIMIT 778 // približne 3.8 V
  2. define ADC_MID_LIMIT 409 // približne 2.0 V

void ADC_init(void) { // Referenčné napätie AVCC = 5 V, vstup ADC0 = A0 ADMUX = (1 << REFS0);

// Zapnutie ADC, preddelička 128 ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); }

uint16_t ADC_read(void) { // Spustenie merania ADCSRA |= (1 << ADSC);

// Čakanie na dokončenie merania while (ADCSRA & (1 << ADSC));

return ADC; }

void LED_off_all(void) { PORTD &= ~((1 << LED_FULL) | (1 << LED_MID) | (1 << LED_LOW)); }

int main(void) { uint16_t adc_value;

// Nastavenie D2, D3, D4 ako výstupy DDRD |= (1 << LED_FULL) | (1 << LED_MID) | (1 << LED_LOW);

ADC_init();

while (1) { adc_value = ADC_read();

LED_off_all();

if (adc_value >= ADC_FULL_LIMIT) { PORTD |= (1 << LED_FULL); // Full } else if (adc_value >= ADC_MID_LIMIT) { PORTD |= (1 << LED_MID); // Mid } else { PORTD |= (1 << LED_LOW); // Low }

_delay_ms(100); } }


Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Aplikácia.

Video:


Čo by som urobil inak

Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.