Co je spatne?
Bolek
bolek-konf@eri.cz
Pátek Říjen 1 17:29:54 CEST 2004
Ahoj,
mam na procesoru ATmega8535 takovyto kod:
// A/D converter bit mask. Enables ADC, one conversion
// at a time, frequency CLK/64 (~160kHz). Disable interrupts
#define admask 0x86
// ADIF bit mask
#define adif 0x10
// ADSC mask
#define adsc 0x40
uint16_t i, h, l;
uint8_t value, prevval;
for (i=1; i<256; i++) {
// Start conversion, loop until it is done
ADCSRA = admask | adsc;
while (ADCSRA & adsc) ;
ADCSRA = ADCSRA | adif;
// Read value
l = ADCL;
h = ADCH;
value = ((h << 8) | l) >> 2;
/**/ char buffer[10];
/**/ sprintf( buffer, "%x%x", ADMUX, (h<<8) | l);
/**/ DisplayText( buffer);
if (prevval!=value) return 0xFF;
prevval = value;
}
/*************************/
Kdyz je kod oznaceny /**/ tam, kde ted je, vse funguje spravne a pri
zmene napeti na vstupech AD prevodniku se meni displej. Kdyz ovsem tento
kod dam az za cyklus na pozici oznacenou /*************************/,
tak to porad zobrazuje 3FF bez ohledu na to, co je ne vstupu. Uz nad tim
badam druhy den a porda na nic nemuzu prijit. Nevite, v cem je chyba?
Prekladam to pomoci nejnovejsi verze WinAVR. Pokud enkdo vite o
disassembleru pro ATmega8535, budu moc rad - prohlednu si primo
prelozeny kod a treba budu moudrejsi.
Dik moc
--
====================================================
Ing. Boleslav Vrany
Consulting and development in software, electronics,
modern optics and mechanical engineering.
e-mail: see my web page or use the form there
http://www.bolekvrany.cz
ICQ: 287 834 668
tel: (+420) 732 673 905
Další informace o konferenci Hw-list