Monitor kapacity batérie: Rozdiel medzi revíziami
Zo stránky SensorWiki
| 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:

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.

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.

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;">
- ifndef F_CPU
- define F_CPU 16000000UL
- endif
- include <avr/io.h>
- include <util/delay.h>
- define LED_FULL PD2 // Zelená LED
- define LED_MID PD3 // Žltá/oranžová LED
- define LED_LOW PD4 // Červená LED
- define ADC_FULL_LIMIT 778 // približne 3.8 V
- 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.

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.