Co je spatne?
BuFran
BuFran@seznam.cz
Pátek Říjen 1 17:44:23 CEST 2004
> #define admask 0x86
> #define adif 0x10
> #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
Tohle :
> l = ADCL;
> h = ADCH;
> value = ((h << 8) | l) >> 2;
se da lepe napsat jako
value = ADCW;
> /**/ char buffer[10];
> /**/ sprintf( buffer, "%x%x", ADMUX, (h<<8) | l);
> /**/ DisplayText( buffer);
> if (prevval!=value) return 0xFF;
predpokladam, ze je to ve funkci, jinak tady navrati 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?
Tipuju na optimalizaci, zkuste ji vypnout -O0 a nebo dat promenne
value vlajku VOLATILE
> 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.
viz RTFM, parametry gcc (generuje vysledny ASM, z ktereho se sestavi
ELF, a pote se smaze ASM. Parametrem se mazani ASM da vypnout)
P.S. jedno doporuceni: Je lepsi definovat procesor v MAKEFILE a pak v
projektu dat #include <io.h> (resp <avr/io.h>) a pouyivat konstanty
jiz preddefinovane (v iom8535.h). Nazvy maji shodne jako katalog,
akorat VELKYM TISKACIM pismem. (a je treba pouzit _BV() makro. Vyhnete
se pripadnym #define a je jednodussi portace na jiny uP.
ADCSRA |= _BV(ADIF) ;
Jinak jeste k otazce cteni ADCW, nedoporucuji cist ADCW vicekrat ve
Free-Running modu ... Dela to paseku, kdy se nekdy zahazuji vysledky
apodobne.
Ted me trklo - value je uint8_t ?? nema byt uint16_t ?? takhle jsou
veskere posuvy marne, pouzije se jen hodnota l (8 bitu - 1 registr).
--
Best regards
BuFran
Další informace o konferenci Hw-list