***Dobry den,
mohl by mi prosim nekdo pomoci, jak mam pomoci ad prevodniku merit napeti? Napeti z baterie privadim pres delic na vstup ADC03. Delic ma dva stejne odpory. Takze se by na vystupu mela byt polovina napeti baterie a hlavne vzdy by mela byt nizsi nez vnitrni reference 2.56V, kterou taktez pouzivam.
Polovina napeti baterie na vystupu delice to presne neni, ani na druhem odporu (R1 jak pravi obecne schema o delicich). Proste baterie ma 3,8V. A na jednom odporu je 1,8V a na druhem taky. Takze jednou z veci co nechapu je, kam se ztrati 0,2V.
A tou dalsi a hlavni veci. Jak mam rozpoznat, treba roznout ledku, kdyz baterie poklesne na uroven pod 3,5V a pak treba jeste pod 3,3V.
Procetl jsem spoustu knih. Udelal podle ruznych for. Ale stale mi to nefunguje.
Zkousim to tak, ze kdyz je pod 3.5 V, tak zhasni ledku. K baterii jsem si dal potenciometr, abych si do zarizeni mohl napeti regulovat.
Jenze jak tak reguluju, tak kdyz zmenim to napeti dolu pomalu, tak led furt sviti, nezhasne se, ani kdyz dojdu az k 2 voltum. Kdyz s tim potenciometrem trhnu rychlej, tak se ledka rozblika.
Mimovse jsem zjistil, ze na vstupu zarizeni je napeti 3,6V kdyz sviti ta ledka, a 3,8V kdyz nesviti. {jsou to hodnoty na vstupu do zarizeni, ne za stabilizatorem}.
Dekuju moc za rady
Jak je v titulku uvedeno pouzivam Atmegu88PA a pro programovani AVR studio
V zaveru pridavam jeste kousek zdrojaku jak to zkousim podle te knihy.***
[code]#include <avr/io.h> // hlavi.ckov�Ly soubor popisuj�L.c�L. mikrokontrol�Ler
#include <avr/interrupt.h> // knihovna pot.rebn�La pro p.reru.sen
#include <util/delay.h>
#define F_CPU 2000000UL
//ZKOUSKOVA LED {CERVENA}*/
#define LED 6
#define LED_ON PORTD &= ~(1<<LED)
#define LED_OFF PORTD |= (1<<LED)
void portInit()
{
DDRD |= (1<<LED);
PORTD|= (1<<LED);
}
volatile int napeti;
int main(void)
{
portInit(); //inicializace led
ADCSRA=0b10001111; //zapnuti ad prevodniku, povoleni preruseni po dokonceni prevodu a nastaveni nejpomalejsiho prevodu
ADMUX =0b00000011; //vyber kanalu 03
ADCSRA|=0b01000000; //logicky soucet pro registr k spusteni prevodu. Po dokonceni prevodu vyvola vector preruseni
sei() ; //povoli vsechna preruseni
while(1) //obecna prazdna smycka....
{
}
}
ISR( ADC_vect )
{
float realne; //definice real promene
napeti=ADCW; //hodnota po vypoctu ulozena do napeti{napeti je typ int}
realne=(float) 2.56/1023; // vnitrni reference lomeno rozliseni prevodniku 10bitu
realne=(float) realne*napeti; // vynasobeni hodnota napeti
if (realne<3.5)
LED_OFF;
if (realne>=3.5)
LED_ON;
_delay_ms(20); //kratka prodleva
ADCSRA|=0b01000000; //znovu zpusteni dalsiho prevodu
}[/code]
POZN.: napada me jestli ADCW nenasobit dvema, kdyz tam mam ten delic, ale s tim to taky nefungovalo.
POZN.: Kod je upraveny z kvetakov.net/clanky/avr/55-v … dniku.html**
Moc diky, LukasG.
icq 226166464**
administrator: přejmenováno z "ADC a AtMega88"