Uživatel:Vystrluk,

Z MAM wiki

Přejít na: navigace, hledání

Jak vychází ze zadání, lampička se musí vždy rozsvítit po soumraku a svítit do doby, než na napájecím článku klesne napětí pod 1,1V. Klesneli hodnota napětí napájecích článků pod tuto mez, lampička zhasne a rozsvítí se jen na chvíli vždy po ozáření světlem (např. venkovní osvětlení u baráku).


Detekce světla


Zde lze použít několik způsobů. Kdyby se lampička měla rozsvěcet pouze po setmění (nereagovala by na umělé osvětlení v průběhu noci), stačil by naprogramovat čas, kdy vychází a zapadá slunce. I když by nebylo tak složité zahrnou do programu různé délky dnů během roku, bylo by to jen pro danou lokalitu a lampička by byla omezena např. proti exportu (místa blíže pólům mají jiný časový poměr mezi dnem a nicí než místa na rovníku).

Dále je možné, jako detektor světla/tmy použít fototranzistor, touto variantou se zabývá semestrální práce Vančura, Shuleska.

Praktické je v našem případě použít jako detekrot světla budˇ solární články napájející baterii nebo LED zapojenou jako fotodiodu. Zapojení LED/fotodiody je velmi nenáročné (mezi pin a GND v závěrném směru). LED se chová jako kapacita, která se vybíjí s rychlostí závislou na osvětlení. Čím více je dioda osvětlena, tím rychleji se vybijí, tedy nám postačí měřit tento čas a i bez A/D převodníku můžeme určit intenzitu světla.



Popisek




/* main.c */
#include <avr/io.h> // tady je definovan portB
#include <avr/iotn2313.h> // konstanty pro ATtiny2313  



int main (void){ // hlavni funkce programu
 
 
  volatile int svit;  
	
  // hlavni smycka //
  while(1){ // nekonecna smycka
	
	svit=0; 
	DDRB=1; //port B, pin 0 jako vystup
	PORTB=1; //nabiti kapacity led
	

	for (i = 1; i <= 10; i++){ //cekani na nabiti, frekvence krystalu = 16MHz
	}

	DDRB = 0; //port b, pin 1 jako vstup
	PORTB=0; // pull up res vypnuty
	while(PINB & 1){ // cekani na vybiti diody(kapacity)
		
		svit ++; // pricitam,abych vedel,jaka je venku intenzita svetla
	
	}
	

  } // konec nekonecne smycky
} // konec hlavni funkce programu


Mereni napeti na baterii


Vyhodou mikroprocesoru Atmel je, ze z vetsiny obsahuji A/D převodník. Toho se da vyuzit pri mereni napeti na bateriovem clanku a zjistit tak jeho pokles pod hodnotu 1,1V. Bohuzel nizkoprikonovy ATtiny2313 A/D prevodnik nema, proto by se pro tento pusob musel pouzit např. AT90S8535. Obsluha A/D převodníku vypadá takto:

Jeho činnost je ovládána zápisem do jeho registru ADCSR. Činnost tohoto převodníku je povolena nastavením nejvýznamnějšího bitu (bit 7) tohoto registru na 1. Pro tento, sedmý bit je používáno označení ADEN. Další, nižší bit (bit 6) je označován ADSC, jeho nastavením na 1 je nastartován převod A/D. Po dokončení tohoto převodu bude hodnota tohoto bitu rovna 0. Pokud probíhá převod A/D, nemá případné zapsání nuly to tohoto bitu nějaký vliv na převod. Nastavení bitu 3, nazývaného ADIE, na jedničku znamená povolení (aktivaci) přerušení ADC Conversion Complete. K tomuto přerušení dojde po dokončení A/D převodu. Nejnižší tři bity registru ADCSR určují dělicí poměr předděličky, kterým je dělen kmitočet krystalu mikrokontroléru. Výstupní signál z předděličky je přiveden na hodinový vstup A/D převodníku. Po dokončení A/D převodu je získaná naměřená digitální hodnota uložena v registrech ADCL a ADCH převodníku A/D. Obsah obou registrů vytváří obsah ADCW. Ten je již přímo úměrný měřenému napětí. Nyní musíme uloženou hodnotu převést na reálnou hodnoru. Např. bude-li rozsah měřeného napětí 0V až 5V musíme naměřenou hodnotu násobit číslem 4.888 (AT90S8535 má desetibitový převodník => 2^10 = 1024, to odpovídá 5V = 5000mV a z tohoto 5000/1024 = 4.888).


#include <90s8535.h>
// funkce delay 
#include <delay.h> 
#asm
#define ADC_VREF_TYPE 0x00

//obsluha preruseni
interrupt [ADC_INT] void adc_isr(void)

//promenna pro napeti
unsigned char pom[5]
unsigned int napeti

napeti = (int) (ADCQ*4.888)
itoa(napeti,pom)
if (napeti < 1100)  // pokud je podminka splnena, napeti baterie kleslo pod 1.1V


dokud bude tato podminka splnena, lampicka bude zhasnuta a rozsviti se jen na par minut po osviceni LED/fotodiody venkovnim osvetlenim.

Osobní nástroje