Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



AVR m644pu ADC problem

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

AVR m644pu ADC problem

Autor: elektrikarCZE ♂

9:18:47 10.03.2015

Ahoj, mám problém s ad převodníkem.

Toto je inicializace a čtení z adc:
void adc_init() {
ADMUX |= (1 << REFS0) /*|(1 << REFS1)*/;
ADCSRA = (1 << ADEN) | (7 << ADPS1);
}

uint16_t adc_read(uint8_t ch) {
ADMUX |= ch;
ADCSRA |= (1 << ADSC);
while (!(ADCSRA & (1 << ADIF)));
ADCSRA |= (1 << ADIF);
return (ADC);
}

dále je tu program na jedno imlicitní měření napětí: (toto funguje, je to spouštěné pouze na začátku programu)
void voltmetr(void)
{
int voltage = (ZENER_VOLTAGE*1023)/adc_read(1);
char print_voltage[16];
itoa(voltage,print_voltage,10);

for(int i = 4; i <= 15; i++)
{
print_voltage[i] = 32;
}
print_voltage[5] = 109;
print_voltage[6] = 86;
lcd_print("Voltmetr",1);
lcd_print(print_voltage,2);
}


zde je další čtení z adc a je tu problém, protože když je funkce voltmetr() v programu tak toto nefunguje
for(i=0;i<N;i++) {
while((TIFR1 & (1<<OCF1A)) == 0);
fx[i] = ((int16_t)adc_read(4));
TIFR1 |= 1<<OCF1A;
}
jestliže odstraním z programu voltmetr(), tak část programu výše funguje (je to čtení adc na výpočet furierovy řady).


Předem děkuji za odpověď pokud někdo uvidí chybu.
Martin

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: