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