Operácie

Monitor kapacity batérie

Zo stránky SensorWiki

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...


#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.

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.