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 | |||
#define F_CPU 16000000UL | |||
#endif | |||
#include <avr/io.h> | #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) | 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); | |||
} | |||
} | } | ||
Verzia z 11:48, 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...
#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);
}
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
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.